From 4b42b1b98df931cde6cdf633d0a3a9d5012452e2 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Sat, 10 May 2025 20:32:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=85=B3=E7=B3=BB,=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=B0=83=E6=95=B4=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_admin/dao/meta_dao.py | 32 ++- .../module_admin/service/meta_service.py | 244 ++++++++++-------- .../views/meta/metaInfo/businssRelation.vue | 122 ++++++--- 3 files changed, 232 insertions(+), 166 deletions(-) diff --git a/vue-fastapi-backend/module_admin/dao/meta_dao.py b/vue-fastapi-backend/module_admin/dao/meta_dao.py index b6afa03..d6e7ed8 100644 --- a/vue-fastapi-backend/module_admin/dao/meta_dao.py +++ b/vue-fastapi-backend/module_admin/dao/meta_dao.py @@ -549,20 +549,24 @@ class MetaDao: @classmethod async def get_op_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str): - sql = text("select a1.* ,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father" - " from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd ,b_mdl_name " - ",b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation where rela_type = 'op2_relation' " - "and rela_value <> '[]') a1 left join t_batch_fld_relation a2 on a1.a_ssys_cd = a2.a_ssys_cd " - " and a1.a_mdl_name = a2.a_mdl_name and a1.a_tab_eng_name = a2.a_tab_eng_name and " - "a1.a_fld_eng_name = a2.a_fld_eng_name and a1.b_ssys_cd = a2.b_ssys_cd " - "and a1.b_mdl_name = a2.b_mdl_name and a1.b_tab_eng_name = a2.b_tab_eng_name " - "and a1.b_fld_eng_name = a2.b_fld_eng_name and a2.rela_type = 'set_flag' and a2.rela_value <> 0 " - "where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in " - "(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas) " - "or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in " - "(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)) " - "and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName) " - " or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName))") + sql = text("select a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name,b_tab_eng_name," + "b_fld_eng_name,case when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and " + "max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' " + "when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and " + "max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' " + "when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND " + "max(case when rela_type = 'op_relation' then rela_value end) <> 0 and " + "max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' " + "when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND " + "max(case when rela_type = 'op_relation' then rela_value end) <> 0 and " + "max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' END as father " + "from t_batch_fld_relation " + "where ((a_ssys_cd = :sysCode and a_mdl_name = :mdlName and a_tab_eng_name = :tabName) " + " or (b_ssys_cd = :sysCode and b_mdl_name = :mdlName and b_tab_eng_name = :tabName))" + "group by a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name,b_tab_eng_name" + ",b_fld_eng_name " + "having max(case when rela_type = 'op2_relation' then rela_value end) <> '[]'" + " or max(case when rela_type = 'sub_flag' then rela_value end) = '1'") result = (await result_db.execute(sql, {"sysCode": ssys_cd, "mdlName": mdl_name, "tabName": tab_eng_name})) # 获取列名 diff --git a/vue-fastapi-backend/module_admin/service/meta_service.py b/vue-fastapi-backend/module_admin/service/meta_service.py index 89f6f34..be59366 100644 --- a/vue-fastapi-backend/module_admin/service/meta_service.py +++ b/vue-fastapi-backend/module_admin/service/meta_service.py @@ -215,34 +215,135 @@ class MetaService: relationList = [] if currentNodeList is not None and len(currentNodeList) > 0: for currentNode in currentNodeList: - relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'], - "mdl_name": currentNode['a_mdl_name'], - "tab_eng_name": currentNode['a_tab_eng_name'], - "fld_eng_name": currentNode['a_fld_eng_name']}, - "target": {'ssys_cd': currentNode['b_ssys_cd'], - 'mdl_name': currentNode['b_mdl_name'], - 'tab_eng_name': currentNode['b_tab_eng_name'], - 'fld_eng_name': currentNode['b_fld_eng_name']}} if \ - currentNode['father'] == 'A' else { - "source": {'ssys_cd': currentNode['b_ssys_cd'], - 'mdl_name': currentNode['b_mdl_name'], - 'tab_eng_name': currentNode['b_tab_eng_name'], - 'fld_eng_name': currentNode['b_fld_eng_name']}, - "target": {"ssys_cd": currentNode['a_ssys_cd'], - "mdl_name": currentNode['a_mdl_name'], - "tab_eng_name": currentNode['a_tab_eng_name'], - "fld_eng_name": currentNode['a_fld_eng_name']}} + if currentNode['father'] is None: + relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'], + "mdl_name": currentNode['a_mdl_name'], + "tab_eng_name": currentNode['a_tab_eng_name'], + "fld_eng_name": currentNode['a_fld_eng_name']}, + "target": {'ssys_cd': currentNode['b_ssys_cd'], + 'mdl_name': currentNode['b_mdl_name'], + 'tab_eng_name': currentNode['b_tab_eng_name'], + 'fld_eng_name': currentNode['b_fld_eng_name']}, + "endArrow": False} + else: + relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'], + "mdl_name": currentNode['a_mdl_name'], + "tab_eng_name": currentNode['a_tab_eng_name'], + "fld_eng_name": currentNode['a_fld_eng_name']}, + "target": {'ssys_cd': currentNode['b_ssys_cd'], + 'mdl_name': currentNode['b_mdl_name'], + 'tab_eng_name': currentNode['b_tab_eng_name'], + 'fld_eng_name': currentNode['b_fld_eng_name']}, + "endArrow": True} if \ + currentNode['father'] == 'A' else { + "source": {'ssys_cd': currentNode['b_ssys_cd'], + 'mdl_name': currentNode['b_mdl_name'], + 'tab_eng_name': currentNode['b_tab_eng_name'], + 'fld_eng_name': currentNode['b_fld_eng_name']}, + "target": {"ssys_cd": currentNode['a_ssys_cd'], + "mdl_name": currentNode['a_mdl_name'], + "tab_eng_name": currentNode['a_tab_eng_name'], + "fld_eng_name": currentNode['a_fld_eng_name']}, + "endArrow": True} relationList.append(relation) - if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name: - if currentNode['father'] == 'A': - # b为下游,取b字段的下下游 - nextNodeList =(await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'], - currentNode['b_mdl_name'], - currentNode['b_tab_eng_name'], - currentNode['b_fld_eng_name'], - meta_query.type, - 'next') ) - if nextNodeList and len(nextNodeList) > 0: + if meta_query.type == 'er': + if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name: + if currentNode['father'] == 'A': + # b为下游,取b字段的下下游 + nextNodeList = (await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'], + currentNode['b_mdl_name'], + currentNode['b_tab_eng_name'], + currentNode['b_fld_eng_name'], + meta_query.type, + 'next')) + if nextNodeList and len(nextNodeList) > 0: + for nextNode in nextNodeList: + relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'], + "mdl_name": nextNode['a_mdl_name'], + "tab_eng_name": nextNode['a_tab_eng_name'], + "fld_eng_name": nextNode['a_fld_eng_name']}, + "target": {'ssys_cd': nextNode['b_ssys_cd'], + 'mdl_name': nextNode['b_mdl_name'], + 'tab_eng_name': nextNode['b_tab_eng_name'], + 'fld_eng_name': nextNode['b_fld_eng_name']}, + "endArrow": True} if nextNode['father'] == 'A' else \ + {"source": {'ssys_cd': nextNode['b_ssys_cd'], + 'mdl_name': nextNode['b_mdl_name'], + 'tab_eng_name': nextNode['b_tab_eng_name'], + 'fld_eng_name': nextNode['b_fld_eng_name']}, + "target": {"ssys_cd": nextNode['a_ssys_cd'], + "mdl_name": nextNode['a_mdl_name'], + "tab_eng_name": nextNode['a_tab_eng_name'], + "fld_eng_name": nextNode['a_fld_eng_name']}, + "endArrow": True + } + relationList.append(relation) + if currentNode['father'] == 'B': + # b为上游, 取b字段的上上游 + preNodeList = await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'], + currentNode['b_mdl_name'], + currentNode['b_tab_eng_name'], + currentNode['b_fld_eng_name'], + meta_query.type, + 'pre') + if preNodeList and len(preNodeList) > 0: + for preNode in preNodeList: + relation = {"source": {"ssys_cd": preNode['a_ssys_cd'], + "mdl_name": preNode['a_mdl_name'], + "tab_eng_name": preNode['a_tab_eng_name'], + "fld_eng_name": preNode['a_fld_eng_name']}, + "target": {'ssys_cd': preNode['b_ssys_cd'], + 'mdl_name': preNode['b_mdl_name'], + 'tab_eng_name': preNode['b_tab_eng_name'], + 'fld_eng_name': preNode['b_fld_eng_name']}, + "endArrow": True} if preNode['father'] == 'A' else\ + { "source": {'ssys_cd': preNode['b_ssys_cd'], + 'mdl_name': preNode['b_mdl_name'], + 'tab_eng_name': preNode['b_tab_eng_name'], + 'fld_eng_name': preNode['b_fld_eng_name']}, + "target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'], + "tab_eng_name": preNode['a_tab_eng_name'], + "fld_eng_name": preNode['a_fld_eng_name']}, + "endArrow": True} + relationList.append(relation) + if currentNode['b_tab_eng_name'] == meta_query.tab_eng_name: + if currentNode['father'] == 'A': + # a 为上游,取a字段的上上游 + preNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'], + currentNode['a_mdl_name'], + currentNode['a_tab_eng_name'], + currentNode['a_fld_eng_name'], + meta_query.type, + 'pre') + if preNodeList and len(preNodeList) > 0: + for preNode in preNodeList: + relation = {"source": {"ssys_cd": preNode['a_ssys_cd'], + "mdl_name": preNode['a_mdl_name'], + "tab_eng_name": preNode['a_tab_eng_name'], + "fld_eng_name": preNode['a_fld_eng_name']}, + "target": {'ssys_cd': preNode['b_ssys_cd'], + 'mdl_name': preNode['b_mdl_name'], + 'tab_eng_name': preNode['b_tab_eng_name'], + 'fld_eng_name': preNode['b_fld_eng_name']}, + "endArrow": True} if \ + preNode['father'] == 'A' else { + "source": {'ssys_cd': preNode['b_ssys_cd'], + 'mdl_name': preNode['b_mdl_name'], + 'tab_eng_name': preNode['b_tab_eng_name'], + 'fld_eng_name': preNode['b_fld_eng_name']}, + "target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'], + "tab_eng_name": preNode['a_tab_eng_name'], + "fld_eng_name": preNode['a_fld_eng_name']}, + "endArrow": True} + relationList.append(relation) + if currentNode['father'] == 'B': + # a 为下游,取a字段的下下游 + nextNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'], + currentNode['a_mdl_name'], + currentNode['a_tab_eng_name'], + currentNode['a_fld_eng_name'], + meta_query.type, + 'next') for nextNode in nextNodeList: relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'], @@ -251,97 +352,18 @@ class MetaService: "target": {'ssys_cd': nextNode['b_ssys_cd'], 'mdl_name': nextNode['b_mdl_name'], 'tab_eng_name': nextNode['b_tab_eng_name'], - 'fld_eng_name': nextNode['b_fld_eng_name']}} if nextNode[ - 'father'] == 'A' else { + 'fld_eng_name': nextNode['b_fld_eng_name']}, + "endArrow": True} if \ + nextNode['father'] == 'A' else { "source": {'ssys_cd': nextNode['b_ssys_cd'], 'mdl_name': nextNode['b_mdl_name'], 'tab_eng_name': nextNode['b_tab_eng_name'], 'fld_eng_name': nextNode['b_fld_eng_name']}, "target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'], "tab_eng_name": nextNode['a_tab_eng_name'], - "fld_eng_name": nextNode['a_fld_eng_name']}} - relationList.append(relation) - if currentNode['father'] == 'B': - # b为上游, 取b字段的上上游 - preNodeList = await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'], - currentNode['b_mdl_name'], - currentNode['b_tab_eng_name'], - currentNode['b_fld_eng_name'], - meta_query.type, - 'pre') - if preNodeList and len(preNodeList) > 0: - for preNode in preNodeList: - relation = {"source": {"ssys_cd": preNode['a_ssys_cd'], - "mdl_name": preNode['a_mdl_name'], - "tab_eng_name": preNode['a_tab_eng_name'], - "fld_eng_name": preNode['a_fld_eng_name']}, - "target": {'ssys_cd': preNode['b_ssys_cd'], - 'mdl_name': preNode['b_mdl_name'], - 'tab_eng_name': preNode['b_tab_eng_name'], - 'fld_eng_name': preNode['b_fld_eng_name']}} if preNode[ - 'father'] == 'A' else { - "source": {'ssys_cd': preNode['b_ssys_cd'], - 'mdl_name': preNode['b_mdl_name'], - 'tab_eng_name': preNode['b_tab_eng_name'], - 'fld_eng_name': preNode['b_fld_eng_name']}, - "target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'], - "tab_eng_name": preNode['a_tab_eng_name'], - "fld_eng_name": preNode['a_fld_eng_name']}} - relationList.append(relation) - if currentNode['b_tab_eng_name'] == meta_query.tab_eng_name: - if currentNode['father'] == 'A': - # a 为上游,取a字段的上上游 - preNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'], - currentNode['a_mdl_name'], - currentNode['a_tab_eng_name'], - currentNode['a_fld_eng_name'], - meta_query.type, - 'pre') - if preNodeList and len(preNodeList) > 0: - for preNode in preNodeList: - relation = {"source": {"ssys_cd": preNode['a_ssys_cd'], - "mdl_name": preNode['a_mdl_name'], - "tab_eng_name": preNode['a_tab_eng_name'], - "fld_eng_name": preNode['a_fld_eng_name']}, - "target": {'ssys_cd': preNode['b_ssys_cd'], - 'mdl_name': preNode['b_mdl_name'], - 'tab_eng_name': preNode['b_tab_eng_name'], - 'fld_eng_name': preNode['b_fld_eng_name']}} if \ - preNode['father'] == 'A' else { - "source": {'ssys_cd': preNode['b_ssys_cd'], - 'mdl_name': preNode['b_mdl_name'], - 'tab_eng_name': preNode['b_tab_eng_name'], - 'fld_eng_name': preNode['b_fld_eng_name']}, - "target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'], - "tab_eng_name": preNode['a_tab_eng_name'], - "fld_eng_name": preNode['a_fld_eng_name']}} + "fld_eng_name": nextNode['a_fld_eng_name']}, + "endArrow": True} relationList.append(relation) - if currentNode['father'] == 'B': - # a 为下游,取a字段的下下游 - nextNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'], - currentNode['a_mdl_name'], - currentNode['a_tab_eng_name'], - currentNode['a_fld_eng_name'], - meta_query.type, - 'next') - for nextNode in nextNodeList: - relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'], - "mdl_name": nextNode['a_mdl_name'], - "tab_eng_name": nextNode['a_tab_eng_name'], - "fld_eng_name": nextNode['a_fld_eng_name']}, - "target": {'ssys_cd': nextNode['b_ssys_cd'], - 'mdl_name': nextNode['b_mdl_name'], - 'tab_eng_name': nextNode['b_tab_eng_name'], - 'fld_eng_name': nextNode['b_fld_eng_name']}} if \ - nextNode['father'] == 'A' else { - "source": {'ssys_cd': nextNode['b_ssys_cd'], - 'mdl_name': nextNode['b_mdl_name'], - 'tab_eng_name': nextNode['b_tab_eng_name'], - 'fld_eng_name': nextNode['b_fld_eng_name']}, - "target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'], - "tab_eng_name": nextNode['a_tab_eng_name'], - "fld_eng_name": nextNode['a_fld_eng_name']}} - relationList.append(relation) tableList = [] if len(relationList) > 0: for relation in relationList: diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue index 46d3c99..4ec6bde 100644 --- a/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue +++ b/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue @@ -115,13 +115,47 @@ function initG6(){ collapsed: true, size: [300, 50], }); - setTimeout(() => graph.layout(), 100); + // setTimeout(() => graph.layout(), 100); } else if (shape.get("name") === "expand") { graph.updateItem(item, { collapsed: false, size: [300, 80], }); - setTimeout(() => graph.layout(), 100); + // setTimeout(() => graph.layout(), 100); + }else if (shape.get("name") && shape.get("name").startsWith("item")) { + let edges = graph.getEdges() + let columnName = '' + g6data.value.forEach(data =>{ + if(data.id === item.getModel().id){ + columnName = data.attrs[shape.get("name").split("-")[1]].key + } + }) + edges.forEach(edg =>{ + if((edg.getModel().sourceKey === columnName && edg.getModel().source === item.getModel().id) + || (edg.getModel().targetKey === columnName && edg.getModel().target === item.getModel().id)){ + edg.show() + }else{ + edg.hide() + } + }) + let nodes = graph.getNodes() + let index = Number(shape.get("name").split("-")[1]) + nodes.forEach(node=>{ + let model = node.getModel() + model.selectedIndex = NaN + graph.updateItem(node,model) + }) + this.graph.updateItem(item, { + selectedIndex: index, + }); + } else { + graph.updateItem(item, { + selectedIndex: NaN, + }); + let edges = graph.getEdges() + edges.forEach(edg =>{ + edg.show() + }) } }, mousedown(e) { @@ -132,18 +166,18 @@ function initG6(){ }, move(e) { if (this.isMousedown) return; - const name = e.shape.get("name"); - const item = e.item; - - if (name && name.startsWith("item")) { - this.graph.updateItem(item, { - selectedIndex: Number(name.split("-")[1]), - }); - } else { - this.graph.updateItem(item, { - selectedIndex: NaN, - }); - } + // const name = e.shape.get("name"); + // const item = e.item; + // + // if (name && name.startsWith("item")) { + // this.graph.updateItem(item, { + // selectedIndex: Number(name.split("-")[1]), + // }); + // } else { + // this.graph.updateItem(item, { + // selectedIndex: NaN, + // }); + // } }, }); @@ -163,7 +197,6 @@ function initG6(){ if (!sourceNode.collapsed && sourceIndex > sourceStartIndex - 1) { sourceY = 30 + (sourceIndex - sourceStartIndex + 0.5) * itemHeight; - sourceY = Math.min(sourceY, 80); } const targetIndex = targetNode.attrs.findIndex( @@ -206,7 +239,7 @@ function initG6(){ endPoint.y, ], ], - endArrow: true, + endArrow: cfg.endArrow, }, // must be assigned in G6 3.3 and later versions. it can be any string you want, but should be unique in a custom item type name: "path-shape", @@ -231,7 +264,7 @@ function initG6(){ endPoint.y, ], ], - endArrow: true, + endArrow: cfg.endArrow, }, // must be assigned in G6 3.3 and later versions. it can be any string you want, but should be unique in a custom item type name: "path-shape", @@ -278,7 +311,7 @@ function initG6(){ icon, } = cfg; const list = attrs; - const itemCount = list.length; + const itemCount = list.length + 1; const boxStyle = { stroke: "#096DD9", radius: 4, @@ -288,7 +321,7 @@ function initG6(){ Math.floor(startIndex + itemCount - 1) ); const offsetY = (0.5 - (startIndex % 1)) * itemHeight + 30; - + //表头盒子 group.addShape("rect", { attrs: { fill: boxStyle.stroke, @@ -300,7 +333,7 @@ function initG6(){ }); let fontLeft = 12; - + //图标 if (icon && icon.show !== false) { group.addShape("image", { attrs: { @@ -313,7 +346,7 @@ function initG6(){ }); fontLeft += 18; } - + //表名 group.addShape("text", { attrs: { y: 22, @@ -325,10 +358,11 @@ function initG6(){ }, }); + //展开div group.addShape("rect", { attrs: { x: 0, - y: collapsed ? 30 : (list.length ) * itemHeight+15, + y: collapsed ? 30 : (list.length +1) * itemHeight+15, height: 15, width, fill: "#eee", @@ -339,10 +373,11 @@ function initG6(){ name: collapsed ? "expand" : "collapse", }); + //展开图标 group.addShape("text", { attrs: { x: width / 2 - 6, - y: (collapsed ? 30 : (list.length ) * itemHeight+15) + 12, + y: (collapsed ? 30 : (list.length +1) * itemHeight+15) + 12, text: collapsed ? "+" : "-", width, fill: "#000", @@ -352,13 +387,13 @@ function initG6(){ // must be assigned in G6 3.3 and later versions. it can be any string you want, but should be unique in a custom item type name: collapsed ? "expand" : "collapse", }); - + //表格外框 const keyshape = group.addShape("rect", { attrs: { x: 0, y: 0, width, - height: collapsed ? 45 : (list.length ) * itemHeight+15 + 15, + height: collapsed ? 45 : (list.length +1) * itemHeight+15 + 15, ...boxStyle, }, draggable: true, @@ -369,28 +404,30 @@ function initG6(){ } const listContainer = group.addGroup({}); + //字段内容 listContainer.setClip({ type: "rect", attrs: { x: -8, y: 30, width: width + 16, - height: (list.length ) * itemHeight+15 - 30, + height: (list.length +1) * itemHeight+15 - 30, }, }); + //字段背景框 listContainer.addShape({ type: "rect", attrs: { x: 1, y: 30, width: width - 2, - height: (list.length ) * itemHeight+15 - 30, + height: (list.length +1 ) * itemHeight+15 - 30, fill: "#fff", }, draggable: true, }); - if (list.length > itemCount) { + if (list.length +1 > itemCount) { const barStyle = { width: 4, padding: 0, @@ -401,30 +438,30 @@ function initG6(){ fill: "#00000022", }, }; - + //滚动轴 listContainer.addShape("rect", { attrs: { y: 30, x: width - barStyle.padding - barStyle.width, width: barStyle.width, - height: (list.length ) * itemHeight- 30, + height: (list.length +1 ) * itemHeight- 30, ...barStyle.boxStyle, }, }); const indexHeight = afterList.length > itemCount ? - (afterList.length / list.length) * (list.length ) * itemHeight : + (afterList.length / list.length+1) * (list.length +1) * itemHeight : 10; - + //滚动轴框 listContainer.addShape("rect", { attrs: { y: 30 + barStyle.padding + - (startIndex / list.length) * ( (list.length ) * itemHeight - 30), + (startIndex / list.length+1) * ( (list.length+1 ) * itemHeight - 30), x: width - barStyle.padding - barStyle.width, width: barStyle.width, - height: Math.min( (list.length ) * itemHeight, indexHeight), + height: Math.min( (list.length +1) * itemHeight, indexHeight), ...barStyle.innerStyle, }, }); @@ -440,7 +477,7 @@ function initG6(){ key += " - " + type; } const label = key; - + //字段框 listContainer.addShape("rect", { attrs: { x: 1, @@ -457,6 +494,7 @@ function initG6(){ }); if (!cfg.hideDot) { + //左边连接桩 listContainer.addShape("circle", { attrs: { x: 0, @@ -469,6 +507,7 @@ function initG6(){ cursor: "pointer", }, }); + //右边连接桩 listContainer.addShape("circle", { attrs: { x: width, @@ -482,7 +521,7 @@ function initG6(){ }, }); } - + //字段文字 listContainer.addShape("text", { attrs: { x: 12, @@ -529,6 +568,7 @@ function initG6(){ source: node.id, target: relation.nodeId, sourceKey: attr.key, + endArrow: relation.endArrow, targetKey: relation.key, label: relation.label, }); @@ -597,7 +637,6 @@ function initG6(){ animate: true, // fitView: true }) - console.log(g6data.value) graph.data(dataTransform(g6data.value)) graph.render(); } @@ -606,8 +645,6 @@ function initG6(){ watch( () => props.data, (val) => { - console.log(props.data) - console.log(val) g6data.value = [] if (props.data.tableList && props.data.tableList.length>0){ for (let i = 0; i < props.data.tableList.length; i++) { @@ -632,6 +669,7 @@ watch( let key = relation.target.fld_eng_name let tableKey = relation.source.ssys_cd+"-"+relation.source.mdl_name+"-"+relation.source.tab_eng_name let nodeId = relation.target.ssys_cd+"-"+relation.target.mdl_name+"-"+relation.target.tab_eng_name + let endArrow = relation.endArrow; if (g6data.value.length > 0){ for (let j = 0; j < g6data.value.length; j++) { if (g6data.value[j].id === tableKey){ @@ -647,13 +685,15 @@ watch( if (!hasRelation){ g6data.value[j].attrs[k].relation.push({ key: key, - nodeId: nodeId + nodeId: nodeId, + endArrow: endArrow }) } }else { g6data.value[j].attrs[k].relation = [{ key: key, - nodeId: nodeId + nodeId: nodeId, + endArrow: endArrow }] } }