yangyin
2024-09-09 77286f9747a37e4a8a8713f1b7f2195652092795
src/views/project/yw/dataManage/knowledge/AddKnowledge.vue
@@ -1,7 +1,7 @@
<template>
   <div class="flex flex-col h100">
      <div class="mb-[10px] flex flex-shrink-0 items-center">
         <el-button style="margin-left: 8px; width: 40px" text @click="handleExitFlow">
         <el-button style="margin-left: 8px; width: 40px" link @click="handleExitFlow">
            <el-icon style="font-size: 24px !important">
               <ArrowLeft />
            </el-icon>
@@ -37,6 +37,9 @@
                  :rows="5"
                  type="textarea"
               />
            </el-form-item>
            <el-form-item label="索引分数:" prop="scope">
               <el-input-number v-model="state.knowledgeForm.scope" style="width: 532px" :min="31" />
            </el-form-item>
            <el-form-item label="数据类型:">
               <div v-for="(item, index) in state.dataTypeList" :key="index">
@@ -144,7 +147,6 @@
                           @select="handleSelectItem"
                           highlight-current-row
                           ref="multipleTableRef"
                           :class="{ 'hidden-checkbox-all': state.isRadio }"
                           @select-all="
                              (selection) => {
                                 handleSelectAll(selection, state.fileData);
@@ -177,7 +179,7 @@
                        <div
                           class="bg-[#fff] border-[1px] border-solid border-[#d8d9e6] py-[12px] w-[215px] mr-[10px] px-[16px] rounded-lg cursor-pointer"
                           :class="{ activeColor: state.knowledgeForm.segmentationMode === item.ID }"
                           @click="activeConfigurationType(item.ID)"
                           @click="activeDataProcessType(item.ID)"
                        >
                           <div class="flex items-center">
                              <div class="data_left">
@@ -205,7 +207,6 @@
      <div class="set-form-footer">
         <div v-show="!state.showKnowledgeForm">
            <el-button type="primary" @click="nextKnowledge">下一步</el-button>
            <el-button @click="emptyKnowledgeBase">创建空知识库</el-button>
         </div>
         <div v-show="state.showKnowledgeForm">
            <el-button @click="importCompleted" type="primary">导入完成</el-button>
@@ -221,7 +222,7 @@
import moment from 'moment';
import { computed, nextTick, reactive, ref } from 'vue';
import { useRouter } from 'vue-router';
import { add_docvector_name } from '/@/api/knowledge/docvector';
import { add_docvector_file, add_docvector_name } from '/@/api/knowledge/docvector';
import { get_knowledge_group_list, list_knowledge_file } from '/@/api/knowledge/group';
import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue';
import mittBus from '/@/utils/mitt';
@@ -233,6 +234,7 @@
   knowledgeForm: {
      title: '',
      prompt: '',
      scope: null,
      dataType: 1,
      configurationMode: 1,
      segmentationMode: 1,
@@ -313,8 +315,17 @@
   showKnowledgeForm: false,
   knowledgeBaseData: [], //知识库类目
   fileData: [], //文件数据源
   isRadio: false, //是否单选
   isCreateIndex: false, //是否调用创建的索引的字段
   knowlg_id: '',
});
//验证scope字段只能输入正整数
const validateNumber = (rule, value, callback) => {
   if (value < 31) {
      callback(new Error('请输入大于30的正整数'));
   } else {
      callback();
   }
};
const knowledgeFormRules = reactive<FormRules>({
   title: [
      {
@@ -330,6 +341,7 @@
         trigger: 'blur',
      },
   ],
   scope: [{ validator: validateNumber, trigger: 'blur' }],
});
const knowledgeFormRef = ref();
const router = useRouter();
@@ -351,57 +363,77 @@
const activeConfigurationType = (id: number) => {
   state.knowledgeForm.configurationMode = id;
};
//选择数据文档切分
const activeDataProcessType = (id: number) => {
   state.knowledgeForm.segmentationMode = id;
};
//下一步
const nextKnowledge = async () => {
   const valid = await knowledgeFormRef.value.validate().catch(() => {});
   if (!valid) return;
   state.showKnowledgeForm = true;
   getFileTreeData(true);
   if (!state.isCreateIndex) {
      emptyKnowledgeBase();
      state.isCreateIndex = true;
   }
};
const backKnowledge = () => {
   state.showKnowledgeForm = false;
};
//#endregion
//#region ====================== 空知识库的创建 ======================
//创建一个空知识库
const emptyKnowledgeBase = async () => {
   var currentTime = moment().format('YYYY-MM-DD HH:mm:ss');
   const valid = await knowledgeFormRef.value.validate().catch(() => {});
   if (!valid) return;
   const res = await add_docvector_name({ title: state.knowledgeForm.title, prompt: state.knowledgeForm.prompt });
   const res = await add_docvector_name({
      title: state.knowledgeForm.title,
      prompt: state.knowledgeForm.prompt,
      scope: state.knowledgeForm.scope,
   });
   if (res.json_ok) {
      ElMessage.success('创建成功');
      let obj = {
         id: res.knowlg_id,
         title: state.knowledgeForm.title,
         prompt: state.knowledgeForm.prompt,
         publish: '',
         create_time: currentTime,
         user_name: '',
      };
      mittBus.emit('addKnowledgeBaseObj', obj);
      router.push({ name: 'Knowledge' });
      state.knowlg_id = res.knowlg_id;
      getFileTreeData(true);
   }
};
//导入完成
const importCompleted = () => {
   return;
   ElMessage.success('导入完成');
   router.push({ name: 'Knowledge' });
const importCompleted = async () => {
   var currentTime = moment().format('YYYY-MM-DD HH:mm:ss');
   // 上传文件
   if (multipleSelection.value.length == 0) return ElMessage.warning('请先选择文件');
   const file_id = multipleSelection.value.map((v) => v.id).join(',');
   const res = await add_docvector_file({
      knowlg_id: state.knowlg_id,
      file_id: file_id,
   });
   if (res.json_ok) {
      let obj = {
         id: state.knowlg_id,
         title: state.knowledgeForm.title,
         prompt: state.knowledgeForm.prompt,
         publish: 'N',
         create_time: currentTime,
         user_name: '',
         scope: state.knowledgeForm.scope,
      };
      mittBus.emit('addKnowledgeBaseObj', obj);
      router.push({ name: 'Knowledge' });
      //清空表单
      knowledgeFormRef.value.resetFields();
      state.showKnowledgeForm = false;
      state.isCreateIndex = false;
   }
};
//#endregion
//#region ====================== 知识库文件上传 ==========
const treeLoading = ref(false);
const currentTreeNode = ref(null);
const leftTreeRef = ref(null);
const currentListID = computed(() => currentTreeNode.value?.id);
//获取文件列表
const getFileTreeData = async (selectFirst = false) => {
   treeLoading.value = true;
   const res = await get_knowledge_group_list().finally(() => {
      treeLoading.value = false;
   });
   const res = await get_knowledge_group_list();
   if (res?.json_ok) {
      const resData = (res.values || []) as [];
      state.knowledgeBaseData = convertListToTree(resData, {
@@ -585,10 +617,6 @@
         justify-content: center;
      }
   }
}
.hidden-checkbox-all :deep(.el-table__header .el-table-column--selection .el-checkbox) {
   // 隐藏全选checkbox
   display: none;
}
</style>
<style>