From 7b02e5ed98cab7df7c52949c5bba298d1060329b Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期四, 09 五月 2024 14:50:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 web/src/views/modules/taskReliability/RBD-edit-img.vue |  484 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 307 insertions(+), 177 deletions(-)

diff --git a/web/src/views/modules/taskReliability/RBD-edit-img.vue b/web/src/views/modules/taskReliability/RBD-edit-img.vue
index 8ac2a3f..8984205 100644
--- a/web/src/views/modules/taskReliability/RBD-edit-img.vue
+++ b/web/src/views/modules/taskReliability/RBD-edit-img.vue
@@ -1,14 +1,14 @@
 <template>
   <div>
     <el-row :gutter="[8,8]">
-      <el-col :span="4">
+      <el-col :span="3">
         <div :style="'height:' +left_p+'px'">
           <div style="height: 100%">
             <div id="stencilImg"></div>
           </div>
         </div>
       </el-col>
-      <el-col :span="20">
+      <el-col :span="21">
         <div class="fa-card-a">
           <el-form :inline="true">
             <el-form-item>
@@ -98,35 +98,26 @@
         modelType: '',
         timer: null,
         imagesList: [
-          {imgPath: 'start', imgName: 'start', nodeType: 'start', imgWidth: 60, imgHeight: 60, imgId: '1', data: {}},
-          {imgPath: 'end', imgName: 'end', nodeType: 'end', imgWidth: 60, imgHeight: 60, imgId: '2', data: {}},
-          {
-            imgPath: 'connect',
-            imgName: 'connect',
-            nodeType: 'connect',
-            imgWidth: 30,
-            imgHeight: 30,
-            imgId: '3',
-            data: {}
-          },
-          {
-            imgPath: 'connect',
-            imgName: 'bridge',
-            nodeType: 'bridge',
-            imgWidth: 50,
-            imgHeight: 50,
-            imgId: '12',
-            data: {}
-          },
-          {
-            imgPath: 'switch',
-            imgName: 'switch',
-            nodeType: 'switch',
-            imgWidth: 60,
-            imgHeight: 60,
-            imgId: '5',
-            data: {}
-          },
+          // {imgPath: 'start', imgName: 'start', nodeType: 'start', imgWidth: 60, imgHeight: 60, imgId: '1', data: {}},
+          // {imgPath: 'end', imgName: 'end', nodeType: 'end', imgWidth: 60, imgHeight: 60, imgId: '2', data: {}},
+          // {
+          //   imgPath: 'connect',
+          //   imgName: 'connect',
+          //   nodeType: 'connect',
+          //   imgWidth: 30,
+          //   imgHeight: 30,
+          //   imgId: '3',
+          //   data: {}
+          // },
+          // {
+          //   imgPath: 'connect',
+          //   imgName: 'bridge',
+          //   nodeType: 'bridge',
+          //   imgWidth: 50,
+          //   imgHeight: 50,
+          //   imgId: '12',
+          //   data: {}
+          // },
           {
             imgPath: 'parallel',
             imgName: 'parallel',
@@ -138,12 +129,12 @@
           },
           {imgPath: 'vote', imgName: 'vote', nodeType: 'vote', imgWidth: 60, imgHeight: 60, imgId: '6', data: {}},
           {
-            imgPath: 'dashedBox',
-            imgName: 'dashedBox',
-            nodeType: 'dashedBox',
+            imgPath: 'switch',
+            imgName: 'switch',
+            nodeType: 'switch',
             imgWidth: 60,
             imgHeight: 60,
-            imgId: '10000',
+            imgId: '5',
             data: {}
           },
           {
@@ -153,6 +144,15 @@
             imgWidth: 60,
             imgHeight: 60,
             imgId: '10',
+            data: {}
+          },
+          {
+            imgPath: 'dashedBox',
+            imgName: 'dashedBox',
+            nodeType: 'dashedBox',
+            imgWidth: 60,
+            imgHeight: 60,
+            imgId: '10000',
             data: {}
           },
         ],
