From cd7b35b1acc7467deac78ba843b5870a22c9c7f6 Mon Sep 17 00:00:00 2001
From: jinlin <jinlin>
Date: 星期二, 06 八月 2024 08:59:12 +0800
Subject: [PATCH] 修改

---
 web/src/views/modules/taskReliability/TimeDiagram.vue |  452 +++++++++++++------------------------------------------
 1 files changed, 110 insertions(+), 342 deletions(-)

diff --git a/web/src/views/modules/taskReliability/TimeDiagram.vue b/web/src/views/modules/taskReliability/TimeDiagram.vue
index 5275e55..c127388 100644
--- a/web/src/views/modules/taskReliability/TimeDiagram.vue
+++ b/web/src/views/modules/taskReliability/TimeDiagram.vue
@@ -33,7 +33,7 @@
           </el-col>
           <el-col :span="20">
             <div style="margin-top: 20px">
-              <div id="container" style="border: 1px solid #EAEBEE;border-radius: 6px;
+              <div id="timeDiagram" style="border: 1px solid #EAEBEE;border-radius: 6px;
         box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);">
               </div>
             </div>
@@ -42,7 +42,7 @@
       </div>
     </el-row>
     <el-dialog v-dialogDrag title="妯″瀷璁捐" top="1vh" width='95%' :visible.sync="dialogVisible2" v-if="dialogVisible2">
-      <RBDEditImg ref="rbdEditImg"></RBDEditImg>
+      <model-view ref="modelView"></model-view>
     </el-dialog>
   </div>
 </template>
@@ -51,12 +51,13 @@
   import SimulatCurve from "./SimulatCurve";
   import ProductModelTree from "../basicInfo/ProductModelTree";
   import {Graph, Shape, Addon, Cell} from '@antv/x6'
-  import RBDEditImg from './RBD-edit-img'
+  import ModelView from "./ModelView";
 
 
   export default {
     data() {
       return {
+        knob:HTMLDivElement,
         dialogVisible2: false,
         timers: '',
         shape: '',
@@ -118,9 +119,9 @@
     },
     mounted() {
       this.getProductList()
-
     },
     components: {
+      ModelView,
       ProductModelTree,
       SimulatCurve,
     },
@@ -129,7 +130,7 @@
         console.log(document.documentElement.clientWidth, 'document.documentElement.clientWidth')
         console.log(document.documentElement.clientHeight, 'document.documentElement.clientHeight')
         this.graph = new Graph({
-          container: document.getElementById('container'),
+          container: document.getElementById('timeDiagram'),
           width: document.documentElement.clientWidth,
           height: document.documentElement.clientHeight - 220,
           // async: true,
@@ -151,18 +152,7 @@
               })
             }
           },
-          onToolItemCreated({tool}) {
-            const handle = tool
-            const options = handle.options
-            if (options && options.index % 2 === 1) {
-              tool.setAttrs({fill: 'red'})
-            }
-          },
           autoResize: true,
-          history: true,
-          // panning: {
-          //   enabled: true,
-          // },
           scroller: {
             enabled: true,
             pageVisible: true,
@@ -176,100 +166,35 @@
             minScale: 0.1,
             maxScale: 10,
           },
