si@aidatagov.com 4 weeks ago
parent
commit
fef91e51a0
  1. 32
      vue-fastapi-backend/module_admin/dao/meta_dao.py
  2. 244
      vue-fastapi-backend/module_admin/service/meta_service.py
  3. 122
      vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue

32
vue-fastapi-backend/module_admin/dao/meta_dao.py

@ -549,20 +549,24 @@ class MetaDao:
@classmethod @classmethod
async def get_op_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str): 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" 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,"
" from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd ,b_mdl_name " "b_fld_eng_name,case when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and "
",b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation where rela_type = 'op2_relation' " "max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' "
"and rela_value <> '[]') a1 left join t_batch_fld_relation a2 on a1.a_ssys_cd = a2.a_ssys_cd " "when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and "
" and a1.a_mdl_name = a2.a_mdl_name and a1.a_tab_eng_name = a2.a_tab_eng_name and " "max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' "
"a1.a_fld_eng_name = a2.a_fld_eng_name and a1.b_ssys_cd = a2.b_ssys_cd " "when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND "
"and a1.b_mdl_name = a2.b_mdl_name and a1.b_tab_eng_name = a2.b_tab_eng_name " "max(case when rela_type = 'op_relation' then rela_value end) <> 0 and "
"and a1.b_fld_eng_name = a2.b_fld_eng_name and a2.rela_type = 'set_flag' and a2.rela_value <> 0 " "max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' "
"where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in " "when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas) " "max(case when rela_type = 'op_relation' then rela_value end) <> 0 and "
"or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in " "max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' END as father "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)) " "from t_batch_fld_relation "
"and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName) " "where ((a_ssys_cd = :sysCode and a_mdl_name = :mdlName and a_tab_eng_name = :tabName) "
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_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, result = (await result_db.execute(sql, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name})) "mdlName": mdl_name, "tabName": tab_eng_name}))
# 获取列名 # 获取列名

244
vue-fastapi-backend/module_admin/service/meta_service.py

@ -215,34 +215,135 @@ class MetaService:
relationList = [] relationList = []
if currentNodeList is not None and len(currentNodeList) > 0: if currentNodeList is not None and len(currentNodeList) > 0:
for currentNode in currentNodeList: for currentNode in currentNodeList:
relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'], if currentNode['father'] is None:
"mdl_name": currentNode['a_mdl_name'], relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'],
"tab_eng_name": currentNode['a_tab_eng_name'], "mdl_name": currentNode['a_mdl_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}, "tab_eng_name": currentNode['a_tab_eng_name'],
"target": {'ssys_cd': currentNode['b_ssys_cd'], "fld_eng_name": currentNode['a_fld_eng_name']},
'mdl_name': currentNode['b_mdl_name'], "target": {'ssys_cd': currentNode['b_ssys_cd'],
'tab_eng_name': currentNode['b_tab_eng_name'], 'mdl_name': currentNode['b_mdl_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}} if \ 'tab_eng_name': currentNode['b_tab_eng_name'],
currentNode['father'] == 'A' else { 'fld_eng_name': currentNode['b_fld_eng_name']},
"source": {'ssys_cd': currentNode['b_ssys_cd'], "endArrow": False}
'mdl_name': currentNode['b_mdl_name'], else:
'tab_eng_name': currentNode['b_tab_eng_name'], relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'],
'fld_eng_name': currentNode['b_fld_eng_name']}, "mdl_name": currentNode['a_mdl_name'],
"target": {"ssys_cd": currentNode['a_ssys_cd'], "tab_eng_name": currentNode['a_tab_eng_name'],
"mdl_name": currentNode['a_mdl_name'], "fld_eng_name": currentNode['a_fld_eng_name']},
"tab_eng_name": currentNode['a_tab_eng_name'], "target": {'ssys_cd': currentNode['b_ssys_cd'],
"fld_eng_name": currentNode['a_fld_eng_name']}} '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) relationList.append(relation)
if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name: if meta_query.type == 'er':
if currentNode['father'] == 'A': if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name:
# b为下游,取b字段的下下游 if currentNode['father'] == 'A':
nextNodeList =(await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'], # b为下游,取b字段的下下游
currentNode['b_mdl_name'], nextNodeList = (await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'],
currentNode['b_tab_eng_name'], currentNode['b_mdl_name'],
currentNode['b_fld_eng_name'], currentNode['b_tab_eng_name'],
meta_query.type, currentNode['b_fld_eng_name'],
'next') ) meta_query.type,
if nextNodeList and len(nextNodeList) > 0: '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: for nextNode in nextNodeList:
relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'], relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'],
"mdl_name": nextNode['a_mdl_name'], "mdl_name": nextNode['a_mdl_name'],
@ -251,97 +352,18 @@ class MetaService:
"target": {'ssys_cd': nextNode['b_ssys_cd'], "target": {'ssys_cd': nextNode['b_ssys_cd'],
'mdl_name': nextNode['b_mdl_name'], 'mdl_name': nextNode['b_mdl_name'],
'tab_eng_name': nextNode['b_tab_eng_name'], 'tab_eng_name': nextNode['b_tab_eng_name'],
'fld_eng_name': nextNode['b_fld_eng_name']}} if nextNode[ 'fld_eng_name': nextNode['b_fld_eng_name']},
'father'] == 'A' else { "endArrow": True} if \
nextNode['father'] == 'A' else {
"source": {'ssys_cd': nextNode['b_ssys_cd'], "source": {'ssys_cd': nextNode['b_ssys_cd'],
'mdl_name': nextNode['b_mdl_name'], 'mdl_name': nextNode['b_mdl_name'],
'tab_eng_name': nextNode['b_tab_eng_name'], 'tab_eng_name': nextNode['b_tab_eng_name'],
'fld_eng_name': nextNode['b_fld_eng_name']}, 'fld_eng_name': nextNode['b_fld_eng_name']},
"target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'], "target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'],
"tab_eng_name": nextNode['a_tab_eng_name'], "tab_eng_name": nextNode['a_tab_eng_name'],
"fld_eng_name": nextNode['a_fld_eng_name']}} "fld_eng_name": nextNode['a_fld_eng_name']},
relationList.append(relation) "endArrow": True}
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']}}
relationList.append(relation) 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 = [] tableList = []
if len(relationList) > 0: if len(relationList) > 0:
for relation in relationList: for relation in relationList:

122
vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue

@ -115,13 +115,47 @@ function initG6(){
collapsed: true, collapsed: true,
size: [300, 50], size: [300, 50],
}); });
setTimeout(() => graph.layout(), 100); // setTimeout(() => graph.layout(), 100);
} else if (shape.get("name") === "expand") { } else if (shape.get("name") === "expand") {
graph.updateItem(item, { graph.updateItem(item, {
collapsed: false, collapsed: false,
size: [300, 80], 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) { mousedown(e) {
@ -132,18 +166,18 @@ function initG6(){
}, },
move(e) { move(e) {
if (this.isMousedown) return; if (this.isMousedown) return;
const name = e.shape.get("name"); // const name = e.shape.get("name");
const item = e.item; // const item = e.item;
//
if (name && name.startsWith("item")) { // if (name && name.startsWith("item")) {
this.graph.updateItem(item, { // this.graph.updateItem(item, {
selectedIndex: Number(name.split("-")[1]), // selectedIndex: Number(name.split("-")[1]),
}); // });
} else { // } else {
this.graph.updateItem(item, { // this.graph.updateItem(item, {
selectedIndex: NaN, // selectedIndex: NaN,
}); // });
} // }
}, },
}); });
@ -163,7 +197,6 @@ function initG6(){
if (!sourceNode.collapsed && sourceIndex > sourceStartIndex - 1) { if (!sourceNode.collapsed && sourceIndex > sourceStartIndex - 1) {
sourceY = 30 + (sourceIndex - sourceStartIndex + 0.5) * itemHeight; sourceY = 30 + (sourceIndex - sourceStartIndex + 0.5) * itemHeight;
sourceY = Math.min(sourceY, 80);
} }
const targetIndex = targetNode.attrs.findIndex( const targetIndex = targetNode.attrs.findIndex(
@ -206,7 +239,7 @@ function initG6(){
endPoint.y, 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 // 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", name: "path-shape",
@ -231,7 +264,7 @@ function initG6(){
endPoint.y, 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 // 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", name: "path-shape",
@ -278,7 +311,7 @@ function initG6(){
icon, icon,
} = cfg; } = cfg;
const list = attrs; const list = attrs;
const itemCount = list.length; const itemCount = list.length + 1;
const boxStyle = { const boxStyle = {
stroke: "#096DD9", stroke: "#096DD9",
radius: 4, radius: 4,
@ -288,7 +321,7 @@ function initG6(){
Math.floor(startIndex + itemCount - 1) Math.floor(startIndex + itemCount - 1)
); );
const offsetY = (0.5 - (startIndex % 1)) * itemHeight + 30; const offsetY = (0.5 - (startIndex % 1)) * itemHeight + 30;
//
group.addShape("rect", { group.addShape("rect", {
attrs: { attrs: {
fill: boxStyle.stroke, fill: boxStyle.stroke,
@ -300,7 +333,7 @@ function initG6(){
}); });
let fontLeft = 12; let fontLeft = 12;
//
if (icon && icon.show !== false) { if (icon && icon.show !== false) {
group.addShape("image", { group.addShape("image", {
attrs: { attrs: {
@ -313,7 +346,7 @@ function initG6(){
}); });
fontLeft += 18; fontLeft += 18;
} }
//
group.addShape("text", { group.addShape("text", {
attrs: { attrs: {
y: 22, y: 22,
@ -325,10 +358,11 @@ function initG6(){
}, },
}); });
//div
group.addShape("rect", { group.addShape("rect", {
attrs: { attrs: {
x: 0, x: 0,
y: collapsed ? 30 : (list.length ) * itemHeight+15, y: collapsed ? 30 : (list.length +1) * itemHeight+15,
height: 15, height: 15,
width, width,
fill: "#eee", fill: "#eee",
@ -339,10 +373,11 @@ function initG6(){
name: collapsed ? "expand" : "collapse", name: collapsed ? "expand" : "collapse",
}); });
//
group.addShape("text", { group.addShape("text", {
attrs: { attrs: {
x: width / 2 - 6, x: width / 2 - 6,
y: (collapsed ? 30 : (list.length ) * itemHeight+15) + 12, y: (collapsed ? 30 : (list.length +1) * itemHeight+15) + 12,
text: collapsed ? "+" : "-", text: collapsed ? "+" : "-",
width, width,
fill: "#000", 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 // 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", name: collapsed ? "expand" : "collapse",
}); });
//
const keyshape = group.addShape("rect", { const keyshape = group.addShape("rect", {
attrs: { attrs: {
x: 0, x: 0,
y: 0, y: 0,
width, width,
height: collapsed ? 45 : (list.length ) * itemHeight+15 + 15, height: collapsed ? 45 : (list.length +1) * itemHeight+15 + 15,
...boxStyle, ...boxStyle,
}, },
draggable: true, draggable: true,
@ -369,28 +404,30 @@ function initG6(){
} }
const listContainer = group.addGroup({}); const listContainer = group.addGroup({});
//
listContainer.setClip({ listContainer.setClip({
type: "rect", type: "rect",
attrs: { attrs: {
x: -8, x: -8,
y: 30, y: 30,
width: width + 16, width: width + 16,
height: (list.length ) * itemHeight+15 - 30, height: (list.length +1) * itemHeight+15 - 30,
}, },
}); });
//
listContainer.addShape({ listContainer.addShape({
type: "rect", type: "rect",
attrs: { attrs: {
x: 1, x: 1,
y: 30, y: 30,
width: width - 2, width: width - 2,
height: (list.length ) * itemHeight+15 - 30, height: (list.length +1 ) * itemHeight+15 - 30,
fill: "#fff", fill: "#fff",
}, },
draggable: true, draggable: true,
}); });
if (list.length > itemCount) { if (list.length +1 > itemCount) {
const barStyle = { const barStyle = {
width: 4, width: 4,
padding: 0, padding: 0,
@ -401,30 +438,30 @@ function initG6(){
fill: "#00000022", fill: "#00000022",
}, },
}; };
//
listContainer.addShape("rect", { listContainer.addShape("rect", {
attrs: { attrs: {
y: 30, y: 30,
x: width - barStyle.padding - barStyle.width, x: width - barStyle.padding - barStyle.width,
width: barStyle.width, width: barStyle.width,
height: (list.length ) * itemHeight- 30, height: (list.length +1 ) * itemHeight- 30,
...barStyle.boxStyle, ...barStyle.boxStyle,
}, },
}); });
const indexHeight = const indexHeight =
afterList.length > itemCount ? afterList.length > itemCount ?
(afterList.length / list.length) * (list.length ) * itemHeight : (afterList.length / list.length+1) * (list.length +1) * itemHeight :
10; 10;
//
listContainer.addShape("rect", { listContainer.addShape("rect", {
attrs: { attrs: {
y: 30 + y: 30 +
barStyle.padding + barStyle.padding +
(startIndex / list.length) * ( (list.length ) * itemHeight - 30), (startIndex / list.length+1) * ( (list.length+1 ) * itemHeight - 30),
x: width - barStyle.padding - barStyle.width, x: width - barStyle.padding - barStyle.width,
width: barStyle.width, width: barStyle.width,
height: Math.min( (list.length ) * itemHeight, indexHeight), height: Math.min( (list.length +1) * itemHeight, indexHeight),
...barStyle.innerStyle, ...barStyle.innerStyle,
}, },
}); });
@ -440,7 +477,7 @@ function initG6(){
key += " - " + type; key += " - " + type;
} }
const label = key; const label = key;
//
listContainer.addShape("rect", { listContainer.addShape("rect", {
attrs: { attrs: {
x: 1, x: 1,
@ -457,6 +494,7 @@ function initG6(){
}); });
if (!cfg.hideDot) { if (!cfg.hideDot) {
//
listContainer.addShape("circle", { listContainer.addShape("circle", {
attrs: { attrs: {
x: 0, x: 0,
@ -469,6 +507,7 @@ function initG6(){
cursor: "pointer", cursor: "pointer",
}, },
}); });
//
listContainer.addShape("circle", { listContainer.addShape("circle", {
attrs: { attrs: {
x: width, x: width,
@ -482,7 +521,7 @@ function initG6(){
}, },
}); });
} }
//
listContainer.addShape("text", { listContainer.addShape("text", {
attrs: { attrs: {
x: 12, x: 12,
@ -529,6 +568,7 @@ function initG6(){
source: node.id, source: node.id,
target: relation.nodeId, target: relation.nodeId,
sourceKey: attr.key, sourceKey: attr.key,
endArrow: relation.endArrow,
targetKey: relation.key, targetKey: relation.key,
label: relation.label, label: relation.label,
}); });
@ -597,7 +637,6 @@ function initG6(){
animate: true, animate: true,
// fitView: true // fitView: true
}) })
console.log(g6data.value)
graph.data(dataTransform(g6data.value)) graph.data(dataTransform(g6data.value))
graph.render(); graph.render();
} }
@ -606,8 +645,6 @@ function initG6(){
watch( watch(
() => props.data, () => props.data,
(val) => { (val) => {
console.log(props.data)
console.log(val)
g6data.value = [] g6data.value = []
if (props.data.tableList && props.data.tableList.length>0){ if (props.data.tableList && props.data.tableList.length>0){
for (let i = 0; i < props.data.tableList.length; i++) { for (let i = 0; i < props.data.tableList.length; i++) {
@ -632,6 +669,7 @@ watch(
let key = relation.target.fld_eng_name let key = relation.target.fld_eng_name
let tableKey = relation.source.ssys_cd+"-"+relation.source.mdl_name+"-"+relation.source.tab_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 nodeId = relation.target.ssys_cd+"-"+relation.target.mdl_name+"-"+relation.target.tab_eng_name
let endArrow = relation.endArrow;
if (g6data.value.length > 0){ if (g6data.value.length > 0){
for (let j = 0; j < g6data.value.length; j++) { for (let j = 0; j < g6data.value.length; j++) {
if (g6data.value[j].id === tableKey){ if (g6data.value[j].id === tableKey){
@ -647,13 +685,15 @@ watch(
if (!hasRelation){ if (!hasRelation){
g6data.value[j].attrs[k].relation.push({ g6data.value[j].attrs[k].relation.push({
key: key, key: key,
nodeId: nodeId nodeId: nodeId,
endArrow: endArrow
}) })
} }
}else { }else {
g6data.value[j].attrs[k].relation = [{ g6data.value[j].attrs[k].relation = [{
key: key, key: key,
nodeId: nodeId nodeId: nodeId,
endArrow: endArrow
}] }]
} }
} }

Loading…
Cancel
Save