@@ -546,7 +546,7 @@
             {
               title: '杩愮畻绗﹀彿',
               name: 'group1',
-              graphHeight: 360,
+              graphHeight: 260,
             },
             {
               title: '璁惧鑺傜偣',
@@ -719,68 +719,83 @@
 //delete
         this.graph.bindKey('delete', () => {
           const cells = this.graph.getSelectedCells()
-          console.log(cells,'cells')
+          console.log(cells, 'cells')
           if (cells.length === 1) {
-            this.$confirm('鏄惁鍒犻櫎璇ヨ妭鐐�?', '鎻愮ず', {
-              confirmButtonText: '纭畾',
-              cancelButtonText: '鍙栨秷',
-              type: 'warning'
-            }).then(() => {
-              let node = cells[0]
-              if (!node.isNode()){
-                this.$message({message: '璇烽�変腑鑺傜偣', type: 'warning'})
-                return false; // 鍙栨秷鎿嶄綔
+            let node = cells[0]
+            if (!node.isNode()) {
+              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 nodeType = node.getData().nodeType
-              let canDelete = false
-              if (nodeType==='start' || nodeType==='end'){
-                this.$message({message: '鏃犳硶鍒犻櫎璧峰鍜岀粨鏉熻妭鐐�', type: 'warning'})
-                return false; // 鍙栨秷鎿嶄綔
-              }
-              if(nodeType === 'node' || nodeType ==='dashedBox'){
-                let isSeriesNode = this.isSeriesNode(node)
-                if (isSeriesNode){
-                  //鍒犳帀锛屽墠鍚庣嚎杩炶捣鏉�
-                  this.graph.addEdge({
-                    source: {cell: isSeriesNode.inNode, port: 'right1'},
-                    target: {cell: isSeriesNode.outNode, port: 'left1'},
-                    router: {name: 'manhattan'},
-                    connector: {name: 'rounded'}
+              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')
+                if (inLineIsToLine) {
+                  inLine[0].target = {cell: outNode.id, port: 'left1'}
+                } else {
+                  outLine[0].source = {cell: inNode.id, port: 'right1'}
+                }
+                //鎻愮ず鏄惁瑕佸垹闄�
+                this.$confirm('鏄惁鍒犻櫎璇ヨ妭鐐�?', '鎻愮ず', {
+                  confirmButtonText: '纭畾',
+                  cancelButtonText: '鍙栨秷',
+                  type: 'warning'
+                }).then(() => {
+                  if (deleteType === 1){
+                    node.remove()
+                  }
+                  else{
+                    this.deleteCombination(node)
+                  }
+                  this.$message({
+                  type: 'success',
+                  message: '鍒犻櫎鎴愬姛!'
+                })
+                }).catch(() => {
+                  this.$message({
+                    type: 'info',
+                    message: '宸插彇娑堝垹闄�'
                   })
+                })
+              }
+              if (this.isMultipleBrach(node)) {
+                //鎻愮ず鏄惁瑕佸垹闄�
+                if (deleteType === 1)
                   node.remove()
-                  return
-                }
-                if (this.isMultipleBrach(node)){
-                  //鐩存帴鍒犳帀锛屼笉鐢ㄧ绾�
-                  return
-                }else{
-                  //鎻愮ず杩欎釜缁勫悎鍙湁涓�鏉′箣璺紝鍦ㄧ粍鍚堢偣鍒犻櫎
-                  return
-                }
+                else
+                  this.deleteCombination(node)
+                return
               }
-              if (nodeType==='connect'){
-                try{
-                   let endNodeId = node.getData().endNodeId
-                    // 鎻愮ず涓嶈兘鐩存帴鍒犻櫎宸﹁繛鎺ョ偣
-                    return
-                }catch(e){}
-              }
-              //鍋氫釜杩唬鍒犻櫎鏁翠釜缁勫悎
-              //this.deleteCombination();
-
-              // this.graph.removeCells(cells)
-              this.$message({
-                type: 'success',
-                message: '鍒犻櫎鎴愬姛!'
-              })
-            }).catch(() => {
-              this.$message({
-                type: 'info',
-                message: '宸插彇娑堝垹闄�'
-              })
-            })
-          }else{
-
+            }
+            //鎻愮ず涓嶈兘鍒犻櫎
+          } else {
+            //鎻愮ず涓嶈兘鍒犻櫎
+            this.$message({message: '鍙兘閫変腑涓�涓妭鐐�', type: 'warning'})
+            return false; // 鍙栨秷鎿嶄綔
           }
         })
 // zoom
@@ -818,6 +833,7 @@
           let intersectNode = this.findIntersectsNode(node)
           if (intersectNode) { // 褰撴湁鑺傜偣鐩镐氦 ==>骞惰
             this.addBranch(intersectNode, nodeObj)
+            return
           } else {
             let isSelfCreated = null
             try {
@@ -828,12 +844,13 @@
               let intersectEdge = this.findIntersectsEdge(this.graph, node)
               if (intersectEdge) { // 褰撴湁杈圭浉浜� ==>涓茶仈
                 this.addNodeAndInsertEdge(intersectEdge, nodeObj)
+                return
               } else {
                 //鎻愮ず
               }
             }
           }
-
+          node.remove()
 
           /*//濡傛灉鑺傜偣涓庤妭鐐圭浉浜�
           console.log(node.position().x, node.position().x, 'node.position().x')
@@ -842,10 +859,10 @@
           }*/
         });
         // 鐩戝惉鑺傜偣浣嶇疆鏀瑰彉浜嬩欢
-        this.graph.on('node:change:position', ({node}) => {
-          this.hasMoveNode = true
-          this.hasMoveSingleNode = node
-        });
+        // this.graph.on('node:change:position', ({node}) => {
+        //   this.hasMoveNode = true
+        //   this.hasMoveSingleNode = node
+        // });
         this.graph.on('cell:click', ({cell}) => {
           // this.type.value = cell.isNode() ? "node" : "edge"
           this.type = cell.isNode() ? 'node' : 'edge'
@@ -1116,7 +1133,7 @@
         for (const otherNode of nodes) {
           if (otherNode === node) continue;
           let nodeType = otherNode.getData().nodeType
-          if (nodeType === "parallel" || nodeType === "switch" || nodeType === "vote" || nodeType === "end" || nodeType === "dashedBox") {
+          if (nodeType === "parallel" || nodeType === "switch" || nodeType === "vote" || nodeType === "dashedBox") {
             const bbox2 = otherNode.getBBox();
             if (bbox1.x < bbox2.x + bbox2.width &&
               bbox1.x + bbox1.width > bbox2.x &&
@@ -1147,7 +1164,7 @@
         } else {
           offHeight = 70
         }
-        if (graphNodeType === 'dashedBox') {
+        if (graphNodeType === 'dashedBox') { //铏氭
           const edges = this.graph.getConnectedEdges(graphNode); // 鑾峰彇鐢诲竷涓婂師鏈夌殑鑺傜偣鎵�鏈夎繘鏉ョ殑绾�
           let inEdges = edges.filter(edge => edge.target.cell === graphNode.id)
           let startNode = null
@@ -1162,11 +1179,13 @@
             endNode = this.graph.getCellById(endNodeId)
           }
           if (startNode && endNode) {
-            graphNode.remove()
             let centerY = graphNode.position().y
-            this.addNodeAndConnect(startNode, endNode, dragNode, centerY)
+            let result = this.addNodeAndConnect(startNode, endNode, dragNode, dragNode.position().x, centerY)
+            inEdges[0].target = {cell: result.newStartNode.id, port: 'left1'}
+            outEdges[0].source = {cell: result.newEndNode.id, port: 'right1'}
+            graphNode.remove()
           }
-        } else {
+        } else { //骞惰缁撴瀯
           const graphNodeStartNodeId = graphNode.getData().startNodeId  // 鑾峰彇鐢诲竷涓婂師鏈夎妭鐐圭殑寮�濮婭D
           const graphNodeStartNode = this.graph.getCellById(graphNodeStartNodeId) // 閫氳繃寮�濮婭D寰楀埌鍒濆鑺傜偣瀵硅薄
           let graphNodeY = graphNode.position().y - graphNode.getBBox().height / 2 // 鑾峰彇鐢诲竷鍘熸湁鑺傜偣鐨剏鍧愭爣
@@ -1182,35 +1201,35 @@
           this.getYRange(inEdges, graphNodeStartNode, pointXY)
           console.log(pointXY, 'new')
 
+          let minX = graphNodeStartNode.position().x + graphNodeStartNode.getBBox().width
+          let maxX = graphNode.position().x
+          let centerX = minX + (maxX - minX) / 2
           let centerY = graphNodeY - pointXY.minY > pointXY.maxY - graphNodeY ? pointXY.maxY + 30 : pointXY.minY - offHeight - 30
 
-          this.addNodeAndConnect(graphNodeStartNode, graphNode, dragNode, centerY)
+          let result = this.addNodeAndConnect(graphNodeStartNode, graphNode, dragNode, minX, centerY)
+          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(startNode, endNode, dragNode, centerY) { // graphCell鏄敾甯冧笂鍘熸湁鐨勮妭鐐广�俤ragNode鏄綋鍓嶆嫋鎷界殑鑺傜偣
-        let minX = startNode.position().x + startNode.getBBox().width
-        let maxX = endNode.position().x
-
-        let centerX = minX + (maxX - minX) / 2
+      addNodeAndConnect(startNode, endNode, dragNode, leftX, centerY) { // graphCell鏄敾甯冧笂鍘熸湁鐨勮妭鐐广�俤ragNode鏄綋鍓嶆嫋鎷界殑鑺傜偣
         let dragNodeType = dragNode.getData().nodeType
         if (dragNodeType === 'node' || dragNodeType === 'dashedBox') {
-          dragNode.position(minX + 50, centerY);
-          this.graph.addEdge({
-            source: {cell: startNode, port: 'right1'},
-            target: {cell: dragNode, 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'}
-          })
+          dragNode.position(leftX + 50, centerY);
+          return {newStartNode: dragNode, newEndNode: dragNode}
         } else if (dragNodeType === 'bridgeConnection') {
-          this.createBridgeConnection(minX, centerY, startNode, endNode, dragNode)
+          return this.createBridgeConnection(leftX, centerY, startNode, endNode, dragNode)
         } else {
-          this.createParallelBrach(minX, centerY, startNode, endNode, dragNode)
+          return this.createParallelBrach(leftX, centerY, startNode, endNode, dragNode)
         }
       },
       // 鐩镐氦鐨勮竟
@@ -1220,9 +1239,42 @@
         let endNodeId = graphEdge.target.cell
         let endNode = this.graph.getCellById(endNodeId)
         if (startNode && endNode) {
-          graphEdge.remove()
-          let centerY = startNode.position().y
-          this.addNodeAndConnect(startNode, endNode, dragNode, centerY)
+          let centerY = dragNode.position().y
+          let isRight = true;
+          let startPort = 'right1'
+          let endPort = 'left1'
+          if (this.isTopBottom(graphEdge)) {
+            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
+            if (centerX - leftX < rightX - centerX) {
+              isRight = false
+            }
+          }
+          let result = this.addNodeAndConnect(startNode, endNode, dragNode, dragNode.position().x, centerY)
+          if (isRight) {
+            graphEdge.target = {cell: result.newStartNode.id, port: endPort}
+            this.graph.addEdge({
+              source: {cell: result.newEndNode, port: startPort},
+              target: {cell: endNode, port: endPort},
+              router: {name: 'manhattan'},
+              connector: {name: 'rounded'}
+            })
+
+          } else {
+            this.graph.addEdge({
+              source: {cell: startNode, port: startPort},
+              target: {cell: result.newStartNode, port: endPort},
+              router: {name: 'manhattan'},
+              connector: {name: 'rounded'}
+            })
+            graphEdge.source = {cell: result.newEndNode.id, port: startPort}
+          }
+          // graphEdge.remove()
         }
       },
       initCells() {
@@ -1372,19 +1424,19 @@
           router: {name: 'manhattan'},
           connector: {name: 'rounded'}
         })
-
-        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'}
-        })
+        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, startNode, endNode, dragNode) {
         const leftTopDashedBox = this.createDashedBox(x + 120, y)
@@ -1399,18 +1451,18 @@
 
         rightConnectNode.setData({startNodeId: leftConnectNode.id})
         leftConnectNode.setData({endNodeId: rightConnectNode.id})
-        this.graph.addEdge({
-          source: {cell: startNode, port: 'right1'},
-          target: {cell: leftConnectNode, port: 'left1'},
-          router: {name: 'manhattan'},
-          connector: {name: 'rounded'},
-        })
-        this.graph.addEdge({
-          source: {cell: rightConnectNode, port: 'right1'},
-          target: {cell: endNode, port: 'left1'},
-          router: {name: 'manhattan'},
-          connector: {name: 'rounded'}
-        })
+        /*        this.graph.addEdge({
+                  source: {cell: startNode, port: 'right1'},
+                  target: {cell: leftConnectNode, port: 'left1'},
+                  router: {name: 'manhattan'},
+                  connector: {name: 'rounded'},
+                })
+                this.graph.addEdge({
+                  source: {cell: rightConnectNode, port: 'right1'},
+                  target: {cell: endNode, port: 'left1'},
+                  router: {name: 'manhattan'},
+                  connector: {name: 'rounded'}
+                })*/
         this.graph.addEdge({
           source: {cell: leftConnectNode, port: 'right1'},
           target: {cell: leftTopDashedBox, port: 'left1'},
@@ -1452,17 +1504,18 @@
 
         this.graph.addEdge({
           source: {cell: edgeTop},
-          target: {cell: alignCenterDashedBox},
+          target: {cell: alignCenterDashedBox, port: 'top1'},
           router: {name: 'manhattan'},
           connector: {name: 'rounded'},
         })
         this.graph.addEdge({
-          source: {cell: alignCenterDashedBox},
+          source: {cell: alignCenterDashedBox, port: 'bottom1'},
           target: {cell: edgeBottom},
           router: {name: 'manhattan'},
           connector: {name: 'rounded'},
         })
         dragNode.remove()
+        return {newStartNode: leftConnectNode, newEndNode: rightConnectNode}
       },
       createDashedBox(x, y) {
         const dashId = getUUID().toString()
@@ -1590,53 +1643,130 @@
           this.getYRange(inEdgesPrev, startNode, pointXY)
         }
       },
-      isSeriesNode(node){
+      isSeriesNode(startNode, endNode) {
         let result = false
         let inNode = null
         let outNode = null
-        let inEdges = this.getInLinesOfNode(node)
-        if (inEdges.length === 1){
-          let inEdgeId = inEdges[0].id
-          let isLineToLine = this.isLineToLine(inEdgeId)
+        let inEdges = this.getInLinesOfNode(startNode)
+        console.log(inEdges, 'inEdges')
+        if (inEdges.length === 1) {
+          let isMyLineToOtherLine = this.isMyLineToOtherLine(inEdges[0])
+          let hasOtherLineToMyLine = this.hasOtherLineToMyLine(inEdges[0].id)
           let inNodeId = inEdges[0].source.cell
           inNode = this.graph.getCellById(inNodeId)
-          let inNodeType = inNode.getData().nodeType
-          if (!isLineToLine && 'node,parallel,switch,vote'.indexOf(inNodeType)>-1){
-            result = true
+          if (!isMyLineToOtherLine && !hasOtherLineToMyLine) {
+            let inNodeType = inNode.getData().nodeType
+            console.log(inNodeType, 'inNodeType')
+            if ('node,dashedBox,parallel,switch,vote,bridge'.indexOf(inNodeType) > -1) {
+              result = true
+            }
           }
         }
-        let outEdges = this.getOutLinesOfNode(node)
-        if (outEdges.length === 1){
-          let outEdgeId = inEdges[0].id
-          let isLineToLine = this.isLineToLine(outEdgeId)
-          let outNodeId = inEdges[0].target.cell
+        let outEdges = this.getOutLinesOfNode(endNode)
+        console.log(outEdges, 'outEdges')
+        if (outEdges.length === 1) {
+          let isMyLineToOtherLine = this.isMyLineToOtherLine(outEdges[0])
+          let hasOtherLineToMyLine = this.hasOtherLineToMyLine(outEdges[0].id)
+          let outNodeId = outEdges[0].target.cell
           outNode = this.graph.getCellById(outNodeId)
-          let outNodeType = outNode.getData().nodeType
-          if (!isLineToLine && 'node,connect'.indexOf(outNodeType)>-1){
-            result =  true
+          if (!isMyLineToOtherLine && !hasOtherLineToMyLine) {
+            let outNodeType = outNode.getData().nodeType
+            if ('node,connect,dashedBox'.indexOf(outNodeType) > -1) {
+              result = true
+            }
           }
         }
-        if (result && inNode && outNode){
-          return {inNode,outNode}
-        }else {
+        console.log(result, 'result')
+        if (result && inNode && outNode) {
+          console.log(inNode, outNode, 'inNode, outNode')
+          return {inNode, outNode}
+        } else {
           return false
         }
       },
-      isLineToLine(edgeId){
-        for(let edge of this.graph.getEdges()){
+      hasOtherLineToMyLine(edgeId) {
+        for (let edge of this.graph.getEdges()) {
           if (edge.source.cell === edgeId || edge.target.cell === edgeId)
             return true
         }
         return false
       },
-      isMultipleBrach(){},
-      deleteCombination(){},
+      isMyLineToOtherLine(myEdge) {
+        for (let edge of this.graph.getEdges()) {
+          if (myEdge.source.cell === edge.id || myEdge.target.cell === edge.id)
+            return true
+        }
+        return false
+      },
+      isTopBottom(edge) {
+        if (edge.source.port === 'top1' || edge.source.port === 'bottom1' || edge.target.port === 'top1' || edge.target.port === 'bottom1') {
+          return true
+        }
+      },
+      isMultipleBrach(node) {
+        let outEdges = this.getOutLinesOfNode(node)
+        let outNodeId = outEdges[0].target.cell
+        if (this.isTopBottom(outEdges[0]))
+          return false
+        let outNode = this.graph.getCellById(outNodeId)
+        if ('bridge,end'.indexOf(outNode.getData().nodeType) > -1) {
+          return false
+        }
+        let inEdges = this.getInLinesOfNode(outNode)
+        return inEdges.length > 1;
+      },
+      deleteCombination(node) {
+        let startNode = this.graph.getCellById(node.getData().startNodeId)
+        let allCombinationNodes = []
+        console.log(startNode, 'startNode')
+        this.getAllCombinationNodes(startNode.id, node, allCombinationNodes)
+        console.log(allCombinationNodes, 'allCombinationNodes')
+        this.graph.removeCells(allCombinationNodes)
+      },
+      getAllCombinationNodes(startNodeId, node, allCombinationNodes) {
+        allCombinationNodes.push(node)
+        if (node.id == startNodeId || node.isEdge()) {
+          return
+        }
+        let inEdges = this.getInLinesOfNode(node) // 濡傛灉锛燂紵锛�
+        for (let inEdge of inEdges) {
+          let lineNode = this.getNodeOfConectLine(inEdge)
+          if (lineNode) {
+            this.getAllCombinationNodes(startNodeId, lineNode, allCombinationNodes)
+          }
+          let inNodeId = inEdge.source.cell
+          let inNode = this.graph.getCellById(inNodeId)
+          if (inNode.isEdge())
+            continue
+          this.getAllCombinationNodes(startNodeId, inNode, allCombinationNodes)
+        }
+      },
+      getNodeOfConectLine(paramEdge) {
+        for (let edge of this.graph.getEdges()) {
+          let nodeId = null
+          /*          if (edge.source.cell === paramEdge.id){
+                      nodeId = edge.target.cell
+                    }*/
+          if (edge.target.cell === paramEdge.id) {
+            nodeId = edge.source.cell
+          }
+          if (nodeId) {
+            let node = this.graph.getCellById(nodeId)
+            if (node.isNode())
+              return node
+          }
+        }
+        return null
+      },
       getInLinesOfNode(node) {
         const edges = this.graph.getConnectedEdges(node); // 鑾峰彇鐢诲竷涓婂師鏈夌殑鑺傜偣鎵�鏈夎繘鏉ョ殑绾�
+        console.log(edges, '鑾峰彇鐢诲竷涓婂紑濮嬭妭鐐规墍鏈夌殑绾� edges')
         return edges.filter(edge => edge.target.cell === node.id)
       },
       getOutLinesOfNode(node) {
+        console.log(node, '鑾峰彇鐢诲竷涓婄殑缁撴潫鑺傜偣 node')
         const edges = this.graph.getConnectedEdges(node); // 鑾峰彇鐢诲竷涓婂師鏈夌殑鑺傜偣鎵�鏈夎繘鏉ョ殑绾�
+        console.log(edges, '鑾峰彇鐢诲竷涓婄殑缁撴潫鑺傜偣鎵�鏈夌殑绾� edges')
         return edges.filter(edge => edge.source.cell === node.id)
       },
     },

--
Gitblit v1.9.1