From f5fcc79a2c7e6379a73b14ba4e366ad1654e9475 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期日, 03 七月 2022 07:40:54 +0800
Subject: [PATCH] 优化国标树型展示

---
 web_src/src/components/common/DeviceTree.vue |  141 ++++++++++++++++++++++++++--------------------
 1 files changed, 79 insertions(+), 62 deletions(-)

diff --git a/web_src/src/components/common/DeviceTree.vue b/web_src/src/components/common/DeviceTree.vue
index 73618cc..c701bf0 100644
--- a/web_src/src/components/common/DeviceTree.vue
+++ b/web_src/src/components/common/DeviceTree.vue
@@ -4,7 +4,7 @@
       <el-header>璁惧鍒楄〃</el-header>
       <el-main style="background-color: #ffffff;">
         <div class="device-tree-main-box">
-          <el-tree :props="defaultProps" :load="loadNode" lazy @node-click="handleNodeClick"@node-contextmenu="handleContextMenu" style="min-width: 100%; display:inline-block !important;">
+          <el-tree ref="gdTree" :props="defaultProps" :load="loadNode" lazy @node-click="handleNodeClick"@node-contextmenu="handleContextMenu" node-key="id" style="min-width: 100%; display:inline-block !important;">
             <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%">
               <span v-if="node.data.type === 0 && node.data.online" title="鍦ㄧ嚎璁惧" class="device-online iconfont icon-jiedianleizhukongzhongxin2"></span>
               <span v-if="node.data.type === 0 && !node.data.online " title="绂荤嚎璁惧" class="device-offline iconfont icon-jiedianleizhukongzhongxin2"></span>
@@ -47,98 +47,112 @@
           }
         };
     },
