2026-06-09 0f74d0721b7407709b6bdd45dc6b58970820536b
src/views/collaborativeApproval/knowledgeBase/index.vue
@@ -256,6 +256,7 @@
              :action="uploadUrl"
              :headers="uploadHeaders"
              :on-success="handleUploadSuccess"
              :on-change="handleFileChange"
              :before-upload="beforeUpload"
              :accept="acceptTypes"
              :file-list="uploadFileList"
@@ -398,9 +399,10 @@
  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';
@@ -874,33 +876,17 @@
  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);
@@ -924,23 +910,35 @@
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();
  }
};
// 获取文件类型
@@ -987,7 +985,7 @@
      type: 'warning'
    });
    await deleteAttachment([row.id]);
    await deleteKnowledgeBaseFile([row.id]);
    ElMessage.success('删除成功');
    refreshFileList();
  } catch (error) {