Widget:搭档基因流程图
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@logicflow/core/dist/style/index.css" /> <script src="https://cdn.jsdelivr.net/npm/@logicflow/core/dist/logic-flow.js"></script>
<link rel="stylesheet" href="/lysk/MediaWiki:CustomNode.css?action=raw&ctype=text/css" /> <script src="/lysk/index.php?title=MediaWiki:CustomNode.js&action=raw&ctype=text/javascript"></script>
<body>
</body>
<script>
var graphData, graphModel, jsonData, partnerData;
var currentNodeId0,
currentNodeId1,
currentNodeId2,
currentNodeId3,
currentNodeId4;
var lf0, lf1, lf2, lf3, lf4;
var nodeOrders = [];
var showData = [];
getData(-1); // 获取json数据
async function getData(from) {
let allData = await $.getJSON(
`https://wiki.biligame.com/lysk/MediaWiki:.json?action=raw`
);
// let allData = await $.getJSON("./hundun.json");
partnerData = allData.allList;
if (from === -1) {
showData = partnerData.map((item) => 0);
}
jsonData = partnerData.map(
(item, index) => item.partnerList[showData[index]]
);
graphData = jsonData.map((item) => {
return item.graphData;
});
let htmlStr = "";
partnerData.forEach((item, index) => {
htmlStr += `
`;
});
$("#allIn")[0].innerHTML = htmlStr;
let arr = [];
// if (from === -1) {
arr = partnerData.map((item, index) => index);
// } else {
// arr.push(from);
// }
initLf(arr); // 渲染数据图
initCurrentNode(arr); // 处理当前节点样式
initGraph(arr); //初始化画布
initPartner(arr); // 初始化左侧搭档
initTopBox(arr); // 初始化顶部搭档选择
initTopName(arr); // 初始化顶部搭档姓名
startClick(arr);
}
function initLf(arr) {
arr.forEach((item) => {
window["lf" + item] = new LogicFlow({
container: document.querySelector("#container" + item),
edgeType: "partnerLine",
stopZoomGraph: true,
stopScrollGraph: true,
//stopMoveGraph: true,
adjustEdge: false,
adjustEdgeStartAndEnd: false,
adjustNodePosition: false,
hideAnchors: true,
nodeSelectedOutline: false,
hoverOutline: false,
nodeTextEdit: false,
edgeTextEdit: false,
textEdit: false,
});
//注册自定义节点
window["lf" + item].register(PartnerNodeBox);
window["lf" + item].register(PartnerLine);
window["lf" + item].setTheme({
arrow: {
offset: 0,
verticalLength: 0,
},
baseEdge: {
stroke: "#a2bcd7",
strokeWidth: 1,
},
});
window["lf" + item].render(graphData[item]); //渲染
graphModel = window["lf" + item].graphModel;
console.log("流程数据:", graphData[item]);
if (graphData.nodes && graphData.nodes.length > 0) {
initNodesOrder(graphData[item]);
}
});
}
function startClick(arr) {
arr.forEach((item) => {
window["lf" + item].on("node:click", (node) => {
console.log("节点数据:", node.data);
// 修改右侧内容
let oldId = window["currentNodeId" + item];
let oldNode = document.getElementById(oldId); //旧的当前节点
if (oldNode)
$(`#daDang${item} #${oldId}`)[0].classList.remove("active");
window["currentNodeId" + item] = node.data.id;
changeCurrentNode(); // 当前节点样式
showRightContent();
});
});
}
// 初始化
function initCurrentNode(arr) {
arr.forEach((item) => {
if (graphData[item].nodes && graphData[item].nodes.length > 0) {
window["currentNodeId" + item] = graphData[item].nodes[0].id;
}
});
changeCurrentNode(arr);
setTimeout(() => {
showRightContent();
}, 200);
}
// 修改选中节点样式
function changeCurrentNode() {
partnerData.forEach((item, index) => {
let name = window[`currentNodeId${index}`];
$(`#daDang${index} #${name}`)[0].classList.add("active");
});
}
function initPartner(arr) {
arr.forEach((item) => {
let htmlStr = `<img src="${jsonData[item].partnerUrl}"/>`;
$(`#daDang${item} .left-partner`)[0].innerHTML = htmlStr;
});
}
function initTopBox(arr) {
arr.forEach((personIndex) => {
let htmlStr = "";
partnerData[personIndex].partnerList.map((item, index) => {
if (index === showData[personIndex]) {
htmlStr += `
} else {
htmlStr += ` }
htmlStr += `
<img
src="${item.partnerHeadUrl}"
/>
});
$(`#dadang${personIndex} .top-partner`)[0].innerHTML = htmlStr;
$(`#dadang${personIndex} .top-box`).click(function () {
let index = $(this).index();
$(`#dadang${personIndex} .top-box`).removeClass("active");
$(this).addClass("active");
showData[personIndex] = index;
getData(personIndex);
window["lf" + personIndex].off("node:click", (node) => {});
});
});
}
function initTopName(arr) {
arr.forEach((personIndex) => {
let htmlStr = partnerData[personIndex].name;
$(`#dadang${personIndex} .top-name`)[0].innerHTML = htmlStr;
});
}
// 显示右侧内容
function showRightContent() {
partnerData.forEach((item, index) => {
if (window["currentNodeId" + index]) {
const currentNode = graphModel.getNodeModelById(
window["currentNodeId" + index]
);
let htmlStr = ` $(`#daDang${index} .right-container`)[0].innerHTML = htmlStr;
}
});
}
// 初始化节点顺序
function initNodesOrder(data) {
nodeOrders = data.nodes.map((item) => item.id);
}
function initGraph(arr) {
// 计算画布偏移和画布宽高
arr.forEach((item) => {
let minY = graphData[item].nodes[0].y,
maxY = graphData[item].nodes[0].y;
for (let i = 0; i < graphData[item].nodes.length; i++) {
let node = graphData[item].nodes[i];
minY = node.y < minY ? node.y : minY;
maxY = node.y > maxY ? node.y : maxY;
}
let transX =
($("#container" + item)[0].clientWidth < 420
? 420
: $("#container" + item)[0].clientWidth) /
2 -
graphData[item].nodes[0].x;
let transY = 100 - minY;
window["lf" + item].translate(0, -80);
let height = maxY - minY + 250;
$(`#container${item}>div`)[0].style.height = height + "px";
window["lf" + item].updateEditConfig({
stopMoveGraph: true,
});
});
}
</script>
<style>
div[id^="container"] {
width: 100%;
height: 100%;
overflow: auto;
}
div[id^="container"] > div {
min-height: 100%;
min-width: 300px;
}
.lf-graph {
background: transparent;
}
.lf-element-text {
display: none;
}
.desc-container {
padding: 30px 10px 0 30px;
background-image: url(https://patchwiki.biligame.com/images/lysk/d/db/2whq3zy81qiae1c0enr2wzgfzdxdvpw.png);
background-size: calc(100% + 20px) calc(100% + 16px);
background-position: center;
}
.desc-container > .name-line {
display: flex;
align-items: center;
gap: 20px;
}
.name-line > .gene-name {
color: #c7e6f7;
font-size: 18px;
letter-spacing: 1px;
}
.desc-container > .desc-line {
padding: 10px;
}
.desc-line > .effect-desc {
color: #c7e6f7;
font-size: 15px;
}
.desc-line > .text-desc {
color: #96979b;
font-size: 15px;
margin: 8px 0;
}
.desc-line > .effect-desc span {
color: #f5c74a;
}
.desc-line > .spend-coin {
margin: 50px calc((100% - 70px) / 2);
background: url(https://patchwiki.biligame.com/images/lysk/8/87/aqpjalt6vb47orq6ucsxgb6eucd7jsc.png);
width: 70px;
text-align: center;
color: #c7e6f7;
font-size: 16px;
}
.spend-coin img {
width: 18px;
margin-top: -4px;
}
.geneScrollbar {
scrollbar-width: thin;
scrollbar-color: #405369 transparent;
}
.geneScrollbar::-webkit-scrollbar {
width: 4px;
height: 4px;
}
.geneScrollbar::-webkit-scrollbar-thumb {
background: #405369;
border-radius: 2px;
}
.geneScrollbar::-webkit-scrollbar-track {
background: transparent;
}
.partnerGene.active {
background-image: url(https://patchwiki.biligame.com/images/lysk/8/80/9hxrjj6rbw33jopqagorglfmq5ccq4b.png);
background-repeat: no-repeat;
background-position: 11px -10px;
}
.partner-genes {
width: 100%;
display: flex;
flex-direction: row;
gap: 10px;
margin-top: 10px;
}
.partner-genes > .left-partner {
flex: 1;
min-width: 200px;
height: calc(100vh - 100px);
padding: 20px;
text-align: center;
}
.partner-genes > .left-container {
flex: 1;
min-width: 300px;
height: calc(100vh - 100px);
}
.partner-genes > .right-container {
flex: 1;
padding: 10px;
position: relative;
max-height: calc(100vh - 100px);
overflow: auto;
}
.top-name {
background: url(https://patchwiki.biligame.com/images/lysk/7/76/0ww8up3kow9gqm16w620606d7ev0r20.png)
no-repeat center left;
height: 50px;
color: #fff;
line-height: 3;
font-size: 20px;
padding-left: 15px;
margin-left: 20px;
margin-bottom: 10px;
}
.top-partner {
margin-left: 20px;
display: flex;
}
.top-box {
background: url(https://patchwiki.biligame.com/images/lysk/d/d8/okw16xv0enaj48grj99r9cpqskdmred.png)
no-repeat center center;
background-size: cover;
width: 105px;
height: 130px;
margin-right: 10px;
margin-bottom: 10px;
text-align: center;
color: #fbe1cb;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 14px;
cursor: pointer;
position: relative;
}
.top-box.active::after {
content: "";
background: url(https://patchwiki.biligame.com/images/lysk/3/3e/tva3qn9gxhuowp4lsylwte1lff3vxwj.png)
no-repeat center center;
display: block;
position: absolute;
width: 70px;
height: 120px;
left: 17px;
top: 0;
}
.top-box.active .headBox {
background: url(https://patchwiki.biligame.com/images/lysk/a/a7/g5smlk8elm0wn1swaffs4sluu5v158n.png)
no-repeat center center;
}
.headBox {
background: url(https://patchwiki.biligame.com/images/lysk/4/42/cy8jzfxyzuccn4oh59pcfh9xllpj5ou.png)
no-repeat center center;
width: 76px;
height: 76px;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
.headBox img {
object-fit: contain;
width: 80%;
height: 80%;
}
@media screen and (max-width: 768px) {
.partner-genes {
display: block !important;
}
.left-container {
width: 100%;
height: 100% !important;
margin-bottom: 10px;
}
.geneScrollbar {
overflow: hidden !important;
}
.desc-line > .spend-coin {
margin: 20px calc((100% - 70px) / 2) !important;
}
.partner-genes > .left-partner {
height: 100%;
}
}
</style>

沪公网安备 31011002002714 号