-    props: ['clickEvent', 'contextMenuEvent'],
+    props: ['device', 'onlyCatalog', 'clickEvent', 'contextMenuEvent'],
     methods: {
       handleNodeClick(data,node,element) {
-        console.log("鐐瑰嚮浜嬩欢")
-        console.log(data)
+        let deviceNode = this.$refs.gdTree.getNode(data.userData.deviceId)
         if(typeof (this.clickEvent) == "function") {
-          this.clickEvent(data.userData)
+          this.clickEvent(deviceNode.data.userData, data.userData, data.type === 2)
         }
       },
       handleContextMenu(event,data,node,element) {
         console.log("鍙抽敭鐐瑰嚮浜嬩欢")
+        let deviceNode = this.$refs.gdTree.getNode(data.userData.deviceId)
         if(typeof (this.contextMenuEvent) == "function") {
-          this.contextMenuEvent(event, data.userData)
+          this.contextMenuEvent(deviceNode.data.userData, event, data.userData, data.type === 2)
         }
       },
       loadNode: function(node, resolve){
+        console.log(this.device)
         if (node.level === 0) {
-          this.deviceService.getAllDeviceList((data)=>{
-            console.log(data)
-            if (data.length > 0) {
-              let nodeList = []
-              for (let i = 0; i < data.length; i++) {
-                console.log(data[i].name)
-                let node = {
-                  name: data[i].name || data[i].deviceId,
-                  isLeaf: false,
-                  id: data[i].deviceId,
-                  type: data[i].online,
-                  online: data[i].online === 1,
-                  userData: data[i]
-                }
-                nodeList.push(node);
-              }
-              resolve(nodeList)
-            }else {
-              resolve([])
+          if (this.device) {
+            let node = {
+              name: this.device.name || this.device.deviceId,
+              isLeaf: false,
+              id: this.device.deviceId,
+              type: this.device.online,
+              online: this.device.online === 1,
+              userData: this.device
             }
-          }, (list)=>{
+            resolve([node])
+          }else {
+            this.deviceService.getAllDeviceList((data)=>{
+              console.log(data)
+              if (data.length > 0) {
+                let nodeList = []
+                for (let i = 0; i < data.length; i++) {
+                  console.log(data[i].name)
+                  let node = {
+                    name: data[i].name || data[i].deviceId,
+                    isLeaf: false,
+                    id: data[i].deviceId,
+                    type: data[i].online,
+                    online: data[i].online === 1,
+                    userData: data[i]
+                  }
+                  nodeList.push(node);
+                }
+                resolve(nodeList)
+              }else {
+                resolve([])
+              }
+            }, (list)=>{
               console.log("璁惧鍔犺浇瀹屾垚")
-          }, (error)=>{
+            }, (error)=>{
 
-          })
-        }
-        if (node.level === 1) {
+            })
+          }
+        }else {
           let channelArray = []
-          this.deviceService.getAllChannel(true, true, node.data.id, catalogData =>{
+
+          this.deviceService.getTree(node.data.userData.deviceId, node.data.id, this.onlyCatalog, catalogData =>{
+            console.log(catalogData)
             channelArray = channelArray.concat(catalogData)
             this.channelDataHandler(channelArray, resolve)
           },(endCatalogData) => {
-            this.deviceService.getAllChannel(false, true, node.data.id, channelData => {
-              channelArray = channelArray.concat(channelData)
-              this.channelDataHandler(channelArray, resolve)
-            }, endChannelList => {
 
-            })
-          })
-        }else if (node.level > 1){
-          let channelArray = []
-          this.deviceService.getAllSubChannel(true, node.data.deviceId, node.data.id, (catalogData)=>{
-            channelArray = channelArray.concat(catalogData)
-            this.channelDataHandler(channelArray, resolve)
-          }, (endCatalogData)=>{
-            this.deviceService.getAllSubChannel(false, node.data.deviceId, node.data.id, (channelData)=>{
-              channelArray = channelArray.concat(channelData)
-              this.channelDataHandler(channelArray, resolve)
-            })
           })
         }
+
       },
       channelDataHandler: function (data, resolve) {
         if (data.length > 0) {
           let nodeList = []
-          for (let i = 0; i < data.length; i++) {
+          for (let i = 0; i <data.length; i++) {
+            let item = data[i];
             let type = 3;
-            if (data[i].subCount > 0 || data[i].parental === 1) {
+            if (item.id.length <= 10) {
               type = 2;
-            }else if (data[i].ptztype === 1 ) { // 1-鐞冩満;2-鍗婄悆;3-鍥哄畾鏋満;4-閬ユ帶鏋満
-              type = 4;
-            }else if (data[i].ptztype === 2) {
-              type = 5;
-            }else if (data[i].ptztype === 3 || data[i].ptztype === 4) {
-              type = 6;
+            }else {
+              if (item.id.length > 14) {
+                let channelType = item.id.substring(10, 13)
+                console.log("channelType: " + channelType)
+                if (channelType === '215' || channelType === '216') {
+                  type = 2;
+                }
+                console.log(type)
+                if (item.basicData.ptztype === 1 ) { // 1-鐞冩満;2-鍗婄悆;3-鍥哄畾鏋満;4-閬ユ帶鏋満
+                  type = 4;
+                }else if (item.basicData.ptztype === 2) {
+                  type = 5;
+                }else if (item.basicData.ptztype === 3 || item.basicData.ptztype === 4) {
+                  type = 6;
+                }
+              }else {
+                if (item.basicData.subCount > 0 || item.basicData.parental === 1) {
+                  type = 2;
+                }
+              }
             }
             let node = {
-              name: data[i].name || data[i].channelId,
-              isLeaf: data[i].subCount === 0,
-              id: data[i].channelId,
-              deviceId: data[i].deviceId,
+              name: item.name || item.basicData.channelId,
+              isLeaf: type !== 2,
+              id: item.id,
+              deviceId: item.deviceId,
               type: type,
-              online: data[i].status === 1,
-              hasGPS: data[i].longitude*data[i].latitude !== 0,
-              userData: data[i]
+              online: item.basicData.status === 1,
+              hasGPS: item.basicData.longitude*item.basicData.latitude !== 0,
+              userData: item.basicData
             }
             nodeList.push(node);
           }
@@ -146,6 +160,9 @@
         }else {
           resolve([])
         }
+      },
+      reset: function (){
+        this.$forceUpdate();
       }
     },
     destroyed() {

--
Gitblit v1.8.0