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 @@
-
{{ data.dassetName }}
-
-
-
-
-
-
-
-
+
{{ data.contentName }}
@@ -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 @@
- {{ scope.row.tabEngName }}
+ {{ scope.row.tabEngName }}