From cbf1df4c157d1f48aa99bbedd8e974fc7c33d463 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Thu, 12 Feb 2026 16:57:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E5=8F=A5=E9=85=8D=E7=BD=AE=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_admin/dao/sscf_dao.py | 15 ++- .../module_admin/service/sscf_service.py | 2 +- .../src/views/dataint/sscf/index.vue | 126 ++++++++++-------- .../src/views/meta/metaInfo/index.vue | 2 +- 4 files changed, 83 insertions(+), 62 deletions(-) diff --git a/vue-fastapi-backend/module_admin/dao/sscf_dao.py b/vue-fastapi-backend/module_admin/dao/sscf_dao.py index 61f9cf7..0966f10 100644 --- a/vue-fastapi-backend/module_admin/dao/sscf_dao.py +++ b/vue-fastapi-backend/module_admin/dao/sscf_dao.py @@ -5,6 +5,7 @@ from sqlalchemy import desc, delete, func, select, update from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.vo.user_vo import CurrentUserModel from module_admin.entity.vo.dataint_vo import SscfPageObject, TreeOperateModel, SaveSscfModel +from module_admin.entity.do.data_ast_content_do import DataAstContent from module_admin.entity.do.dataint_do import SysSscf, SysDassetTree from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join from utils.page_util import PageUtil @@ -17,12 +18,16 @@ class SscfDao: @classmethod async def get_sscf_list(cls, db: AsyncSession, sscf_query: SscfPageObject): + parent_conditions = [] + if sscf_query.dasset_id: + for pid in sscf_query.dasset_id.split(','): + parent_conditions.append(func.FIND_IN_SET(str(pid), SysSscf.dasset_id) > 0) query = ( select(SysSscf).where( SysSscf.keyword.like(f'%{sscf_query.keyword}%') if sscf_query.keyword else True, SysSscf.type.like(f'%{sscf_query.type}%') if sscf_query.type else True, - SysSscf.dasset_id.in_(sscf_query.dasset_id.split(',')) if sscf_query.dasset_id else True, - SysSscf.status == sscf_query.status if sscf_query.status else True + SysSscf.status == sscf_query.status if sscf_query.status else True, + or_(*parent_conditions) if parent_conditions else True ).distinct() ) query_result = await PageUtil.paginate(db, query, sscf_query.page_num, sscf_query.page_size, True) @@ -87,9 +92,10 @@ class SscfDao: result = ( ( await db.execute( - select(SysDassetTree).where(SysDassetTree.dasset_code == name).distinct() + select(DataAstContent.content_onum).where(DataAstContent.content_name.in_(name.split(",")) + ).distinct() ) - ).scalars().first() + ).scalars().all() ) return result @@ -122,4 +128,3 @@ class SscfDao: @classmethod async def delete_dasset_tree(cls, db: AsyncSession, onum: str): await db.execute(delete(SysDassetTree).where(SysDassetTree.onum == onum)) - diff --git a/vue-fastapi-backend/module_admin/service/sscf_service.py b/vue-fastapi-backend/module_admin/service/sscf_service.py index db9c752..87a63be 100644 --- a/vue-fastapi-backend/module_admin/service/sscf_service.py +++ b/vue-fastapi-backend/module_admin/service/sscf_service.py @@ -199,7 +199,7 @@ class SscfService: }) continue sscf = SaveSscfModel() - sscf.dasset_id = dasset.onum, + sscf.dasset_id = ",".join(map(str, dasset)) sscf.keyword = row['keyword'] sscf.algorithm = row['algorithm'] sscf.order = 'True' if row['order'] == '是' else 'False' diff --git a/vue-fastapi-frontend/src/views/dataint/sscf/index.vue b/vue-fastapi-frontend/src/views/dataint/sscf/index.vue index 025b480..e23c6cd 100644 --- a/vue-fastapi-frontend/src/views/dataint/sscf/index.vue +++ b/vue-fastapi-frontend/src/views/dataint/sscf/index.vue @@ -14,7 +14,7 @@
@@ -163,9 +155,20 @@ :rules="rules" label-width="125px"> - - - + { } getList(); } -function handleAddTree(){ - showTreeDialog.value = true - currentTreeNode.value = { - operate: 'ADD', - dassetCode: '', - dassetName: '' - } -} -function handleEditTree(data){ - currentTreeNode.value = data - currentTreeNode.value.operate = 'UPDATE' - showTreeDialog.value = true -} + function handleSaveTree(){ let param = { operate: currentTreeNode.value.operate, @@ -424,17 +416,7 @@ function handleSaveTree(){ get_tree_data() }) } -function handleDeleteTree(data){ - let param = { - onum: data.onum, - dassetCode: data.dassetCode, - operate: 'DELETE' - } - saveDassetTreeNode(param).then(res=>{ - proxy.$modal.msgSuccess("操作成功") - get_tree_data() - }) -} + function handleQuery(){ queryParams.value.pageNum = 1; getList() @@ -445,13 +427,17 @@ function getList(){ total.value = res.data.total }) } +function changeDassetId(){ + console.log(dassetOptions.value) + console.log(currentForm.value.dassetId) +} /** 节点单击事件 */ function handleNodeClick(data) { queryParams.value.dassetId = getAllChildOnums(data).join(','); handleQuery(); } const getAllChildOnums = (node) => { - const onums = [node.onum]; // 当前节点的 onum + const onums = [node.contentOnum]; // 当前节点的 onum if (node.children && node.children.length > 0) { node.children.forEach(childNode => { onums.push(...getAllChildOnums(childNode)); // 递归子节点 @@ -475,7 +461,7 @@ function handleAdd(){ showDialog.value = true currentForm.value ={ operate: 'ADD', - dassetId:'', + dassetId:[1], status:'1', keyword:'', algorithm:'包含', @@ -503,7 +489,9 @@ function changeStatus(row){ function handleSave(){ proxy.$refs.formRef.validate(valid => { if (valid) { - saveSscf(currentForm.value).then(res=>{ + let data = currentForm.value; + data.dassetId = data.dassetId.join(',') + saveSscf(data).then(res=>{ proxy.$modal.msgSuccess("操作成功"); showDialog.value = false getList() @@ -557,23 +545,51 @@ function handleExport(){ function handleSelection(val){ multSelection.value= val } + +function cleanTreeData(nodes) { + if (!nodes || nodes.length === 0) return; + nodes.forEach(node => { + // 优先处理子节点(深度优先) + if (node.children?.length > 0) { + cleanTreeData(node.children); + } + // 过滤当前层级无效节点 + if (node.children) { + node.children = node.children.filter(child => + Boolean(child.contentName) // 更严谨的空值检查 + ); + } + }); +} function get_tree_data(){ - get_dasset_tree().then(res=>{ - let treeList = res.data - if(treeList.length > 0){ - let children = [] - dassetOptions.value = [] - for (let i = 0; i < treeList.length; i++) { - if (treeList[i].dassetCode === "root"){ - dassetOptions.value.push(treeList[i]) - }else { - children.push(treeList[i]) - } - } - dassetOptions.value[0].children = children - dassetList.value = children + getDirectoryTree({pageSize: 999}).then(res => { + dassetOptions.value = [] + let array = res.rows; + if(array.length >0 && array[0].children && array[0].children.length>0){ + array[0].children = array[0].children.filter(child => + Boolean(child.contentName !== '我的收藏') // 更严谨的空值检查 + ); } + cleanTreeData(array) + dassetOptions.value = array }) + + // get_dasset_tree().then(res=>{ + // let treeList = res.data + // if(treeList.length > 0){ + // let children = [] + // dassetOptions.value = [] + // for (let i = 0; i < treeList.length; i++) { + // if (treeList[i].dassetCode === "root"){ + // dassetOptions.value.push(treeList[i]) + // }else { + // children.push(treeList[i]) + // } + // } + // dassetOptions.value[0].children = children + // dassetList.value = children + // } + // }) } /** 通过条件过滤节点 */ const filterNode = (value, data) => { diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue index a4b8386..801d24a 100644 --- a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue +++ b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue @@ -132,7 +132,7 @@