From 7917c76b02b213a5fa805a6e2c9936167fae5cc8 Mon Sep 17 00:00:00 2001 From: wente <329538422@qq.com> Date: 星期一, 14 十月 2024 09:23:29 +0800 Subject: [PATCH] 时序图 --- web/src/views/modules/taskReliability/RBD-edit-img.vue | 674 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 437 insertions(+), 237 deletions(-) diff --git a/web/src/views/modules/taskReliability/RBD-edit-img.vue b/web/src/views/modules/taskReliability/RBD-edit-img.vue index 7a07431..b92bdab 100644 --- a/web/src/views/modules/taskReliability/RBD-edit-img.vue +++ b/web/src/views/modules/taskReliability/RBD-edit-img.vue @@ -16,8 +16,9 @@ </el-form-item> <el-form-item> <el-button type="primary" @click="saveDiagram()">鏆傚瓨</el-button> - <el-button type="primary" @click="analyzeDiagram()">淇濆瓨</el-button> + <el-button type="primary" @click="analyzeDiagram()">鎻愪氦</el-button> <el-button type="primary" @click="clearDiagram()">娓呯┖鍥惧舰</el-button> + <el-button type="primary" @click="layoutDiagram()">涓�閿帓鐗�</el-button> <el-button @click="leftAlign()"> <i style="font-size: 1rem;" class="wt-iconfont icon-zuoduiqi"></i> </el-button> @@ -42,7 +43,7 @@ <el-button @click="redo()">閲嶅仛</el-button> </el-form-item> <el-form-item> - <zt-button type="delete" @click="deleteCompment()" /> + <zt-button type="delete" @click="deleteCompment()"/> </el-form-item> </el-form> <div id="containerImg" style="border: 1px solid #EAEBEE;border-radius: 6px; @@ -63,6 +64,8 @@ import {setHartBeat} from '@/commonJS/common'; import Cookies from 'js-cookie' import {getUUID} from '../../../../packages/utils' + // import Mousetrap from 'mousetrap' + // var Mousetrap = require('mousetrap'); // import RBDDefault from './RBD-default.json' export default { @@ -100,13 +103,13 @@ }, "size": { "width": 60, - "height": 60 + "height": 40 }, "attrs": { "text": { "refY": "100%", "textVerticalAnchor": "top", - "text": "start", + "text": "", "refY2": 4 }, "image": { @@ -223,13 +226,13 @@ }, "size": { "width": 60, - "height": 60 + "height": 40 }, "attrs": { "text": { "refY": "100%", "textVerticalAnchor": "top", - "text": "dashedBox", + "text": "", "refY2": 4 }, "image": { @@ -257,7 +260,7 @@ "r": 4, "magnet": true, "stroke": "#5F95FF", - "strokeWidth": 1, + "fill": "#fff", "style": { "visibility": "hidden" @@ -345,13 +348,13 @@ }, "size": { "width": 60, - "height": 60 + "height": 40 }, "attrs": { "text": { "refY": "100%", "textVerticalAnchor": "top", - "text": "end", + "text": "", "refY2": 4 }, "image": { @@ -465,39 +468,43 @@ "shape": "edge", "id": "66c81c68-0827-4a3c-8343-e2c453d3e9e7", "router": { - "name": "manhattan" + "name": "manhattan", + "args": { + "startDirections": ["right"], + "endDirections": ["left"] + } }, "connector": { "name": "rounded" }, "source": { - "cell": "10000", - "port": "right1" + "cell": "10000" }, "target": { - "cell": 15000, - "port": "left1" + "cell": 15000 }, - "zIndex": 4 + "zIndex": -1 }, { "shape": "edge", "id": "a0f3cf90-6d37-4ee0-a254-90b4ec2b6a7f", "router": { - "name": "manhattan" + "name": "manhattan", + "args": { + "startDirections": ["right"], + "endDirections": ["left"] + } }, "connector": { "name": "rounded" }, "source": { - "cell": 15000, - "port": "right1" + "cell": 15000 }, "target": { - "cell": "20000", - "port": "left1" + "cell": "20000" }, - "zIndex": 5 + "zIndex": -1 } ] } @@ -507,6 +514,8 @@ }, data() { return { + nodeX: '', + nodeY: '', isFirstLoad: true, hasMoveNode: false, hasMoveSingleNode: null, @@ -518,19 +527,19 @@ timer: null, imagesList: [ { - imgPath: 'parallel', - imgName: 'parallel', - nodeType: 'parallel', + imgPath: 'switch', + imgName: '', + nodeType: 'switch', imgWidth: 50, imgHeight: 50, imgId: '9', data: {} }, - {imgPath: 'vote', imgName: 'vote', nodeType: 'vote', imgWidth: 50, imgHeight: 50, imgId: '6', data: {}}, + {imgPath: 'vote', imgName: '', nodeType: 'vote', imgWidth: 50, imgHeight: 50, imgId: '6', data: {}}, { - imgPath: 'switch', - imgName: 'switch', - nodeType: 'switch', + imgPath: 'parallel', + imgName: '', + nodeType: 'parallel', imgWidth: 50, imgHeight: 50, imgId: '5', @@ -538,22 +547,13 @@ }, { imgPath: 'bridgeConnection', - imgName: 'bridgeConnection', + imgName: '', nodeType: 'bridgeConnection', imgWidth: 50, imgHeight: 50, imgId: '10', data: {} }, - // { - // imgPath: 'dashedBox', - // imgName: 'dashedBox', - // nodeType: 'dashedBox', - // imgWidth: 60, - // imgHeight: 60, - // imgId: '10000', - // data: {} - // }, ], imagesList2: [], nodeType: '', @@ -584,10 +584,12 @@ productType: '', voteNum: '', repairMttcr: '', - repairMttcrOther: '', + repairMttcrOtherParams2: '', + repairMttcrOtherParams3: '', repairDistribType: '', reliabDistribType: '', - taskMtbcfOther: '', + taskMtbcfOtherParams2: '', + taskMtbcfOtherParams3: '', isRepair: 0, taskMtbcf: '', numberInputValue: '', @@ -610,7 +612,13 @@ stroke: '#5F95FF', strokeWidth: 1, connector: 'rounded', - router: 'manhattan', + router: { + name: 'manhattan', + args: { + startDirections: ['top', 'bottom'], // 浠庝笅鏂瑰紑濮� + endDirections: ['left'], // 鍚戝乏鏂圭粨鏉� + }, + }, label: '', nodeStroke: '#5F95FF', nodeStrokeWidth: 1, @@ -813,6 +821,10 @@ connecting: { router: { name: 'manhattan', + args: { + startDirections: ['top', 'bottom'], // 浠庝笅鏂瑰紑濮� + endDirections: ['left'], // 鍚戝乏鏂圭粨鏉� + }, }, connector: { name: 'rounded', @@ -823,6 +835,7 @@ anchor: 'center', connectionPoint: 'anchor', allowBlank: false, + allowLoop: false, // 鏄惁鍏佽鍒涘缓寰幆杩炵嚎锛屽嵆杈圭殑璧峰鑺傜偣鍜岀粓姝㈣妭鐐逛负鍚屼竴鑺傜偣锛岄粯璁や负 true snap: { radius: 20, }, @@ -830,9 +843,10 @@ return new Shape.Edge({ attrs: { line: { + // sourceMarker: 'block', // 瀹炲績绠ご stroke: '#A2B1C3', strokeWidth: 2, - targetMarker: {fill: 'none'} + targetMarker: null } }, labels: [{ @@ -895,7 +909,7 @@ getDropNode: (node) => { const {width, height} = node.size() if (node.getData().type && node.getData().nodeType === 'dashedBox') { - return node.clone().size(60, 60) + return node.clone().size(60, 40) } if (node.getData().type && node.getData().type === 'imageNodes2') { return node.clone({keepId: true}) @@ -1000,12 +1014,15 @@ reliabDistribType: item.reliabDistribType ? item.reliabDistribType : 1, taskMtbcf: item.taskMtbcf, - taskMtbcfOther: item.taskMtbcfOther, + taskMtbcfOther2: item.taskMtbcfOtherParams2, + taskMtbcfOther3: item.taskMtbcfOtherParams3, isRepair: item.isRepair, repairDistribType: item.repairDistribType ? item.repairDistribType : 1, repairMttcr: item.repairMttcr, - repairMttcrOther: item.repairMttcrOther, + repairMttcrOther2: item.repairMttcrOtherParams2, + repairMttcrOther3: item.repairMttcrOtherParams3, + successRate: item.successRate, imgHeight: item.imgHeight, imgWidth: item.imgWidth, @@ -1056,6 +1073,42 @@ stencil.load(imageNodes, 'group1') stencil.load(imageNodes2, 'group2') +// konami code! + // 鍗曞嚮node鑺傜偣 + // this.graph.on('node:click', ({ e, x, y, node, view}) => { + // Mousetrap.bind('up', function(e) { + // e.preventDefault(); + // node.getBBox().x + // node.getBBox().y + // setTimeout(()=>{ + // node.position(node.getBBox().x,node.getBBox().y -0.5) + // console.log(x,y,'鎸変笅浜嗏啈閿� up'); + // },100) + // }) + // Mousetrap.bind('down', function(e) { + // e.preventDefault(); + // setTimeout(()=>{ + // node.position(node.getBBox().x,node.getBBox().y+0.5) + // console.log(x,y,'鎸変笅浜嗏啌閿� down'); + // },100) + // + // }) + // Mousetrap.bind('left', function(e) { + // e.preventDefault(); + // setTimeout(()=>{ + // node.position(node.getBBox().x-0.5,node.getBBox().y) + // console.log(x,y,'鎸変笅浜嗏啇閿� left'); + // },100) + // + // }) + // Mousetrap.bind('right', function(e) { + // e.preventDefault(); + // setTimeout(()=>{ + // node.position(node.getBBox().x+0.5,node.getBBox().y) + // console.log(x,y,'鎸変笅浜嗏啋閿� right'); + // },100) + // }) + // }) this.graph.bindKey(['meta+c', 'ctrl+c'], () => { const cells = this.graph.getSelectedCells() if (cells.length) { @@ -1106,7 +1159,7 @@ }) this.graph.on('blank:click', ({cell}) => { - this.reset() + // this.reset() // this.type.value = "grid" this.type = 'grid' // this.id = cell.id @@ -1158,20 +1211,18 @@ }) //鍗曞嚮杈硅妭鐐� this.graph.on('edge:click', ({edge}) => { - this.reset() - edge.attr('line/stroke', 'orange') - edge.prop('labels/0', { - attrs: { - body: { - stroke: 'orange', - }, - }, + // this.reset() + // edge.attr('line/stroke', 'orange') + // edge.prop('labels/0', { + // attrs: { + // body: { + // stroke: 'orange', + // }, + // }, + // + // }) + }) - }) - }) - // 鍗曞嚮node鑺傜偣 - this.graph.on('node:click', ({node}) => { - }) // 鎺у埗杩炴帴妗╂樉绀�/闅愯棌 this.graph.on('node:delete', ({view, e}) => { e.stopPropagation() @@ -1204,57 +1255,57 @@ }) }) - this.graph.on('node:mouseenter', ({node}) => { - const container = document.getElementById('containerImg') - const ports = container.querySelectorAll( - '.x6-port-body', - ) - this.showPorts(ports, true) - }) + // this.graph.on('node:mouseenter', ({node}) => { + // const container = document.getElementById('containerImg') + // const ports = container.querySelectorAll( + // '.x6-port-body', + // ) + // this.showPorts(ports, true) + // }) - this.graph.on('node:mouseleave', ({node}) => { - // if (node.hasTool('button-remove')) { - // node.removeTool('button-remove') - // } - const container = document.getElementById('containerImg') - const ports = container.querySelectorAll( - '.x6-port-body', - ) - this.showPorts(ports, false) - }) + // this.graph.on('node:mouseleave', ({node}) => { + // // if (node.hasTool('button-remove')) { + // // node.removeTool('button-remove') + // // } + // const container = document.getElementById('containerImg') + // const ports = container.querySelectorAll( + // '.x6-port-body', + // ) + // this.showPorts(ports, false) + // }) - this.graph.on('edge:mouseenter', ({cell}) => { - // alert(123) - cell.addTools([ - { - name: 'source-arrowhead', - }, - { - name: 'target-arrowhead', - args: { - attrs: { - fill: 'red', - }, - }, - }, - { - name: 'segments', - args: {snapRadius: 20, attrs: {fill: '#444'}} - }, - ]) - }) - - this.graph.on('edge:mouseleave', ({cell}) => { - cell.removeTools() - }) + // this.graph.on('edge:mouseenter', ({cell}) => { + // // alert(123) + // cell.addTools([ + // { + // name: 'source-arrowhead', + // }, + // { + // name: 'target-arrowhead', + // args: { + // attrs: { + // fill: 'red', + // }, + // }, + // }, + // { + // name: 'segments', + // args: {snapRadius: 20, attrs: {fill: '#444'}} + // }, + // ]) + // }) + // + // this.graph.on('edge:mouseleave', ({cell}) => { + // cell.removeTools() + // }) await this.getDiagram(this.dataForm.id) }, - showPorts(ports, show) { - for (let i = 0, len = ports.length; i < len; i = i + 1) { - ports[i].style.visibility = show ? 'visible' : 'hidden' - } - }, + // showPorts(ports, show) { + // for (let i = 0, len = ports.length; i < len; i = i + 1) { + // ports[i].style.visibility = show ? 'visible' : 'hidden' + // } + // }, reset() { this.graph.drawBackground({color: '#fff'}) const nodes = this.graph.getNodes() @@ -1357,7 +1408,7 @@ }) return false }) - }else if (this.isMultipleBrach(node)) { + } else if (this.isMultipleBrach(node)) { //鎻愮ず鏄惁瑕佸垹闄� this.$confirm('鏄惁鍒犻櫎璇ヨ妭鐐�?', '鎻愮ず', { confirmButtonText: '纭畾', @@ -1385,7 +1436,7 @@ }) return false }) - }else { + } else { //鎻愮ず涓嶈兘鍒犻櫎 this.$message({message: '璇ユ潯绾胯矾涓婂彧鏈夎鑺傜偣锛屾棤娉曞垹闄�', type: 'warning'}) return false; // 鍙栨秷鎿嶄綔 @@ -1402,45 +1453,81 @@ }, async saveDiagram() { console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()') - const nodes = this.graph.getNodes() - let nodeArr2 = [] - // 妫�鏌ラ櫎褰撳墠鑺傜偣涔嬪鐨勬墍鏈夎妭鐐圭殑鍖呭洿妗嗘槸鍚︾浉浜� - for (const node of nodes) { - console.log(node, 'saveDiagram node') - if (node.getData().nodeType == 'node' && node.getData().productType != 'product_xdy' && node.getData().dataId) { - nodeArr2.push(node.getData().dataId) - } - } - this.dataForm.nodeArr = nodeArr2 + // 鑾峰彇鎵�鏈夊瓙鑺傜偣 + this.getNodeArr() this.dataForm.content = JSON.stringify(this.graph.toJSON()) this.dataForm.urlPref = window.SITE_CONFIG['apiURL'] console.log(this.dataForm, 'dataFrom') await this.$http[this.dataForm.id === null ? 'post' : 'put'](`/taskReliability/ModelLine/`, this.dataForm).then(async res => { if (res.msg === 'success') { + this.$emit('refreshDataList') this.$alert('淇濆瓨鎴愬姛', '鎻愮ず', { confirmButtonText: '纭畾' }) } }) }, - async analyzeDiagram() { - console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()') + getNodeArr() { const nodes = this.graph.getNodes() let nodeArr2 = [] // 妫�鏌ラ櫎褰撳墠鑺傜偣涔嬪鐨勬墍鏈夎妭鐐圭殑鍖呭洿妗嗘槸鍚︾浉浜� for (const node of nodes) { - if (node.getData().nodeType === 'node' && node.getData().productType !== 'product_xdy' && node.getData().dataId) { + console.log(node, 'saveDiagram node') + if (node.getData().nodeType == 'node' && node.getData().dataId) { nodeArr2.push(node.getData().dataId) } } this.dataForm.nodeArr = nodeArr2 + }, + async analyzeDiagram() { + console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()') + // 妫�鏌ラ櫎褰撳墠鑺傜偣涔嬪鐨勬墍鏈夎妭鐐圭殑鍖呭洿妗嗘槸鍚︾浉浜� + // 鑾峰彇鎵�鏈夊瓙鑺傜偣 + this.getNodeArr() + const nodes = this.graph.getNodes() + for (const node of nodes) { + if (node.getData().nodeType === 'dashedBox') { + this.$message({message: '璇ユā鍨嬩腑瀛樺湪铏氭锛屾棤娉曚繚瀛�', type: 'warning'}) + return false; // 鍙栨秷娣诲姞鑺傜偣鎿嶄綔 + } + if (node.getData().nodeType === 'vote') { + const edges = this.graph.getConnectedEdges(node); + if (node.getData().voteNum >= edges.length) { + this.$message({message: '琛ㄥ喅鏁伴噺涓嶈兘楂樹簬璇ヨ妭鐐圭殑杩涚嚎鏁伴噺', type: 'warning'}) + return false; // 鍙栨秷娣诲姞鑺傜偣鎿嶄綔 + } + } + } this.dataForm.content = JSON.stringify(this.graph.toJSON()) this.dataForm.urlPref = window.SITE_CONFIG['apiURL'] await this.$http['post'](`/taskReliability/ModelLine/analyze`, this.dataForm).then(async res => { if (res.msg === 'success') { + this.$emit('refreshDataList') this.$alert('瑙f瀽鎴愬姛', '鎻愮ず', { confirmButtonText: '纭畾' }) + } + }) + }, + async layoutDiagram() { + console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()') + this.dataForm.content = JSON.stringify(this.graph.toJSON()) + this.dataForm.urlPref = window.SITE_CONFIG['apiURL'] + await this.$http['post'](`/taskReliability/ModelLine/layout`, this.dataForm).then(async res => { + if (res.msg === 'success') { + // this.$emit('refreshDataList') + // this.$alert('瑙f瀽鎴愬姛', '鎻愮ず', { + // confirmButtonText: '纭畾' + // }) + console.log(res.data, 'layoutDiagram res.data') + this.dataForm.content = res.data.content + console.log(this.dataForm.content, 'layoutDiagram dataForm.content') + this.diagramJson = JSON.parse(this.dataForm.content) + this.graph.fromJSON(this.diagramJson) + this.isFirstLoad = false; + // console.log(this.diagramJson.cells.length, 'this.diagramJson.cells.length') + + this.graph.positionContent('left') } }) }, @@ -1608,11 +1695,6 @@ centerX = graphNode.position().x + graphNode.getBBox().width / 2 centerY = graphNode.position().y + graphNode.getBBox().height / 2 let result = this.addNodeAndConnect(graphNode, dragNode, centerX, centerY) - if (!result) { - dragNode.remove() - this.$message({message: '娌℃湁瓒冲鐨勭┖闂存斁缃鑺傜偣锛岃鎵╁ぇ鍓╀綑绌洪棿', type: 'warning'}) - return - } let startPort = 'right1' let endPort = 'left1' @@ -1621,9 +1703,13 @@ endPort = 'top1' } - inEdges[0].target = {cell: result.newStartNode.id, port: endPort} - outEdges[0].source = {cell: result.newEndNode.id, port: startPort} + inEdges[0].target = {cell: result.newStartNode.id} + outEdges[0].source = {cell: result.newEndNode.id} graphNode.remove() + if (!result.canPlace) { +//璋冪敤鑷姩鎺掔増 + this.layoutDiagram() + } } } else { //骞惰缁撴瀯 const graphNodeStartNodeId = graphNode.getData().startNodeId // 鑾峰彇鐢诲竷涓婂師鏈夎妭鐐圭殑寮�濮婭D @@ -1648,23 +1734,37 @@ pointXY.maxY + offHeight / 2 + 30 : pointXY.minY - offHeight / 2 - 30 let result = this.addNodeAndConnect(null, dragNode, minX, centerY) - if (!result) { - dragNode.remove() - this.$message({message: '娌℃湁瓒冲鐨勭┖闂存斁缃鑺傜偣锛岃鎵╁ぇ鍓╀綑绌洪棿', type: 'warning'}) - return + console.log(result, 'result111') + this.graph.addEdge({ + source: {cell: graphNodeStartNode}, + target: {cell: result.newStartNode}, + router: { + name: 'manhattan', + args: { + startDirections: ['top', 'bottom'], // 浠庝笅鏂瑰紑濮� + endDirections: ['left'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 + }) + this.graph.addEdge({ + source: {cell: result.newEndNode}, + target: {cell: graphNode}, + router: { + name: 'manhattan', + args: { + startDirections: ['right'], // 浠庝笅鏂瑰紑濮� + endDirections: ['top', 'bottom'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 + }) + if (!result.canPlace) { +//璋冪敤鑷姩鎺掔増 + this.layoutDiagram() } - this.graph.addEdge({ - source: {cell: graphNodeStartNode, port: 'right1'}, - target: {cell: result.newStartNode, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} - }) - this.graph.addEdge({ - source: {cell: result.newEndNode, port: 'right1'}, - target: {cell: graphNode, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} - }) } }, addNodeAndConnect(targetNode, dragNode, centerX, centerY) { // graphCell鏄敾甯冧笂鍘熸湁鐨勮妭鐐广�俤ragNode鏄綋鍓嶆嫋鎷界殑鑺傜偣 @@ -1678,7 +1778,7 @@ height = 60 } else if (dragNodeType === 'dashedBox') { width = 60 - height = 60 + height = 40 } else if (dragNodeType === 'bridgeConnection') { width = 550 height = 175 @@ -1688,17 +1788,24 @@ } leftTopX = centerX - width / 2 leftTopY = centerY - height / 2 + let canPlace = true; if (!this.canPlace(targetNode, dragNode, {leftTopX, leftTopY, width, height})) { - return false + canPlace = false } if (dragNodeType === 'node' || dragNodeType === 'dashedBox') { dragNode.position(leftTopX, leftTopY) - return {newStartNode: dragNode, newEndNode: dragNode} + return {newStartNode: dragNode, newEndNode: dragNode, canPlace: canPlace} } else if (dragNodeType === 'bridgeConnection') { - return this.createBridgeConnection(leftTopX, leftTopY, dragNode) + return { + ...this.createBridgeConnection(leftTopX, leftTopY, dragNode), + ...{canPlace: canPlace} + } } else { - return this.createParallelBrach(leftTopX, centerY, dragNode) + return { + ...this.createParallelBrach(leftTopX, centerY, dragNode), + ...{canPlace: canPlace} + } } }, // 鐩镐氦鐨勮竟 @@ -1719,7 +1826,7 @@ } else { centerX = dragNode.position().x + dragNode.getBBox().width / 2 centerY = source.position().y + source.getBBox().height / 2 - if (target.getData().nodeType === 'node') { + if (target.getData().nodeType === 'node' || target.getData().nodeType === 'dashedBox') { centerY = target.position().y + target.getBBox().height / 2 } } @@ -1730,14 +1837,14 @@ let endNode = this.graph.getCellById(endNodeId) if (startNode && endNode) { - let isRight = true; - let startPort = 'right1' - let endPort = 'left1' + let routerStart = ['right']; + let routerEnd = ['left']; if (this.isTopBottom(graphEdge)) { - startPort = 'bottom1' - endPort = 'top1' + routerStart = ['top', 'bottom']; + routerEnd = ['top', 'bottom']; } + let isRight = true; if (this.hasOtherLineToMyLine(graphEdge.id)) { let leftX = startNode.position().x + startNode.getBBox().width let rightX = endNode.position().x @@ -1746,29 +1853,48 @@ isRight = false } } - - let result = this.addNodeAndConnect(null, dragNode, centerX, centerY) - if (!result) { - dragNode.remove() - this.$message({message: '娌℃湁瓒冲鐨勭┖闂存斁缃鑺傜偣锛岃鎵╁ぇ鍓╀綑绌洪棿', type: 'warning'}) - return - } if (isRight) { - graphEdge.target = {cell: result.newStartNode.id, port: endPort} + if (endNode.getData()) { + if ("parallel,vote,bridge".indexOf(endNode.getData().nodeType) > -1) { + isRight = false + } + } + } + let result = this.addNodeAndConnect(null, dragNode, centerX, centerY) + + if (isRight) { + graphEdge.target = {cell: result.newStartNode.id} this.graph.addEdge({ - source: {cell: result.newEndNode, port: startPort}, - target: {cell: endNode, port: endPort}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: result.newEndNode}, + target: {cell: endNode}, + router: { + name: 'manhattan', + args: { + startDirections: routerStart, // 浠庝笅鏂瑰紑濮� + endDirections: routerEnd, // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) } else { this.graph.addEdge({ - source: {cell: startNode, port: startPort}, - target: {cell: result.newStartNode, port: endPort}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: startNode}, + target: {cell: result.newStartNode}, + router: { + name: 'manhattan', + args: { + startDirections: routerStart, // 浠庝笅鏂瑰紑濮� + endDirections: routerEnd, // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) - graphEdge.source = {cell: result.newEndNode.id, port: startPort} + graphEdge.source = {cell: result.newEndNode.id} + } + if (!result.canPlace) { + this.layoutDiagram() } // graphEdge.remove() } @@ -1800,34 +1926,41 @@ createParallelBrach(x, y, dragNode) { dragNode.position(x + 320, y - dragNode.size().height / 2) const connectNode = this.createConnectNode(x + 50, y) + this.createBrach(dragNode,connectNode,x,y-50) + this.createBrach(dragNode,connectNode,x,y+50) + + return {newStartNode: connectNode, newEndNode: dragNode} + }, + createBrach(dragNode,connectNode,x,y){ const dashedBox = this.createDashedBox(x + 150, y) dragNode.setData({startNodeId: connectNode.id}) this.graph.addEdge({ - source: {cell: connectNode, port: 'right1'}, - target: {cell: dashedBox, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: connectNode}, + target: {cell: dashedBox}, + router: { + name: 'manhattan', + args: { + startDirections: ['top','bottom'], // 浠庝笅鏂瑰紑濮� + endDirections: ['left'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) this.graph.addEdge({ - source: {cell: dashedBox, port: 'right1'}, - target: {cell: dragNode, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: dashedBox}, + target: {cell: dragNode}, + router: { + name: 'manhattan', + args: { + startDirections: ['right'], // 浠庝笅鏂瑰紑濮� + endDirections: ['top','bottom'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) - return {newStartNode: connectNode, newEndNode: dragNode} - /* this.graph.addEdge({ - source: {cell: startNode, port: 'right1'}, - target: {cell: connectNode, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} - }) - this.graph.addEdge({ - source: {cell: dragNode, port: 'right1'}, - target: {cell: endNode, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} - })*/ }, createBridgeConnection(x, y, dragNode) { console.log(x, y, 'leftX centerY') @@ -1835,11 +1968,37 @@ const rightTopDashedBox = this.createDashedBox(x + 380, y) const leftConnectNode = this.createConnectNode(x, y + 87) - const alignCenterDashedBox = this.createDashedBox(x + 210, y + 87) - const rightConnectNode = this.createBridgeNode(x + 530, y + 87) + const alignCenterDashedBox = this.createDashedBox(x + 209, y + 87) + const leftBottomDashedBox = this.createDashedBox(x + 40, y + 160) + const rightBottomDashedBox = this.createDashedBox(x + 380, y + 160) + let edgeTop = this.graph.addEdge({ + source: {cell: leftTopDashedBox}, + target: {cell: rightTopDashedBox}, + router: { + name: 'manhattan', + args: { + startDirections: ['right'], // 浠庝笅鏂瑰紑濮� + endDirections: ['left'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 + }) + let edgeBottom = this.graph.addEdge({ + source: {cell: leftBottomDashedBox}, + target: {cell: rightBottomDashedBox}, + router: { + name: 'manhattan', + args: { + startDirections: ['right'], // 浠庝笅鏂瑰紑濮� + endDirections: ['left'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 + }) - const leftBottomDashedBox = this.createDashedBox(x + 50, y + 160) - const rightBottomDashedBox = this.createDashedBox(x + 370, y + 160) + const rightConnectNode = this.createBridgeNode(x + 530, y + 87, leftConnectNode.id, edgeTop.id, edgeBottom.id) rightConnectNode.setData({startNodeId: leftConnectNode.id}) leftConnectNode.setData({endNodeId: rightConnectNode.id}) @@ -1856,55 +2015,84 @@ connector: {name: 'rounded'} })*/ this.graph.addEdge({ - source: {cell: leftConnectNode, port: 'right1'}, - target: {cell: leftTopDashedBox, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: leftConnectNode}, + target: {cell: leftTopDashedBox}, + router: { + name: 'manhattan', + args: { + startDirections: ['top', 'bottom'], + endDirections: ['left'], + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) this.graph.addEdge({ - source: {cell: leftConnectNode, port: 'right1'}, - target: {cell: leftBottomDashedBox, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} - }) - - let edgeTop = this.graph.addEdge({ - source: {cell: leftTopDashedBox, port: 'right1'}, - target: {cell: rightTopDashedBox, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} - }) - let edgeBottom = this.graph.addEdge({ - source: {cell: leftBottomDashedBox, port: 'right1'}, - target: {cell: rightBottomDashedBox, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: leftConnectNode}, + target: {cell: leftBottomDashedBox}, + router: { + name: 'manhattan', + args: { + startDirections: ['top', 'bottom'], // 浠庝笅鏂瑰紑濮� + endDirections: ['left'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) this.graph.addEdge({ - source: {cell: rightTopDashedBox, port: 'right1'}, - target: {cell: rightConnectNode, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: rightTopDashedBox}, + target: {cell: rightConnectNode}, + router: { + name: 'manhattan', + args: { + startDirections: ['right'], // 浠庝笅鏂瑰紑濮� + endDirections: ['top', 'bottom'], // 鍚戝乏鏂圭粨鏉� + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) this.graph.addEdge({ - source: {cell: rightBottomDashedBox, port: 'right1'}, - target: {cell: rightConnectNode, port: 'left1'}, - router: {name: 'manhattan'}, - connector: {name: 'rounded'} + source: {cell: rightBottomDashedBox}, + target: {cell: rightConnectNode}, + router: { + name: 'manhattan', + args: { + startDirections: ['right'], + endDirections: ['top', 'bottom'], + }, + }, + connector: {name: 'rounded'}, + zIndex: -1 }) this.graph.addEdge({ source: {cell: edgeTop}, - target: {cell: alignCenterDashedBox, port: 'top1'}, - router: {name: 'manhattan'}, + target: {cell: alignCenterDashedBox}, + router: { + name: 'manhattan', + args: { + startDirections: ['top', 'bottom'], // 浠庝笅鏂瑰紑濮� + endDirections: ['top', 'bottom'], // 鍚戝乏鏂圭粨鏉� + }, + }, connector: {name: 'rounded'}, + zIndex: -1 }) this.graph.addEdge({ - source: {cell: alignCenterDashedBox, port: 'bottom1'}, + source: {cell: alignCenterDashedBox}, target: {cell: edgeBottom}, - router: {name: 'manhattan'}, + router: { + name: 'manhattan', + args: { + startDirections: ['top', 'bottom'], // 浠庝笅鏂瑰紑濮� + endDirections: ['top', 'bottom'], // 鍚戝乏鏂圭粨鏉� + }, + }, connector: {name: 'rounded'}, + zIndex: -1 }) dragNode.remove() return {newStartNode: leftConnectNode, newEndNode: rightConnectNode} @@ -1915,7 +2103,7 @@ shape: 'image', // imageUrl: require('/public/modelImg/' + item.imgPath + '.png'), width: 60, - height: 60, + height: 40, id: dashId, data: { isSelfCreated: true, @@ -1930,7 +2118,7 @@ 'xlink:href': '/modelImg/dashedBox.svg', }, text: { - text: 'dashedBox', + text: '', fontSize: 14, refX: 0.5, refY: '100%', @@ -1966,7 +2154,7 @@ 'xlink:href': '/modelImg/connect.svg', }, text: { - text: 'connect', + text: '', fontSize: 14, refX: 0.5, refY: '100%', @@ -1980,18 +2168,19 @@ connectNode.position(x, y - connectNode.size().height / 2) return connectNode }, - createBridgeNode(x, y) { - const connectId = getUUID().toString() + createBridgeNode(x, y, connectId, edgeTopId, edgeBottomId) { const dragNodeId = getUUID().toString() let bridgeNode = this.graph.addNode({ shape: 'image', width: 30, height: 30, - id: connectId, + id: dragNodeId, data: { isSelfCreated: true, type: 'imageNodes', - endNodeId: dragNodeId, + startNodeId: connectId, + edgeTopId: edgeTopId, + edgeBottomId: edgeBottomId, dataId: '', nodeType: 'bridge', nodeTypeExt: '', @@ -2090,9 +2279,20 @@ return false }, isTopBottom(edge) { - if (edge.source.port === 'top1' || edge.source.port === 'bottom1' || edge.target.port === 'top1' || edge.target.port === 'bottom1') { + if (this.hasTopBottom(edge.getRouter().args.startDirections) && this.hasTopBottom(edge.getRouter().args.endDirections)) { return true } + return false + }, + hasTopBottom(object) { + let result = false + for (let a of object) { + if (a == "top" || a == "bottom") { + result = true + break + } + } + return result }, isMultipleBrach(node) { let outEdges = this.getOutLinesOfNode(node) -- Gitblit v1.9.1