From e30bb3208315331271a1ea8c2cd13259c30639c5 Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期二, 12 十一月 2024 17:33:38 +0800 Subject: [PATCH] 修改知识库管理 --- src/views/project/yw/dataManage/graph/GraphIndex.vue | 357 ++++++++++++++++------------------------------------------- 1 files changed, 98 insertions(+), 259 deletions(-) diff --git a/src/views/project/yw/dataManage/graph/GraphIndex.vue b/src/views/project/yw/dataManage/graph/GraphIndex.vue index 97ff6ee..a9b915b 100644 --- a/src/views/project/yw/dataManage/graph/GraphIndex.vue +++ b/src/views/project/yw/dataManage/graph/GraphIndex.vue @@ -1,73 +1,37 @@ <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', }" + defaultExpandAll + :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> <template #header> <!-- 鏌ヨ銆侀噸缃�佹帓搴忋�佸鍔犺〃鍗� --> - <el-form :inline="true" :model="formulaQueryParams"> + <el-form :inline="true" :model="graphQueryParams"> <el-form-item label="鍚嶇О" prop="title"> - <el-input v-model="formulaQueryParams.title" style="width: 226.4px" placeholder="鏂囦欢鍚嶇О" clearable></el-input> + <el-input v-model="graphQueryParams.title" style="width: 226.4px" placeholder="鏂囦欢鍚嶇О" clearable></el-input> </el-form-item> <el-form-item> - <el-select v-model="formulaQueryParams.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"> 鏌ヨ </el-button> - <el-button icon="ele-Refresh">閲嶇疆 </el-button> - <el-button icon="ele-Plus" @click="importData()"> 瀵煎叆鏁版嵁 </el-button> + <el-button type="primary" icon="ele-Search" @click="handleQueryTable"> 鏌ヨ </el-button> + <el-button icon="ele-Refresh" @click="resetQuery">閲嶇疆 </el-button> + <el-button icon="ele-Plus" @click="importData()" type="primary"> 瀵煎叆鏁版嵁 </el-button> </el-form-item> </el-form></template > @@ -82,109 +46,56 @@ class="flex-auto" :row-class-name="isFormulaTableDrag ? 'cursor-move' : 'cursor-pointer'" :header-cell-style="{ textAlign: 'center' }" - :data="categoryTableData" + :data="displayTableData" highlight-current-row > <el-table-column prop="name" label="鏂囦欢鍚嶇О" fixed="left" show-overflow-tooltip align="left" /> - <el-table-column prop="type" width="120" label="鏂囦欢鏍煎紡" show-overflow-tooltip align="center" /> + <el-table-column prop="type" width="120" label="鏂囦欢绫诲瀷" show-overflow-tooltip align="center" /> + <el-table-column prop="size" width="120" label="鏂囦欢澶у皬" show-overflow-tooltip align="center" /> <el-table-column prop="time" label="涓婁紶鏃堕棿" show-overflow-tooltip width="280" align="center"></el-table-column> - <el-table-column label="鎿嶄綔" width="220" fixed="right" show-overflow-tooltip align="center"> + <el-table-column label="鎿嶄綔" width="120" fixed="right" show-overflow-tooltip align="center"> <template #default="scope"> - <el-button icon="ele-Tickets" size="small" text type="primary" @click="openOperateDemoPage(scope.row)"> 璇︽儏</el-button> - <el-button icon="ele-Delete" size="small" text type="danger" @click="deleteCurrentFormulaRow(scope.row)"> - 鍒犻櫎 - </el-button> + <div class="space-x-2.5"> + <el-tooltip effect="dark" content="鏂囨湰" placement="top"> + <i + class="ywifont ywicon-wendang !text-[17px] cursor-pointer text-blue-400" + @click="openOperateDemoPage(scope.row)" + ></i> + </el-tooltip> + <el-tooltip effect="dark" content="鍒嗗潡" placement="top"> + <i + class="ywifont ywicon-01wenjianfenkuai !text-[17px] cursor-pointer text-blue-400" + @click="handleViewKnowledgeFile(scope.row)" + ></i> + </el-tooltip> + <el-tooltip effect="dark" content="鍒犻櫎" placement="top"> + <i + class="ywifont ywicon-shanchu !text-[17px] text-red-400 cursor-pointer" + @click="deleteCurrentFormulaRow(scope.row)" + ></i> + </el-tooltip> + </div> </template> </el-table-column> </el-table> - <!-- <div class="flex-0"> - <el-pagination - v-model:currentPage="state.tableParams.PageIndex" - v-model:page-size="state.tableParams.PageSize" - :total="state.tableTotal" - :page-sizes="[10, 20, 50, 100]" - background - @size-change="handleSizeChange" - style="margin-bottom: 20px" - @current-change="handleCurrentChange" - layout="total, sizes, prev, pager, next, jumper" - /> - </div> --> </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 { deepClone } from '/@/utils/other'; -import { convertListToTree } from '/@/utils/util'; -import { analyzeMap } from '/@/views/types/catalog/index'; +import { useQueryTable } from '/@/hooks/useQueryTable'; +import mittBus from '/@/utils/mitt'; +import { useCompRef } from '/@/utils/types'; +import { convertFileSize, convertListToTree } from '/@/utils/util'; +import { OptClassificationMap, classificationEnum } from '/@/views/types/metrics'; const state = reactive({ tableParams: { PageIndex: 1, @@ -196,40 +107,42 @@ 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 byParentData = convertListToTree(listData.value, { + ID: 'group_id', + ParentID: 'p_group_id', + Children: 'children', + }); + const result = []; + byParentData.forEach((item) => { + if (item.group_type == OptClassificationMap[classificationEnum.Knowledge]) { + result.push(item); + } + }); + 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 @@ -238,12 +151,13 @@ const categoryTableData = ref([]); const isFormulaTableDrag = ref(false); const getCategoryTableData = async () => { - const res = await list_knowledge_file().finally(() => {}); + const res = await list_knowledge_file({ + group_id: currentListID.value, + }).finally(() => {}); if (res?.json_ok) { const resData = (res.values || []) as []; resData.forEach((item) => { - const type = item?.name.split('.')[1]; - item.type = type; + item.size = convertFileSize(item.size); }); categoryTableData.value = resData; } else { @@ -274,8 +188,11 @@ //#endregion //#region ====================== 鎼滅储琛ㄦ牸锛屽琛ㄦ牸鎺掑簭 ====================== -const formulaQueryParams = ref({ +const graphQueryParams = ref({ title: '', +}); +const { resetQuery, handleQueryTable, displayTableData } = useQueryTable(categoryTableData, graphQueryParams, () => { + displayTableData.value = categoryTableData.value; }); //#endregion @@ -283,115 +200,37 @@ const router = useRouter(); const openOperateDemoPage = (row: any) => { router.push({ - name: 'GraphDetail', - params: { + name: 'ViewFile', + query: { id: row.id, }, }); }; - +const handleViewKnowledgeFile = (row) => { + router.push({ + name: 'ViewSegmentationFile', + query: { + id: row.id, + }, + }); +}; //瀵煎叆鏁版嵁 const importData = () => { router.push({ name: 'AddGraph', query: { group_id: currentListID.value, + 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