<template> 
 | 
  <div id="DeviceTree" style="width: 100%;height: 100%; background-color: #FFFFFF; overflow: auto"> 
 | 
    <el-container> 
 | 
      <el-header>设备列表</el-header> 
 | 
      <el-main style="background-color: #ffffff;"> 
 | 
        <div class="device-tree-main-box"> 
 | 
          <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> 
 | 
              <span v-if="node.data.type === 2 && node.data.online" title="目录"  class="device-online iconfont icon-jiedianleilianjipingtai"></span> 
 | 
              <span v-if="node.data.type === 2 && !node.data.online" title="目录"  class="device-offline iconfont icon-jiedianleilianjipingtai"></span> 
 | 
              <span v-if="node.data.type === 3 && node.data.online " title="在线通道" class="device-online iconfont icon-shebeileijiankongdian"></span> 
 | 
              <span v-if="node.data.type === 3 && !node.data.online" title="在线通道" class="device-offline iconfont icon-shebeileijiankongdian"></span> 
 | 
              <span v-if="node.data.type === 4 && node.data.online " title="在线通道-球机" class="device-online iconfont icon-shebeileiqiuji"></span> 
 | 
              <span v-if="node.data.type === 4 && !node.data.online" title="在线通道-球机" class="device-offline iconfont icon-shebeileiqiuji"></span> 
 | 
              <span v-if="node.data.type === 5 && node.data.online " title="在线通道-半球" class="device-online iconfont icon-shebeileibanqiu"></span> 
 | 
              <span v-if="node.data.type === 5 && !node.data.online" title="在线通道-半球" class="device-offline iconfont icon-shebeileibanqiu"></span> 
 | 
              <span v-if="node.data.type === 6 && node.data.online " title="在线通道-枪机" class="device-online iconfont icon-shebeileiqiangjitongdao"></span> 
 | 
              <span v-if="node.data.type === 6 && !node.data.online" title="在线通道-枪机" class="device-offline iconfont icon-shebeileiqiangjitongdao"></span> 
 | 
              <span v-if="node.data.online" style="padding-left: 1px" class="device-online">{{ node.label }}</span> 
 | 
              <span v-if="!node.data.online" style="padding-left: 1px" class="device-offline">{{ node.label }}</span> 
 | 
              <span> 
 | 
                <i v-if="node.data.hasGPS && node.data.online" style="color: #9d9d9d" class="device-online iconfont icon-dizhi"></i> 
 | 
                <i v-if="node.data.hasGPS && !node.data.online" style="color: #9d9d9d" class="device-offline iconfont icon-dizhi"></i> 
 | 
              </span> 
 | 
            </span> 
 | 
          </el-tree> 
 | 
        </div> 
 | 
      </el-main> 
 | 
    </el-container> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import DeviceService from "../service/DeviceService.js"; 
 | 
  
 | 
export default { 
 | 
    name: 'DeviceTree', 
 | 
    data() { 
 | 
        return { 
 | 
          deviceService: new DeviceService(), 
 | 
          defaultProps: { 
 | 
            children: 'children', 
 | 
            label: 'name', 
 | 
            isLeaf: 'isLeaf' 
 | 
          } 
 | 
        }; 
 | 
    }, 
 | 
    props: ['device', 'onlyCatalog', 'clickEvent', 'contextMenuEvent'], 
 | 
    methods: { 
 | 
      handleNodeClick(data,node,element) { 
 | 
        let deviceNode = this.$refs.gdTree.getNode(data.userData.deviceId) 
 | 
        if(typeof (this.clickEvent) == "function") { 
 | 
          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(deviceNode.data.userData, event, data.userData, data.type === 2) 
 | 
        } 
 | 
      }, 
 | 
      loadNode: function(node, resolve){ 
 | 
        console.log(this.device) 
 | 
        if (node.level === 0) { 
 | 
          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 
 | 
            } 
 | 
            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)=>{ 
 | 
  
 | 
            }) 
 | 
          } 
 | 
        }else { 
 | 
          let channelArray = [] 
 | 
  
 | 
          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) => { 
 | 
  
 | 
          }) 
 | 
        } 
 | 
  
 | 
      }, 
 | 
      channelDataHandler: function (data, resolve) { 
 | 
        if (data.length > 0) { 
 | 
          let nodeList = [] 
 | 
          for (let i = 0; i <data.length; i++) { 
 | 
            let item = data[i]; 
 | 
            let type = 3; 
 | 
            if (item.id.length <= 10) { 
 | 
              type = 2; 
 | 
            }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: item.name || item.basicData.channelId, 
 | 
              isLeaf: type !== 2, 
 | 
              id: item.id, 
 | 
              deviceId: item.deviceId, 
 | 
              type: type, 
 | 
              online: item.basicData.status === 1, 
 | 
              hasGPS: item.basicData.longitude*item.basicData.latitude !== 0, 
 | 
              userData: item.basicData 
 | 
            } 
 | 
            nodeList.push(node); 
 | 
          } 
 | 
          resolve(nodeList) 
 | 
        }else { 
 | 
          resolve([]) 
 | 
        } 
 | 
      }, 
 | 
      reset: function (){ 
 | 
        this.$forceUpdate(); 
 | 
      } 
 | 
    }, 
 | 
    destroyed() { 
 | 
      // if (this.jessibuca) { 
 | 
      //   this.jessibuca.destroy(); 
 | 
      // } 
 | 
      // this.playing = false; 
 | 
      // this.loaded = false; 
 | 
      // this.performance = ""; 
 | 
    }, 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style> 
 | 
.device-tree-main-box{ 
 | 
  text-align: left; 
 | 
} 
 | 
.device-online{ 
 | 
  color: #252525; 
 | 
} 
 | 
.device-offline{ 
 | 
  color: #727272; 
 | 
} 
 | 
</style> 
 |