fix(knowledge document): bug fix

This commit is contained in:
dataeaseShu 2025-06-17 10:22:46 +08:00 committed by wxg
parent d6a301c184
commit a892f3075f
12 changed files with 235 additions and 33 deletions

View File

@ -374,8 +374,8 @@ const postQADocument: (
*
* @param file:file,limit:number,patterns:array,with_filter:boolean
*/
const postSplitDocument: (data: any) => Promise<Result<any>> = (data) => {
return post(`${prefix.value}/document/split`, data, undefined, undefined, 1000 * 60 * 60)
const postSplitDocument: (data: any, id: string) => Promise<Result<any>> = (data, id) => {
return post(`${prefix.value}/${id}/document/split`, data, undefined, undefined, 1000 * 60 * 60)
}
/**

View File

@ -232,11 +232,8 @@ const getKnowledgeEmdeddingModel: (
* @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.value}/${knowledge_id}/model`, loading)
const getKnowledgeModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (loading) => {
return get(`${prefix.value}/model`, loading)
}
/**

View File

@ -226,11 +226,8 @@ const getKnowledgeEmdeddingModel: (
* @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)
const getKnowledgeModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (loading) => {
return get(`${prefix}/knowledge/model`, loading)
}
/**

View File

@ -188,7 +188,7 @@ const submitHandle = async (formEl: FormInstance) => {
function getModel() {
loading.value = true
knowledgeApi
.getKnowledgeModel(id ? id : knowledgeId.value)
.getKnowledgeModel()
.then((res: any) => {
modelOptions.value = groupBy(res?.data, 'provider')
loading.value = false

View File

@ -0,0 +1,203 @@
<template>
<el-dialog
:title="$t('views.document.generateQuestion.title')"
v-model="dialogVisible"
width="650"
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<div class="content-height">
<el-form
ref="FormRef"
:model="form"
:rules="rules"
label-position="top"
require-asterisk-position="right"
>
<div class="update-info flex border-r-4 mb-16 p-8-12">
<div class="mt-4">
<AppIcon iconName="app-warning-colorful" style="font-size: 16px"></AppIcon>
</div>
<div class="ml-12 lighter">
<p>{{ $t('views.document.generateQuestion.tip1', { data: '{data}' }) }}</p>
<p>
{{ $t('views.document.generateQuestion.tip2')+ '<question></question>' +
$t('views.document.generateQuestion.tip3') }}
</p>
<p>{{ $t('views.document.generateQuestion.tip4') }}</p>
</div>
</div>
<el-form-item
:label="$t('views.application.form.aiModel.label')"
prop="model_id"
>
<ModelSelect
v-model="form.model_id"
:placeholder="$t('views.application.form.aiModel.placeholder')"
:options="modelOptions"
showFooter
:model-type="'LLM'"
></ModelSelect>
</el-form-item>
<el-form-item
:label="$t('views.application.form.prompt.label')"
prop="prompt"
>
<el-input
v-model="form.prompt"
:placeholder="$t('views.application.form.prompt.placeholder')"
:rows="7"
type="textarea"
/>
</el-form-item>
<el-form-item
v-if="['document', 'knowledge'].includes(apiType)"
:label="$t('components.selectParagraph.title')"
prop="state"
>
<el-radio-group v-model="state" class="radio-block">
<el-radio value="error" size="large">{{
$t('components.selectParagraph.error')
}}</el-radio>
<el-radio value="all" size="large">{{ $t('components.selectParagraph.all') }}</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click.prevent="dialogVisible = false"> {{ $t('common.cancel') }} </el-button>
<el-button type="primary" @click="submitHandle(FormRef)" :disabled="!model || loading">
{{ $t('common.confirm') }}
</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { useRoute } from 'vue-router'
import documentApi from '@/api/shared/document'
import paragraphApi from '@/api/shared/paragraph'
import knowledgeApi from '@/api/shared/knowledge'
import useStore from '@/stores/modules-shared-system'
import { groupBy } from 'lodash'
import { MsgSuccess } from '@/utils/message'
import { t } from '@/locales'
import type { FormInstance } from 'element-plus'
const route = useRoute()
const {
params: { id, documentId } // idknowledgeID
} = route as any
const { model, prompt, user } = useStore()
const emit = defineEmits(['refresh'])
const loading = ref<boolean>(false)
const dialogVisible = ref<boolean>(false)
const modelOptions = ref<any>(null)
const idList = ref<string[]>([])
const apiType = ref('') // documentparagraph
const state = ref<'all' | 'error'>('error')
const stateMap = {
all: ['0', '1', '2', '3', '4', '5', 'n'],
error: ['0', '1', '3', '4', '5', 'n']
}
const FormRef = ref()
const knowledgeId = ref<string>()
const userId = user.userInfo?.id as string
const form = ref(prompt.get(userId))
const rules = reactive({
model_id: [
{
required: true,
message: t('views.application.form.aiModel.placeholder'),
trigger: 'blur'
}
],
prompt: [
{
required: true,
message: t('views.application.form.prompt.placeholder'),
trigger: 'blur'
}
]
})
watch(dialogVisible, (bool) => {
if (!bool) {
form.value = prompt.get(userId)
FormRef.value?.clearValidate()
}
})
const open = (ids: string[], type: string, _knowledgeId?: string) => {
knowledgeId.value = _knowledgeId
getModel()
idList.value = ids
apiType.value = type
dialogVisible.value = true
}
const submitHandle = async (formEl: FormInstance) => {
if (!formEl) {
return
}
await formEl.validate((valid, fields) => {
if (valid) {
//
prompt.save(user.userInfo?.id as string, form.value)
if (apiType.value === 'paragraph') {
const data = {
...form.value,
paragraph_id_list: idList.value
}
paragraphApi.putBatchGenerateRelated(id, documentId, data, loading).then(() => {
MsgSuccess(t('views.document.generateQuestion.successMessage'))
emit('refresh')
dialogVisible.value = false
})
} else if (apiType.value === 'document') {
const data = {
...form.value,
document_id_list: idList.value,
state_list: stateMap[state.value]
}
documentApi.putBatchGenerateRelated(id, data, loading).then(() => {
MsgSuccess(t('views.document.generateQuestion.successMessage'))
emit('refresh')
dialogVisible.value = false
})
} else if (apiType.value === 'knowledge') {
const data = {
...form.value,
state_list: stateMap[state.value]
}
knowledgeApi.putGenerateRelated(id ? id : knowledgeId.value, data, loading).then(() => {
MsgSuccess(t('views.document.generateQuestion.successMessage'))
dialogVisible.value = false
})
}
}
})
}
function getModel() {
loading.value = true
knowledgeApi
.getKnowledgeModel()
.then((res: any) => {
modelOptions.value = groupBy(res?.data, 'provider')
loading.value = false
})
.catch(() => {
loading.value = false
})
}
defineExpose({ open })
</script>
<style lang="scss" scoped></style>

View File

@ -602,9 +602,11 @@ const title = ref('')
const selectKnowledgeDialogRef = ref()
const exportDocument = (document: any) => {
documentApi.exportDocument(document.name, document.knowledge_id, document.id, loading).then(() => {
MsgSuccess(t('common.exportSuccess'))
})
documentApi
.exportDocument(document.name, document.knowledge_id, document.id, loading)
.then(() => {
MsgSuccess(t('common.exportSuccess'))
})
}
const exportDocumentZip = (document: any) => {
documentApi
@ -712,8 +714,7 @@ const closeInterval = () => {
}
function syncDocument(row: any) {
console.log('row', row)
if (row.type === '1') {
if (+row.type === 1) {
syncWebDocument(row)
} else {
syncLarkDocument(row)

View File

@ -121,6 +121,7 @@
<script setup lang="ts">
import { ref, computed, onMounted, reactive, watch } from 'vue'
import ParagraphPreview from '@/views/knowledge/component/ParagraphPreview.vue'
import { useRoute } from 'vue-router'
import { cutFilename } from '@/utils/utils'
import documentApi from '@/api/knowledge/document'
import useStore from '@/stores'
@ -128,7 +129,10 @@ import type { KeyValue } from '@/api/type/common'
const { knowledge } = useStore()
const documentsFiles = computed(() => knowledge.documentsFiles)
const splitPatternList = ref<Array<KeyValue<string, string>>>([])
const route = useRoute()
const {
query: { id }, // iddatasetID
} = route as any
const radio = ref('1')
const loading = ref(false)
const paragraphList = ref<any[]>([])
@ -145,7 +149,7 @@ const form = reactive<{
}>({
patterns: [],
limit: 500,
with_filter: true
with_filter: true,
})
function changeHandle(val: boolean) {
@ -157,11 +161,11 @@ function changeHandle(val: boolean) {
problem_list: v.title.trim()
? [
{
content: v.title.trim()
}
content: v.title.trim(),
},
]
: []
}))
: [],
})),
}))
firstChecked.value = false
}
@ -184,7 +188,7 @@ function splitDocument() {
})
}
documentApi
.postSplitDocument(fd)
.postSplitDocument(fd, id)
.then((res: any) => {
const list = res.data
@ -197,8 +201,8 @@ function splitDocument() {
v['problem_list'] = v.title.trim()
? [
{
content: v.title.trim()
}
content: v.title.trim(),
},
]
: []
})
@ -232,7 +236,7 @@ onMounted(() => {
defineExpose({
paragraphList,
checkedConnect,
loading
loading,
})
</script>
<style scoped lang="scss">

View File

@ -548,7 +548,7 @@ import { hitHandlingMethod } from '@/enums/document'
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
import useStore from '@/stores/modules-shared-system'
import StatusValue from '@/views/shared/document-shared/component/Status.vue'
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
import EmbeddingContentDialog from '@/views/shared/document-shared/component/EmbeddingContentDialog.vue'
import { TaskType, State } from '@/utils/status'
import { t } from '@/locales'

View File

@ -135,7 +135,7 @@ import KnowledgeIcon from '@/views/shared/knowledge-shared/component/KnowledgeIc
import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
import KnowledgeApi from '@/api/shared/knowledge'
import KnowledgeWorkspaceApi from '@/api/shared/workspace'
import { MsgSuccess, MsgConfirm } from '@/utils/message'

View File

@ -287,7 +287,7 @@ import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
import CreateLarkKnowledgeDialog from './create-component/CreateLarkKnowledgeDialog.vue'
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
import KnowledgeApi from '@/api/shared/knowledge'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
import useStore from '@/stores/modules-shared-system'

View File

@ -72,7 +72,7 @@ import { ref, useSlots } from 'vue'
import { useRoute } from 'vue-router'
import { t } from '@/locales'
import useStore from '@/stores'
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
import ParagraphDialog from '@/views/paragraph/component/ParagraphDialog.vue'
import SelectDocumentDialog from '@/views/paragraph/component/SelectDocumentDialog.vue'
import { MsgSuccess, MsgConfirm } from '@/utils/message'

View File

@ -145,7 +145,7 @@ import paragraphApi from '@/api/shared/paragraph'
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 GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
import { VueDraggable } from 'vue-draggable-plus'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
import useStore from '@/stores'