From 9ef61aec5e8b218db9d60941ef3ad576a927338b Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期五, 26 四月 2024 11:05:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 web/src/views/modules/taskReliability/RBD-edit-img.vue | 2416 +++++++++++++++++++++++++++-------------------------------
 1 files changed, 1,137 insertions(+), 1,279 deletions(-)

diff --git a/web/src/views/modules/taskReliability/RBD-edit-img.vue b/web/src/views/modules/taskReliability/RBD-edit-img.vue
index bcba72a..1beb7ca 100644
--- a/web/src/views/modules/taskReliability/RBD-edit-img.vue
+++ b/web/src/views/modules/taskReliability/RBD-edit-img.vue
@@ -3,7 +3,7 @@
     <el-row :gutter="[8,8]">
       <el-col :span="4">
         <div :style="'height:' +left_p+'px'">
-          <div class="fa-card-a" style="height: 100%">
+          <div style="height: 100%">
             <div id="stencilImg"></div>
           </div>
         </div>
@@ -12,60 +12,34 @@
         <div class="fa-card-a">
           <el-form :inline="true">
             <el-form-item>
-              <el-input placeholder="鎼滅储鏂藉伐鍐呭" v-model="dataForm.modelId" clearable class="input-with-select">
-                <el-button slot="append" icon="el-icon-search" @click="search()"></el-button>
-              </el-input>
-            </el-form-item>
-
-              <el-form-item>
-                  <el-button type="primary" @click="saveDiagram()">淇濆瓨</el-button>
-                  <el-button type="primary" @click="analyzeDiagram()">瑙f瀽</el-button>
-              </el-form-item>
-            <el-form-item>
-                <el-tooltip class="item" effect="dark" content="宸﹀榻�" placement="left">
-                  <el-button class="" style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF;"
-                             @click="leftAlign()"><i style="font-size: 2rem;"
-                                                     class="wt-iconfont icon-zuoduiqi"></i></el-button>
-                </el-tooltip>
+              妯″瀷鍚嶇О锛歿{ modelName }}
             </el-form-item>
             <el-form-item>
-                <el-tooltip class="item" effect="dark" content="灞呬腑瀵归綈" placement="left">
-                  <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF"
-                             @click="centerAlign()"><i style="font-size: 2rem;"
-                                                       class="wt-iconfont icon-chuizhiduiqi"></i></el-button>
-                </el-tooltip>
-            </el-form-item>
-            <el-form-item>
-                <el-tooltip class="item" effect="dark" content="鍙冲榻�" placement="left">
-                  <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF"
-                             @click="rightAlign()"><i style="font-size: 2rem;"
-                                                      class="wt-iconfont icon-youduiqi"></i></el-button>
-                </el-tooltip>
-            </el-form-item>
-            <el-form-item>
-                <el-tooltip class="item" effect="dark" content="椤堕儴瀵归綈" placement="left">
-                  <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF"
-                             @click="topAlign()"><i style="font-size: 2rem;"
-                                                    class="wt-iconfont icon-dingduiqi"></i></el-button>
-                </el-tooltip>
-            </el-form-item>
-            <el-form-item>
-                <el-tooltip class="item" effect="dark" content="姘村钩瀵归綈" placement="left">
-                  <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF"
-                             @click="shuipingAlign()"><i style="font-size: 2rem;"
-                                                         class="wt-iconfont icon-shuipingduiqi"></i></el-button>
-                </el-tooltip>
-            </el-form-item>
-            <el-form-item>
-                <el-tooltip class="item" effect="dark" content="搴曢儴瀵归綈" placement="left">
-                  <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF"
-                             @click="bottomAlign()"><i style="font-size: 2rem;"
-                                                       class="wt-iconfont icon-diduiqi"></i></el-button>
-                </el-tooltip>
+              <el-button type="primary" @click="saveDiagram()">鏆傚瓨</el-button>
+              <el-button type="primary" @click="analyzeDiagram()">淇濆瓨</el-button>
+              <el-button type="primary" @click="clearDiagram()">娓呯┖鍥惧舰</el-button>
+              <el-button @click="leftAlign()">
+                <i style="font-size: 1rem;" class="wt-iconfont icon-zuoduiqi"></i>
+              </el-button>
+              <el-button @click="centerAlign()">
+                <i style="font-size: 1rem;" class="wt-iconfont icon-chuizhiduiqi"></i>
+              </el-button>
+              <el-button @click="rightAlign()">
+                <i style="font-size: 1rem;" class="wt-iconfont icon-youduiqi"></i>
+              </el-button>
+              <el-button @click="topAlign()">
+                <i style="font-size: 1rem;" class="wt-iconfont icon-dingduiqi"></i>
+              </el-button>
+              <el-button @click="shuipingAlign()">
+                <i style="font-size: 1rem;" class="wt-iconfont icon-shuipingduiqi"></i>
+              </el-button>
+              <el-button @click="bottomAlign()">
+                <i style="font-size: 1rem;" class="wt-iconfont icon-diduiqi"></i>
+              </el-button>
             </el-form-item>
           </el-form>
           <div id="containerImg" style="border: 1px solid #EAEBEE;border-radius: 6px;
-        box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);">
+        box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);height: 100%">
           </div>
           <config-node v-show="type === 'node'" :id="id" :diagramId="diagramId" :globalGridAttr="globalGridAttr"
                        :graph="graph"
@@ -80,1269 +54,1145 @@
 </template>
 
 <script>
-  import {Graph, Shape, Addon, Cell} from '@antv/x6'
-  import ConfigNode from './ConfigNode/index.vue'
-  import ConfigEdge from './ConfigEdge/index.vue'
-  import {removeCurrentTabHandle} from '@/commonJS/common'
-  import {setHartBeat} from '@/commonJS/common';
+import {Graph, Shape, Addon, Cell} from '@antv/x6'
+import ConfigNode from './ConfigNode/index.vue'
+import ConfigEdge from './ConfigEdge/index.vue'
+import {removeCurrentTabHandle} from '@/commonJS/common'
+import {setHartBeat} from '@/commonJS/common';
+import Cookies from 'js-cookie'
 
