From 0dbf19e9f92f5cb1d5ca9a06fd268d3b16e466e3 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 07 十二月 2022 15:22:01 +0800 Subject: [PATCH] 完善断流监控,集群和设备详情的查询 --- src/components/giantTree/index.vue | 399 ++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 258 insertions(+), 141 deletions(-) diff --git a/src/components/giantTree/index.vue b/src/components/giantTree/index.vue index ab602d2..1f2ba05 100644 --- a/src/components/giantTree/index.vue +++ b/src/components/giantTree/index.vue @@ -1,5 +1,24 @@ <template> <div class="tree-menu" :style="`max-height:${height - 200}px;`"> + <div class="devArea" v-if="showDevArea"> + <swiper :options="swiperOption"> + <swiper-slide v-for="item in nodeList" :key="item.devId" :class="{ active: activeTabObj.devId === item.devId }"> + <div class="tab" @click="chooseTab(item)"> + {{ item.devName }} + </div> + </swiper-slide> + </swiper> + <div class="swiper-pre-border" v-if="showDevArea"> + <div class="icon-btn" slot="button-prev"> + <i class="iconfont"></i> + </div> + </div> + <div class="swiper-next-border" v-if="showDevArea"> + <div class="icon-btn" slot="button-next"> + <i class="iconfont"></i> + </div> + </div> + </div> <z-tree :nodes="node" :show-checkbox="TreeDataPool.multiple" @@ -18,31 +37,18 @@ @onExpand="itemExpand" @onCollapse="itemCollapse" @onShowPic="showCameraPic" + :search="search" /> + <div class="empty" v-if="!node.length">鏆傛棤鎽勫儚鏈烘暟鎹�,璇锋坊鍔犳憚鍍忔満!</div> <div class="dialog-box-bg" v-show="showDialog" @click="hideDialogBox"></div> - <div - class="dialog-box" - v-show="showDialog" - :style="{ left: clientX + 'px', top: clientY + 'px' }" - > - <el-card :body-style="{ padding: '10px' }"> - <el-form - :model="dialogForm" - size="mini" - :rules="rules" - ref="dialogForm" - label-width="70px" - > + <div class="dialog-box" v-show="showDialog"> + <el-card :body-style="{ padding: '5px' }"> + <el-form :model="dialogForm" size="mini" :rules="rules" ref="dialogForm" label-width="70px"> <el-form-item label="鍚嶇О锛�" prop="name"> - <el-input - v-model="dialogForm.text" - oninput="if(value.length>10)value=value.slice(0,10)" - ></el-input> + <el-input v-model="dialogForm.text" oninput="if(value.length>20)value=value.slice(0,20)"></el-input> </el-form-item> <div class="text-center pb-2"> - <el-button size="mini" type="primary" @click="submitForm" - >淇濆瓨</el-button - > + <el-button size="mini" type="primary" @click="submitForm">淇濆瓨</el-button> <el-button size="mini" @click="hideDialogBox">鍙栨秷</el-button> </div> </el-form> @@ -52,40 +58,49 @@ </template> <script> -import ZTree from "./zTree/ztree"; +import ZTree from "./zTree/ztree" export default { name: "GiantTreeMenu", components: { - ZTree, + ZTree }, props: { app: { type: String, - default: "Video", + default: "Video" }, node: { - type: Array, + type: Array }, treeName: { type: String, - default: "", + default: "" }, gb28181: { type: Boolean, - default: false, + default: false }, height: { type: Number, - default: 0, + default: 0 }, setting: { type: Object, require: false, - default: function () { - return {}; - }, + default: function() { + return {} + } }, + search: { + type: Boolean, + default: false + }, + showDevArea: { + type: Boolean, + default: false + }, + nodeList: {} }, data() { return { @@ -93,154 +108,154 @@ clientX: 0, clientY: 0, dialogForm: { - text: "", + text: "" }, rules: { text: [ { required: true, message: "璇疯緭鍏ヨ妭鐐瑰悕绉�", trigger: "change" }, - { min: 2, max: 10, message: "闀垮害鍦�2鍒�10涓瓧", trigger: "change" }, - ], + { min: 2, max: 10, message: "闀垮害鍦�2鍒�10涓瓧", trigger: "change" } + ] }, curNodeTid: "", - }; + + activeTabObj: {}, + swiperOption: { + slidesPerView: 3, + spaceBetween: 0, + pagination: { + el: ".swiper-pagination", + clickable: true + }, + navigation: { + nextEl: ".swiper-next-border", + prevEl: ".swiper-pre-border" + }, + observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper + observeParents: true //淇敼swiper鐨勭埗鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper + } + } }, created() { - this.TreeDataPool.zTree = true; + this.activeTabObj = this.nodeList && this.nodeList.length > 0 ? this.nodeList[0] : "" + this.TreeDataPool.zTree = true this.TreeDataPool.activeVideoIndex = sessionStorage.activeIndexVideo ? Number(sessionStorage.activeIndexVideo) - : this.TreeDataPool.activeVideoIndex; + : this.TreeDataPool.activeVideoIndex }, watch: { - "TreeDataPool.treeType": function (newValue) { + "TreeDataPool.treeType": function(newValue) { if (newValue !== this.treeName) { - this.TreeDataPool.cleanTree(this.treeName); + this.TreeDataPool.cleanTree(this.treeName) } }, + showDevArea: function() { + this.$forceUpdate() + } }, methods: { - handleCreated: function (ztreeObj) { - let _this = this; - this.ztreeObj = ztreeObj; - ztreeObj.expandAll(true); + handleCreated: function(ztreeObj) { + let _this = this + this.ztreeObj = ztreeObj + ztreeObj.expandAll(true) // onCreated 涓搷浣渮treeObj瀵硅薄灞曞紑绗竴涓妭鐐� // ztreeObj.expandNode(ztreeObj.getNodes()[0], true); // 鎽勫儚鏈洪厤缃垏鎹㈡椂, 璁剧疆閫変腑鐘舵�� if (this.TreeDataPool.selectedNode.id) { // 鍙栨秷鎵�鏈夊閫夌殑鑺傜偣,浠呬繚鐣欏綋鍓嶅崟閫夌殑鑺傜偣 - this.TreeDataPool.selectedNodes = [this.TreeDataPool.selectedNode.id]; - this.curNodeTid = this.TreeDataPool.selectedNode.tId; + this.TreeDataPool.selectedNodes = [this.TreeDataPool.selectedNode.id] + this.curNodeTid = this.TreeDataPool.selectedNode.tId //鎽勫儚鏈轰俊鎭洿鏂颁俊鎭悗锛屽鏋滆妭鐐逛綅缃湁鍙榯Id灏变笉鍑嗕簡,this.TreeDataPool.selectedNode姝ゆ椂杩樻槸鏃х殑淇℃伅 - let ztreeNodes = ztreeObj.getNodes(); + let ztreeNodes = ztreeObj.getNodes() //var curNodeTid = ''; - _this.findTidByIdFromArr(ztreeNodes); - this.TreeDataPool.selectedNode.tId = _this.curNodeTid; - let node = this.ztreeObj.getNodeByTId( - this.TreeDataPool.selectedNode.tId - ); + _this.findTidByIdFromArr(ztreeNodes) + this.TreeDataPool.selectedNode.tId = _this.curNodeTid + let node = this.ztreeObj.getNodeByTId(this.TreeDataPool.selectedNode.tId) // 澶氶�夋椂, 閫変腑鍗曢�夊崟鍑荤殑鑺傜偣 if (this.TreeDataPool.multiple) { - this.ztreeObj.checkAllNodes(false); - this.ztreeObj.checkNode(node, true, false, false); + this.ztreeObj.checkAllNodes(false) + this.ztreeObj.checkNode(node, true, false, false) } - this.ztreeObj.selectNode(node, false, true); + this.ztreeObj.selectNode(node, false, true) } + }, + chooseTab(item) { + this.$emit("saveTree", this.activeTabObj) + setTimeout(() => { + this.activeTabObj = item + }, 100) }, findTidByIdFromArr(arr) { - let len = arr.length; - let _this = this; + let len = arr.length + let _this = this for (var i = 0; i < len; i++) { if (arr[i].id == this.TreeDataPool.selectedNode.id) { - _this.curNodeTid = arr[i].tId; - break; + _this.curNodeTid = arr[i].tId + break } if (arr[i].children) { - this.findTidByIdFromArr(arr[i].children); + this.findTidByIdFromArr(arr[i].children) } } }, onDblClick(evt, treeId, item) { if (item.type !== "4" || this.app !== "Camera") { - return; + return } - this.TreeDataPool.activeVideoId = item.id; - let videoArr = this.TreeDataPool.videoArr; - let nullVideoIndex = ""; + this.TreeDataPool.activeVideoId = item.id + let videoArr = this.TreeDataPool.videoArr + let nullVideoIndex = "" if ( this.TreeDataPool.activeForceChoose && this.TreeDataPool.activeVideoIndex !== "" && this.TreeDataPool.activeVideoIndex <= videoArr.length - 1 ) { - this.TreeDataPool.setVideoArr( - this.TreeDataPool.activeVideoIndex, - undefined, - this - ); + this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this) this.$nextTick(() => { - this.TreeDataPool.setVideoArr( - this.TreeDataPool.activeVideoIndex, - item, - this - ); - }); - return; + this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, item, this) + }) + return } for (let i = 0; i < videoArr.length; i++) { // eslint-disable-next-line - if ( - videoArr[i] === "" || - videoArr[i] === undefined || - videoArr[i] === null - ) { - nullVideoIndex = i; - break; + if (videoArr[i] === "" || videoArr[i] === undefined || videoArr[i] === null) { + nullVideoIndex = i + break } else { - nullVideoIndex = ""; + nullVideoIndex = "" } } if (nullVideoIndex === "") { - this.TreeDataPool.setVideoArr( - this.TreeDataPool.activeVideoIndex, - undefined, - this - ); + this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this) this.$nextTick(() => { - this.TreeDataPool.setVideoArr( - this.TreeDataPool.activeVideoIndex, - item, - this - ); - }); + this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, item, this) + }) } else { // this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this); this.$nextTick(() => { - this.TreeDataPool.setVideoArr( - this.TreeDataPool.activeVideoIndex, - item, - this - ); - }); - this.TreeDataPool.activeVideoIndex = nullVideoIndex; + this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, item, this) + }) + this.TreeDataPool.activeVideoIndex = nullVideoIndex } }, addCamera(node) { - this.$emit("addDevice", node); + this.$emit("addDevice", node) }, importCameras(node) { - this.$emit("import", node); + this.$emit("import", node) }, addNode(node) { this.dialogForm = { text: "", method: "add", - node: node.id, - }; - this.showDialogBox(event); + node: node.id + } + this.showDialogBox(event) }, editNode(node) { this.dialogForm = { @@ -248,56 +263,57 @@ method: "edit", node: node.id, alias: node.alias, - gb28181: this.gb28181, - }; - this.showDialogBox(event); + gb28181: this.gb28181 + } + this.showDialogBox(event) }, delNode(node) { - this.TreeDataPool.del(node.id); + this.TreeDataPool.del(node.id) }, submitForm() { // 鎻愪氦鏂板鎴栬�呯紪杈戝尯鍩熻妭鐐硅〃鍗� this.$refs.dialogForm.validate((valid) => { if (valid) { if (this.dialogForm.method == "add") { - this.TreeDataPool.add(this.dialogForm.text, this.dialogForm.node); + this.TreeDataPool.add(this.dialogForm.text, this.dialogForm.node) } else if (this.dialogForm.method == "edit") { this.TreeDataPool.update( this.dialogForm.text, this.dialogForm.node, this.gb28181 ? this.dialogForm.text : "", this.dialogForm.gb28181 - ); + ) } } else { - return false; + return false } - }); - this.hideDialogBox(); + }) + this.hideDialogBox() }, hideDialogBox() { - this.showDialog = false; - this.dialogForm = { text: "" }; + this.showDialog = false + this.dialogForm = { text: "" } }, showDialogBox(event) { - let { clientX = 0, offsetY = 0 } = event; + let { clientX = 0, offsetY = 0 } = event // this.clientX = clientX - 120; - this.clientX = 50; - this.clientY = offsetY; - this.showDialog = true; + this.clientX = 50 + this.clientY = offsetY + this.showDialog = true }, itemClick(evt, treeId, treeNode) { - this.TreeDataPool.selectedNode = treeNode; - this.TreeDataPool.treeType = this.treeName; + this.TreeDataPool.selectedNode = treeNode + this.TreeDataPool.activeNode = treeNode + this.TreeDataPool.treeType = this.treeName // 澶氶�� if (this.TreeDataPool.multiple) { // 鍗曞嚮鏌愪竴涓妭鐐规枃瀛楁椂 鍙栨秷鎵�鏈夊嬀閫夌姸鎬� 鐒跺悗閫変腑鑷韩 - this.ztreeObj.checkAllNodes(false); - this.ztreeObj.checkNode(treeNode, true, false, false); + this.ztreeObj.checkAllNodes(false) + this.ztreeObj.checkNode(treeNode, true, false, false) } - this.TreeDataPool.updateZTreeCheckNodes([treeNode]); + this.TreeDataPool.updateZTreeCheckNodes([treeNode]) }, // itemClick(treeNode) { // this.TreeDataPool.selectedNode = treeNode; @@ -313,43 +329,68 @@ // this.TreeDataPool.updateZTreeCheckNodes([treeNode]); // }, itemCheck(evt, treeId, treeNode) { - this.TreeDataPool.selectedNode = treeNode; - this.TreeDataPool.treeType = this.treeName; - debugger; + if (treeNode) { + this.TreeDataPool.selectedNode = treeNode + } + this.TreeDataPool.treeType = this.treeName + // 澶氶�� // this.ztreeObj.checkNode(treeNode, true, false, false); - let checkedNodes = this.ztreeObj.getCheckedNodes(true); - this.TreeDataPool.updateZTreeCheckNodes(checkedNodes); + let checkedNodes = this.ztreeObj.getCheckedNodes(true) + this.TreeDataPool.updateZTreeCheckNodes(checkedNodes) // 瀹炴椂缁熻閫変腑涓暟 - this.TreeDataPool.countCheckedNodes(checkedNodes); + this.TreeDataPool.countCheckedNodes(checkedNodes) // 淇濆瓨涓�浠芥暟鎹� - this.TreeDataPool.activeTreeData = this.ztreeObj.getNodes(); + this.TreeDataPool.activeTreeData = this.ztreeObj.getNodes() + this.$emit("itemChecked", treeNode) }, //灞曞紑 itemExpand(e, id, node) { - delete this.TreeDataPool.foldNodeList[node.id]; + delete this.TreeDataPool.foldNodeList[node.id] }, // 鎶樺彔 itemCollapse(e, id, node) { - this.TreeDataPool.foldNodeList[node.id] = true; + this.TreeDataPool.foldNodeList[node.id] = true }, dropNode(node, item, draggedItem, e) { // console.log('dropNode', node, item, draggedItem); - this.TreeDataPool.dropNode(draggedItem.id, item.id); + this.TreeDataPool.dropNode(draggedItem.id, item.id) }, showCameraPic(nodeId) { - this.TreeDataPool.showBaseImage(nodeId); + this.TreeDataPool.showBaseImage(nodeId) }, - }, -}; + updateNodes(ids) { + // 鍙栨秷鎵�鏈夐�変腑鐘舵�� + this.ztreeObj.checkAllNodes(false) + + // nodes 杞暟缁� + let treeNodes = this.ztreeObj.getNodes() + let nodeArry = this.ztreeObj.transformToArray(treeNodes) + + // 鍒ゆ柇鏄惁琚�変腑 + for (let i = 0; i < nodeArry.length; i++) { + if (ids.indexOf(nodeArry[i].id) > -1) { + this.ztreeObj.checkNode(nodeArry[i], true, false, false) + } + } + let checkedNodes = this.ztreeObj.getCheckedNodes(true) + this.TreeDataPool.updateZTreeCheckNodes(checkedNodes) + } + } +} </script> <style lang="scss" scoped> +.devArea { +} + .dialog-box { - position: absolute; - width: 220px; - z-index: 1; + top: 415px; + left: 43px; + position: fixed; + width: 260px; + z-index: 3; } .dialog-box-bg { position: absolute; @@ -403,9 +444,14 @@ } .tree-menu { // max-width: 350px; + min-height: 92px; overflow-x: auto; overflow-y: hidden; margin-bottom: 4px; + max-height: 70vh; +} +.empty { + line-height: 76px; } .tree-menu::-webkit-scrollbar { /*婊氬姩鏉℃暣浣撴牱寮�*/ @@ -430,4 +476,75 @@ .tree-menu:hover { overflow-y: auto; } + +.devArea { + position: relative; + margin: 20px; + background: #f0f5fa; + padding: 0 40px; + + .swiper-slide { + display: flex; + align-items: center; + height: 46px; + + &.active { + .tab { + color: #0064ff; + } + border-bottom: 2px solid #0064ff; + } + + .tab { + margin: 0 12px 0 24px; + font-size: 14px; + color: #666; + cursor: pointer; + } + + .iconfont { + font-size: 12px; + color: #dbdbdb; + } + } + + .swiper-pre-border { + position: absolute; + padding-bottom: 13px; + padding-right: 18px; + top: 12px; + left: 10px; + cursor: pointer; + + i { + font-size: 16px; + color: #999; + } + } + + .swiper-next-border { + position: absolute; + top: 12px; + right: 10px; + padding-bottom: 13px; + padding-left: 18px; + cursor: pointer; + + i { + font-size: 16px; + color: #999; + } + } + + .swiper-button-disabled { + cursor: not-allowed; + i { + color: #dbdbdb; + } + } + + .del { + cursor: pointer; + } +} </style> -- Gitblit v1.8.0