| | |
| | | :action="uploadUrl" |
| | | :headers="uploadHeaders" |
| | | :on-success="handleUploadSuccess" |
| | | :on-change="handleFileChange" |
| | | :before-upload="beforeUpload" |
| | | :accept="acceptTypes" |
| | | :file-list="uploadFileList" |
| | |
| | | updateKnowledgeBase, |
| | | getVectorStatus, |
| | | reprocessVector, |
| | | knowledgeChat |
| | | knowledgeChat, |
| | | saveKnowledgeBaseFiles, |
| | | deleteKnowledgeBaseFile |
| | | } from "@/api/collaborativeApproval/knowledgeBase.js"; |
| | | import { attachmentList, createAttachment, deleteAttachment } from "@/api/basicData/storageAttachment.js"; |
| | | import useUserStore from '@/store/modules/user'; |
| | | import { userListNoPageByTenantId } from '@/api/system/user.js'; |
| | | import { getToken } from '@/utils/auth'; |
| | |
| | | refreshFileList(); |
| | | }; |
| | | |
| | | // 刷新文件列表 |
| | | // 刷新文件列表(直接使用向量状态接口) |
| | | const refreshFileList = async () => { |
| | | if (!selectedKnowledgeBaseId.value) return; |
| | | |
| | | fileLoading.value = true; |
| | | try { |
| | | // 获取附件列表 |
| | | const attachmentRes = await attachmentList({ |
| | | recordType: 'knowledge_base', |
| | | recordId: selectedKnowledgeBaseId.value, |
| | | application: 'rag_file' |
| | | }); |
| | | |
| | | // 获取向量化状态 |
| | | const vectorRes = await getVectorStatus(selectedKnowledgeBaseId.value); |
| | | |
| | | // 合并数据 |
| | | const vectorMap = {}; |
| | | (vectorRes.data || []).forEach(v => { |
| | | vectorMap[v.storageBlobId] = v; |
| | | }); |
| | | |
| | | fileList.value = (attachmentRes.data || []).map(file => ({ |
| | | ...file, |
| | | vectorStatus: vectorMap[file.storageBlobId]?.vectorStatus ?? 0, |
| | | chunkCount: vectorMap[file.storageBlobId]?.chunkCount ?? 0, |
| | | vectorId: vectorMap[file.storageBlobId]?.id |
| | | const res = await getVectorStatus(selectedKnowledgeBaseId.value); |
| | | fileList.value = (res.data || []).map(item => ({ |
| | | ...item, |
| | | name: item.fileName, |
| | | vectorId: item.id |
| | | })); |
| | | } catch (error) { |
| | | console.error('获取文件列表失败:', error); |
| | |
| | | const handleUploadSuccess = async (response, file) => { |
| | | if (response.code === 200) { |
| | | uploadedBlobs.value.push(...response.data); |
| | | await saveAttachment(); |
| | | ElMessage.success('文件上传成功,正在处理向量化...'); |
| | | uploadedBlobs.value = []; |
| | | refreshFileList(); |
| | | } else { |
| | | ElMessage.error(response.msg || '上传失败'); |
| | | } |
| | | }; |
| | | |
| | | // 保存附件关联到知识库 |
| | | const saveAttachment = async () => { |
| | | await createAttachment({ |
| | | recordType: 'knowledge_base', |
| | | recordId: selectedKnowledgeBaseId.value, |
| | | application: 'rag_file', |
| | | storageBlobDTOs: uploadedBlobs.value.map(b => b.id) |
| | | }); |
| | | // 上传文件变化处理(用于检测所有文件上传完成) |
| | | const handleFileChange = (file, fileList) => { |
| | | // 当文件状态变化且没有正在上传的文件时,统一提交 |
| | | if (file.status === 'success' && fileList.every(f => f.status === 'success' || f.status === 'fail')) { |
| | | if (uploadedBlobs.value.length > 0) { |
| | | saveKnowledgeBaseFilesAndRefresh(); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | // 保存知识库文件关联并触发向量化 |
| | | const saveKnowledgeBaseFilesAndRefresh = async () => { |
| | | try { |
| | | await saveKnowledgeBaseFiles({ |
| | | knowledgeBaseId: selectedKnowledgeBaseId.value, |
| | | storageBlobIds: uploadedBlobs.value.map(b => b.id) |
| | | }); |
| | | ElMessage.success('文件上传成功,正在处理向量化...'); |
| | | } catch (error) { |
| | | ElMessage.error('保存文件关联失败'); |
| | | } finally { |
| | | uploadedBlobs.value = []; |
| | | refreshFileList(); |
| | | } |
| | | }; |
| | | |
| | | // 获取文件类型 |
| | |
| | | type: 'warning' |
| | | }); |
| | | |
| | | await deleteAttachment([row.id]); |
| | | await deleteKnowledgeBaseFile([row.id]); |
| | | ElMessage.success('删除成功'); |
| | | refreshFileList(); |
| | | } catch (error) { |