-  export default {
-    name: 'RBD-edit-img',
-    /*props: {
+export default {
+  name: 'RBD-edit-img',
+  /*props: {
 
-    },*/
-    props: {
-      projectId: {
-        type: String
-      },
-      diagarmId: {
-        type: String
-      },
-      pageCode: {
-        default: 'wlt_pz'
-      },
-      flowCode: {
-        type: String,
-        default: 'wltFlow'
-      },
+  },*/
+  props: {
+    projectId: {
+      type: String
     },
-    components: {
-      ConfigNode,
-      ConfigEdge
+    diagarmId: {
+      type: String
     },
-    data() {
-      return {
-        timer: null,
-        imgsList:[
-          {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:'parallelLeft',imgName:'parallelLeft',nodeType:'parallelLeft',imgWidth:60,imgHeight:60,imgId:'3',data:{}},
-          {imgPath:'parallelRight',imgName:'parallel',nodeType:'parallel',imgWidth:60,imgHeight:60,imgId:'4',data:{}},
-          {imgPath:'switchRight',imgName:'switch',nodeType:'switch',imgWidth:60,imgHeight:60,imgId:'5',data:{}},
-          {imgPath:'voteRight',imgName:'vote',nodeType:'vote',imgWidth:60,imgHeight:60,imgId:'6',data:{}},
-        ],
-        imgsList2:[
-          {imgPath:'logo',imgName:'logo',nodeType:'node',statusImg:'',imgWidth:60,imgHeight:60,imgId:'100',data:{dataId:'123456',nodeTypeExt:'aaa'}},
-        ],
-        nodeType:'',
-        first: true,
-        shape: '',
-        projectList: [],
-        diagramList: [],
-        diagramId: '',
-        projectId: '',
-        diagramJson: '',
-        diagramIdDisabled: false,
-        dataForm: {
-          id: null,
-          projectId: null,
-          diagramId: null,
-          content: null,
-          publishContent: null,
-          hasPublish: 0,
-          modelId: '1',
+    pageCode: {
+      default: 'wlt_pz'
+    },
+    flowCode: {
+      type: String,
+      default: 'wltFlow'
+    },
+  },
+  components: {
+    ConfigNode,
+    ConfigEdge
+  },
+  data() {
+    return {
+      nodeAdded: false,
+      connectNode: {},
+      modelId: '',
+      modelName: '',
+      modelType: '',
+      timer: null,
+      imgsList: [
+        {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: {}
         },
-        flowInfo: {
-          bizId: '',
-          bizGroupId: '',
-          flowCode: '',
-          flowStepMark: '',
-          status: 0,
-          myStatus: 0
+        {
+          imgPath: 'switch',
+          imgName: 'switch',
+          nodeType: 'switch',
+          imgWidth: 60,
+          imgHeight: 60,
+          imgId: '5',
+          data: {}
         },
-        // emptyJson: {
-        //   // 鑺傜偣
-        //   nodes: [
-        //     {
-        //       id: 'node1', // String锛屽彲閫夛紝鑺傜偣鐨勫敮涓�鏍囪瘑
-        //       width: 500,   // Number锛屽彲閫夛紝鑺傜偣澶у皬鐨� width 鍊�
-        //       height: 300,  // Number锛屽彲閫夛紝鑺傜偣澶у皬鐨� height 鍊�
-        //       label: '璇ラ」鐩繕鏈厤缃巶瀹剁綉缁滃浘',
-        //       attrs: {
-        //         body: {
-        //           strokeWidth: 0
-        //         },
-        //       }
-        //       //   text: {
-        //       //     text: '璇ラ」鐩繕鏈紪鍒剁綉缁滃浘',
-        //       //     // fontSize: 56,
-        //       //     fill: 'rgba(0,0,0,0.7)'
-        //       //   },
-        //       // },
-        //     }
-        //   ],
+        {imgPath: 'vote', imgName: 'vote', nodeType: 'vote', imgWidth: 60, imgHeight: 60, imgId: '6', data: {}},
+      ],
+      imgsList2: [
+        // {imgPath:'logo',imgName:'logo',nodeType:'node',,nodeTypeExt:'',productType:'',statusImg:'',imgWidth:60,imgHeight:60,imgId:'100',dataId:'123456'},
+      ],
+      combiningImages: [
+        {
+          imgPath: 'switch',
+          imgName: 'switch',
+          nodeType: 'switch',
+          imgWidth: 60,
+          imgHeight: 60,
+          imgId: '5',
+          data: {}
+        },
+        {imgPath: 'vote', imgName: 'vote', nodeType: 'vote', imgWidth: 60, imgHeight: 60, imgId: '6', data: {}}
+      ],
+      nodeType: '',
+      first: true,
+      shape: '',
+      projectList: [],
+      diagramList: [],
+      diagramId: '',
+      projectId: '',
+      diagramJson: '',
+      diagramIdDisabled: false,
+      dataForm: {
+        id: null,
+        content: null,
+        publishContent: null,
+        hasPublish: 0,
+        urlPref: '',
+      },
+      // emptyJson: {
+      //   // 鑺傜偣
+      //   nodes: [
+      //     {
+      //       id: 'node1', // String锛屽彲閫夛紝鑺傜偣鐨勫敮涓�鏍囪瘑
+      //       width: 500,   // Number锛屽彲閫夛紝鑺傜偣澶у皬鐨� width 鍊�
+      //       height: 300,  // Number锛屽彲閫夛紝鑺傜偣澶у皬鐨� height 鍊�
+      //       label: '璇ラ」鐩繕鏈厤缃巶瀹剁綉缁滃浘',
+      //       attrs: {
+      //         body: {
+      //           strokeWidth: 0
+      //         },
+      //       }
+      //       //   text: {
+      //       //     text: '璇ラ」鐩繕鏈紪鍒剁綉缁滃浘',
+      //       //     // fontSize: 56,
+      //       //     fill: 'rgba(0,0,0,0.7)'
+      //       //   },
+      //       // },
+      //     }
+      //   ],
+      // },
+      type: '',
+      id: '',
+      graph: null,
+      globalGridAttr: {
+        productType: '',
+        voteNum: '',
+        repairMttcr: '',
+        repairMttcrOther: '',
+        repairDistribType: '',
+        reliabDistribType: '',
+        taskMtbcfOther: '',
+        isRepair: 0,
+        taskMtbcf: '',
+        numberInputValue: '',
+        statusImg: '',
+        nodeTypeExt: '',
+        type: 'mesh',
+        size: 10,
+        color: '#e5e5e5',
+        thickness: 1,
+        colorSecond: '#d0d0d0',
+        thicknessSecond: 1,
+        factor: 4,
+        bgColor: '#e5e5e5',
+        showImage: true,
+        repeat: 'watermark',
+        position: 'center',
+        bgSize: JSON.stringify({width: 150, height: 150}),
+        opacity: 0.1,
+
+        stroke: '#5F95FF',
+        strokeWidth: 1,
+        connector: 'rounded',
+        router: 'manhattan',
+        label: '',
+        nodeStroke: '#5F95FF',
+        nodeStrokeWidth: 1,
+        nodeFill: '#ffffff',
+        nodeFontSize: 12,
+        nodeColor: '#080808',
+        nodeText: '',
+        nodeDate: '',
+        nodeUsers: '',
+        nodeDataDate: '',
+        nodeDataText: '',
+        dataId: '',
+        inspectName: '',
+        distance: 0.5,
+        angle: 0,
+      },
+      isReady: false,
+      curCel: Cell,
+      left_p: document.documentElement.clientHeight - 100,
+      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',
+          },
+        ],
+      }
+    }
+  },
+  watch: {
+    '$route.params.configId'() {
+      // alert('$route.params.projectId change')
+      this.projectId = this.$route.params.projectId
+      //this.diagramId = this.$route.params.diagramId
+      console.log(this.$route.params.projectId, 'this.$route.params.projectId')
+      console.log(this.$route.params.diagramId, 'this.$route.params.diagramId')
+    }
+  },
+  mounted() {
+    //this.initDigram()
+    this.type = 'grid'
+  },
+  methods: {
+    init(row) {
+      this.modelName = row.modelName
+      this.dataForm.id = row.id
+      // this.productId = row.productId
+      // this.getProduct(row.productId)
+      this.initDigram(row.productId)
+      console.log(this.dataForm, 'init(row){')
+    },
+    async getDiagram(modelId) {
+      let params = {
+        modelId: modelId,
+        urlPref: window.SITE_CONFIG['apiURL'],
+        token: Cookies.get('token'),
+      }
+      let res = await this.$http.get(`/taskReliability/ModelLine/getDiagram`, {params: params})
+      console.log(res, 'async getDiagram( res')
+      if (res.data !== null && (res.data.content != null)) {
+        this.dataForm = res.data
+        console.log(this.dataForm, 'this.dataForm in getDiagram')
+        if (this.dataForm.content != '') {
+          this.diagramJson = JSON.parse(this.dataForm.content)
+        }
+        // console.log(this.dataForm.content,'this.Diagram content')
+        console.log(this.diagramJson, 'this.Diagram json')
+        this.graph.fromJSON(this.diagramJson)
+        this.graph.positionContent('left')
+        // this.graph.centerContent()
+        // this.graph.zoomToFit()
+      } else {
+        await this.clearDiagram()
+      }
+    },
+    async clearDiagram() {
+      this.dataForm.id = null
+      // this.graph.fromJSON(this.emptyJson)
+      this.graph.fromJSON('')
+      // this.graph.centerContent()
+      // this.graph.zoomToFit()
+      // this.graph.freeze()
+    },
+    async initDigram(productId) {
+      this.timer = setHartBeat(10, 240);
+      console.log(document.documentElement.clientWidth, 'document.documentElement.clientWidth')
+      console.log(document.documentElement.clientHeight, 'document.documentElement.clientHeight')
+      this.graph = new Graph({
+        container: document.getElementById('containerImg'),
+        width: document.documentElement.clientWidth,
+        height: document.documentElement.clientHeight - 200,
+        // async: true,
+        grid: {
+          visible: true,
+        },
+        autoResize: true,
+        history: {
+          enabled: true,
+          beforeAddCommand(event, args) {
+            if (args.key === 'tools') {
+              console.log(args.key, 'event, args')
+              return false
+            }
+          },
+        },
+        // panning: {
+        //   enabled: true,
         // },
-        type: '',
-        id: '',
-        graph: null,
-        globalGridAttr: {
-          statusImg:'',
-          nodeTypeExt:'',
-          type: 'mesh',
-          size: 10,
-          color: '#e5e5e5',
-          thickness: 1,
-          colorSecond: '#d0d0d0',
-          thicknessSecond: 1,
-          factor: 4,
-          bgColor: '#e5e5e5',
-          showImage: true,
-          repeat: 'watermark',
-          position: 'center',
-          bgSize: JSON.stringify({width: 150, height: 150}),
-          opacity: 0.1,
-
-          stroke: '#5F95FF',
-          strokeWidth: 1,
-          connector: 'normal',
-          label: '',
-          nodeStroke: '#5F95FF',
-          nodeStrokeWidth: 1,
-          nodeFill: '#ffffff',
-          nodeFontSize: 12,
-          nodeColor: '#080808',
-          nodeText: '',
-          nodeDate: '',
-          nodeUsers: '',
-          nodeDataDate: '',
-          nodeDataText: '',
-          dataId: '',
-          inspectName: '',
-          distance: 0.5,
-          angle: 0,
-        },
-        isReady: false,
-        curCel: Cell,
-        left_p: document.documentElement.clientHeight-100,
-        ports: {
-          groups: {
-            top: {
-              position: 'top',
-              attrs: {
-                circle: {
-                  r: 4,
-                  magnet: true,
-                  stroke: '#5F95FF',
-                  strokeWidth: 1,
-                  fill: '#fff',
-                  style: {
-                    visibility: 'hidden',
-                  },
-                },
-              },
-            },
-            right: {
-              position: 'right',
-              attrs: {
-                circle: {
-                  r: 4,
-                  magnet: true,
-                  stroke: '#5F95FF',
-                  strokeWidth: 1,
-                  fill: '#fff',
-                  style: {
-                    visibility: 'hidden',
-                  },
-                },
-              },
-            },
-            bottom: {
-              position: 'bottom',
-              attrs: {
-                circle: {
-                  r: 4,
-                  magnet: true,
-                  stroke: '#5F95FF',
-                  strokeWidth: 1,
-                  fill: '#fff',
-                  style: {
-                    visibility: 'hidden',
-                  },
-                },
-              },
-            },
-            left: {
-              position: 'left',
-              attrs: {
-                circle: {
-                  r: 4,
-                  magnet: true,
-                  stroke: '#5F95FF',
-                  strokeWidth: 1,
-                  fill: '#fff',
-                  style: {
-                    visibility: 'hidden',
-                  },
-                },
-              },
-            },
-          },
-          items: [
-            {
-              group: 'top',
-            },
-            {
-              group: 'right',
-            },
-            {
-              group: 'bottom',
-            },
-            {
-              group: 'left',
-            },
-          ],
-        }
-      }
-    },
-    watch: {
-      '$route.params.configId'() {
-        // alert('$route.params.projectId change')
-        this.projectId = this.$route.params.projectId
-        //this.diagramId = this.$route.params.diagramId
-        console.log(this.$route.params.projectId, 'this.$route.params.projectId')
-        console.log(this.$route.params.diagramId, 'this.$route.params.diagramId')
-        this.projectChange2(this.$route.params.diagramId)
-      }
-    },
-    mounted() {
-      this.getProject()
-      this.init()
-      this.type = 'grid'
-    },
-    methods: {
-      async finish() {
-        if (await this.$tip.confirm('纭畾瑕佽繘琛屾彁浜ゆ搷绾靛悧?')) {
-          let submitForm = {
-            params: {
-              wfIdCode: 'wltFlow',
-              bizId: this.dataForm.projectId,
-              stepIdMark: this.pageCode
-            }
-          }
-          let res = await this.$http.get('/wf/approvePass', submitForm)
-          if (res.success) {
-            await this.$alert('鎻愪氦鎴愬姛', '鍙嬫儏鎻愮ず')
-            removeCurrentTabHandle(this)
-            this.$EventBus.$emit('taskRefeshEvent', '缃戠粶鍥�')
-          }
-        }
-      },
-      async getProject() {
-        //let res = await this.$http.get(`/maintain/projectNetworkDiagram/getProjectList`)
-        let res = await this.$http.get(`/homeFunction/projectSelect`)
-
-        this.projectList = res.data
-        if (this.$store.state.user.isAdmin || this.$store.state.user.isAssistant) {
-          this.projectList.push({id: '10000', name: '鏍峰紡妯℃澘'})
-        }
-        if (this.$route.params.projectId) {
-          this.projectId = this.$route.params.projectId
-          this.diagramId = this.$route.params.diagramId
-        } else {
-          if (this.projectList.length > 0) {
-            this.projectId = this.projectList[0].id
-            this.diagramId = this.projectId
-            console.log(this.diagramId, '123456789')
-          }
-        }
-        await this.projectChange2(this.diagramId)
-      },
-
-     /* projectChange() {
-        // alert(555)
-        this.projectChange2(this.projectId)
-      },
-
-      async projectChange2(diagramId) {
-        // alert(1)
-        let params = {
-          wfIdCodes: 'wltFlow',
-          bizId: this.projectId,
-          stepIdMark: 'wlt_pz'
-        }
-        this.$http.get(`/wf/getFlowStepStatus`, {params: params}).then(res => {
-          console.log(res, 'getFlowStepStatus res')
-          if (res.data) {
-            this.flowInfo = res.data
-          }
-        })
-
-        this.diagramName = ''
-        this.dataForm.projectId = this.projectId
-        this.dataForm.diagramId = diagramId
-        this.diagramId = diagramId
-        if (!this.$store.state.user.isZcRole && !this.$store.state.user.isAdmin) {
-          this.diagramIdDisabled = true
-          console.log(this.$store.state.user.deptId, 'this.$store.state.user.deptId')
-          this.diagramId = this.$store.state.user.deptId
-          this.dataForm.diagramId = this.diagramId
-        } else {
-          this.diagramIdDisabled = false
-        }
-        //this.getDiagramIdList(this.projectId)
-        let res = await this.$http.get(`/maintain/projectNetworkDiagram/getDiagramCjList?projectId=${this.projectId}`)
-        this.diagramList = res.data
-        console.log(this.diagramList, 'this.diagramId asdfgh')
-        if (this.diagramList.length > 0) {
-          this.diagramId = this.diagramList[0].diagramId
-          console.log(this.dataForm.diagramId, 'this.dataForm.diagramId.........................')
-        }
-        await this.getDiagram()
-      },*/
-
-/*      diagramIdChanges() {
-        this.dataForm.diagramId = this.diagramId
-        // this.diagramIdChange(this.diagramId)
-        this.getDiagram()
-      },*/
-      async getDiagram() {
-        let params = {
-          modelId : this.dataForm.modelId
-        }
-          let res = await this.$http.get(`/taskReliability/ModelLine/getDiagram`, {params: params})
-          if (res.data !== null && res.data.content != null) {
-            this.dataForm = res.data
-            console.log(this.dataForm, 'this.dataForm in getDiagram')
-            this.diagramJson = JSON.parse(this.dataForm.content)
-            // console.log(this.dataForm.content,'this.Diagram content')
-            console.log(this.diagramJson, 'this.Diagram json')
-            this.graph.fromJSON(this.diagramJson)
-            this.graph.centerContent()
-            this.graph.zoomToFit()
-          } else {
-            this.dataForm.id = null
-            // this.graph.fromJSON(this.emptyJson)
-            this.graph.centerContent()
-            this.graph.zoomToFit()
-            // this.graph.freeze()
-          }
-
-      },
-      init() {
-        this.timer = setHartBeat(10, 240);
-
-        console.log(document.documentElement.clientWidth, 'document.documentElement.clientWidth')
-        console.log(document.documentElement.clientHeight, 'document.documentElement.clientHeight')
-        this.graph = new Graph({
-          container: document.getElementById('containerImg'),
-          width: document.documentElement.clientWidth,
-          height: document.documentElement.clientHeight - 100,
-          // async: true,
-          grid: {
-            visible: true,
-          },
-          onToolItemCreated({tool}) {
-            const handle = tool
-            const options = handle.options
-            if (options && options.index % 2 === 1) {
-              tool.setAttrs({fill: 'red'})
-            }
-          },
+        scroller: {
+          enabled: true,
+          pageVisible: true,
           autoResize: true,
-          history: true,
-          // panning: {
-          //   enabled: true,
-          // },
-          scroller: {
-            enabled: true,
-            pageVisible: true,
-            pageBreak: true,
-            pannable: true,
+          pageBreak: true,
+          pannable: true,
+          minVisibleWidth: 200,
+          minVisibleHeight: 200,
+          modifiers: 'shift',
+        },
+        mousewheel: {
+          enabled: true,
+          zoomAtMousePosition: true,
+          modifiers: 'ctrl',
+          minScale: 0.5,
+          maxScale: 3,
+        },
+        connecting: {
+          router: {
+            name: 'manhattan',
+            // args: {
+            //   padding: 1,
+            // },
           },
-          mousewheel: {
-            enabled: true,
-            zoomAtMousePosition: true,
-            modifiers: 'ctrl',
-            minScale: 0.1,
-            maxScale: 10,
-          },
-          connecting: {
-            router: {
-              name: 'normal',
-              // args: {
-              //   padding: 1,
-              // },
+          connector: {
+            name: 'rounded',
+            args: {
+              radius: 5,
             },
-            connector: {
-              name: 'rounded',
-              args: {
-                radius: 8,
+          },
+          anchor: 'center',
+          connectionPoint: 'anchor',
+          allowBlank: false,
+          snap: {
+            radius: 20,
+          },
+          createEdge() {
+            return new Shape.Edge({
+              attrs: {
+                line: {
+                  stroke: '#A2B1C3',
+                  strokeWidth: 2,
+                  targetMarker: 'classic'
+                }
               },
-            },
-            // anchor: 'center',
-            connectionPoint: 'anchor',
-            allowBlank: false,
-            snap: {
-              radius: 20,
-            },
-            createEdge() {
-              return new Shape.Edge({
+              labels: [{
                 attrs: {
-                  line: {
-                    stroke: '#A2B1C3',
-                    strokeWidth: 2,
-                    targetMarker: 'classic'
+                  body: {
+                    stroke: '#5F95FF',
+                  },
+                  text: {
+                    text: ''
                   }
                 },
-                labels: [{
-                  attrs: {
-                    body: {
-                      stroke: '#5F95FF',
-                    },
-                    text: {
-                      text: ''
-                    }
-                  },
-                  position: {
-                    distance: 0.5,
-                    angle: 180,
-                    options: {
-                      keepGradient: true,
-                      ensureLegibility: true
-                    }
-                  }
-                }],
-                zIndex: 0,
-              })
-            },
-            validateConnection({targetMagnet}) {
-              return !!targetMagnet
-            },
-          },
-          highlighting: {
-            magnetAdsorbed: {
-              name: 'stroke',
-              args: {
-                attrs: {
-                  fill: '#5F95FF',
-                  stroke: '#5F95FF',
-                },
-              },
-            },
-          },
-          resizing: {
-            enabled: true,
-            restricted: true
-          },
-          rotating: true,
-          selecting: {
-            enabled: true,
-            rubberband: true,
-            rubberEdge: true,
-            showNodeSelectionBox: true,
-          },
-          snapline: true,
-          keyboard: true,
-          clipboard: true,
-        })
-        this.graph.centerContent()
-        const stencil = new Addon.Stencil({
-          title: '',
-          target: this.graph,
-          stencilGraphWidth: 230,
-          stencilGraphHeight: 300,
-          collapsable: false,
-          groups: [
-            {
-              title: '杩愮畻绗﹀彿',
-              name: 'group1',
-              collapsable: false
-            },
-            {
-              title: '璁惧鑺傜偣',
-              name: 'group2',
-              collapsable: false
-            }
-          ],
-          layoutOptions: {
-            columns: 2,
-            columnWidth: 110,
-            // rowHeight: 75,
-          },
-        })
-        document.getElementById('stencilImg').appendChild(stencil.container)
-
-        Graph.registerNode(
-            'custom-rect',
-            {
-              inherit: 'rect',
-              width: 86,
-              height: 26,
-              zIndex: 10,
-              data: {
-                dataId: '',
-                finishDate: '',
-                inspectName: ''
-              },
-              attrs: {
-                body: {
-                  strokeWidth: 1,
-                  stroke: 'none',
-                  fill: 'none',
-                },
-                text: {
-                  // fontFamily: '浠垮畫',
-                  fontSize: 20,
-                  fill: '#000',
-                },
-                label: {
-                  refX: 0,
-                  refY: 0.5,
-                  textAnchor: 'start',
-                  textVerticalAnchor: 'middle',
-                  textWrap: {
-                    text: '鏂囧瓧妯℃澘',
-                    width: -10,      // 瀹藉害鍑忓皯 10px
-                    ellipsis: false,  // 鏂囨湰瓒呭嚭鏄剧ず鑼冨洿鏃讹紝鑷姩娣诲姞鐪佺暐鍙�
-                    breakWord: true, // 鏄惁鎴柇鍗曡瘝
-                  }
-                },
-              },
-              ports: {...this.ports},
-            },
-            true,
-        )
-
-        Graph.registerNode(
-            'custom-polygon',
-            {
-              inherit: 'polygon',
-              width: 86,
-              height: 56,
-              attrs: {
-                body: {
-                  strokeWidth: 1,
-                  stroke: '#5F95FF',
-                  fill: '#EFF4FF',
-                },
-                // title:{
-                //   text:'',
-                //   refX: 40,
-                //   refY: 38,
-                //   fontSize: 20,
-                //   fill: '#262626',
-                //   'text-anchor': 'start',
-                // },
-                text: {
-                  // refX: 40,
-                  // refY: 20,
-                  fontSize: 20,
-                  fill: '#262626',
-                  // 'text-anchor': 'start',
-                },
-              },
-              // markup: [
-              //   {
-              //     tagName: 'polygon',
-              //     selector: 'body',
-              //   },
-              //   {
-              //     tagName: 'text',
-              //     selector: 'title',
-              //   },
-              //   {
-              //     tagName: 'text',
-              //     selector: 'text',
-              //   },
-              // ],
-              ports: {
-                ...this.ports
-                // items: [
-                //   {
-                //     group: 'top',
-                //   },
-                //   {
-                //     group: 'bottom',
-                //   },
-                // ],
-              },
-            },
-            true,
-        )
-        //
-        Graph.registerNode(
-            'custom-circle',
-            {
-              inherit: 'ellipse',
-              width: 120,
-              height: 120,
-              data: {
-                dataId: '',
-                finishDate: ''
-              },
-              attrs: {
-                body: {
-                  strokeWidth: 1,
-                  stroke: '#5F95FF',
-                  fill: '#EFF4FF',
-                },
-                //鏃ユ湡
-                title: {
-                  text: '',
-                  fontSize: 12,
-                  fill: '#262626',
-                  refX: 0.5,
-                  refY: '100%',
-                  refY2: -10,
-                  textAnchor: 'middle',
-                  textVerticalAnchor: 'bottom',
-                },
-                // 鍚嶇О
-                text: {
-                  // fontFamily: '浠垮畫',
-                  fontSize: 20,
-                  fill: '#262626',
-                  textWrap: {
-                    width: 80,      // 瀹藉害涓� 80px鎹㈣
-                    ellipsis: false,  // 鏂囨湰瓒呭嚭鏄剧ず鑼冨洿鏃讹紝鑷姩娣诲姞鐪佺暐鍙�
-                    breakWord: true, // 鏄惁鎴柇鍗曡瘝
-                  }
-                },
-              },
-              markup: [
-                {
-                  tagName: 'ellipse',
-                  selector: 'body',
-                },
-                {
-                  tagName: 'text',
-                  selector: 'title',
-                },
-                {
-                  tagName: 'text',
-                  selector: 'text',
-                },
-              ],
-              ports: {...this.ports},
-            },
-            true,
-        )
-        Graph.registerNode(
-            'custom-circle1',
-            {
-              inherit: 'ellipse',
-              width: 65,
-              height: 65,
-              data: {
-                dataId: '',
-                finishDate: ''
-              },
-              attrs: {
-                body: {
-                  strokeWidth: 1,
-                  stroke: '#5F95FF',
-                  fill: '#EFF4FF',
-                },
-                //鏃ユ湡
-                text: {
-                  // fontFamily: '浠垮畫',
-                  fontSize: 12,
-                  text: '鏃ユ湡鑺傜偣',
-                  fill: '#262626',
-                },
-              },
-              ports: {...this.ports},
-            },
-            true,
-        )
-        Graph.registerNode(
-            'custom-text',
-            {
-              inherit: 'text-block',
-              width: 86,
-              height: 56,
-              attrs: {
-                body: {
-                  strokeWidth: 1,
-                  stroke: '#5F95FF',
-                  fill: '#EFF4FF',
-                },
-                text: {
-                  text: '涓撲笟',
-                  fontSize: 20,
-                  style: {
-                    color: this.globalGridAttr.nodeColor
-                  },
-                  refX: '0',
-                  refY: -0.5,
-                  refY2: 1,
-                  textAnchor: 'middle',
-                  textVerticalAnchor: 'middle',
-                },
-              },
-              markup: [
-                {
-                  tagName: 'rect',
-                  selector: 'body',
-                },
-                {
-                  tagName: 'text',
-                  selector: 'text',
-                },
-              ],
-              ports: {...this.ports},
-            },
-            true,
-        )
-        Graph.registerNode(
-            'rectangle',
-            {
-              width: 86,
-              height: 56,
-              attrs: {
-                body: {
-                  fill: '#FFF',
-                  stroke: '#000',
-                  strokeWidth: 1,
-                },
-                icon: {
-                  class: 'el-icon-refresh', // Element UI鍥炬爣鐨刢lass鍚嶇О
-                  'xlink:href': '', // 濡傛灉闇�瑕佷娇鐢⊿VG鍥炬爣锛岃璁剧疆xlink:href灞炴�ф潵寮曞叆SVG鏂囦欢
-                  refX: '50%',
-                  refY: '50%',
-                  yAlignment: 'middle',
-                  xAlignment: 'middle',
-                },
-              },
-              markup: [
-                {
-                  tagName: 'rect',
-                  selector: 'body',
-                },
-                {
-                  tagName: 'i',
-                  selector: 'icon',
-                },
-              ],
-              ports: {...this.ports},
-            },
-            true
-        )
-        // 涓�绾х綉缁滃浘鐨勬棩鏈熸枃瀛楄妭鐐�
-        const r5 = this.graph.createNode({
-          shape: 'custom-circle',
-          data: {
-            dataId: '',
-            finishDate: '',
-            inspectName: ''
-          },
-          label: '闃舵',
-        })
-
-        // 浜岀骇缃戠粶鍥炬棩鏈熻妭鐐�
-        const r6 = this.graph.createNode({
-          shape: 'custom-circle1',
-          data: {
-            dataId: '',
-            finishDate: '',
-            inspectName: ''
-          },
-        })
-        // 浜岀骇缃戠粶鍥炬枃瀛楄妭鐐�
-        const r9 = this.graph.createNode({
-          shape: 'custom-rect'
-        })
-        const imageNodes = this.imgsList.map((item) =>
-            this.graph.createNode({
-              shape: 'image',
-              imageUrl: require('/public/modelImg/'+item.imgPath+'.png'),
-              width: item.imgWidth,
-              height: item.imgHeight,
-              x: item.imgWidth,
-              y: item.imgHeight,
-              data: {
-                dataId: '',
-                nodeType: item.nodeType,
-                nodeTypeExt: ''
-              },
-              attrs: {
-                text:{
-                  text: item.imgName,
-                  fontSize: 14,
-                  style: {
-                    color: this.globalGridAttr.nodeColor
-                  },
-                  refX: 0.5,
-                  refY: '100%',
-                  refY2: 4,
-                  textAnchor: 'middle',
-                  textVerticalAnchor: 'top',
-                },
-              },
-              ports: {...this.ports},
-            }),
-        )
-        const imageNodes2 = this.imgsList2.map((item) =>
-            this.graph.createNode({
-              shape: 'image',
-              imageUrl: require('/public/modelImg/'+item.imgPath+'.png'),
-              width:item.imgWidth,
-              height:item.imgHeight,
-              x:item.imgWidth,
-              y:item.imgHeight,
-              data: {
-                dataId: item.data.dataId,
-                nodeType: item.nodeType,
-                nodeTypeExt: item.data.nodeTypeExt,
-                statusImg:item.statusImg
-              },
-              attrs: {
-                text:{
-                  text: item.imgName,
-                  fontSize: 14,
-                  style: {
-                    color: this.globalGridAttr.nodeColor
-                  },
-                  refX: 0.5,
-                  refY: '100%',
-                  refY2: 4,
-                  textAnchor: 'middle',
-                  textVerticalAnchor: 'top',
-                },
-              },
-              tools: [
-                {
-                  name: 'button',
-                  args: {
-                    markup: [
-                      {
-                        tagName: 'image',
-                        selector: 'icon',
-                        attrs: {
-                          // 'xlink:href': 'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*evDjT5vjkX0AAAAAAAAAAAAAARQnAQ',
-                          'xlink:href':item.statusImg,
-                          width: 30,
-                          height: 30,
-                          x: 0,
-                          y: 0
-                        }
-                      }
-                    ]
+                position: {
+                  distance: 0.5,
+                  angle: 180,
+                  options: {
+                    keepGradient: true,
+                    ensureLegibility: true
                   }
                 }
-              ],
-              ports: {...this.ports},
-            }),
-        )
-        stencil.load(imageNodes, 'group1')
-        stencil.load(imageNodes2, 'group2')
-
-
-        this.graph.bindKey(['meta+c', 'ctrl+c'], () => {
-          const cells = this.graph.getSelectedCells()
-          if (cells.length) {
-            this.graph.copy(cells)
-          }
-          return false
-        })
-
-        this.graph.bindKey(['meta+x', 'ctrl+x'], () => {
-          const cells = this.graph.getSelectedCells()
-          if (cells.length) {
-            this.graph.cut(cells)
-          }
-          return false
-        })
-        this.graph.bindKey(['meta+v', 'ctrl+v'], () => {
-          if (!this.graph.isClipboardEmpty()) {
-            const cells = this.graph.paste({offset: 32})
-            this.graph.cleanSelection()
-            this.graph.select(cells)
-          }
-          return false
-        })
-//undo redo
-        this.graph.bindKey(['meta+z', 'ctrl+z'], () => {
-          if (this.graph.history.canUndo()) {
-            this.graph.history.undo()
-          }
-          return false
-        })
-
-        this.graph.bindKey(['meta+shift+z', 'ctrl+shift+z'], () => {
-          if (this.graph.history.canRedo()) {
-            this.graph.history.redo()
-          }
-          return false
-        })
-
-// select all
-        this.graph.bindKey(['meta+a', 'ctrl+a'], () => {
-          const nodes = this.graph.getNodes()
-          if (nodes) {
-            this.graph.select(nodes)
-          }
-        })
-//delete
-        this.graph.bindKey('delete', () => {
-          const cells = this.graph.getSelectedCells()
-          if (cells.length) {
-            this.$confirm('鏄惁鍒犻櫎璇ヨ妭鐐�?', '鎻愮ず', {
-              confirmButtonText: '纭畾',
-              cancelButtonText: '鍙栨秷',
-              type: 'warning'
-            }).then(() => {
-              this.$message({
-                type: 'success',
-                message: '鍒犻櫎鎴愬姛!'
-              })
-              this.graph.removeCells(cells)
-            }).catch(() => {
-              this.$message({
-                type: 'info',
-                message: '宸插彇娑堝垹闄�'
-              })
-            })
-          }
-        })
-// zoom
-        this.graph.bindKey(['ctrl+1', 'meta+1'], () => {
-          const zoom = this.graph.zoom()
-          if (zoom < 1.5) {
-            this.graph.zoom(0.1)
-          }
-        })
-
-        this.graph.bindKey(['ctrl+2', 'meta+2'], () => {
-          const zoom = this.graph.zoom()
-          if (zoom > 0.5) {
-            this.graph.zoom(-0.1)
-          }
-        })
-
-        this.graph.on('blank:click', ({cell}) => {
-          this.reset()
-          // this.type.value = "grid"
-          this.type = 'grid'
-          // this.id = cell.id
-        })
-
-        this.graph.on('cell:click', ({cell}) => {
-          // this.type.value = cell.isNode() ? "node" : "edge"
-          this.type = cell.isNode() ? 'node' : 'edge'
-          this.shape = cell.shape
-          this.id = cell.id
-          if(this.type==='node'){
-            this.nodeType = cell.getData().nodeType
-            console.log(this.nodeType, 'this.nodeType')
-          }
-          console.log(this.shape, 'this.shape')
-          // this.nodeOpt(this.id, this.globalGridAttr)
-        })
-        //鍗曞嚮杈硅妭鐐�
-        this.graph.on('edge:click', ({edge}) => {
-          this.reset()
-          edge.attr('line/stroke', 'orange')
-          edge.prop('labels/0', {
-            attrs: {
-              body: {
-                stroke: 'orange',
-              },
-            },
-
-          })
-        })
-        // 鍗曞嚮node鑺傜偣
-        this.graph.on('node:click', ({node}) => {
-          this.reset()
-          node.attr('line/stroke', 'orange')
-          node.prop('labels/0', {
-            attrs: {
-              body: {
-                stroke: 'orange',
-              },
-            },
-          })
-        })
-        // 鎺у埗杩炴帴妗╂樉绀�/闅愯棌
-        this.graph.on('node:delete', ({view, e}) => {
-          e.stopPropagation()
-          view.cell.remove()
-        })
-
-        this.graph.on('node:customevent', ({name, view, e}) => {
-          if (name === 'node:delete') {
-            e.stopPropagation()
-            view.cell.remove()
-          }
-        })
-        // 鍙屽嚮缂栬緫
-        this.graph.on('cell:dblclick', ({cell, e}) => {
-          const isNode = cell.isNode()
-          const name = cell.isNode() ? 'node-editor' : 'edge-editor'
-          cell.removeTool(name)
-          cell.addTools({
-            name,
-            args: {
-              event: e,
-              attrs: {
-                backgroundColor: isNode ? '#EFF4FF' : '#FFF',
-                text: {
-                  fontSize: 16,
-                  fill: '#262626',
-                },
-              },
-            },
-          })
-        })
-
-        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('edge:mouseenter', ({cell, view}) => {
-          // alert(123)
-          cell.addTools([
-            {
-              name: 'source-arrowhead',
-            },
-            {
-              name: 'target-arrowhead',
-              args: {
-                attrs: {
-                  fill: 'red',
-                },
-              },
-            },
-          ])
-          cell.addTools(
-            [
-              {
+              }],
+              tools: {
                 name: 'segments',
-                args: {snapRadius: 20, attrs: {fill: '#444'}}
-              }
-            ]
-          )
-        })
-
-        this.graph.on('edge:mouseleave', ({cell}) => {
-          cell.removeTools()
-        })
-
-        this.getDiagram()
-      },
-      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()
-        const edges = this.graph.getEdges()
-        nodes.forEach((node) => {
-          node.attr('body/stroke', '#5F95FF')
-        })
-        edges.forEach((edge) => {
-          edge.attr('line/stroke', '#5F95FF')
-          edge.prop('labels/0', {
-            attrs: {
-              body: {
+                args: {
+                  attrs: {fill: '#666'},
+                },
+              },
+              zIndex: 0,
+            })
+          },
+          validateConnection({targetMagnet}) {
+            return !!targetMagnet
+          },
+        },
+        highlighting: {
+          magnetAdsorbed: {
+            name: 'stroke',
+            args: {
+              attrs: {
+                fill: '#5F95FF',
                 stroke: '#5F95FF',
               },
             },
+          },
+        },
+        resizing: true,
+        rotating: true,
+        selecting: {
+          enabled: true,
+          rubberband: true,
+          rubberEdge: true,
+          // showNodeSelectionBox: true,
+        },
+        snapline: true,
+        keyboard: true,
+        clipboard: true,
+      })
+      this.graph.centerContent()
+      const stencil = new Addon.Stencil({
+        getDragNode: (node) => node.clone({keepId: true}),
+        getDropNode: (node) => {
+          if (node.getData().type && node.getData().type === 'imageNodes2') {
+            return node.clone({keepId: true})
+          } else {
+            return node.clone()
+          }
+        },
+        validateNode: (node) => {
+          const existingNodes = this.graph.getNodes(); // 鑾峰彇鐢诲竷涓婃墍鏈夎妭鐐�
+          for (const existingNode of existingNodes) {
+            if (existingNode.id === node.id) {
+              this.$message({message: '璇ヨ澶囪妭鐐瑰凡鍦ㄧ敾甯冧笂锛屾棤娉曞啀娆$粯鍒�', type: 'warning'})
+              return false; // 鍙栨秷娣诲姞鑺傜偣鎿嶄綔
+            }
+          }
+        },
+        title: '',
+        target: this.graph,
+        stencilGraphWidth: 200,
+        stencilGraphHeight: 280,
+        collapsable: true,
+        groups: [
+          {
+            title: '杩愮畻绗﹀彿',
+            name: 'group1',
+          },
+          {
+            title: '缁勫悎鍥�',
+            name: 'combiningImages',
+            graphHeight: 100,
+          },
+          {
+            title: '璁惧鑺傜偣',
+            name: 'group2',
+            graphHeight: '',
+            layoutOptions: {
+              rowHeight: 90,
+            },
+          }
+        ],
+        layoutOptions: {
+          columns: 2,
+          columnWidth: 105,
+        },
+      })
+      document.getElementById('stencilImg').appendChild(stencil.container)
+      const imageNodes = this.imgsList.map((item) =>
+          this.graph.createNode({
+            shape: 'image',
+            // imageUrl: require('/public/modelImg/' + item.imgPath + '.png'),
+            width: item.imgWidth,
+            height: item.imgHeight,
+            data: {
+              type: 'imageNodes',
+              dataId: '',
+              nodeType: item.nodeType,
+              nodeTypeExt: '',
+              voteNum: ''
+            },
+            attrs: {
+              image: {
+                'xlink:href': '/modelImg/' + item.imgPath + '.svg',
+              },
+              text: {
+                text: item.imgName,
+                fontSize: 14,
+                style: {
+                  color: this.globalGridAttr.nodeColor
+                },
+                refX: 0.5,
+                refY: '100%',
+                refY2: 4,
+                textAnchor: 'middle',
+                textVerticalAnchor: 'top',
+              },
+            },
+            ports: {...this.ports},
+          }),
+      )
+      const combiningImages = this.combiningImages.map((item) =>
+          this.graph.createNode({
+            shape: 'image',
+            // imageUrl: require('/public/modelImg/' + item.imgPath + '.png'),
+            width: item.imgWidth,
+            height: item.imgHeight,
+            data: {
+              type: 'imageNodes',
+              dataId: '',
+              nodeType: item.nodeType,
+              nodeTypeExt: '',
+              voteNum: ''
+            },
+            attrs: {
+              image: {
+                'xlink:href': '/modelImg/' + item.imgPath + '.svg',
+              },
+              text: {
+                text: item.imgName,
+                fontSize: 14,
+                style: {
+                  color: this.globalGridAttr.nodeColor
+                },
+                refX: 0.5,
+                refY: '100%',
+                refY2: 4,
+                textAnchor: 'middle',
+                textVerticalAnchor: 'top',
+              },
+            },
+            ports: {...this.ports},
+          }),
+      )
+      let params = {
+        productId: productId
+      }
+      let res = await this.$http.get(`/basicInfo/XhProductModel/getProduct`, {params: params})
+      this.imgsList2 = res.data
+      console.log(this.imgsList2, 'getProduct(productId)234567890')
+      const imageNodes2 = this.imgsList2.map((item) =>
+          this.graph.createNode({
+            shape: 'image',
+            imageUrl: `${window.SITE_CONFIG['apiURL']}/sysPictureBase/getProductImg?token=${Cookies.get('token')}&id=${item.imgPath}`,
+            width: 60,
+            height: 60,
+            id: item.dataId, // 鎵嬪姩璁剧疆鑺傜偣鐨� ID
+            data: {
+              type: 'imageNodes2',
+              isRepair: item.isRepair,
+              dataId: item.dataId,
+              nodeType: item.nodeType,
+              nodeTypeExt: item.nodeTypeExt,
+              productType: item.productType,
+              statusImg: item.statusImg,
+              reliabDistribType: item.reliabDistribType,
+              repairDistribType: item.repairDistribType,
+              repairMttcr: item.repairMttcr,
+              repairMttcrOther: item.repairMttcrOther,
+              taskMtbcf: item.taskMtbcf,
+              taskMtbcfOther: item.taskMtbcfOther,
+              imgHeight: item.imgHeight,
+              imgWidth: item.imgWidth,
+              voteNum: '',
+            },
+            attrs: {
+              text: {
+                text: item.imgName,
+                fontSize: 14,
+                style: {
+                  color: this.globalGridAttr.nodeColor
+                },
+                refX: 0.5,
+                refY: '100%',
+                refY2: 4,
+                textAnchor: 'middle',
+                textVerticalAnchor: 'top',
+              },
+            },
+            tools: [
+              {
+                name: 'button',
+                args: {
+                  markup: [
+                    {
+                      tagName: 'image',
+                      selector: 'icon',
+                      attrs: {
+                        // 'xlink:href': 'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*evDjT5vjkX0AAAAAAAAAAAAAARQnAQ',
+                        'xlink:href': item.statusImg,
+                        width: 30,
+                        height: 30,
+                        x: 0,
+                        y: 0
+                      }
+                    }
+                  ]
+                }
+              }
+            ],
+            ports: {...this.ports},
+          }),
+      )
+      stencil.load(imageNodes, 'group1')
+      stencil.load(imageNodes2, 'group2')
+      stencil.load(combiningImages, 'combiningImages')
+
+      this.graph.bindKey(['meta+c', 'ctrl+c'], () => {
+        const cells = this.graph.getSelectedCells()
+        if (cells.length) {
+          this.graph.copy(cells)
+        }
+        return false
+      })
+
+      this.graph.bindKey(['meta+x', 'ctrl+x'], () => {
+        const cells = this.graph.getSelectedCells()
+        if (cells.length) {
+          this.graph.cut(cells)
+        }
+        return false
+      })
+      this.graph.bindKey(['meta+v', 'ctrl+v'], () => {
+        if (!this.graph.isClipboardEmpty()) {
+          const cells = this.graph.paste({offset: 32})
+          this.graph.cleanSelection()
+          this.graph.select(cells)
+        }
+        return false
+      })
+//undo redo
+      this.graph.bindKey(['meta+z', 'ctrl+z'], () => {
+        if (this.graph.history.canUndo()) {
+          this.graph.history.undo()
+        }
+        return false
+      })
+
+      this.graph.bindKey(['meta+shift+z', 'ctrl+shift+z'], () => {
+        if (this.graph.history.canRedo()) {
+          this.graph.history.redo()
+        }
+        return false
+      })
+
+// select all
+      this.graph.bindKey(['meta+a', 'ctrl+a'], () => {
+        const nodes = this.graph.getNodes()
+        if (nodes) {
+          this.graph.select(nodes)
+        }
+      })
+//delete
+      this.graph.bindKey('delete', () => {
+        const cells = this.graph.getSelectedCells()
+        if (cells.length) {
+          this.$confirm('鏄惁鍒犻櫎璇ヨ妭鐐�?', '鎻愮ず', {
+            confirmButtonText: '纭畾',
+            cancelButtonText: '鍙栨秷',
+            type: 'warning'
+          }).then(() => {
+            this.$message({
+              type: 'success',
+              message: '鍒犻櫎鎴愬姛!'
+            })
+            this.graph.removeCells(cells)
+          }).catch(() => {
+            this.$message({
+              type: 'info',
+              message: '宸插彇娑堝垹闄�'
+            })
           })
+        }
+      })
+// zoom
+      this.graph.bindKey(['ctrl+1', 'meta+1'], () => {
+        const zoom = this.graph.zoom()
+        if (zoom < 1.5) {
+          this.graph.zoom(0.1)
+        }
+      })
+
+      this.graph.bindKey(['ctrl+2', 'meta+2'], () => {
+        const zoom = this.graph.zoom()
+        if (zoom > 0.5) {
+          this.graph.zoom(-0.1)
+        }
+      })
+
+      this.graph.on('blank:click', ({cell}) => {
+        this.reset()
+        // this.type.value = "grid"
+        this.type = 'grid'
+        // this.id = cell.id
+      })
+      // 鐩戝惉鑺傜偣娣诲姞浜嬩欢
+      this.graph.on('node:added', ({node}) => {
+        const nodeId = node.id; // 鑾峰彇鑺傜偣鐨勫敮涓� ID
+        const nodeObj = node
+        const intersectNodes = [];
+        // 妫�鏌ラ櫎褰撳墠鑺傜偣涔嬪鐨勬墍鏈夎妭鐐圭殑鍖呭洿妗嗘槸鍚︾浉浜�
+        for (const otherNode of this.graph.getNodes()) {
+          if (otherNode === node) continue;
+          const bbox1 = node.getBBox();
+          const bbox2 = otherNode.getBBox();
+          if (this.isIntersect(bbox1, bbox2)) {
+            intersectNodes.push(otherNode);
+          }
+        }
+        if (intersectNodes.length > 0) {
+          // console.log('Nodes intersect with node:', node.id);
+          console.log('Intersecting nodes:', intersectNodes.map(n => n)); // 鐩镐氦鑺傜偣鐨勫璞�
+          intersectNodes.map(node => {
+            this.addNodeAndConnect(node, nodeObj);
+          })
+        }
+      });
+      this.graph.on('cell:click', ({cell}) => {
+        // this.type.value = cell.isNode() ? "node" : "edge"
+        this.type = cell.isNode() ? 'node' : 'edge'
+        this.shape = cell.shape
+        this.id = cell.id
+        if (this.type === 'node') {
+          this.nodeType = cell.getData().nodeType
+          console.log(this.nodeType, cell.id, 'this.nodeType')
+        }
+        console.log(this.shape, 'this.shape')
+        // this.nodeOpt(this.id, this.globalGridAttr)
+      })
+      //鍗曞嚮杈硅妭鐐�
+      this.graph.on('edge:click', ({edge}) => {
+        this.reset()
+        edge.attr('line/stroke', 'orange')
+        edge.prop('labels/0', {
+          attrs: {
+            body: {
+              stroke: 'orange',
+            },
+          },
+
         })
-      },
-      // nodeOpt(id, globalGridAttr) {
-      //   this.curCel = null
-      //   if (id) {
-      //     let cell = this.graph.getCellById(id)
-      //     console.log(cell, 'let cell 123456')
-      //     if (!cell || !cell.isNode()) {
-      //       return
-      //     }
-      //     this.curCel = cell
-      //     globalGridAttr.nodeStroke = cell.attr('body/stroke')
-      //     globalGridAttr.nodeStrokeWidth = cell.attr('body/strokeWidth')
-      //     globalGridAttr.nodeFill = cell.attr('body/fill')
-      //     globalGridAttr.nodeFontSize = cell.attr('text/fontSize')
-      //     globalGridAttr.nodeFontSize = cell.attr('title/fontSize')
-      //     globalGridAttr.nodeColor = cell.attr('text/fill')
-      //     globalGridAttr.nodeColor = cell.attr('title/fill')
-      //     globalGridAttr.nodeColor = cell.attr('text/style/color')
-      //     globalGridAttr.nodeColor =  cell.attr('title/style/color')
-      //     globalGridAttr.nodeUsers = cell.attr('approve/users')
-      //     globalGridAttr.nodeText = cell.attr('text/text')
-      //     globalGridAttr.nodeDate = cell.attr('title/text')
-      //     // let data={
-      //     //   dataId:this.projectId,
-      //     //   finishDate: globalGridAttr.nodeDate,
-      //     // }
-      //     cell.getData()
-      //     console.log( cell.getData(),' cell.getData() 909')
-      //   }
-      //   return this.curCel;
-      // },
-      async search() {
-        await this.getDiagram();
-      },
-      async saveDiagram() {
-        console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()')
-        this.dataForm.content = JSON.stringify(this.graph.toJSON())
-        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.$alert('淇濆瓨鎴愬姛', '鎻愮ず', {
-              confirmButtonText: '纭畾'
-            })
-          }
+      })
+      // 鍗曞嚮node鑺傜偣
+      this.graph.on('node:click', ({node}) => {
+      })
+      // 鎺у埗杩炴帴妗╂樉绀�/闅愯棌
+      this.graph.on('node:delete', ({view, e}) => {
+        e.stopPropagation()
+        view.cell.remove()
+      })
+
+      this.graph.on('node:customevent', ({name, view, e}) => {
+        if (name === 'node:delete') {
+          e.stopPropagation()
+          view.cell.remove()
+        }
+      })
+      // 鍙屽嚮缂栬緫
+      this.graph.on('cell:dblclick', ({cell, e}) => {
+        const isNode = cell.isNode()
+        const name = cell.isNode() ? 'node-editor' : 'edge-editor'
+        cell.removeTool(name)
+        cell.addTools({
+          name,
+          args: {
+            event: e,
+            attrs: {
+              backgroundColor: isNode ? '#EFF4FF' : '#FFF',
+              text: {
+                fontSize: 16,
+                fill: '#262626',
+              },
+            },
+          },
         })
-      },
-      async analyzeDiagram() {
-        console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()')
-        this.dataForm.content = JSON.stringify(this.graph.toJSON())
-        console.log(this.dataForm, 'dataFrom')
-        await this.$http['post'](`/taskReliability/ModelLine/analyze`, this.dataForm).then(async res => {
-          if (res.msg === 'success') {
-            this.$alert('瑙f瀽鎴愬姛', '鎻愮ず', {
-              confirmButtonText: '纭畾'
-            })
-          }
-        })
-      },
-      // AlignmentsChanges(val){
-      //   console.log(val,'align.value')
-      //     if(val ==='閫夐」1'){
-      //       console.log(val,'align.value')
-      //        this.leftAlign()
-      //     }
-      //     if(val ==='閫夐」2') {
-      //       console.log('鍙冲榻�','align.value')
-      //        this.rightAlign()
-      //     }
-      // },
-      leftAlign() {
-        const NODE = this.graph.getSelectedCells()
-        let leftX = null
-        for (let a of NODE) {
-          if (leftX == null || a.getBBox().x < leftX) {
-            leftX = a.getBBox().x
-          }
-        }
-        for (let a of NODE) {
-          let y = a.getBBox().y
-          a.position(leftX, y)
-          // console.log(leftX, ':', y, '  x:y')
-        }
-      },
-      topAlign() {
-        const NODE = this.graph.getSelectedCells()
-        let topY = null
-        for (let a of NODE) {
-          console.log(a.getBBox(), 'a.getBBox()')
-          if (topY == null || a.getBBox().y < topY) {
-            topY = a.getBBox().y
-          }
-        }
-        for (let a of NODE) {
-          let x = a.getBBox().x
-          a.position(x, topY)
-          // console.log(leftX, ':', y, '  x:y')
-        }
-      },
-      centerAlign() {
-        const NODE = this.graph.getSelectedCells()
-        let rightX = null
-        let leftX = null
-        for (let a of NODE) {
-          if (leftX == null || a.getBBox().x < leftX) {
-            leftX = a.getBBox().x
-          }
-        }
-        for (let a of NODE) {
-          if (rightX == null || a.getBBox().x + a.getBBox().width > rightX) {
-            rightX = a.getBBox().x + a.getBBox().width
-          }
-        }
+      })
 
-        let centerX = leftX + (rightX - leftX) / 2
+      this.graph.on('node:mouseenter', ({node}) => {
+        const container = document.getElementById('containerImg')
+        const ports = container.querySelectorAll(
+            '.x6-port-body',
+        )
+        this.showPorts(ports, true)
+      })
 
-        for (let a of NODE) {
-          let y = a.getBBox().y
-          a.position(centerX - a.getBBox().width / 2, y)
-          // console.log(leftX, ':', y, '  x:y')
-        }
-      },
-      shuipingAlign() {
-        const NODE = this.graph.getSelectedCells()
-        let bottomY = null
-        let topY = null
-        for (let a of NODE) {
-          if (topY == null || a.getBBox().y || 0 < topY) {
-            topY = a.getBBox().y
-          }
-        }
-        for (let a of NODE) {
-          if (bottomY == null || a.getBBox().y + a.getBBox().height > bottomY) {
-            bottomY = a.getBBox().y + a.getBBox().height
-          }
-        }
+      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)
+      })
 
-        let centerY = topY + (bottomY - topY) / 2
-        for (let a of NODE) {
-          let x = a.getBBox().x
-          let centerHei = a.getBBox().height / 2
-          a.position(x, centerY - centerHei)
-        }
-      },
-      rightAlign() {
-        const NODE = this.graph.getSelectedCells()
-        let rightX = null
-        for (let a of NODE) {
-          if (rightX == null || a.getBBox().x + a.getBBox().width > rightX) {
-            rightX = a.getBBox().x + a.getBBox().width
-          }
-        }
-        for (let a of NODE) {
-          let y = a.getBBox().y
-          a.position(rightX - a.getBBox().width, y)
-        }
-      },
-      bottomAlign() {
-        const NODE = this.graph.getSelectedCells()
-        let bottomY = null
-        for (let a of NODE) {
-          if (bottomY == null || (a.getBBox().y + a.getBBox().height) > bottomY) {
-            bottomY = a.getBBox().y + a.getBBox().height
-          }
-        }
+      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'}}
+          },
+        ])
+      })
 
-        for (let a of NODE) {
-          let x = a.getBBox().x
-          a.position(x, bottomY - a.getBBox().height)
-        }
-      },
-      close() {
-        if (this.timer){
-          window.clearInterval(this.timer)
-        }
-      },
+      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'
+      }
+    },
+    reset() {
+      this.graph.drawBackground({color: '#fff'})
+      const nodes = this.graph.getNodes()
+      const edges = this.graph.getEdges()
+      nodes.forEach((node) => {
+        node.attr('body/stroke', '#5F95FF')
+      })
+      edges.forEach((edge) => {
+        edge.attr('line/stroke', '#5F95FF')
+        edge.prop('labels/0', {
+          attrs: {
+            body: {
+              stroke: '#5F95FF',
+            },
+          },
+        })
+      })
+    },
+    async search() {
+      await this.getDiagram();
+    },
+    async saveDiagram() {
+      console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()')
+      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.$alert('淇濆瓨鎴愬姛', '鎻愮ず', {
+            confirmButtonText: '纭畾'
+          })
+        }
+      })
+    },
+    async analyzeDiagram() {
+      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/analyze`, this.dataForm).then(async res => {
+        if (res.msg === 'success') {
+          this.$alert('瑙f瀽鎴愬姛', '鎻愮ず', {
+            confirmButtonText: '纭畾'
+          })
+        }
+      })
+    },
+    leftAlign() {
+      const NODE = this.graph.getSelectedCells()
+      let leftX = null
+      for (let a of NODE) {
+        if (leftX == null || a.getBBox().x < leftX) {
+          leftX = a.getBBox().x
+        }
+      }
+      for (let a of NODE) {
+        let y = a.getBBox().y
+        a.position(leftX, y)
+        // console.log(leftX, ':', y, '  x:y')
+      }
+    },
+    topAlign() {
+      const NODE = this.graph.getSelectedCells()
+      let topY = null
+      for (let a of NODE) {
+        console.log(a.getBBox(), 'a.getBBox()')
+        if (topY == null || a.getBBox().y < topY) {
+          topY = a.getBBox().y
+        }
+      }
+      for (let a of NODE) {
+        let x = a.getBBox().x
+        a.position(x, topY)
+        // console.log(leftX, ':', y, '  x:y')
+      }
+    },
+    centerAlign() {
+      const NODE = this.graph.getSelectedCells()
+      let rightX = null
+      let leftX = null
+      for (let a of NODE) {
+        if (leftX == null || a.getBBox().x < leftX) {
+          leftX = a.getBBox().x
+        }
+      }
+      for (let a of NODE) {
+        if (rightX == null || a.getBBox().x + a.getBBox().width > rightX) {
+          rightX = a.getBBox().x + a.getBBox().width
+        }
+      }
 
-  }
+      let centerX = leftX + (rightX - leftX) / 2
+
+      for (let a of NODE) {
+        let y = a.getBBox().y
+        a.position(centerX - a.getBBox().width / 2, y)
+        // console.log(leftX, ':', y, '  x:y')
+      }
+    },
+    shuipingAlign() {
+      const NODE = this.graph.getSelectedCells()
+      let bottomY = null
+      let topY = null
+      for (let a of NODE) {
+        if (topY == null || a.getBBox().y || 0 < topY) {
+          topY = a.getBBox().y
+        }
+      }
+      for (let a of NODE) {
+        if (bottomY == null || a.getBBox().y + a.getBBox().height > bottomY) {
+          bottomY = a.getBBox().y + a.getBBox().height
+        }
+      }
+
+      let centerY = topY + (bottomY - topY) / 2
+      for (let a of NODE) {
+        let x = a.getBBox().x
+        let centerHei = a.getBBox().height / 2
+        a.position(x, centerY - centerHei)
+      }
+    },
+    rightAlign() {
+      const NODE = this.graph.getSelectedCells()
+      let rightX = null
+      for (let a of NODE) {
+        if (rightX == null || a.getBBox().x + a.getBBox().width > rightX) {
+          rightX = a.getBBox().x + a.getBBox().width
+        }
+      }
+      for (let a of NODE) {
+        let y = a.getBBox().y
+        a.position(rightX - a.getBBox().width, y)
+      }
+    },
+    bottomAlign() {
+      const NODE = this.graph.getSelectedCells()
+      let bottomY = null
+      for (let a of NODE) {
+        if (bottomY == null || (a.getBBox().y + a.getBBox().height) > bottomY) {
+          bottomY = a.getBBox().y + a.getBBox().height
+        }
+      }
+
+      for (let a of NODE) {
+        let x = a.getBBox().x
+        a.position(x, bottomY - a.getBBox().height)
+      }
+    },
+    close() {
+      if (this.timer) {
+        window.clearInterval(this.timer)
+      }
+    },
+    // 瀹氫箟鍑芥暟鏉ユ鏌ヤ袱涓寘鍥存鏄惁鐩镐氦
+    isIntersect(bbox1, bbox2) {
+      return (
+          bbox1.x < bbox2.x + bbox2.width &&
+          bbox1.x + bbox1.width > bbox2.x &&
+          bbox1.y < bbox2.y + bbox2.height &&
+          bbox1.y + bbox1.height > bbox2.y
+      )
+    },
+    addNodeAndConnect(node, nodeObj) { // node鏄敾甯冨師鏈夌殑鑺傜偣銆俷odeObj鏄綋鍓嶆嫋鎷界殑鑺傜偣
+      const nodeType = node.getData().nodeType  // 鑾峰彇鑺傜偣绫诲瀷
+      const edges = this.graph.getConnectedEdges(node); // 鑾峰彇涓庡師鑺傜偣鐩稿叧鑱旂殑鎵�鏈夎繛鎺ョ嚎
+      let TopSum = 0 // 鍦ㄥ師鑺傜偣涓婃柟
+      let BottomSum = 0 // 鍦ㄥ師鑺傜偣涓嬫柟
+      const edgesSum = edges.length
+      if (nodeType !== 'node') {
+        if (edges.length === 0) {
+          if (!this.nodeAdded) {
+            // 娣诲姞鑺傜偣鐨勬搷浣�
+            this.connectNode = this.graph.addNode({
+              shape: 'image',
+              // imageUrl: require('/public/modelImg/' + item.imgPath + '.png'),
+              width: 30,
+              height: 30,
+              data: {
+                type: 'imageNodes',
+                dataId: '',
+                nodeType: 'connect',
+                nodeTypeExt: '',
+                voteNum: ''
+              },
+              attrs: {
+                image: {
+                  'xlink:href': '/modelImg/connect.svg',
+                },
+                text: {
+                  text: 'connect',
+                  fontSize: 14,
+                  refX: 0.5,
+                  refY: '100%',
+                  refY2: 4,
+                  textAnchor: 'middle',
+                  textVerticalAnchor: 'top',
+                },
+              },
+              ports: {...this.ports},
+            })
+            // 璁剧疆鏍囪涓� true锛岃〃绀哄凡缁忔坊鍔犺繃鑺傜偣
+            this.nodeAdded = true;
+          }
+          nodeObj.position(node.position().x - 240, node.position().y - (120 * edgesSum));
+          this.connectNode.position(node.position().x - 480, node.position().y + (node.size().height - this.connectNode.size().height) / 2);
+        } else if (edges.length === 1) {
+          // 灏嗚妭鐐圭Щ鍔ㄥ埌鎸囧畾鐨勪綅缃�
+          nodeObj.position(node.position().x - 240, node.position().y - (120 * edgesSum));
+        } else {
+          for (const edge of edges) {
+            const sourcePointY = edge.getSourcePoint().y; // 鑾峰彇杩炴帴绾跨殑璧峰鐐箉鍧愭爣
+            const targetPointY = edge.getTargetPoint().y; // 鑾峰彇杩炴帴绾跨殑缁撴潫鐐箉鍧愭爣
+            console.log('鍘熻妭鐐筜鍧愭爣' + node.position().y, '杩炴帴绾胯捣濮媃鍧愭爣' + sourcePointY)
+            if (targetPointY > sourcePointY) {
+              TopSum++
+            } else if (targetPointY < sourcePointY) {
+              BottomSum++
+            }
+          }
+          console.log('鍦ㄥ師鑺傜偣涓婃柟鐨勮繛鎺ョ嚎鏁伴噺:' + TopSum, '鍦ㄥ師鑺傜偣涓嬫柟鐨勮繛鎺ョ嚎鏁伴噺:' + BottomSum)
+          if (TopSum > BottomSum) {
+            nodeObj.position(node.position().x - 240, node.position().y + (120 + (120 * BottomSum)))
+          } else {
+            nodeObj.position(node.position().x - 240, node.position().y - (120 + (120 * TopSum)));
+          }
+        }
+        this.graph.addEdge({
+          source: {cell: nodeObj, port: 'right1'},
+          target: {cell: node, port: 'left1'},
+          router: {name: 'manhattan'},
+          connector: {name: 'rounded'}
+        })
+        if (this.nodeAdded) {
+          console.log(this.connectNode, 'connectNode')
+          this.graph.addEdge({
+            source: {cell: this.connectNode, port: 'right1'},
+            target: {cell: nodeObj, port: 'left1'},
+            router: {name: 'manhattan'},
+            connector: {name: 'rounded'}
+          })
+        }
+      } else {
+          // 閬嶅巻鎵�鏈夎繛鎺ョ嚎骞跺垹闄や笌缁欏畾鑺傜偣瀵硅薄鐩稿叧鐨勮繛鎺ョ嚎
+        console.log(edges, '鎵�鏈夋湁鍏宠仈鐨勮繛鎺ョ嚎 edge')
+        if(edges.length === 0){
+          this.graph.addEdge({
+            source: {cell: node, port: 'right1'},
+            target: {cell: nodeObj, port: 'left1'},
+            router: {name: 'manhattan'},
+            connector: {name: 'rounded'}
+          })
+           return nodeObj.position(node.position().x +node.getBBox().width+50, node.position().y);
+        }else {
+          for (const edge of edges) {
+            console.log(edge, '鎵�鏈夋湁鍏宠仈鐨勮繛鎺ョ嚎 edge')
+            if (edge.source.cell === node.id) { // 濡傛灉杩炴帴绾跨殑璧峰鑺傜偣绛変簬褰撳墠鐢诲竷鐩爣鑺傜偣鐨処D
+              const sourceNode = this.graph.getCellById(edge.source.cell); // 鑾峰彇杩炴帴绾跨殑婧愯妭鐐瑰璞�
+              const targetNode = this.graph.getCellById(edge.target.cell) // 鑾峰彇杩炴帴绾跨殑鐩爣鑺傜偣瀵硅薄
+              console.log(sourceNode, targetNode, 'targetNode 鐩爣鑺傜偣瀵硅薄')
+              // edge.remove(); // 浠庡浘涓垹闄よ杩炴帴绾�
+              nodeObj.position(node.position().x +node.getBBox().width+50, node.position().y);
+              // edge.source = {cell: node, port: 'right1'}
+              edge.target = {cell: nodeObj, port: 'left1'}
+              // targetNode.position(nodeObj.position().x +nodeObj.getBBox().width+50, node.position().y);
+              // this.graph.addEdge({
+              //   source: {cell: node, port: 'right1'},
+              //   target: {cell: nodeObj, port: 'left1'},
+              //   router: {name: 'manhattan'},
+              //   connector: {name: 'rounded'}
+              // })
+              this.graph.addEdge({
+                source: {cell: nodeObj, port: 'right1'},
+                target: {cell: targetNode, port: 'left1'},
+                router: {name: 'manhattan'},
+                connector: {name: 'rounded'}
+              })
+            }else {
+              this.graph.addEdge({
+                source: {cell: node, port: 'right1'},
+                target: {cell: nodeObj, port: 'left1'},
+                router: {name: 'manhattan'},
+                connector: {name: 'rounded'}
+              })
+              nodeObj.position(node.position().x +node.getBBox().width+50, node.position().y);
+            }
+          }
+        }
+
+
+      }
+    },
+  },
+
+}
 </script>
 
 <style>
 #containerImg {
   display: flex;
   border: 1px solid #dfe3e8;
-  height:400px ;
+  height: 400px;
   width: 100% !important;
 }
 
@@ -1362,9 +1212,17 @@
   height: 100%;
 }
 
+#stencilImg .x6-graph-svg-viewport {
+  height: 100%;
+}
+
 .x6-widget-stencil-content {
   position: relative;
-  height: 100%;
+  height: calc(100% - 32px);
+}
+
+#stencilImg .x6-widget-stencil.collapsable > .x6-widget-stencil-content {
+  top: 0
 }
 
 </style>

--
Gitblit v1.9.1