<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>