From eac6d7b13f49d9d686853f409af1ea323e107776 Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期四, 10 十月 2024 14:50:04 +0800 Subject: [PATCH] 修改数据管理 --- src/api/knowledge/group.ts | 2 src/views/project/yw/dataManage/graph/GraphIndex.vue | 269 +++++++------------------------------------- src/views/project/yw/dataManage/graph/AddGraph.vue | 56 ++++++--- 3 files changed, 81 insertions(+), 246 deletions(-) diff --git a/src/api/knowledge/group.ts b/src/api/knowledge/group.ts index 2364a40..a7d31cf 100644 --- a/src/api/knowledge/group.ts +++ b/src/api/knowledge/group.ts @@ -4,7 +4,7 @@ */ export const get_knowledge_group_list = async () => { return request({ - url: '/admin/knowledge/get_knowledge_group_list', + url: '/scene/get_scene_group_tree', method: 'POST', }); }; diff --git a/src/views/project/yw/dataManage/graph/AddGraph.vue b/src/views/project/yw/dataManage/graph/AddGraph.vue index d6cf0fa..b1f1c63 100644 --- a/src/views/project/yw/dataManage/graph/AddGraph.vue +++ b/src/views/project/yw/dataManage/graph/AddGraph.vue @@ -59,9 +59,12 @@ <script setup lang="ts"> import type { UploadUserFile } from 'element-plus'; import { ElMessage } from 'element-plus'; +import moment from 'moment'; import { onMounted, reactive, ref } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { add_knowledge_file } from '/@/api/knowledge/group'; +import mittBus from '/@/utils/mitt'; +import { convertFileSize } from '/@/utils/util'; const uploadFileChange = (rule, value, callback) => { if (fileList.value.length === 0) { return callback('璇烽�夋嫨闇�瑕佷笂浼犵殑鏂囦欢'); @@ -84,9 +87,11 @@ categoryFormRules: { importType: [{ required: true, validator: uploadFileChange, trigger: 'change' }], }, + fileInfo: {} as any, }); const fileList = ref<UploadUserFile[]>([]); const categoryFormRef = ref(null); +const uploadRef = ref(null); const router = useRouter(); const route = useRoute(); //杩斿洖 @@ -94,10 +99,11 @@ //鏄惁鏄剧ず杩斿洖 router.back(); categoryFormRef.value.resetFields(); + uploadRef.value.clearFiles(); fileList.value = []; }; -const flag = ref(true); const uploadFile = (file: UploadUserFile) => { + state.fileInfo = file?.file; fileList.value.push(file); categoryFormRef.value.validateField(['importType']); //绉婚櫎涓婁紶鏂囦欢閿欒鎻愮ず!杩欐槸閲嶇偣锛侊紒 }; @@ -112,26 +118,38 @@ }; //纭 const onSubmit = async () => { - let group_id = route.query.group_id; + const valid = await categoryFormRef.value.validate().catch(() => {}); + if (!valid) return; + const group_id = route.query.group_id; if (group_id == null || group_id == '' || group_id == undefined) return; - categoryFormRef.value.validate(async (valid: boolean) => { - if (valid) { - const data = new FormData(); - fileList.value.forEach((item: any) => { - data.append('file', item.file); - }); - data.append('group_id', group_id); - const res = await add_knowledge_file(data); - if (res.json_ok) { - ElMessage.success('瀵煎叆鎴愬姛'); - router.push({ - name: 'GraphIndex', - }); - } else { - ElMessage.error(res.json_msg); - } - } + const group_name = state.fileInfo?.name; + const group_type = group_name.split('.').pop(); + const group_time = moment(state.fileInfo?.lastModifiedDate).format('YYYY-MM-DD HH:mm:ss'); + const group_size = convertFileSize(state.fileInfo?.size); + const data = new FormData(); + fileList.value.forEach((item: any) => { + data.append('file', item.file); }); + data.append('group_id', group_id); + const res = await add_knowledge_file(data); + if (res.json_ok) { + ElMessage.success('瀵煎叆鎴愬姛'); + let obj = { + id: res.file_id, + name: group_name, + type: group_type, + time: group_time, + size: group_size, + }; + + mittBus.emit('addGraphObj', obj); + router.push({ + name: 'GraphIndex', + }); + uploadRef.value.clearFiles(); + } else { + ElMessage.error(res.json_msg); + } }; onMounted(() => { const group_title = route.query.title; diff --git a/src/views/project/yw/dataManage/graph/GraphIndex.vue b/src/views/project/yw/dataManage/graph/GraphIndex.vue index e550714..fa36d2a 100644 --- a/src/views/project/yw/dataManage/graph/GraphIndex.vue +++ b/src/views/project/yw/dataManage/graph/GraphIndex.vue @@ -1,53 +1,23 @@ <template> <AHMContainer type="card"> <template #aside> - <!-- 鐩綍鏍� --> <LeftTreeByMgr v-loading="treeLoading" + class="h100" ref="leftTreeRef" - :treedata="listTreeData" - title-name="绫荤洰绠$悊" - :show-more-operate="true" - :show-add="true" - :folderIcon="() => false" :defaultProps="{ - children: 'Children', - label: 'title', - id: 'id', + id: 'group_id', + label: 'group_name', + children: 'children', }" + :treedata="listTreeData" + title-name="鍒嗙粍鍒楄〃" + :show-more-operate="false" + :show-add="false" :current-node-key="currentListID" - :expand-on-click-node="false" - :default-expand-all="true" + :node-icon="() => 'ele-Document'" @click="handleClickNode" - :customDropdown="true" - @tree-add="openOperateFormulaGroupDialog" > - <template #customDropdown="{ data, node }"> - <el-dropdown-menu> - <el-dropdown-item> - <el-button - @click.stop="() => openOperateFormulaGroupDialog(data)" - link - type="primary" - icon="ele-Edit" - style="cursor: pointer" - > - 缂栬緫 - </el-button> - </el-dropdown-item> - <el-dropdown-item> - <el-button - link - type="danger" - @click.stop="() => deleteCurrentFormulaGroup(node, data)" - icon="ele-Delete" - style="cursor: pointer" - > - 鍒犻櫎 - </el-button> - </el-dropdown-item> - </el-dropdown-menu> - </template> </LeftTreeByMgr> </template> @@ -57,13 +27,6 @@ <el-form-item label="鍚嶇О" prop="title"> <el-input v-model="graphQueryParams.title" style="width: 226.4px" placeholder="鏂囦欢鍚嶇О" clearable></el-input> </el-form-item> - <!-- <el-form-item> - <el-select v-model="graphQueryParams.Code" autocomplete="off" style="width: 226.4px" clearable> - <el-option v-for="item in Object.keys(analyzeMap)" :key="item" :value="parseInt(item)" :label="analyzeMap[item]"> - </el-option> - </el-select> - </el-form-item> --> - <el-form-item> <el-button type="primary" icon="ele-Search" @click="handleQueryTable"> 鏌ヨ </el-button> <el-button icon="ele-Refresh" @click="resetQuery">閲嶇疆 </el-button> @@ -116,78 +79,20 @@ </el-table> </div> </template> - <!-- 澧炲姞銆佷慨鏀规暟鎹璇濇 --> - <el-dialog - :destroy-on-close="true" - v-model="dataGroupDialogIsShow" - width="400" - :close-on-click-modal="false" - @closed="closeDataGroupDialog" - > - <template #header> - <div style="color: #fff"> - <SvgIcon - :name="formulaGroupDialogHeaderIcon" - :size="16" - style="margin-right: 3px; display: inline; vertical-align: middle" - /> - <span> {{ formulaGroupDialogTitle }} </span> - </div> - </template> - - <el-form :model="dataGroupDialogFormValue" ref="formulaGroupDialogFormRef" :rules="formulaGroupDialogFormRules" label-width="55"> - <el-form-item label="鐖剁骇" v-if="!isEditDataGroupDialog" prop="parent_group"> - <el-tree-select - default-expand-all - filterable - style="width: 100%" - v-model="dataGroupDialogFormValue.parent_group" - :props="{ - id: 'id', - label: 'title', - children: 'Children', - }" - :data="listTreeData" - node-key="id" - :clearable="true" - :accordion="true" - :expandNode="false" - :check-strictly="true" - placeholder="璇烽�夋嫨鐖剁骇" - > - </el-tree-select> - </el-form-item> - <el-form-item label="鍚嶇О" prop="title"> - <el-input placeholder="璇疯緭鍏ュ悕绉�" v-model="dataGroupDialogFormValue.title"></el-input> - </el-form-item> - </el-form> - <template #footer> - <div> - <el-button @click="closeDataGroupDialog">鍙� 娑�</el-button> - <el-button type="primary" @click="submitDataGroupFormValue">纭� 瀹�</el-button> - </div> - </template> - </el-dialog> </AHMContainer> </template> <script setup lang="ts"> -import type { FormInstance, FormRules } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus'; import { computed, nextTick, onMounted, reactive, ref } from 'vue'; import { useRouter } from 'vue-router'; -import { - add_knowledge_group, - delete_knowledge_file, - delete_knowledge_group, - get_knowledge_group_list, - list_knowledge_file, - update_knowledge_group, -} from '/@/api/knowledge/group'; +import * as agentGroupApi from '/@/api/ai/agentGroup'; +import { delete_knowledge_file, list_knowledge_file } from '/@/api/knowledge/group'; import AHMContainer from '/@/components/layout/AHMContainer.vue'; import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue'; import { useQueryTable } from '/@/hooks/useQueryTable'; -import { deepClone } from '/@/utils/other'; +import mittBus from '/@/utils/mitt'; +import { useCompRef } from '/@/utils/types'; import { convertFileSize, convertListToTree } from '/@/utils/util'; const state = reactive({ tableParams: { @@ -200,40 +105,37 @@ detailTitle: '', }); //#region ====================== 宸︿晶鏍戞暟鎹紝tree init ====================== -const leftTreeRef = ref(null); +const leftTreeRef = useCompRef(LeftTreeByMgr); const treeLoading = ref(false); -const listTreeData = ref([]); -const currentTreeNode = ref(null); -const currentListID = computed(() => currentTreeNode.value?.id); +const listData = ref([]); +const currentListID = computed(() => currentNode.value?.group_id); +const currentNode = ref(null); + +const listTreeData = computed(() => { + const result = convertListToTree(listData.value, { + ID: 'group_id', + ParentID: 'p_group_id', + Children: 'children', + }); + return result; +}); + const handleClickNode = (data) => { nextTick(() => { leftTreeRef.value?.treeRef.setCurrentKey(data.id); }); - currentTreeNode.value = data; + currentNode.value = data; getCategoryTableData(); }; -const getListTreeData = async (selectFirst = false) => { - treeLoading.value = true; - const res = await get_knowledge_group_list().finally(() => { - treeLoading.value = false; - }); - if (res?.json_ok) { - const resData = (res.values || []) as []; - listTreeData.value = convertListToTree(resData, { - ID: 'id', - Children: 'Children', - ParentID: 'parent', - }); - if (selectFirst) { - const firstListTreeNode = listTreeData.value[0]; - if (firstListTreeNode) { - handleClickNode(firstListTreeNode); - } else { - categoryTableData.value = []; - } - } else { - currentTreeNode.value && handleClickNode(currentTreeNode.value); - } +const getListTreeData = async () => { + const res = await agentGroupApi.getSceneGroupTreeByPost(); + listData.value = res.groups || []; + const firstListTreeNode = listTreeData.value[0]; + if (firstListTreeNode) { + handleClickNode(firstListTreeNode); + } else { + categoryTableData.value = []; + currentNode.value = null; } }; //#endregion @@ -290,6 +192,7 @@ //#region ====================== 璺宠浆鏂囨。璇︽儏椤甸潰 init====================== const router = useRouter(); const openOperateDemoPage = (row: any) => { + console.log('馃殌 ~ row:', row); router.push({ name: 'ViewFile', query: { @@ -311,103 +214,17 @@ name: 'AddGraph', query: { group_id: currentListID.value, - title: currentTreeNode.value.title, + title: currentNode.value.group_name, }, }); }; //#endregion - -//#region ====================== 鍒犻櫎宸︿晶鏍戞枃妗e垎缁勬暟鎹� ====================== - -const deleteCurrentFormulaGroup = (node, row: any) => { - ElMessageBox.confirm(`纭畾鍒犻櫎鏂囨。鍒嗙粍锛氥��${row.title}銆�?`, '鎻愮ず', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', - }).then(async () => { - const res = await delete_knowledge_group({ - id: row.id, - }); - - if (res.json_ok) { - ElMessage.success('鍒犻櫎鏂囨。鍒嗙粍鎴愬姛'); - const parent = node.parent; - const children = parent.data.Children || parent.data; - const index = children.findIndex((d) => d.id === row.id); - children.splice(index, 1); - } else { - ElMessage.error('鍒犻櫎鏂囨。鍒嗙粍澶辫触'); - } - }); -}; -//#endregion - -//#region ====================== 澧炲姞銆佸垹闄ゆ枃妗e垎缁勬搷浣�, dialog init====================== -const isEditDataGroupDialog = ref(false); -const formulaGroupDialogTitle = computed(() => { - return isEditDataGroupDialog.value ? '淇敼鏂囨。鍒嗙粍' : '娣诲姞鏂囨。鍒嗙粍'; -}); -const formulaGroupDialogHeaderIcon = computed(() => { - return isEditDataGroupDialog.value ? 'ele-Edit' : 'ele-Plus'; -}); -const dataGroupDialogFormValue = ref(null); -const dataGroupDialogIsShow = ref(false); - -const formulaGroupDialogFormRef = ref<FormInstance>(null); - -const formulaGroupDialogFormRules = ref<FormRules>({ - title: [{ required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' }], -}); -const openOperateFormulaGroupDialog = (data?) => { - if (data) { - isEditDataGroupDialog.value = true; - const { id, title } = data; - dataGroupDialogFormValue.value = deepClone({ id, title }); - } else { - isEditDataGroupDialog.value = false; - dataGroupDialogFormValue.value = { title: '', parent_group: '' }; - } - dataGroupDialogIsShow.value = true; -}; - -const closeDataGroupDialog = () => { - dataGroupDialogIsShow.value = false; - formulaGroupDialogFormRef.value.clearValidate(); -}; - -const submitDataGroupFormValue = async () => { - const valid = await formulaGroupDialogFormRef.value.validate().catch(() => {}); - if (!valid) return; - - if (isEditDataGroupDialog.value) { - const res = await update_knowledge_group(dataGroupDialogFormValue.value); - - if (res.json_ok) { - getListTreeData(); - closeDataGroupDialog(); - ElMessage.success('淇敼鏂囨。鍒嗙粍鎴愬姛'); - } else { - ElMessage.error('淇敼鏂囨。鍒嗙粍澶辫触'); - } - } else { - const res = await add_knowledge_group({ - ...dataGroupDialogFormValue.value, - parent_group: dataGroupDialogFormValue.value.parent_group || '0', - }); - if (res.json_ok) { - getListTreeData(); - closeDataGroupDialog(); - ElMessage.success('娣诲姞鏂囨。鍒嗙粍鎴愬姛'); - } else { - ElMessage.error('娣诲姞鏂囨。鍒嗙粍澶辫触'); - } - } -}; -//#endregion - //#region ====================== 鎸傝浇鏃惰幏鍙栧垵濮嬫暟鎹� ====================== onMounted(() => { - getListTreeData(true); + getListTreeData(); + mittBus.on('addGraphObj', (obj) => { + categoryTableData.value.push(obj); + }); }); //#endregion </script> -- Gitblit v1.9.3