feat: paragraph
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run

This commit is contained in:
wangdan-fit2cloud 2025-06-08 16:43:40 +08:00
parent 0342aee292
commit 82d4a3376b
8 changed files with 165 additions and 82 deletions

View File

@ -1,8 +1,8 @@
import {Result} from '@/request/Result'
import {get, post, del, put} from '@/request/index'
import {type Ref} from 'vue'
import type {pageRequest} from '@/api/type/common'
import type {knowledgeData} from '@/api/type/knowledge'
import { Result } from '@/request/Result'
import { get, post, del, put, exportFile, exportExcel } from '@/request/index'
import { type Ref } from 'vue'
import type { pageRequest } from '@/api/type/common'
import type { knowledgeData } from '@/api/type/knowledge'
const prefix = '/workspace/' + localStorage.getItem('workspace_id')
@ -14,10 +14,10 @@ const prefix = '/workspace/' + localStorage.getItem('workspace_id')
* user_id: string
* desc: string,}
*/
const getKnowledgeByFolder: (
data?: any,
loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (data, loading) => {
const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
data,
loading,
) => {
return get(`${prefix}/knowledge`, data, loading)
}
@ -36,11 +36,7 @@ const getKnowledgeList: (
param?: any,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (page, param, loading) => {
return get(
`${prefix}/knowledge/${page.current_page}/${page.page_size}`,
param,
loading,
)
return get(`${prefix}/knowledge/${page.current_page}/${page.page_size}`, param, loading)
}
/**
@ -61,12 +57,7 @@ const putSyncWebKnowledge: (
sync_type: string,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (knowledge_id, sync_type, loading) => {
return put(
`${prefix}/knowledge/${knowledge_id}/sync`,
undefined,
{sync_type},
loading,
)
return put(`${prefix}/knowledge/${knowledge_id}/sync`, undefined, { sync_type }, loading)
}
/**
@ -77,22 +68,17 @@ const putReEmbeddingKnowledge: (
knowledge_id: string,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (knowledge_id, loading) => {
return put(
`${prefix}/knowledge/${knowledge_id}/embedding`,
undefined,
undefined,
loading,
)
return put(`${prefix}/knowledge/${knowledge_id}/embedding`, undefined, undefined, loading)
}
/**
*
* @param knowledge_id
*/
const getKnowledgeDetail: (
knowledge_id: string,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (knowledge_id, loading) => {
const getKnowledgeDetail: (knowledge_id: string, loading?: Ref<boolean>) => Promise<Result<any>> = (
knowledge_id,
loading,
) => {
return get(`${prefix}/knowledge/${knowledge_id}`, undefined, loading)
}
@ -106,10 +92,10 @@ const getKnowledgeDetail: (
"embedding": "string"
}
*/
const postKnowledge: (
data: knowledgeData,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (data, loading) => {
const postKnowledge: (data: knowledgeData, loading?: Ref<boolean>) => Promise<Result<any>> = (
data,
loading,
) => {
return post(`${prefix}/knowledge/base`, data, undefined, loading, 1000 * 60 * 5)
}
@ -125,10 +111,10 @@ const postKnowledge: (
"selector": "string"
}
*/
const postWebKnowledge: (
data: any,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (data, loading) => {
const postWebKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<any>> = (
data,
loading,
) => {
return post(`${prefix}/knowledge/web`, data, undefined, loading)
}
/**
@ -148,6 +134,105 @@ const putKnowledge: (
return put(`${prefix}/knowledge/${knowledge_id}`, data, undefined, loading)
}
/**
*
* @param knowledge_id
* @param loading
* @query { query_text: string, top_number: number, similarity: number }
* @returns
*/
const getKnowledgeHitTest: (
knowledge_id: string,
data: any,
loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (knowledge_id, data, loading) => {
return get(`${prefix}/${knowledge_id}/hit_test`, data, loading)
}
/**
*
* @param knowledge_name
* @param knowledge_id id
* @returns
*/
const exportKnowledge: (
knowledge_name: string,
knowledge_id: string,
loading?: Ref<boolean>,
) => Promise<any> = (knowledge_name, knowledge_id, loading) => {
return exportExcel(knowledge_name + '.xlsx', `dataset/${knowledge_id}/export`, undefined, loading)
}
/**
*Zip知识库
* @param knowledge_name
* @param knowledge_id id
* @param loading
* @returns
*/
const exportZipKnowledge: (
knowledge_name: string,
knowledge_id: string,
loading?: Ref<boolean>,
) => Promise<any> = (knowledge_name, knowledge_id, loading) => {
return exportFile(
knowledge_name + '.zip',
`dataset/${knowledge_id}/export_zip`,
undefined,
loading,
)
}
/**
* 使
* @param application_id
* @param loading
* @query { query_text: string, top_number: number, similarity: number }
* @returns
*/
const getKnowledgeModel: (
knowledge_id: string,
loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (knowledge_id, loading) => {
return get(`${prefix}/${knowledge_id}/model`, loading)
}
/**
*
* @param knowledge_id
* @param folder_token
* @param loading
* @returns
*/
const getLarkDocumentList: (
knowledge_id: string,
folder_token: string,
data: any,
loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (knowledge_id, folder_token, data, loading) => {
return post(`${prefix}/lark/${knowledge_id}/${folder_token}/doc_list`, data, null, loading)
}
const importLarkDocument: (
knowledge_id: string,
data: any,
loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (knowledge_id, data, loading) => {
return post(`${prefix}/lark/${knowledge_id}/import`, data, null, loading)
}
/**
*
* @param knowledge_id id
* @param data
* @param loading
* @returns
*/
const generateRelated: (
knowledge_id: string,
data: any,
loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (knowledge_id, data, loading) => {
return put(`${prefix}/${knowledge_id}/generate_related`, data, null, loading)
}
export default {
getKnowledgeByFolder,
getKnowledgeList,
@ -157,4 +242,11 @@ export default {
postKnowledge,
postWebKnowledge,
putKnowledge,
getKnowledgeHitTest,
exportKnowledge,
exportZipKnowledge,
getKnowledgeModel,
getLarkDocumentList,
importLarkDocument,
generateRelated,
}

View File

@ -176,7 +176,7 @@ const submitHandle = async (formEl: FormInstance) => {
...form.value,
state_list: stateMap[state.value]
}
datasetApi.generateRelated(id ? id : datasetId.value, data, loading).then(() => {
knowledgeApi.generateRelated(id ? id : datasetId.value, data, loading).then(() => {
MsgSuccess(t('views.document.generateQuestion.successMessage'))
dialogVisible.value = false
})
@ -187,8 +187,8 @@ const submitHandle = async (formEl: FormInstance) => {
function getModel() {
loading.value = true
datasetApi
.getDatasetModel(id ? id : datasetId.value)
knowledgeApi
.getKnowledgeModel(id ? id : datasetId.value)
.then((res: any) => {
modelOptions.value = groupBy(res?.data, 'provider')
loading.value = false

View File

@ -58,7 +58,7 @@ const useKnowledgeStore = defineStore('knowledge', {
})
})
},
async asyncSyncDataset(
async asyncSyncKnowledge(
id: string,
sync_type: string,
loading?: Ref<boolean>,

View File

@ -312,7 +312,7 @@ function getHitTestList() {
...formInline.value,
}
if (isDataset.value) {
datasetApi.getDatasetHitTest(id, obj, loading).then((res) => {
knowledgeApi.getDatasetHitTest(id, obj, loading).then((res) => {
paragraphDetail.value = res.data && arraySort(res.data, 'comprehensive_score', true)
questionTitle.value = inputValue.value
inputValue.value = ''

View File

@ -38,12 +38,12 @@
import { ref, watch } from 'vue'
import useStore from '@/stores'
const { dataset } = useStore()
const { knowledge } = useStore()
const emit = defineEmits(['refresh'])
const loading = ref<boolean>(false)
const method = ref('replace')
const datasetId = ref('')
const knowledgeId = ref('')
const dialogVisible = ref<boolean>(false)
@ -54,12 +54,12 @@ watch(dialogVisible, (bool) => {
})
const open = (id: string) => {
datasetId.value = id
knowledgeId.value = id
dialogVisible.value = true
}
const submit = () => {
dataset.asyncSyncDataset(datasetId.value, method.value, loading).then((res: any) => {
knowledge.asyncSyncKnowledge(knowledgeId.value, method.value, loading).then((res: any) => {
emit('refresh', res.data)
dialogVisible.value = false
})

View File

@ -184,21 +184,21 @@ const submitHandle = async () => {
...BaseFormRef.value.form,
type: datasetForm.value.type
}
datasetApi.postDataset(obj, loading).then((res) => {
knowledgeApi.postDataset(obj, loading).then((res) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/dataset/${res.data.id}/document` })
emit('refresh')
})
} else if (datasetForm.value.type === '1') {
const obj = { ...BaseFormRef.value.form, ...datasetForm.value }
datasetApi.postWebDataset(obj, loading).then((res) => {
knowledgeApi.postWebDataset(obj, loading).then((res) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/dataset/${res.data.id}/document` })
emit('refresh')
})
} else if (datasetForm.value.type === '2') {
const obj = { ...BaseFormRef.value.form, ...datasetForm.value }
datasetApi.postLarkDataset(obj, loading).then((res) => {
knowledgeApi.postLarkDataset(obj, loading).then((res) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/dataset/${res.data.id}/document` })
emit('refresh')

View File

@ -6,7 +6,8 @@
@mouseleave="cardLeave()"
>
<h2 class="mb-16">{{ data.title || '-' }}</h2>
<el-card
<el-card
v-show="show"
class="paragraph-box-operation mt-8 mr-8"
shadow="always"
style="--el-card-padding: 8px 12px; --el-card-border-radius: 8px"
@ -75,6 +76,7 @@ import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vu
import ParagraphDialog from '@/views/paragraph/component/ParagraphDialog.vue'
import SelectDocumentDialog from '@/views/paragraph/component/SelectDocumentDialog.vue'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
const { paragraph } = useStore()
const route = useRoute()
@ -85,6 +87,8 @@ const props = defineProps<{
data: any
}>()
const emit = defineEmits(['changeState', 'deleteParagraph'])
const loading = ref(false)
const changeStateloading = ref(false)
const show = ref(false)
// carddropdown
@ -105,8 +109,7 @@ function changeState(row: any) {
paragraph
.asyncPutParagraph(id, documentId, row.id, obj, changeStateloading)
.then((res) => {
// const index = paragraphDetail.value.findIndex((v) => v.id === row.id)
// paragraphDetail.value[index].is_active = !paragraphDetail.value[index].is_active
emit('changeState', row.id)
return true
})
.catch(() => {
@ -138,8 +141,7 @@ function deleteParagraph(row: any) {
)
.then(() => {
paragraph.asyncDelParagraph(id, documentId, row.id, loading).then(() => {
// const index = paragraphDetail.value.findIndex((v) => v.id === row.id)
// paragraphDetail.value.splice(index, 1)
emit('deleteParagraph', row.id)
MsgSuccess(t('common.deleteSuccess'))
})
})
@ -163,7 +165,6 @@ function refreshMigrateParagraph() {}
border: 1px solid #ffffff;
box-shadow: none !important;
position: relative;
z-index: 9999;
&:hover {
background: rgba(31, 35, 41, 0.1);
border: 1px solid #dee0e3;

View File

@ -89,7 +89,12 @@
height="15"
class="handle-img mr-8 mt-24 cursor"
/>
<ParagraphCard :data="item" class="mb-8 w-full" />
<ParagraphCard
:data="item"
class="mb-8 w-full"
@changeState="changeState"
@deleteParagraph="deleteParagraph"
/>
</div>
</template>
</VueDraggable>
@ -132,7 +137,6 @@ import ParagraphDialog from './component/ParagraphDialog.vue'
import ParagraphCard from './component/ParagraphCard.vue'
import SelectDocumentDialog from './component/SelectDocumentDialog.vue'
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
import { numberFormat } from '@/utils/common'
import { VueDraggable } from 'vue-draggable-plus'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
import useStore from '@/stores'
@ -143,7 +147,6 @@ const {
params: { id, documentId },
} = route as any
const containerRef = ref<HTMLElement | null>(null)
const SelectDocumentDialogRef = ref()
const ParagraphDialogRef = ref()
const loading = ref(false)
@ -168,6 +171,16 @@ const paginationConfig = reactive({
total: 0,
})
function deleteParagraph(id: string) {
const index = paragraphDetail.value.findIndex((v) => v.id === id)
paragraphDetail.value.splice(index, 1)
}
function changeState(id: string) {
const index = paragraphDetail.value.findIndex((v) => v.id === id)
paragraphDetail.value[index].is_active = !paragraphDetail.value[index].is_active
}
function refreshMigrateParagraph() {
paragraphDetail.value = paragraphDetail.value.filter(
(v) => !multipleSelection.value.includes(v.id),
@ -224,33 +237,10 @@ function searchHandle() {
getParagraphList()
}
function deleteParagraph(row: any) {
MsgConfirm(
`${t('views.paragraph.delete.confirmTitle')} ${row.title || '-'} ?`,
t('views.paragraph.delete.confirmMessage'),
{
confirmButtonText: t('common.confirm'),
confirmButtonClass: 'danger',
},
)
.then(() => {
paragraph.asyncDelParagraph(id, documentId, row.id, loading).then(() => {
const index = paragraphDetail.value.findIndex((v) => v.id === row.id)
paragraphDetail.value.splice(index, 1)
MsgSuccess(t('common.deleteSuccess'))
})
})
.catch(() => {})
}
function addParagraph() {
title.value = t('views.paragraph.addParagraph')
ParagraphDialogRef.value.open()
}
function editParagraph(row: any) {
title.value = t('views.paragraph.paragraphDetail')
ParagraphDialogRef.value.open(row)
}
function getDetail() {
loading.value = true