| | |
| | | group: 'left', |
| | | }, |
| | | ], |
| | | }, |
| | | initJson: { |
| | | "cells": [ |
| | | { |
| | | "position": { |
| | | "x": -600, |
| | | "y": 0 |
| | | }, |
| | | "size": { |
| | | "width": 60, |
| | | "height": 60 |
| | | }, |
| | | "attrs": { |
| | | "text": { |
| | | "refY": "100%", |
| | | "textVerticalAnchor": "top", |
| | | "text": "start", |
| | | "refY2": 4 |
| | | }, |
| | | "image": { |
| | | "xlink:href": "/modelImg/start.svg" |
| | | } |
| | | }, |
| | | "visible": true, |
| | | "shape": "image", |
| | | "id": "10000", |
| | | "data": { |
| | | "type": "imageNodes", |
| | | "endNodeId": "20000", |
| | | "dataId": "", |
| | | "nodeType": "start", |
| | | "nodeTypeExt": "", |
| | | "voteNum": "" |
| | | }, |
| | | "ports": { |
| | | "groups": { |
| | | "top": { |
| | | "position": { |
| | | "name": "top" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "right": { |
| | | "position": { |
| | | "name": "right" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "bottom": { |
| | | "position": { |
| | | "name": "bottom" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "left": { |
| | | "position": { |
| | | "name": "left" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "items": [ |
| | | { |
| | | "id": "top1", |
| | | "group": "top" |
| | | }, |
| | | { |
| | | "id": "right1", |
| | | "group": "right" |
| | | }, |
| | | { |
| | | "id": "bottom1", |
| | | "group": "bottom" |
| | | }, |
| | | { |
| | | "id": "left1", |
| | | "group": "left" |
| | | } |
| | | ] |
| | | }, |
| | | "zIndex": 1 |
| | | }, |
| | | { |
| | | "position": { |
| | | "x": 0, |
| | | "y": 0 |
| | | }, |
| | | "size": { |
| | | "width": 100, |
| | | "height": 60 |
| | | }, |
| | | "attrs": { |
| | | "text": { |
| | | "refY": "100%", |
| | | "textVerticalAnchor": "top", |
| | | "text": "dashedBox", |
| | | "refY2": 4 |
| | | }, |
| | | "image": { |
| | | "xlink:href": "/modelImg/dashedBox.svg" |
| | | } |
| | | }, |
| | | "visible": true, |
| | | "shape": "image", |
| | | "id": 15000, |
| | | "data": { |
| | | "type": "imageNodes", |
| | | "dataId": "", |
| | | "nodeType": "dashedBox", |
| | | "nodeTypeExt": "", |
| | | "voteNum": "" |
| | | }, |
| | | "ports": { |
| | | "groups": { |
| | | "top": { |
| | | "position": { |
| | | "name": "top" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "right": { |
| | | "position": { |
| | | "name": "right" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "bottom": { |
| | | "position": { |
| | | "name": "bottom" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "left": { |
| | | "position": { |
| | | "name": "left" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "items": [ |
| | | { |
| | | "id": "top1", |
| | | "group": "top" |
| | | }, |
| | | { |
| | | "id": "right1", |
| | | "group": "right" |
| | | }, |
| | | { |
| | | "id": "bottom1", |
| | | "group": "bottom" |
| | | }, |
| | | { |
| | | "id": "left1", |
| | | "group": "left" |
| | | } |
| | | ] |
| | | }, |
| | | "zIndex": 2 |
| | | }, |
| | | { |
| | | "position": { |
| | | "x": 600, |
| | | "y": 0 |
| | | }, |
| | | "size": { |
| | | "width": 60, |
| | | "height": 60 |
| | | }, |
| | | "attrs": { |
| | | "text": { |
| | | "refY": "100%", |
| | | "textVerticalAnchor": "top", |
| | | "text": "end", |
| | | "refY2": 4 |
| | | }, |
| | | "image": { |
| | | "xlink:href": "/modelImg/end.svg" |
| | | } |
| | | }, |
| | | "visible": true, |
| | | "shape": "image", |
| | | "id": "20000", |
| | | "data": { |
| | | "type": "imageNodes", |
| | | "startNodeId": "10000", |
| | | "dataId": "", |
| | | "nodeType": "end", |
| | | "nodeTypeExt": "", |
| | | "voteNum": "" |
| | | }, |
| | | "ports": { |
| | | "groups": { |
| | | "top": { |
| | | "position": { |
| | | "name": "top" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "right": { |
| | | "position": { |
| | | "name": "right" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "bottom": { |
| | | "position": { |
| | | "name": "bottom" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "left": { |
| | | "position": { |
| | | "name": "left" |
| | | }, |
| | | "attrs": { |
| | | "circle": { |
| | | "r": 4, |
| | | "magnet": true, |
| | | "stroke": "#5F95FF", |
| | | "strokeWidth": 1, |
| | | "fill": "#fff", |
| | | "style": { |
| | | "visibility": "hidden" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "items": [ |
| | | { |
| | | "id": "top1", |
| | | "group": "top" |
| | | }, |
| | | { |
| | | "id": "right1", |
| | | "group": "right" |
| | | }, |
| | | { |
| | | "id": "bottom1", |
| | | "group": "bottom" |
| | | }, |
| | | { |
| | | "id": "left1", |
| | | "group": "left" |
| | | } |
| | | ] |
| | | }, |
| | | "zIndex": 3 |
| | | }, |
| | | { |
| | | "shape": "edge", |
| | | "id": "66c81c68-0827-4a3c-8343-e2c453d3e9e7", |
| | | "router": { |
| | | "name": "manhattan" |
| | | }, |
| | | "connector": { |
| | | "name": "rounded" |
| | | }, |
| | | "source": { |
| | | "cell": "10000", |
| | | "port": "right1" |
| | | }, |
| | | "target": { |
| | | "cell": 15000, |
| | | "port": "left1" |
| | | }, |
| | | "zIndex": 4 |
| | | }, |
| | | { |
| | | "shape": "edge", |
| | | "id": "a0f3cf90-6d37-4ee0-a254-90b4ec2b6a7f", |
| | | "router": { |
| | | "name": "manhattan" |
| | | }, |
| | | "connector": { |
| | | "name": "rounded" |
| | | }, |
| | | "source": { |
| | | "cell": 15000, |
| | | "port": "right1" |
| | | }, |
| | | "target": { |
| | | "cell": "20000", |
| | | "port": "left1" |
| | | }, |
| | | "zIndex": 5 |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | |
| | | }) |
| | | //delete |
| | | this.graph.bindKey('delete', () => { |
| | | const cells = this.graph.getSelectedCells() |
| | | console.log(cells, 'cells') |
| | | if (cells.length === 1) { |
| | | let node = cells[0] |
| | | if (!node.isNode()) { |
| | | this.$confirm('是否删除该连接线点?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '删除成功!' |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已取消删除' |
| | | }) |
| | | }) |
| | | // this.$message({message: '请选中节点', type: 'warning'}) |
| | | return false; // 取消操作 |
| | | } |
| | | let nodeType = node.getData().nodeType |
| | | let deleteType = 0 |
| | | if (nodeType === 'node' || nodeType === 'dashedBox') { |
| | | deleteType = 1 |
| | | } else if ('parallel,switch,vote,bridge'.indexOf(nodeType) > -1) { |
| | | deleteType = 2 |
| | | } |
| | | let canDelete = false |
| | | if (nodeType === 'start' || nodeType === 'end') { |
| | | this.$message({message: '无法删除起始和结束节点', type: 'warning'}) |
| | | return false; // 取消操作 |
| | | } |
| | | if (deleteType > 0) { |
| | | let startNode = null |
| | | if (deleteType === 1) { |
| | | startNode = node |
| | | } else if (deleteType === 2) { |
| | | startNode = this.graph.getCellById(node.getData().startNodeId) |
| | | } |
| | | let isSeriesNode = this.isSeriesNode(startNode, node) |
| | | if (isSeriesNode) { |
| | | let inLine = this.getInLinesOfNode(startNode) |
| | | let outLine = this.getOutLinesOfNode(node) |
| | | let inLineIsToLine = this.hasOtherLineToMyLine(inLine[0].id) |
| | | let inNode = isSeriesNode.inNode |
| | | let outNode = isSeriesNode.outNode |
| | | console.log(inLine, outLine, 'inLine,outLine') |
| | | console.log(inNode, outNode, 'inNode,outNode') |
| | | //提示是否要删除 |
| | | this.$confirm('是否删除该节点?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | if (inLineIsToLine) { |
| | | inLine[0].target = {cell: outNode.id, port: 'left1'} |
| | | } else { |
| | | outLine[0].source = {cell: inNode.id, port: 'right1'} |
| | | } |
| | | if (deleteType === 1){ |
| | | node.remove() |
| | | } |
| | | else{ |
| | | this.deleteCombination(node) |
| | | } |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '删除成功!' |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已取消删除' |
| | | }) |
| | | return false |
| | | }) |
| | | } |
| | | if (this.isMultipleBrach(node)) { |
| | | //提示是否要删除 |
| | | this.$confirm('是否删除该节点?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | if (inLineIsToLine) { |
| | | inLine[0].target = {cell: outNode.id, port: 'left1'} |
| | | } else { |
| | | outLine[0].source = {cell: inNode.id, port: 'right1'} |
| | | } |
| | | if (deleteType === 1) |
| | | node.remove() |
| | | else |
| | | this.deleteCombination(node) |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '删除成功!' |
| | | }) |
| | | |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已取消删除' |
| | | }) |
| | | return false |
| | | }) |
| | | } |
| | | } |
| | | //提示不能删除 |
| | | } else { |
| | | //提示不能删除 |
| | | this.$message({message: '只能选中一个节点', type: 'warning'}) |
| | | return false; // 取消操作 |
| | | } |
| | | this.deleteCompment() |
| | | }) |
| | | // zoom |
| | | this.graph.bindKey(['ctrl+1', 'meta+1'], () => { |
| | |
| | | }, |
| | | }) |
| | | }) |
| | | }, |
| | | deleteCompment() { |
| | | const cells = this.graph.getSelectedCells() |
| | | console.log(cells, 'cells') |
| | | if (cells.length === 1) { |
| | | let node = cells[0] |
| | | if (!node.isNode()) { |
| | | this.$confirm('是否删除该连接线?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | node.remove() |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '删除成功!' |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已取消删除' |
| | | }) |
| | | }) |
| | | // this.$message({message: '请选中节点', type: 'warning'}) |
| | | return false; // 取消操作 |
| | | } |
| | | let nodeType = node.getData().nodeType |
| | | let deleteType = 0 |
| | | if (nodeType === 'node' || nodeType === 'dashedBox') { |
| | | deleteType = 1 |
| | | } else if ('parallel,switch,vote,bridge'.indexOf(nodeType) > -1) { |
| | | deleteType = 2 |
| | | } |
| | | |
| | | let canDelete = false |
| | | if (nodeType === 'start' || nodeType === 'end') { |
| | | this.$message({message: '不允许删除起始和结束节点', type: 'warning'}) |
| | | return false; // 取消操作 |
| | | } |
| | | if (deleteType > 0) { |
| | | let startNode = null |
| | | if (deleteType === 1) { |
| | | startNode = node |
| | | } else if (deleteType === 2) { |
| | | startNode = this.graph.getCellById(node.getData().startNodeId) |
| | | } |
| | | |
| | | let isSeriesNode = this.isSeriesNode(startNode, node) |
| | | if (isSeriesNode) { |
| | | //串联 |
| | | let inLine = this.getInLinesOfNode(startNode) |
| | | let outLine = this.getOutLinesOfNode(node) |
| | | let inLineIsToLine = this.hasOtherLineToMyLine(inLine[0].id) |
| | | let inNode = isSeriesNode.inNode |
| | | let outNode = isSeriesNode.outNode |
| | | console.log(inLine, outLine, 'inLine,outLine') |
| | | console.log(inNode, outNode, 'inNode,outNode') |
| | | //提示是否要删除 |
| | | this.$confirm('是否删除该节点?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | if (inLineIsToLine) { |
| | | inLine[0].target = {cell: outNode.id, port: 'left1'} |
| | | } else { |
| | | outLine[0].source = {cell: inNode.id, port: 'right1'} |
| | | } |
| | | if (deleteType === 1) { |
| | | node.remove() |
| | | } else { |
| | | this.deleteCombination(node) |
| | | } |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '删除成功!' |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已取消删除' |
| | | }) |
| | | return false |
| | | }) |
| | | } |
| | | if (this.isMultipleBrach(node)) { |
| | | //提示是否要删除 |
| | | this.$confirm('是否删除该节点?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | /* if (inLineIsToLine) { |
| | | inLine[0].target = {cell: outNode.id, port: 'left1'} |
| | | } else { |
| | | outLine[0].source = {cell: inNode.id, port: 'right1'} |
| | | }*/ |
| | | if (deleteType === 1) |
| | | node.remove() |
| | | else |
| | | this.deleteCombination(node) |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '删除成功!' |
| | | }) |
| | | |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已取消删除' |
| | | }) |
| | | return false |
| | | }) |
| | | } |
| | | } |
| | | //提示不能删除 |
| | | } else { |
| | | //提示不能删除 |
| | | this.$message({message: '只能选中一个节点', type: 'warning'}) |
| | | return false; // 取消操作 |
| | | } |
| | | }, |
| | | async search() { |
| | | await this.getDiagram(); |
| | |
| | | this.$message({message: '没有足够的空间放置该节点,请扩大剩余空间', type: 'warning'}) |
| | | return |
| | | } |
| | | inEdges[0].target = {cell: result.newStartNode.id, port: 'left1'} |
| | | outEdges[0].source = {cell: result.newEndNode.id, port: 'right1'} |
| | | |
| | | let startPort = 'right1' |
| | | let endPort = 'left1' |
| | | if ((inEdges[0].target.port == 'top1' || outEdges[0].source.port == 'bottom1') && ('parallel,switch,vote,bridge'.indexOf(dragNodeType)) == -1) { |
| | | startPort = 'bottom1' |
| | | endPort = 'top1' |
| | | } |
| | | |
| | | inEdges[0].target = {cell: result.newStartNode.id, port: endPort} |
| | | outEdges[0].source = {cell: result.newEndNode.id, port: startPort} |
| | | graphNode.remove() |
| | | } |
| | | } else { //并行结构 |
| | |
| | | }, |
| | | // 相交的边 |
| | | addNodeAndInsertEdge(graphEdge, dragNode) { |
| | | const Source = graphEdge.getSourceCell() |
| | | const Target = graphEdge.getTargetCell() |
| | | const source = graphEdge.getSourceCell() |
| | | const target = graphEdge.getTargetCell() |
| | | |
| | | let centerY = Source.position().y + Source.getBBox().height/2 |
| | | if (Target.getData().nodeType === 'node'){ |
| | | centerY = Target.position().y + Target.getBBox().height/2 |
| | | let centerX = 0 |
| | | let centerY = 0 |
| | | if (!source.isNode() || !target.isNode()) { |
| | | if (source.isNode()) { |
| | | centerX = source.position().x + source.getBBox().width / 2 |
| | | centerY = dragNode.position().y + dragNode.getBBox().height / 2 |
| | | } else { |
| | | centerX = target.position().x + target.getBBox().width / 2 |
| | | centerY = dragNode.position().y + dragNode.getBBox().height / 2 |
| | | } |
| | | } else { |
| | | centerX = dragNode.position().x + dragNode.getBBox().width / 2 |
| | | centerY = source.position().y + source.getBBox().height / 2 |
| | | if (target.getData().nodeType === 'node') { |
| | | centerY = target.position().y + target.getBBox().height / 2 |
| | | } |
| | | } |
| | | |
| | | console.log(Source,'Source 起始点信息') |
| | | console.log(Target,'Target 终止点信息') |
| | | console.log(Source.position().y,'起始点的Y坐标') |
| | | console.log(Target.position().y,'终止点的Y坐标') |
| | | let startNodeId = graphEdge.source.cell |
| | | let startNode = this.graph.getCellById(startNodeId) |
| | | let endNodeId = graphEdge.target.cell |
| | | let endNode = this.graph.getCellById(endNodeId) |
| | | |
| | | if (startNode && endNode) { |
| | | let isRight = true; |
| | | let startPort = 'right1' |
| | |
| | | startPort = 'bottom1' |
| | | endPort = 'top1' |
| | | } |
| | | |
| | | if (this.hasOtherLineToMyLine(graphEdge.id)) { |
| | | let leftX = startNode.position().x + startNode.getBBox().width |
| | | let rightX = endNode.position().x |
| | | let centerX = dragNode.position().x + dragNode.getBBox().width / 2 |
| | | // let centerX = dragNode.position().x + dragNode.getBBox().width / 2 |
| | | if (centerX - leftX < rightX - centerX) { |
| | | isRight = false |
| | | } |
| | | } |
| | | let result = this.addNodeAndConnect(null, dragNode, dragNode.position().x, centerY) |
| | | |
| | | let result = this.addNodeAndConnect(null, dragNode, centerX, centerY) |
| | | if (!result){ |
| | | dragNode.remove() |
| | | this.$message({message: '没有足够的空间放置该节点,请扩大剩余空间', type: 'warning'}) |