-          connecting: {
-            router: {
-              name: 'normal',
-              // args: {
-              //   padding: 1,
-              // },
-            },
-            connector: {
-              name: 'rounded',
-              args: {
-                radius: 8,
+          createEdge() {
+            return new Shape.Edge({
+              data: {
+                id: '',
+                status: '',
+                startTime:'',
+                endTime: '',
               },
-            },
-            // anchor: 'center',
-            connectionPoint: 'anchor',
-            snap: {
-              radius: 20,
-            },
-            createEdge() {
-              return new Shape.Edge({
-                attrs: {
-                  line: {
-                    stroke: '#A2B1C3',
-                    strokeWidth: 2,
-                    targetMarker: 'classic'
-                  }
-                },
-                tools: {
-                  name: 'vertices',
-                },
-                labels: [{
-                  attrs: {
-                    body: {
-                      stroke: '#5F95FF',
-                    },
-                    text: {
-                      // fontFamily: '浠垮畫',
-                      text: ''
-                    }
-                  },
-                }],
-                zIndex: 0,
-              })
-            },
-            // validateConnection({targetMagnet}) {
-            //   return !!targetMagnet
-            // },
-          },
-          highlighting: {
-            magnetAdsorbed: {
-              name: 'stroke',
-              args: {
-                attrs: {
-                  fill: '#5F95FF',
-                  stroke: '#5F95FF',
-                },
+              attrs: {
+                line: {
+                  stroke: '#A2B1C3',
+                  strokeWidth: 2,
+                  sourceMarker: 'none',
+                  targetMarker: 'none'
+                }
               },
-            },
+              tools: {
+                name: 'vertices',
+              },
+              zIndex: 0,
+            })
           },
-          resizing: {
-            enabled: true,
-            restricted: true
-          },
-          rotating: true,
-          selecting: {
-            enabled: true,
-            rubberband: true,
-            rubberEdge: true,
-            showNodeSelectionBox: true,
-          },
-          snapline: true,
           keyboard: true,
-          clipboard: true,
         })
+        this.knob = document.createElement('div',false)
+        this.knob.style.position = 'absolute'
+        document.getElementById('timeDiagram').appendChild(this.knob)
         this.graph.centerContent()
-        const stencil = new Addon.Stencil({
-          title: '',
-          target: this.graph,
-          stencilGraphWidth: 260,
-          stencilGraphHeight: 700,
-          collapsable: false,
-          groups: [
-            {
-              title: '鍥惧厓',
-              name: 'group1',
-              collapsable: false
-            }
-          ],
-          layoutOptions: {
-            columns: 2,
-            columnWidth: 130,
-            rowHeight: 100,
-          },
-        })
+
         Graph.registerNode(
           'custom-rect',
           {
@@ -467,162 +392,6 @@
           },
           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 scaleImgCenter = this.graph.createNode({
-          shape: 'image',
-          imageUrl: require('@/assets/img/scale/center.jpg'),
-          width: 36,
-          height: 20,
-          data: {
-            imagePost: 'center'
-          }
-        })
-
-        const scaleImgTop = this.graph.createNode({
-          shape: 'image',
-          imageUrl: require('@/assets/img/scale/top.jpg'),
-          width: 36,
-          height: 20,
-          data: {
-            imagePost: 'top'
-          }
-        })
-
-        const scaleImgRight = this.graph.createNode({
-          shape: 'image',
-          imageUrl: require('@/assets/img/scale/right.jpg'),
-          width: 36,
-          height: 20,
-          data: {
-            imagePost: 'right'
-          }
-        })
-        const scaleImgBottom = this.graph.createNode({
-          shape: 'image',
-          imageUrl: require('@/assets/img/scale/bottom.jpg'),
-          width: 36,
-          height: 20,
-          data: {
-            imagePost: 'bottom'
-          }
-        })
-        const scaleImgLeft = this.graph.createNode({
-          shape: 'image',
-          imageUrl: require('@/assets/img/scale/left.jpg'),
-          width: 36,
-          height: 20,
-          data: {
-            imagePost: 'left'
-          }
-        })
-
-        // scaleImgTop.setAttribute('crossOrigin', 'Anonymous')
-        stencil.load([r5, r6, r9, scaleImgTop, scaleImgCenter, scaleImgRight, scaleImgBottom, scaleImgLeft], 'group1')
-        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
-        })
-        // 鐩戝惉 stencil 鐨勬嫋鎷藉紑濮嬩簨浠�
-        this.graph.on('node:embed', ({node, e}) => {
-          // 闃绘浜嬩欢鍐掓场
-          e.stopPropagation()
-          console.log(node.shape, 'node node')
-          let parent
-          let child
-          if (node.shape === 'custom-rect') {
-            child = node
-          } else {
-            parent = node
-          }
-          console.log('parent:' + parent, 'child:' + child)
-          // parent.addChild(child);
-        })
-        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()
@@ -669,19 +438,16 @@
         // 鍗曞嚮node鑺傜偣
         this.graph.on('node:click', ({node}) => {
           // this.reset()
-          node.attr('line/stroke', '#5F95FF')
-          node.prop('labels/0', {
-            attrs: {
-              body: {
-                stroke: '#5F95FF',
-              },
-            },
-          })
-        })
-        // 鎺у埗杩炴帴妗╂樉绀�/闅愯棌
-        this.graph.on('node:delete', ({view, e}) => {
-          e.stopPropagation()
-          view.cell.remove()
+          if (node.getData().dataId) {
+            this.dialogVisible2 = true
+            let param = {
+              id: node.getData().dataId,
+              modelName: node.attr('label/textWrap/text'),
+            }
+            this.$nextTick(() => {
+              this.$refs.modelView.init(param)
+            })
+          }
         })
 
         this.graph.on('node:customevent', ({name, view, e}) => {
@@ -690,72 +456,42 @@
             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('container')
-          const ports = container.querySelectorAll(
-            '.x6-port-body',
-          )
-          this.showPorts(ports, true)
+        // 榧犳爣绉诲叆edge鑺傜偣
+        this.graph.on('edge:mouseenter', ({edge,e}) => {
+          const style = this.knob.style
+          // e.stopPropagation()
+          console.log('edge:mouseenter')
+          if (e && edge.data) {
+            if (edge.getData().status==='F') {
+              //console.log(edge.getData(),"eee edge.getData()")
+              let startTimes = edge.getData().startTimes
+              let endTimes = edge.getData().endTimes
+              //console.log(e,'eee')
+              const p = this.graph.clientToGraph(e.clientX, e.clientY)
+              setTimeout(()=>{
+                style.display = 'block'
+                style.left = `${p.x}px`
+                style.top = `${p.y}px`
+                style.width = 200+ 'px'
+                style.height = 80 + 'px'
+                style.textAlign = 'center'
+                style.background = '#000'
+                style.color = '#fff'
+                style.lineHeight = (40 + 'px')
+                style.zIndex = 100
+                this.knob.innerText = `寮�濮嬫椂闂达細${startTimes}\n缁撴潫鏃堕棿锛�${endTimes}`
+              },0)
+              console.log(p,'p p p')
+              console.log(style,this.knob,'style style')
+            }
+          }
         })
-
-        this.graph.on('node:mouseleave', ({node}) => {
-          // if (node.hasTool('button-remove')) {
-          //   node.removeTool('button-remove')
-          // }
-          const container = document.getElementById('container')
-          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(
-            [
-              {
-                name: 'segments',
-                args: {snapRadius: 20, attrs: {fill: '#444'}}
-              }
-            ]
-          )
-        })
-
-        this.graph.on('edge:mouseleave', ({cell}) => {
-          cell.removeTools()
+// 榧犳爣绉诲嚭edge鑺傜偣
+        this.graph.on('edge:mouseleave', ({edge}) => {
+          console.log('edge:mouseleave')
+          const style = this.knob.style
+          style.display = 'none'
         })
       },
       async getProductList() {
@@ -780,8 +516,7 @@
         this.simulatList = res.data
       },
       async onTreeSelected(data) {
-        this.dataForm.productId = data.id
-        console.log(this.dataForm.productId)
+        this.graph.unfreeze()
         if (!this.dataForm.taskModelId) {
           this.$alert("璇峰厛閫夋嫨鍏蜂綋浠诲姟")
           return
@@ -791,11 +526,24 @@
           return
         }
         let params = {
-          productId: this.dataForm.productId,
+          productId: data.id,
           taskId: this.dataForm.taskModelId,
           fzId: this.dataForm.id
         }
         let res = await this.$http.get('/taskReliability/SimulatAssess/getStatus', {params: params})
+        if (res.data !== null) {
+          this.diagramJson = JSON.parse(res.data)
+          console.log(this.diagramJson, 'this.Diagram json')
+          this.graph.fromJSON(this.diagramJson)
+          this.graph.centerContent()
+          this.graph.zoomToFit()
+          this.graph.freeze()
+        } else {
+          this.graph.fromJSON(this.emptyJson)
+          this.graph.centerContent()
+          this.graph.zoomToFit()
+          this.graph.freeze()
+        }
         console.log(res.data)
       },
       // 鑾峰彇淇℃伅
@@ -808,6 +556,7 @@
         this.$nextTick(() => {
           this.$refs.ProductModelTree.getProductList()
         })
+        this.init()
       },
       onTaskSelected(data) {
         console.log(data, ' onProductSelected(data)')
@@ -827,7 +576,7 @@
         this.dataForm.simulatFrequency = result.data.simulatFrequency
       },
       async getDiagram() {
-        this.init()
+        this.graph.unfreeze()
         let params = {
           productId: this.dataForm.productId,
           taskId: this.dataForm.taskModelId,
@@ -836,7 +585,6 @@
         let res = await this.$http.get('/taskReliability/SimulatAssess/getStatus', {params: params})
         if (res.data !== null) {
           this.diagramJson = JSON.parse(res.data)
-          // console.log(this.dataForm.content,'this.Diagram content')
           console.log(this.diagramJson, 'this.Diagram json')
           this.graph.fromJSON(this.diagramJson)
           this.graph.centerContent()
@@ -854,5 +602,25 @@
   }
 </script>
 <style>
+  #timeDiagram {
+    display: flex;
+    border: 1px solid #dfe3e8;
+    width: 100% !important;
+  }
+  #timeDiagram .x6-cell.x6-node {
+    cursor: inherit;
+  }
+  .x6-graph-scroller.x6-graph-scroller-pannable {
+    width: 100% !important;
+  }
 
+  .x6-widget-stencil {
+    position: relative;
+    height: 100%;
+  }
+
+  .x6-widget-stencil-content {
+    position: relative;
+    height: 100%;
+  }
 </style>

--
Gitblit v1.9.1