Browse Source

yangshi

small-tupu
菅振宇 6 months ago
parent
commit
9bf9872cfd
  1. 632
      gyxtp/src/view/graphPageCopy0926.vue

632
gyxtp/src/view/graphPageCopy0926.vue

@ -175,6 +175,22 @@
</div>
<div class="selectListInfo"
style="z-index: 2000;
max-height:35vw;
border-radius: 2px;
padding: 5px 0;
background-color: rgba(76,100,233,0.3) ;position:absolute;left: 5vw;top: 4vw;font-size: 0.9vw;overflow-y: scroll;margin-left: 1vw;margin-right: 1vw;">
<div class="flow-tree" :class="{ 'flow-tree-active': i === currentGroup }" v-for="i in [0,1,2]" style="padding: 0vw 2vw;" @click="changeGroup(i)">
<span class="custom-tree-node" style="display: flex;flex-direction: row;">
<div class="lineInfo" :class="{ 'lineInfo-active': i === currentGroup }" style="width: 0.2vw;height: 0.8vw; box-shadow: #FFFFFF 0px 0px 4px 1px;
background: rgb(255, 255, 255);display: inline-block;
margin-top: 0.6vw;margin-right: 0.5vw;"></div>
<div class="label1" style="color: #ffffff;font-size: 1.1vw;cursor: pointer;line-height: 2vw;">分组{{i}}</div>
</span>
</div>
</div>
<div class="graphContent">
<div :class="full ? 'full-screen' : 'show-box'">
@ -245,7 +261,7 @@ export default {
},
data() {
return {
currentGroup:1,
direction: "rtl",
// visGraph
visGraph: null,
@ -298,13 +314,17 @@ export default {
// lineUseTextPath: true,
defaultLineTextOffset_x: 2,
defaultLineTextOffset_y: -3,
// 使 center
layout: {
layoutName: 'tree',
from: 'top',
min_per_width: 350,
max_per_width: 370,
min_per_height: 10,
max_per_height: 20
layoutName: 'center', // 使 center
from: 'center', //
levelDistance: '3000,3000,3000,3000,3000,3000,3000,3000', //
nodeDistance: 10, //
min_per_width: 200, //
max_per_width: 100,
clockwise: true, //
startAngle: -Math.PI / 2, // -90°
preventOverlap: true //
}
},
currentNode: {}, //
@ -385,6 +405,10 @@ export default {
}
},
methods: {
changeGroup(groupId){
this.currentGroup = groupId
this.getInfo()
},
onNodeCollapse(node, e) {
this.$refs.graphRef.refresh();
},
@ -800,42 +824,42 @@ export default {
switch (levelNum) {
case 0:
color = 'rgb(227,203,0)';
fontSize = '70px';
fontSize = '200px';
fontColor = 'rgb(255,255,255)';
break;
case 1:
color = 'rgb(47,47,230)';
fontSize = '68px';
fontSize = '200px';
fontColor = 'rgb(255,255,255)';
break;
case 2:
color = 'rgb(255,138,0)';
fontSize = '50px';
fontSize = '200px';
fontColor = 'rgb(255,255,255)';
break;
case 3:
color = 'rgb(30,255,0)';
fontSize = '40px';
fontSize = '200px';
fontColor = 'rgb(0,0,0)';
break;
case 4:
color = 'rgb(248,143,248)';
fontSize = '32px';
fontSize = '200px';
fontColor = 'rgb(255,255,255)';
break;
case 5:
color = 'rgb(65,154,255)';
fontSize = '30px';
fontSize = '200px';
fontColor = 'rgb(255,255,255)';
break;
case 6:
color = 'rgb(0,228,255)';
fontSize = '28px';
fontSize = '200px';
fontColor = 'rgb(0,0,0)';
break;
default:
color = 'rgb(200,200,200)';
fontSize = '24px';
fontSize = '200px';
fontColor = 'rgb(255,255,255)';
}
@ -843,277 +867,299 @@ export default {
// groupId '1' Y
const y = groupId === '1' ? levelNum * -1400 : levelNum * 1400;
//
nodes.push({
id: node.id,
text: node.name,
data: {
docId: node.docId,
group: node.groupId
},
level: levelNum,
x: x,
y: y,
fixed: true,
width: 150,
height: 150,
color: color,
font: `normal ${fontSize} Arial`,
fontColor: fontColor,
expandHolderPosition: 'right',
expanded: true,
styleClass:this.getNodeClass(node.name),
});
if (node.groupId==this.currentGroup || node.docLeve=="0"){
//
nodes.push({
id: node.id,
text: node.name,
data: {
docId: node.docId,
group: node.groupId
},
level: levelNum,
// x: x,
// y: y,
// fixed: true,
width: 150,
height: 150,
color: color,
font: `normal ${fontSize} Arial`,
fontColor: fontColor,
expandHolderPosition: 'right',
expanded: true,
styleClass:this.getNodeClass(node.name),
});
}
});
});
});
}
// - 线
Object.keys(isolatedNodesByGroupAndLevel).sort().forEach(groupId => {
const groupData = isolatedNodesByGroupAndLevel[groupId];
const groupOffsetX = groupId === '0' ? -10200 : groupId === '1' ? 0 : 10200;
Object.keys(groupData).sort().forEach(level => {
const levelNodes = groupData[level];
const levelNum = parseInt(level);
// Y
const y = groupId === '1' ? levelNum * -1400 : levelNum * 1400;
//
const levelGroupKey = `${levelNum}_${groupId}`;
// docId
const sortedIsolatedNodes = levelNodes.sort((a, b) => a.docId - b.docId);
if (!levelGroupPositions[levelGroupKey] || !levelGroupPositions[levelGroupKey].hasConnectedNodes) {
//
const totalWidth = sortedIsolatedNodes.length * 200;
const startX = groupOffsetX - totalWidth / 2;
//
sortedIsolatedNodes.forEach((node, index) => {
//
let color, fontSize, fontColor;
switch (levelNum) {
case 0:
color = 'rgb(227,203,0)';
fontSize = '70px';
fontColor = 'rgb(255,255,255)';
break;
case 1:
color = 'rgb(47,47,230)';
fontSize = '68px';
fontColor = 'rgb(255,255,255)';
break;
case 2:
color = 'rgb(255,138,0)';
fontSize = '50px';
fontColor = 'rgb(255,255,255)';
break;
case 3:
color = 'rgb(30,255,0)';
fontSize = '40px';
fontColor = 'rgb(0,0,0)';
break;
case 4:
color = 'rgb(248,143,248)';
fontSize = '32px';
fontColor = 'rgb(255,255,255)';
break;
case 5:
color = 'rgb(65,154,255)';
fontSize = '30px';
fontColor = 'rgb(255,255,255)';
break;
case 6:
color = 'rgb(0,228,255)';
fontSize = '28px';
fontColor = 'rgb(0,0,0)';
break;
default:
color = 'rgb(200,200,200)';
fontSize = '24px';
fontColor = 'rgb(255,255,255)';
}
const x = startX + index * 200;
nodes.push({
id: node.id,
text: node.name,
data: {
docId: node.docId,
group: node.groupId
},
x: x,
y: y,
fixed: true,
width: 150,
height: 150,
color: color,
font: `normal ${fontSize} Arial`,
fontColor: fontColor,
styleClass:this.getNodeClass(node.name),
});
});
} else {
//
const positionInfo = levelGroupPositions[levelGroupKey];
//
const leftNodes = [];
const rightNodes = [];
sortedIsolatedNodes.forEach((node, index) => {
if (index % 2 === 0) {
leftNodes.push(node); //
} else {
rightNodes.push(node); //
}
});
//
let currentLeftX = positionInfo.leftAvailableX;
for (let i = leftNodes.length - 1; i >= 0; i--) {
const node = leftNodes[i];
//
let color, fontSize, fontColor;
switch (levelNum) {
case 0:
color = 'rgb(227,203,0)';
fontSize = '70px';
fontColor = 'rgb(255,255,255)';
break;
case 1:
color = 'rgb(47,47,230)';
fontSize = '68px';
fontColor = 'rgb(255,255,255)';
break;
case 2:
color = 'rgb(255,138,0)';
fontSize = '50px';
fontColor = 'rgb(255,255,255)';
break;
case 3:
color = 'rgb(30,255,0)';
fontSize = '40px';
fontColor = 'rgb(0,0,0)';
break;
case 4:
color = 'rgb(248,143,248)';
fontSize = '32px';
fontColor = 'rgb(255,255,255)';
break;
case 5:
color = 'rgb(65,154,255)';
fontSize = '30px';
fontColor = 'rgb(255,255,255)';
break;
case 6:
color = 'rgb(0,228,255)';
fontSize = '28px';
fontColor = 'rgb(0,0,0)';
break;
default:
color = 'rgb(200,200,200)';
fontSize = '24px';
fontColor = 'rgb(255,255,255)';
}
nodes.push({
id: node.id,
text: node.name,
data: {
docId: node.docId,
group: node.groupId
},
x: currentLeftX,
y: y,
fixed: true,
width: 150,
height: 150,
color: color,
font: `normal ${fontSize} Arial`,
fontColor: fontColor,
styleClass:this.getNodeClass(node.name),
});
currentLeftX -= 200;
}
//
let currentRightX = positionInfo.rightAvailableX;
rightNodes.forEach(node => {
//
let color, fontSize, fontColor;
switch (levelNum) {
case 0:
color = 'rgb(227,203,0)';
fontSize = '70px';
fontColor = 'rgb(255,255,255)';
break;
case 1:
color = 'rgb(47,47,230)';
fontSize = '68px';
fontColor = 'rgb(255,255,255)';
break;
case 2:
color = 'rgb(255,138,0)';
fontSize = '50px';
fontColor = 'rgb(255,255,255)';
break;
case 3:
color = 'rgb(30,255,0)';
fontSize = '40px';
fontColor = 'rgb(0,0,0)';
break;
case 4:
color = 'rgb(248,143,248)';
fontSize = '32px';
fontColor = 'rgb(255,255,255)';
break;
case 5:
color = 'rgb(65,154,255)';
fontSize = '30px';
fontColor = 'rgb(255,255,255)';
break;
case 6:
color = 'rgb(0,228,255)';
fontSize = '28px';
fontColor = 'rgb(0,0,0)';
break;
default:
color = 'rgb(200,200,200)';
fontSize = '24px';
fontColor = 'rgb(255,255,255)';
}
nodes.push({
id: node.id,
text: node.name,
data: {
docId: node.docId,
group: node.groupId
},
x: currentRightX,
y: y,
fixed: true,
width: 150,
height: 150,
color: color,
font: `normal ${fontSize} Arial`,
fontColor: fontColor,
styleClass:this.getNodeClass(node.name),
});
currentRightX += 200;
});
}
});
});
// Object.keys(isolatedNodesByGroupAndLevel).sort().forEach(groupId => {
// const groupData = isolatedNodesByGroupAndLevel[groupId];
// const groupOffsetX = groupId === '0' ? -10200 : groupId === '1' ? 0 : 10200;
//
// Object.keys(groupData).sort().forEach(level => {
// const levelNodes = groupData[level];
// const levelNum = parseInt(level);
//
// // Y
// const y = groupId === '1' ? levelNum * -1400 : levelNum * 1400;
//
// //
// const levelGroupKey = `${levelNum}_${groupId}`;
//
// // docId
// const sortedIsolatedNodes = levelNodes.sort((a, b) => a.docId - b.docId);
//
// if (!levelGroupPositions[levelGroupKey] || !levelGroupPositions[levelGroupKey].hasConnectedNodes) {
// //
// const totalWidth = sortedIsolatedNodes.length * 200;
// const startX = groupOffsetX - totalWidth / 2;
//
// //
// sortedIsolatedNodes.forEach((node, index) => {
// //
// let color, fontSize, fontColor;
// switch (levelNum) {
// case 0:
// color = 'rgb(227,203,0)';
// fontSize = '70px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 1:
// color = 'rgb(47,47,230)';
// fontSize = '68px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 2:
// color = 'rgb(255,138,0)';
// fontSize = '50px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 3:
// color = 'rgb(30,255,0)';
// fontSize = '40px';
// fontColor = 'rgb(0,0,0)';
// break;
// case 4:
// color = 'rgb(248,143,248)';
// fontSize = '32px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 5:
// color = 'rgb(65,154,255)';
// fontSize = '30px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 6:
// color = 'rgb(0,228,255)';
// fontSize = '28px';
// fontColor = 'rgb(0,0,0)';
// break;
// default:
// color = 'rgb(200,200,200)';
// fontSize = '24px';
// fontColor = 'rgb(255,255,255)';
// }
//
// const x = startX + index * 200;
//
// if (node.groupId==this.currentGroup || node.docLeve=="0"){
// //
// nodes.push({
// id: node.id,
// text: node.name,
// data: {
// docId: node.docId,
// group: node.groupId
// },
// level: levelNum,
// // x: x,
// // y: y,
// // fixed: true,
// width: 150,
// height: 150,
// color: color,
// font: `normal ${fontSize} Arial`,
// fontColor: fontColor,
// expandHolderPosition: 'right',
// expanded: true,
// styleClass:this.getNodeClass(node.name),
// });
// }
// });
// } else {
// //
// const positionInfo = levelGroupPositions[levelGroupKey];
//
// //
// const leftNodes = [];
// const rightNodes = [];
//
// sortedIsolatedNodes.forEach((node, index) => {
// if (index % 2 === 0) {
// leftNodes.push(node); //
// } else {
// rightNodes.push(node); //
// }
// });
//
// //
// let currentLeftX = positionInfo.leftAvailableX;
// for (let i = leftNodes.length - 1; i >= 0; i--) {
// const node = leftNodes[i];
//
// //
// let color, fontSize, fontColor;
// switch (levelNum) {
// case 0:
// color = 'rgb(227,203,0)';
// fontSize = '70px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 1:
// color = 'rgb(47,47,230)';
// fontSize = '68px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 2:
// color = 'rgb(255,138,0)';
// fontSize = '50px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 3:
// color = 'rgb(30,255,0)';
// fontSize = '40px';
// fontColor = 'rgb(0,0,0)';
// break;
// case 4:
// color = 'rgb(248,143,248)';
// fontSize = '32px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 5:
// color = 'rgb(65,154,255)';
// fontSize = '30px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 6:
// color = 'rgb(0,228,255)';
// fontSize = '28px';
// fontColor = 'rgb(0,0,0)';
// break;
// default:
// color = 'rgb(200,200,200)';
// fontSize = '24px';
// fontColor = 'rgb(255,255,255)';
// }
//
// if (node.groupId==this.currentGroup || node.docLeve=="0"){
// //
// nodes.push({
// id: node.id,
// text: node.name,
// data: {
// docId: node.docId,
// group: node.groupId
// },
// level: levelNum,
// // x: x,
// // y: y,
// // fixed: true,
// width: 150,
// height: 150,
// color: color,
// font: `normal ${fontSize} Arial`,
// fontColor: fontColor,
// expandHolderPosition: 'right',
// expanded: true,
// styleClass:this.getNodeClass(node.name),
// });
// }
//
// currentLeftX -= 200;
// }
//
// //
// let currentRightX = positionInfo.rightAvailableX;
// rightNodes.forEach(node => {
// //
// let color, fontSize, fontColor;
// switch (levelNum) {
// case 0:
// color = 'rgb(227,203,0)';
// fontSize = '70px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 1:
// color = 'rgb(47,47,230)';
// fontSize = '68px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 2:
// color = 'rgb(255,138,0)';
// fontSize = '50px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 3:
// color = 'rgb(30,255,0)';
// fontSize = '40px';
// fontColor = 'rgb(0,0,0)';
// break;
// case 4:
// color = 'rgb(248,143,248)';
// fontSize = '32px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 5:
// color = 'rgb(65,154,255)';
// fontSize = '30px';
// fontColor = 'rgb(255,255,255)';
// break;
// case 6:
// color = 'rgb(0,228,255)';
// fontSize = '28px';
// fontColor = 'rgb(0,0,0)';
// break;
// default:
// color = 'rgb(200,200,200)';
// fontSize = '24px';
// fontColor = 'rgb(255,255,255)';
// }
//
// if (node.groupId==this.currentGroup || node.docLeve=="0"){
// //
// nodes.push({
// id: node.id,
// text: node.name,
// data: {
// docId: node.docId,
// group: node.groupId
// },
// level: levelNum,
// // x: x,
// // y: y,
// // fixed: true,
// width: 150,
// height: 150,
// color: color,
// font: `normal ${fontSize} Arial`,
// fontColor: fontColor,
// expandHolderPosition: 'right',
// expanded: true,
// styleClass:this.getNodeClass(node.name),
// });
// }
//
// currentRightX += 200;
// });
// }
// });
// });
// 线
lineList.forEach(line => {
@ -1831,4 +1877,30 @@ tr {
background-color: #fff;
width: 400px!important;
}
.label1 {
font-size: 1vw;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
display: inline-block;
width: 14vw;
height: 2vw;
}
.lineInfo.lineInfo-active {
background: #0012ff !important;
box-shadow: rgb(255, 255, 255) 0px 0px 4px 1px;
}
.flow-tree {
/* 默认样式(可选) */
transition: background-color 0.3s ease, font-weight 0.3s ease;
}
.flow-tree-active {
background-color: rgba(255, 255, 255, 0.21);
font-weight: 600;
}/* 选中时的高亮样式(优先级更高) */
/* hover:鼠标悬停时 */
.flow-tree:hover {
background-color: rgba(255, 255, 255, 0.1);
}
</style>
Loading…
Cancel
Save