| | |
| | | <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> |
| | |
| | | :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"> |
| | |
| | | :treedata="state.knowledgeBaseData" |
| | | :current-node-key="currentListID" |
| | | :defaultProps="{ |
| | | id: 'group_id', |
| | | label: 'group_name', |
| | | children: 'Children', |
| | | label: 'title', |
| | | id: 'id', |
| | | }" |
| | | defaultExpandAll |
| | | @click="handleClickNode" |
| | | > |
| | | </LeftTreeByMgr> |
| | |
| | | @select="handleSelectItem" |
| | | highlight-current-row |
| | | ref="multipleTableRef" |
| | | :class="{ 'hidden-checkbox-all': state.isRadio }" |
| | | @select-all=" |
| | | (selection) => { |
| | | handleSelectAll(selection, state.fileData); |
| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | <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 { add_docvector_name } from '/@/api/knowledge/docvector'; |
| | | 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, |
| | |
| | | knowledgeForm: { |
| | | title: '', |
| | | prompt: '', |
| | | scope: null, |
| | | dataType: 1, |
| | | configurationMode: 1, |
| | | segmentationMode: 1, |
| | |
| | | showKnowledgeForm: false, |
| | | knowledgeBaseData: [], //知识库类目 |
| | | fileData: [], //文件数据源 |
| | | isRadio: false, //是否单选 |
| | | 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: [ |
| | | { |
| | |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | scope: [{ validator: validateNumber, trigger: 'blur' }], |
| | | }); |
| | | const knowledgeFormRef = ref(); |
| | | const router = useRouter(); |
| | |
| | | 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 }); |
| | | 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: 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); |
| | | router.push({ name: 'Knowledge' }); |
| | | mittBus.emit('addEmptyKnowledge', obj); |
| | | 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('updateKnowledgeBaseObj', 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 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) { |
| | |
| | | const handleClickNode = (data: any) => { |
| | | multipleSelection.value = []; |
| | | nextTick(() => { |
| | | leftTreeRef.value?.treeRef.setCurrentKey(data.id); |
| | | leftTreeRef.value?.treeRef.setCurrentKey(data.group_id); |
| | | }); |
| | | currentTreeNode.value = data; |
| | | getFileTableData(); |
| | |
| | | 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 { |
| | |
| | | justify-content: center; |
| | | } |
| | | } |
| | | } |
| | | .hidden-checkbox-all :deep(.el-table__header .el-table-column--selection .el-checkbox) { |
| | | // 隐藏全选checkbox |
| | | display: none; |
| | | } |
| | | </style> |
| | | <style> |