wujingjing
2024-12-31 8d83544ff6e123df4facf40c446e7d9bf4a522b6
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 v-model="state.knowledgeForm.scope" style="width: 532px" />
            </el-form-item>
            <el-form-item label="数据类型:">
               <div v-for="(item, index) in state.dataTypeList" :key="index">
@@ -129,10 +132,11 @@
                           :treedata="state.knowledgeBaseData"
                           :current-node-key="currentListID"
                           :defaultProps="{
                              id: 'group_id',
                              label: 'group_name',
                              children: 'Children',
                              label: 'title',
                              id: 'id',
                           }"
                           defaultExpandAll
                           @click="handleClickNode"
                        >
                        </LeftTreeByMgr>
@@ -144,7 +148,6 @@
                           @select="handleSelectItem"
                           highlight-current-row
                           ref="multipleTableRef"
                           :class="{ 'hidden-checkbox-all': state.isRadio }"
                           @select-all="
                              (selection) => {
                                 handleSelectAll(selection, state.fileData);
@@ -177,7 +180,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">
@@ -218,13 +221,16 @@
<script setup lang="ts">
import { ElMessage, type FormRules } from 'element-plus';
import moment from 'moment';
import { computed, nextTick, reactive, ref } from 'vue';
import { useRouter } from 'vue-router';
import { computed, nextTick, onMounted, reactive, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
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';
import { verifiyNumberInteger } from '/@/utils/toolsValidate';
import { convertListToTree } from '/@/utils/util';
import { OptClassificationMap, classificationEnum } from '/@/views/types/metrics';
const route = useRoute();
// 定义变量内容
const state = reactive({
   soliderValue: 0,
@@ -232,6 +238,7 @@
   knowledgeForm: {
      title: '',
      prompt: '',
      scope: null,
      dataType: 1,
      configurationMode: 1,
      segmentationMode: 1,
@@ -314,7 +321,17 @@
   fileData: [], //文件数据源
   isCreateIndex: false, //是否调用创建的索引的字段
   knowlg_id: '',
   groupKnow_id: null,
});
//验证scope字段只能输入正整数
const validateNumber = (rule, value, callback) => {
   if (value < 31) {
      callback(new Error('请输入大于30的正整数'));
   } else {
      state.knowledgeForm.scope = verifiyNumberInteger(value);
      callback();
   }
};
const knowledgeFormRules = reactive<FormRules>({
   title: [
      {
@@ -330,6 +347,7 @@
         trigger: 'blur',
      },
   ],
   scope: [{ validator: validateNumber, trigger: 'blur' }],
});
const knowledgeFormRef = ref();
const router = useRouter();
@@ -342,6 +360,7 @@
   //清空表单
   knowledgeFormRef.value.resetFields();
   state.showKnowledgeForm = false;
   state.isCreateIndex = false;
};
//选择数据类型
const activeDataType = (id: number) => {
@@ -350,6 +369,10 @@
//选择配置模式
const activeConfigurationType = (id: number) => {
   state.knowledgeForm.configurationMode = id;
};
//选择数据文档切分
const activeDataProcessType = (id: number) => {
   state.knowledgeForm.segmentationMode = id;
};
//下一步
const nextKnowledge = async () => {
@@ -363,7 +386,9 @@
};
const backKnowledge = () => {
   state.showKnowledgeForm = false;
   state.isCreateIndex = true;
};
//#endregion
//#region ====================== 空知识库的创建 ======================
@@ -371,11 +396,28 @@
const emptyKnowledgeBase = async () => {
   const valid = await knowledgeFormRef.value.validate().catch(() => {});
   if (!valid) return;
   const res = await add_docvector_name({ title: state.knowledgeForm.title, prompt: state.knowledgeForm.prompt });
   var currentTime = moment().format('YYYY-MM-DD HH:mm:ss');
   const res = await add_docvector_name({
      title: state.knowledgeForm.title,
      prompt: state.knowledgeForm.prompt,
      scope: state.knowledgeForm.scope,
      group_id: state.groupKnow_id,
   });
   if (res.json_ok) {
      ElMessage.success('创建空知识库成功');
      state.knowlg_id = res.knowlg_id;
      let obj = {
         id: state.knowlg_id,
         group_id: state.groupKnow_id,
         title: state.knowledgeForm.title,
         prompt: state.knowledgeForm.prompt,
         publish: 'N',
         create_time: currentTime,
         user_name: '',
         scope: state.knowledgeForm.scope,
      };
      mittBus.emit('addEmptyKnowledge', obj);
      getFileTreeData(true);
      state.isCreateIndex = false;
   }
};
//导入完成
@@ -390,14 +432,16 @@
   });
   if (res.json_ok) {
      let obj = {
         id: res.knowlg_id,
         id: state.knowlg_id,
         group_id: state.groupKnow_id,
         title: state.knowledgeForm.title,
         prompt: state.knowledgeForm.prompt,
         publish: '',
         publish: 'N',
         create_time: currentTime,
         user_name: '',
         scope: state.knowledgeForm.scope,
      };
      mittBus.emit('addKnowledgeBaseObj', obj);
      mittBus.emit('updateKnowledgeBaseObj', obj);
      router.push({ name: 'Knowledge' });
      //清空表单
      knowledgeFormRef.value.resetFields();
@@ -407,23 +451,26 @@
};
//#endregion
//#region ====================== 知识库文件上传 ==========
const treeLoading = ref(false);
const currentTreeNode = ref(null);
const leftTreeRef = ref(null);
const currentListID = computed(() => currentTreeNode.value?.id);
const currentListID = computed(() => currentTreeNode.value?.group_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, {
         ID: 'id',
      const resData = (res.groups || []) as [];
      const byParentData = convertListToTree(resData, {
         ID: 'group_id',
         Children: 'Children',
         ParentID: 'parent',
         ParentID: 'p_group_id',
      });
      const result = [];
      byParentData.forEach((item) => {
         if (item.group_type == OptClassificationMap[classificationEnum.Knowledge]) {
            result.push(item);
         }
      });
      state.knowledgeBaseData = result;
      if (selectFirst) {
         const firstListTreeNode = state.knowledgeBaseData[0];
         if (firstListTreeNode) {
@@ -440,7 +487,7 @@
const handleClickNode = (data: any) => {
   multipleSelection.value = [];
   nextTick(() => {
      leftTreeRef.value?.treeRef.setCurrentKey(data.id);
      leftTreeRef.value?.treeRef.setCurrentKey(data.group_id);
   });
   currentTreeNode.value = data;
   getFileTableData();
@@ -484,6 +531,10 @@
   multipleTableRef.value.toggleRowSelection(item, false);
};
//#endregion
onMounted(() => {
   const group_id = route.query.group_id;
   state.groupKnow_id = group_id;
});
</script>
<style scoped lang="scss">
.set-form-height {
@@ -600,10 +651,6 @@
         justify-content: center;
      }
   }
}
.hidden-checkbox-all :deep(.el-table__header .el-table-column--selection .el-checkbox) {
   // 隐藏全选checkbox
   display: none;
}
</style>
<style>