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