From 3e4904fda5c78cfd8b40fa925fd2970b01850224 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 19 八月 2022 22:21:30 +0800
Subject: [PATCH] 添加摄像机权限

---
 src/views/personalCenter/components/SubAccount.vue |  450 ++++++++++---------
 src/views/personalCenter/components/Content.vue    |   45 -
 src/views/search/components/giantTree/index.vue    |  239 ++++------
 src/views/manageCenter/index.vue                   |   37 +
 src/views/personalCenter/components/LeftMenu.vue   |   30 
 src/components/CameraLeft.vue                      |  447 +++++++-----------
 src/views/hashrate/CameraManage/index.vue          |    3 
 src/components/IndexHeader.vue                     |   17 
 src/Pool/TreeData.ts                               |   76 ++
 src/Pool/VideoPhotoData.ts                         |   12 
 src/components/giantTree/index.vue                 |   24 
 11 files changed, 678 insertions(+), 702 deletions(-)

diff --git a/src/Pool/TreeData.ts b/src/Pool/TreeData.ts
index 16b1ca3..7598c5b 100644
--- a/src/Pool/TreeData.ts
+++ b/src/Pool/TreeData.ts
@@ -166,27 +166,17 @@
   }
 
   updateZTreeCheckNodes(checkedNodes) {
-    let _this = this
-    _this.selectedNodes = []
-    if (!_this.multiple) {
-      _this.selectedNodes = [checkedNodes.id]
+    this.selectedNodes = []
+    if (!this.multiple) {
+      this.selectedNodes = [checkedNodes.id]
       return
     }
 
-    function nodeFilter(node: any) {
+    checkedNodes.forEach((node) => {
       if (node.type === "4" && (node.selected || node.checked)) {
         sessionStorage.setItem("cameraDevId", node.devId)
-        _this.selectedNodes.push(node.id)
+        this.selectedNodes.push(node.id)
       }
-      if (node.children) {
-        node.children.forEach((n: any) => {
-          nodeFilter(n)
-        })
-      }
-    }
-
-    checkedNodes.forEach((n: any) => {
-      nodeFilter(n)
     })
   }
 
@@ -218,7 +208,7 @@
     return camera
   }
 
-  getCameraInfoById(id) {
+  getCameraInfoById(id: string) {
     let camera = null
 
     function nodeFilter(node: any) {
@@ -278,6 +268,14 @@
 
     this.isFold(this.treeData)
     this.isFold(this.gb28181Data)
+    this.selectedNodes = []
+    this.selectedNode = {}
+  }
+
+  reset() {
+    this.treeData = []
+    this.gb28181Data = []
+
     this.selectedNodes = []
     this.selectedNode = {}
   }
@@ -368,7 +366,6 @@
     if (this.searchFrom == "cluster") {
       params.isPlatform = 1
     }
-
     const rsp: any = await getLocalCameraTree(params)
 
     if (rsp && rsp.success) {
@@ -382,6 +379,25 @@
       this.setDropDisable(this.treeData)
       this.treeDataPure = JSON.parse(JSON.stringify(this.treeData))
       this.isFold(this.treeData)
+
+      // 娓呯悊娌℃湁鏉冮檺绠$悊鐨勬憚鍍忔満, 鍚庣淇鍚庡垹闄�
+      let userInfo = JSON.parse(sessionStorage.getItem("userInfo"))
+
+      // 绠$悊鍛樻潈闄�
+      if (userInfo.username == "Administrator") {
+        return
+      }
+
+      let checkedCameras = userInfo.email
+
+      // basic 涓哄瓙璐︽埛榛樿鐨勭┖瀛楁,琛ㄧず鍙鐞嗙殑鎽勫儚鏈虹洰褰曚负绌�
+      if (checkedCameras == "basic") {
+        this.treeData = []
+      } else {
+        let cameraIds = checkedCameras.split(",")
+        console.log("cameraIds", cameraIds)
+        this.removeNoAuthorizedNode(this.treeData, cameraIds)
+      }
     }
   }
 
@@ -421,10 +437,10 @@
   async fetchTreeData() {
     this.cameraParents = {}
     if (this.openeds[0]) {
-      this.fetchLocalTree()
+      await this.fetchLocalTree()
     }
     if (this.openeds[1]) {
-      this.fetchGbTree()
+      await this.fetchGbTree()
     }
   }
 
@@ -531,6 +547,28 @@
     }
   }
 
+  removeNoAuthorizedNode(nodes: Array<any>, authList: Array<any>) {
+    for (let i = 0; i < nodes.length; ) {
+      if (nodes[i].children && nodes[i].children.length) {
+        this.removeNoAuthorizedNode(nodes[i].children, authList)
+      }
+
+      if (nodes[i].type === "4") {
+        if (authList.indexOf(nodes[i].id) < 0) {
+          nodes.splice(i, 1)
+          continue
+        }
+      } else {
+        if (!nodes[i].children || !nodes[i].children.length) {
+          nodes.splice(i, 1)
+          continue
+        }
+      }
+
+      i++
+    }
+  }
+
   countCheckedNodes(nodes: Array<any>) {
     let count = 0
     nodes.forEach((n) => {
diff --git a/src/Pool/VideoPhotoData.ts b/src/Pool/VideoPhotoData.ts
index 9400544..82d42f5 100644
--- a/src/Pool/VideoPhotoData.ts
+++ b/src/Pool/VideoPhotoData.ts
@@ -84,9 +84,19 @@
       warningFlag: this.warningFlag,
       tabs: this.queryTabs,
       tasks: this.queryTasks,
-      treeNodes: this.treeNodes,
       dataSource: "camera"
     }
+
+    // 鏍规嵁鏉冮檺鎺у埗鎽勫儚鏈�
+    let userInfo = JSON.parse(sessionStorage.getItem("userInfo"))
+    // 鏈�夋嫨鎽勫儚鏈哄苟涓斾笉鏄鐞嗗憳
+    if (!this.treeNodes.length && userInfo.username != "Administrator") {
+      let checkedCameras = userInfo.email
+
+      this.treeNodes = checkedCameras.split(",")
+    }
+    param.treeNodes = this.treeNodes
+
     if (this.searchFrom == "cluster") {
       param.isAll = true
     }
diff --git a/src/components/CameraLeft.vue b/src/components/CameraLeft.vue
index 76f3cbb..d601e66 100644
--- a/src/components/CameraLeft.vue
+++ b/src/components/CameraLeft.vue
@@ -2,22 +2,9 @@
   <transition name="slideLeft">
     <div class="CameraLeft">
       <div class="tree">
-        <div
-          class="left-tree-box"
-          v-show="TreeDataPool.showTreeBox"
-          v-loading="menuLoading"
-        >
-          <el-tabs
-            v-model="TreeDataPool.treeActiveName"
-            type="border-card"
-            @tab-click="handleClick"
-          >
-            <el-tab-pane
-              label="鎽勫儚鏈�"
-              name="camera"
-              :style="`height:${height - 56}px;`"
-              v-if="showCam"
-            >
+        <div class="left-tree-box" v-show="TreeDataPool.showTreeBox" v-loading="menuLoading">
+          <el-tabs v-model="TreeDataPool.treeActiveName" type="border-card" @tab-click="handleClick">
+            <el-tab-pane label="鎽勫儚鏈�" name="camera" :style="`height:${height - 56}px;`" v-if="showCam">
               <el-menu
                 :default-openeds="openeds"
                 background-color="#fff"
@@ -30,11 +17,7 @@
                 @close="menuClose"
               >
                 <li class="navTopSelect">
-                  <el-select
-                    v-model="TreeDataPool.searchCamType"
-                    placeholder="璇烽�夋嫨"
-                    @change="searchAreaData"
-                  >
+                  <el-select v-model="TreeDataPool.searchCamType" placeholder="璇烽�夋嫨" @change="searchAreaData">
                     <el-option
                       v-for="item in searchTypeOptions"
                       :key="item.value"
@@ -48,11 +31,7 @@
                     clearable
                     @input="querySearchAsync('camera')"
                   >
-                    <i
-                      class="iconfont searchIcon"
-                      style="color: #dcdfe6"
-                      slot="suffix"
-                      @click="searchAreaData"
+                    <i class="iconfont searchIcon" style="color: #dcdfe6" slot="suffix" @click="searchAreaData"
                       >&#xe607;</i
                     >
                   </el-input>
@@ -68,11 +47,7 @@
                 </li>
 
                 <div class="tree-edit area-add" v-show="!TreeDataPool.readonly">
-                  <el-tooltip
-                    content="娣诲姞鍖哄煙"
-                    placement="bottom"
-                    popper-class="atooltip"
-                  >
+                  <el-tooltip content="娣诲姞鍖哄煙" placement="bottom" popper-class="atooltip">
                     <button @click="addNode($event)">
                       <i class="iconfont">&#xe641;</i>
                     </button>
@@ -80,39 +55,21 @@
                 </div>
 
                 <!-- 娣诲姞璁惧鍥炬爣 -->
-                <div
-                  class="tree-edit camera-add"
-                  v-show="!TreeDataPool.readonly"
-                >
-                  <el-tooltip
-                    content="娣诲姞璁惧"
-                    placement="bottom"
-                    popper-class="atooltip"
-                  >
+                <div class="tree-edit camera-add" v-show="!TreeDataPool.readonly">
+                  <el-tooltip content="娣诲姞璁惧" placement="bottom" popper-class="atooltip">
                     <button @click="addCamera('0')">
                       <!-- <i class="el-icon-video-camera"></i> -->
-                      <span class="iconfont" style="font-size: 14px"
-                        >&#xe642;</span
-                      >
+                      <span class="iconfont" style="font-size: 14px">&#xe642;</span>
                     </button>
                   </el-tooltip>
                 </div>
 
                 <!-- 瀵煎叆璁惧 -->
-                <div
-                  class="tree-edit import-btn"
-                  v-show="!TreeDataPool.readonly"
-                >
-                  <el-tooltip
-                    content="瀵煎叆璁惧"
-                    placement="bottom"
-                    popper-class="atooltip"
-                  >
+                <div class="tree-edit import-btn" v-show="!TreeDataPool.readonly">
+                  <el-tooltip content="瀵煎叆璁惧" placement="bottom" popper-class="atooltip">
                     <button @click="importCameras('0')">
                       <!-- <i class="el-icon-video-camera"></i> -->
-                      <span class="iconfont" style="font-size: 16px"
-                        >&#xe643;</span
-                      >
+                      <span class="iconfont" style="font-size: 16px">&#xe643;</span>
                     </button>
                   </el-tooltip>
                 </div>
@@ -129,9 +86,7 @@
                 <el-submenu index="0">
                   <template slot="title">
                     <!-- <i class="iconfont iconjiankongshexiangji"></i> -->
-                    <span class="iconfont closeIcon" v-if="openeds[0] === '0'"
-                      >&#xe64a;</span
-                    >
+                    <span class="iconfont closeIcon" v-if="openeds[0] === '0'">&#xe64a;</span>
                     <span class="iconfont openIcon" v-else>&#xe64b;</span>
                     <span class="iconfont cameraIcon">&#xe645;</span>
                     <b class="tree-font">鎽勫儚鏈�</b>
@@ -151,9 +106,7 @@
                 <el-submenu index="1">
                   <template slot="title">
                     <!-- <i class="iconfont iconjiankongshexiangji"></i> -->
-                    <span class="iconfont closeIcon" v-if="openeds[0] === '1'"
-                      >&#xe64a;</span
-                    >
+                    <span class="iconfont closeIcon" v-if="openeds[0] === '1'">&#xe64a;</span>
                     <span class="iconfont openIcon" v-else>&#xe64b;</span>
                     <span class="iconfont cameraIcon">&#xe64c;</span>
                     <b class="tree-font">GB28181</b>
@@ -170,16 +123,8 @@
               </div>-->
                   <div class="tree-edit gb-lock" v-show="showLock">
                     <button @click="gbLockSwitch">
-                      <i
-                        v-if="TreeDataPool.gbReadonly"
-                        class="el-icon-lock"
-                        style="font-size: 16px"
-                      ></i>
-                      <i
-                        v-else
-                        class="el-icon-unlock"
-                        style="font-size: 16px"
-                      ></i>
+                      <i v-if="TreeDataPool.gbReadonly" class="el-icon-lock" style="font-size: 16px"></i>
+                      <i v-else class="el-icon-unlock" style="font-size: 16px"></i>
                     </button>
                   </div>
                   <el-menu-item-group class="item-group">
@@ -198,9 +143,7 @@
                 <el-submenu index="2">
                   <template slot="title">
                     <!-- <i class="iconfont iconjiankongshexiangji"></i> -->
-                    <span class="iconfont closeIcon" v-if="openeds[0] === '2'"
-                      >&#xe64a;</span
-                    >
+                    <span class="iconfont closeIcon" v-if="openeds[0] === '2'">&#xe64a;</span>
                     <span class="iconfont openIcon" v-else>&#xe64b;</span>
                     <span class="iconfont cameraIcon">&#xe64d;</span>
                     <b class="tree-font">鍥剧墖</b>
@@ -208,21 +151,12 @@
                 </el-submenu>
               </el-menu>
             </el-tab-pane>
-            <el-tab-pane
-              label="闆嗙兢"
-              name="cluster"
-              :style="`height:${height - 56}px;`"
-              v-if="showCluster"
-            >
+            <el-tab-pane label="闆嗙兢" name="cluster" :style="`height:${height - 56}px;`" v-if="showCluster">
               <div class="local-vedio-area">
                 <!-- 鎼滅储 -->
                 <div class="navTopSelect">
                   <div class="search-input flex-box">
-                    <el-select
-                      v-model="TreeDataPool.searchCamType"
-                      placeholder="璇烽�夋嫨"
-                      @change="searchClusterData"
-                    >
+                    <el-select v-model="TreeDataPool.searchCamType" placeholder="璇烽�夋嫨" @change="searchClusterData">
                       <el-option
                         v-for="item in searchTypeOptions"
                         :key="item.value"
@@ -230,9 +164,7 @@
                         :value="item.value"
                       ></el-option>
                     </el-select>
-                    <span
-                      style="display: inline-block; padding: 0px 3px"
-                    ></span>
+                    <span style="display: inline-block; padding: 0px 3px"></span>
                     <el-input
                       v-model="TreeDataPool.searchInput"
                       placeholder="鎼滅储"
@@ -248,18 +180,9 @@
                     </el-input>
                   </div>
                 </div>
-                <div
-                  class="top-menu"
-                  style="margin: 0 0 10px; text-align: left"
-                >
-                  <span
-                    class="iconfont iconjiqun"
-                    style="font-size: 20px"
-                  ></span>
-                  <span
-                    style="font-size: 14px; margin-left: 5px; font-weight: 600"
-                    >{{ clusterName }}</span
-                  >
+                <div class="top-menu" style="margin: 0 0 10px; text-align: left">
+                  <span class="iconfont iconjiqun" style="font-size: 20px"></span>
+                  <span style="font-size: 14px; margin-left: 5px; font-weight: 600">{{ clusterName }}</span>
                 </div>
                 <div class="cluster-list">
                   <tree-menu
@@ -270,6 +193,7 @@
                     :height="height"
                     @addDevice="addCamera"
                     @import="importCameras"
+                    style="width:400px"
                   />
                 </div>
               </div>
@@ -322,15 +246,8 @@
                 <!-- 鏈湴瑙嗛婧愬垪琛� -->
                 <div class="dev-vedio-list">
                   <!-- 娣诲姞鏂囦欢澶瑰浘鏍� -->
-                  <div
-                    class="tree-edit area-add"
-                    v-show="!DataStackPool.readonly"
-                  >
-                    <el-tooltip
-                      content="娣诲姞鏂囦欢澶�"
-                      placement="bottom"
-                      popper-class="atooltip"
-                    >
+                  <div class="tree-edit area-add" v-show="!DataStackPool.readonly">
+                    <el-tooltip content="娣诲姞鏂囦欢澶�" placement="bottom" popper-class="atooltip">
                       <button @click="addDir($event)">
                         <i class="iconfont iconhebingxingzhuang"></i>
                       </button>
@@ -344,15 +261,10 @@
                       <i v-else class="el-icon-unlock"></i>
                     </button>
                   </div>
-                  <LocalVedioList
-                    :dataList="TreeDataPool.localVedioList"
-                  ></LocalVedioList>
+                  <LocalVedioList :dataList="TreeDataPool.localVedioList"></LocalVedioList>
                 </div>
               </div>
-              <file-upload
-                v-show="fileUploadBox"
-                @close="fileUploadBox = false"
-              />
+              <file-upload v-show="fileUploadBox" @close="fileUploadBox = false" />
             </el-tab-pane>
           </el-tabs>
 
@@ -376,90 +288,86 @@
 </template>
 
 <script>
-import { changeEnable, deleteLocalFile, updateStatus } from "@/api/localVedio";
+import { changeEnable, deleteLocalFile, updateStatus } from "@/api/localVedio"
 
-import { createCamera } from "@/api/camera";
+import { createCamera } from "@/api/camera"
 
-import bus from "@/plugin/bus";
+import bus from "@/plugin/bus"
 // import TreeMenu from "@/components/treeMenu/index";
-import TreeMenu from "@/components/giantTree/index";
-import LocalVedioList from "@/components/subComponents/LocalVedioList";
-import FileUpload from "@/components/subComponents/FileUpload/index";
-import XLSX from "xlsx";
-import { findCluster } from "@/api/clusterManage";
+import TreeMenu from "@/components/giantTree/index"
+import LocalVedioList from "@/components/subComponents/LocalVedioList"
+import FileUpload from "@/components/subComponents/FileUpload/index"
+import XLSX from "xlsx"
+import { findCluster } from "@/api/clusterManage"
 
 export default {
   components: {
     TreeMenu,
     LocalVedioList,
-    FileUpload,
+    FileUpload
   },
   props: {
     appName: {
       type: String,
-      default: "Video",
+      default: "Video"
     },
     edit: {
       type: Boolean,
-      default: false,
+      default: false
     },
     height: {
       type: Number,
-      default: 0,
-    },
+      default: 0
+    }
   },
 
   computed: {
     showTab() {
-      return true;
+      return true
     },
     showCam() {
       return (
         this.appName === "Camera" ||
         this.appName === "Cluster" ||
-        (this.appName === "Search" &&
-          (this.buttonAuthority.indexOf("search:camera") >= 0 || this.isAdmin))
-      );
+        (this.appName === "Search" && (this.buttonAuthority.indexOf("search:camera") >= 0 || this.isAdmin))
+      )
     },
     showCluster() {
-      return this.appName === "Cluster";
+      return this.appName === "Cluster"
     },
     // 鏁版嵁鏍堥厤缃繀椤绘樉绀恒�� 妫�绱㈤�氳繃鏉冮檺鎺у埗鏄剧ず, 鏈畨瑁呮暟鎹爤涔熶笉鏄剧ず
     showDataStack() {
       if (this.appName === "DataStack") {
-        return true;
+        return true
       }
 
       if (this.appName === "Search") {
         // 鏈畨瑁呮暟鎹爤閰嶇疆
         if (this.installedApps.indexOf("dataStack") >= 0) {
           if (this.isAdmin) {
-            return true;
+            return true
           }
 
           if (this.buttonAuthority.indexOf("search:stack") >= 0) {
-            return true;
+            return true
           }
         }
       }
 
-      return false;
+      return false
     },
     showLock() {
-      return this.edit;
+      return this.edit
     },
 
     isAdmin() {
       //鍚庨棬
-      if (
-        sessionStorage.getItem("userInfo") &&
-        sessionStorage.getItem("userInfo") !== ""
-      ) {
-        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
-        return loginName === "superadmin" || loginName === "basic";
+      if (sessionStorage.getItem("userInfo") && sessionStorage.getItem("userInfo") !== "") {
+        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username
+        return loginName === "superadmin" || loginName === "basic"
       }
-      return true;
-    },
+      return true
+    }
   },
   data() {
     return {
@@ -467,25 +375,24 @@
       dataStack: "videoMonitor:dataStack",
       buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
       installedApps: sessionStorage.getItem("apps") || [],
-      loginName:
-        JSON.parse(sessionStorage.getItem("userInfo")).username || "鐢ㄦ埛鍚�",
+      loginName: JSON.parse(sessionStorage.getItem("userInfo")).username || "鐢ㄦ埛鍚�",
       searchTypeOptions: [
         {
           value: 0,
-          label: "鍏ㄩ儴鎽勫儚鏈�",
+          label: "鍏ㄩ儴鎽勫儚鏈�"
         },
         {
           value: 1,
-          label: "鍒嗘瀽鎽勫儚鏈�",
+          label: "鍒嗘瀽鎽勫儚鏈�"
         },
         {
           value: 2,
-          label: "鐩戞帶鎽勫儚鏈�",
+          label: "鐩戞帶鎽勫儚鏈�"
         },
         {
           value: 3,
-          label: "鑱斿姩鎽勫儚鏈�",
-        },
+          label: "鑱斿姩鎽勫儚鏈�"
+        }
       ],
       timeout: null,
       fileUploadBox: false,
@@ -493,258 +400,252 @@
       importAreaId: "",
       menuLoading: false,
       clusterName: "",
-      cluster: "",
-    };
+      cluster: ""
+    }
   },
   created() {
     if (this.showCam) {
-      this.TreeDataPool.treeActiveName = "camera";
+      this.TreeDataPool.treeActiveName = "camera"
       //  this.TreeDataPool.fetchTreeData();
     } else {
-      this.TreeDataPool.treeActiveName = "dataStack";
-      this.DataStackPool.fetchFiles();
+      this.TreeDataPool.treeActiveName = "dataStack"
+      this.DataStackPool.fetchFiles()
     }
     if (this.showCluster) {
-      this.TreeDataPool.treeActiveName = "cluster";
-      this.TreeDataPool.fetchClusterTree();
+      this.TreeDataPool.treeActiveName = "cluster"
+      this.TreeDataPool.fetchClusterTree()
       findCluster().then((res) => {
         if (res.success) {
-          this.clusterName = res.data.clusterName;
+          this.clusterName = res.data.clusterName
         }
-      });
+      })
     }
   },
   methods: {
     searchAreaData() {
-      this.TreeDataPool.fetchTreeData();
+      this.TreeDataPool.fetchTreeData()
     },
     searchDataStack() {
-      this.DataStackPool.fetchFiles();
+      this.DataStackPool.fetchFiles()
     },
     searchClusterData() {
-      this.TreeDataPool.fetchClusterTree();
+      this.TreeDataPool.fetchClusterTree()
     },
     lockSwitch() {
-      this.TreeDataPool.readonly = !this.TreeDataPool.readonly;
+      this.TreeDataPool.readonly = !this.TreeDataPool.readonly
     },
     gbLockSwitch() {
-      this.TreeDataPool.gbReadonly = !this.TreeDataPool.gbReadonly;
+      this.TreeDataPool.gbReadonly = !this.TreeDataPool.gbReadonly
     },
     dataStackLockSwitch() {
-      this.DataStackPool.readonly = !this.DataStackPool.readonly;
+      this.DataStackPool.readonly = !this.DataStackPool.readonly
     },
     closeTree() {
-      this.TreeDataPool.showTreeBox = false;
-      bus.$emit("refreshCompareImg");
+      this.TreeDataPool.showTreeBox = false
+      bus.$emit("refreshCompareImg")
     },
     addNode(event) {
-      this.$refs.tree.addNode(event, { id: 0 });
+      this.$refs.tree.addNode(event, { id: 0 })
     },
     addCamera(node) {
-      bus.$emit("addCameraOnTree", node);
+      bus.$emit("addCameraOnTree", node)
     },
     addDir(node) {
-      bus.$emit("addDirOnTree", node);
+      bus.$emit("addDirOnTree", node)
     },
     menuOpen(index) {
-      this.$set(this.openeds, 0, index);
-      this.TreeDataPool.openeds[index] = true;
+      this.$set(this.openeds, 0, index)
+      this.TreeDataPool.openeds[index] = true
     },
     menuClose(index) {
-      this.$set(this.openeds, 0, "");
-      this.TreeDataPool.openeds[index] = false;
+      this.$set(this.openeds, 0, "")
+      this.TreeDataPool.openeds[index] = false
     },
     refreshGB() {
       // 闃叉閲嶅鍒锋柊
       if (this.loadingGBTree) {
-        return;
+        return
       }
 
       // 鍥芥爣鎽勫儚鏈烘暟鎹槸鍥芥爣鏈嶅姟鍒嗘壒鎺ㄩ�佺殑锛岃姹傚埛鏂板垪琛ㄥ悗锛岄渶瑕佺瓑寰呯害1鍒嗛挓鐨勬椂闂村悗绔墠鑳藉悓姝ュ畬鏁版嵁銆�
-      this.TreeDataPool.refreshGB28181();
-      this.loadingGBTree = true;
+      this.TreeDataPool.refreshGB28181()
+      this.loadingGBTree = true
       setTimeout(() => {
-        this.TreeDataPool.fetchGbTree();
-        this.loadingGBTree = false;
-      }, 1000 * 60);
+        this.TreeDataPool.fetchGbTree()
+        this.loadingGBTree = false
+      }, 1000 * 60)
     },
     querySearchAsync(type) {
-      clearTimeout(this.timeout);
+      clearTimeout(this.timeout)
       this.timeout = setTimeout(() => {
         if (type === "camera") {
-          this.TreeDataPool.fetchTreeData();
+          this.TreeDataPool.fetchTreeData()
         }
         if (type === "cluster") {
-          this.TreeDataPool.fetchClusterTree();
+          this.TreeDataPool.fetchClusterTree()
         }
         if (type === "dir") {
-          this.DataStackPool.fetchFiles();
+          this.DataStackPool.fetchFiles()
         }
-      }, 500);
+      }, 500)
     },
     handleClick(event) {
       if (event.name == "dataStack") {
-        this.DataStackPool.fetchFiles();
-        this.DataStackPool.clean();
-        this.TreeDataPool.clean();
+        this.DataStackPool.fetchFiles()
+        this.DataStackPool.clean()
+        this.TreeDataPool.clean()
       }
-      this.TreeDataPool.treeActiveName = event.name;
-      console.log("褰撳墠婵�娲籲ame锛�", this.TreeDataPool.treeActiveName);
+      this.TreeDataPool.treeActiveName = event.name
     },
     async changeEnable() {
       if (this.PollData.localVideo === 0) {
         this.$notify({
           title: "澶辫触",
           type: "warning",
-          message: "寮�鍚湰鍦版暟鎹棰戝垎鏋愬鐞嗭紝闇�鍏堜负鏈湴鏁版嵁鎵嬪姩璁剧疆绠楀姏璧勬簮锛�",
-        });
-        return false;
+          message: "寮�鍚湰鍦版暟鎹棰戝垎鏋愬鐞嗭紝闇�鍏堜负鏈湴鏁版嵁鎵嬪姩璁剧疆绠楀姏璧勬簮锛�"
+        })
+        return false
       }
       let res = await changeEnable({
-        enable: this.TreeDataPool.vedioAnaliyseSwitch,
-      });
+        enable: this.TreeDataPool.vedioAnaliyseSwitch
+      })
       if (res && res.success) {
-        console.log(res, "鍒囨崲鏈湴鏂囦欢鍒嗘瀽寮�鍏�");
+        console.log(res, "鍒囨崲鏈湴鏂囦欢鍒嗘瀽寮�鍏�")
       }
     },
     getCheckedFiles() {
       let list1 = this.TreeDataPool.localVedioList.filter((i) => {
-        return i.checkStatus;
-      });
-      return list1;
+        return i.checkStatus
+      })
+      return list1
     },
     async stopVedio(status) {
       // let list1 = this.getCheckedFiles();
       if (this.TreeDataPool.checkedLocalVedio.length == 0) {
         this.$notify({
           type: "warning",
-          message: "璇峰厛閫夋嫨闇�瑕佸仠姝㈢殑瑙嗛锛�",
-        });
+          message: "璇峰厛閫夋嫨闇�瑕佸仠姝㈢殑瑙嗛锛�"
+        })
         // this.$notify({
         //   type:"info",
         //   message:"璇峰厛閫夋嫨闇�瑕佸仠姝㈢殑瑙嗛锛�"
         // })
-        return false;
+        return false
       }
       let res = await updateStatus({
         ids: this.TreeDataPool.checkedLocalVedio.map((i) => {
-          return i.id;
+          return i.id
         }),
-        status: status,
-      });
+        status: status
+      })
       if (res && res.success) {
-        console.log(res, "寮�鍚殏鍋滃弬鏁�");
+        console.log(res, "寮�鍚殏鍋滃弬鏁�")
       }
     },
     async deleteLocalFiles() {
-      let list1 = this.getCheckedFiles();
-      console.log(list1, "宸插嬀閫夌殑瑙嗛");
+      let list1 = this.getCheckedFiles()
+      console.log(list1, "宸插嬀閫夌殑瑙嗛")
       if (list1.length == 0) {
-        return false;
+        return false
       }
       let res = await deleteLocalFile({
         ids: list1.map((i) => {
-          return i.id;
-        }),
-      });
+          return i.id
+        })
+      })
       if (res && res.success) {
         this.$notify({
           type: "success",
-          message: "鍒犻櫎鎴愬姛锛侊紒",
-        });
+          message: "鍒犻櫎鎴愬姛锛侊紒"
+        })
       } else {
         this.$notify({
           type: "error",
-          message: "鍒犻櫎澶辫触锛�",
-        });
+          message: "鍒犻櫎澶辫触锛�"
+        })
       }
     },
 
     refrash(current, pageSize) {
-      this.TreeDataPool.localCurrentPage = current;
+      this.TreeDataPool.localCurrentPage = current
     },
 
     importCameras(area) {
-      this.importAreaId = area;
-      this.$refs["import-btn"].click();
+      this.importAreaId = area
+      this.$refs["import-btn"].click()
     },
 
     async uploadFile(params) {
-      const _file = params.file;
-      const fileReader = new FileReader();
+      const _file = params.file
+      const fileReader = new FileReader()
       fileReader.onload = (ev) => {
-        this.menuLoading = true;
+        this.menuLoading = true
         try {
-          const data = ev.target.result;
+          const data = ev.target.result
           const workbook = XLSX.read(data, {
-            type: "binary",
-          });
+            type: "binary"
+          })
 
           for (let sheet in workbook.Sheets) {
             //寰幆璇诲彇姣忎釜鏂囦欢
-            const sheetArray = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
+            const sheetArray = XLSX.utils.sheet_to_json(workbook.Sheets[sheet])
             //鑻ュ綋鍓峴heet娌℃湁鏁版嵁锛屽垯continue
             if (sheetArray.length == 0) {
-              continue;
+              continue
             }
 
-            let succeed = 0;
-            let failed = 0;
-            let promiseArr = [];
+            let succeed = 0
+            let failed = 0
+            let promiseArr = []
             for (let item in sheetArray) {
-              let camera = this.newCamera();
-              camera.areaid = this.importAreaId;
-              camera.name = String(sheetArray[item].name);
-              camera.rtsp = String(sheetArray[item].rtsp);
-              camera.addr = String(sheetArray[item].addr);
+              let camera = this.newCamera()
+              camera.areaid = this.importAreaId
+              camera.name = String(sheetArray[item].name)
+              camera.rtsp = String(sheetArray[item].rtsp)
+              camera.addr = String(sheetArray[item].addr)
 
               let tem = {
                 camera: camera,
-                sensors: camera.sensors,
-              };
-              tem.camera.clusterId = this.TreeDataPool.clusterId;
-              tem.camera.devId = this.TreeDataPool.devId;
-              tem.camera.parentUserId = "";
-              tem.camera.enable = false;
-              delete tem.camera.sensors;
+                sensors: camera.sensors
+              }
+              tem.camera.clusterId = this.TreeDataPool.clusterId
+              tem.camera.devId = this.TreeDataPool.devId
+              tem.camera.parentUserId = ""
+              tem.camera.enable = false
+              delete tem.camera.sensors
 
-              promiseArr.push(createCamera(tem));
+              promiseArr.push(createCamera(tem))
             }
-            let _this = this;
+            let _this = this
             Promise.allSettled(promiseArr)
               .then((res) => {
                 res.forEach((item) => {
                   if (item.status === "fulfilled") {
-                    succeed++;
+                    succeed++
                   } else {
-                    failed++;
+                    failed++
                   }
-                });
-                _this.menuLoading = false;
+                })
+                _this.menuLoading = false
                 _this.$message({
                   type: "success",
-                  message:
-                    "鎿嶄綔瀹屾垚, 瀵煎叆鎴愬姛:" +
-                    succeed +
-                    "涓� 澶辫触:" +
-                    failed +
-                    "涓�",
-                });
-                _this.TreeDataPool.fetchTreeData();
+                  message: "鎿嶄綔瀹屾垚, 瀵煎叆鎴愬姛:" + succeed + "涓� 澶辫触:" + failed + "涓�"
+                })
+                _this.TreeDataPool.fetchTreeData()
               })
               .catch((e) => {
-                console.log(e);
-              });
+                console.log(e)
+              })
           }
         } catch (e) {
-          this.menuLoading = false;
-          this.$message.warning("鏂囦欢绫诲瀷涓嶆纭紒");
+          this.menuLoading = false
+          this.$message.warning("鏂囦欢绫诲瀷涓嶆纭紒")
         }
-      };
-      fileReader.readAsBinaryString(_file);
+      }
+      fileReader.readAsBinaryString(_file)
     },
     exceed() {
-      this.$message.error("鏈�澶氬彧鑳戒笂浼�1涓獂ls鏂囦欢");
+      this.$message.error("鏈�澶氬彧鑳戒笂浼�1涓獂ls鏂囦欢")
     },
     //鍒犻櫎鏂囦欢
     remove() {},
@@ -760,11 +661,11 @@
         run_type: -1,
         username: "",
         password: "",
-        sensors: [],
-      };
-    },
-  },
-};
+        sensors: []
+      }
+    }
+  }
+}
 </script>
 
 <style lang="scss" scoped>
@@ -1069,4 +970,4 @@
 .flex-box {
   display: flex;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/components/IndexHeader.vue b/src/components/IndexHeader.vue
index 65a8d61..42dde17 100644
--- a/src/components/IndexHeader.vue
+++ b/src/components/IndexHeader.vue
@@ -7,12 +7,12 @@
           <img class="logo" src="/images/index/LOGO.png" alt="" />
         </router-link>
         <div class="title" @click="$router.push('/')">鏅烘収璁惧绠$悊骞冲彴</div>
-        <div class="label" @click="$router.push('/')">棣栭〉</div>
+        <!-- <div class="label" @click="$router.push('/')">棣栭〉</div> -->
         <!-- <div class="label">浜戞湇鍔�</div> -->
         <div class="label" @click="$router.push('/manageCenter')">绠$悊涓績</div>
         <div class="label" @click="$router.push('/dataView')">鏁版嵁鍒嗘瀽</div>
         <!-- <div class="label" @click="dataView">鏁版嵁鍒嗘瀽</div> -->
-        <div class="label" @click="$router.push('/product')">搴旂敤鍟嗗煄</div>
+        <!-- <div class="label" @click="$router.push('/product')">搴旂敤鍟嗗煄</div> -->
       </div>
 
       <!-- 宸︿晶 -->
@@ -71,7 +71,7 @@
           <div class="content"><span class="iconfont">&#xe605;</span> 宸插疄鍚嶈璇�</div>
         </li>
 
-        <li>
+        <li v-show="false">
           <div class="label" @click="jump(0)">璁㈠崟绠$悊</div>
         </li>
 
@@ -83,7 +83,7 @@
           <div class="label">鏈娑堟伅</div>
         </li> -->
 
-        <li>
+        <li v-show="false">
           <div class="label" @click="jump(0, 1)">鏈敮浠樿鍗�</div>
         </li>
 
@@ -456,7 +456,7 @@
   top: 64px;
   padding: 0 20px;
   width: 240px;
-  height: 327px;
+  // height: 327px;
   background-color: #fff;
   box-shadow: 0px 4px 12px rgba(96, 100, 106, 0.12);
   border-radius: 4px;
@@ -468,7 +468,7 @@
   }
 
   ul {
-    height: 200px;
+    // height: 200px;
     border-top: 1px solid #e9ebee;
     border-bottom: 1px solid #e9ebee;
 
@@ -508,8 +508,9 @@
   }
 
   .logOut {
-    margin-top: 20px;
-    font-size: 16px;
+    // margin-top: 20px;
+    line-height: 40px;
+    font-size: 14px;
     color: #3d3d3d;
     cursor: pointer;
 
diff --git a/src/components/giantTree/index.vue b/src/components/giantTree/index.vue
index 686c1ea..1f2ba05 100644
--- a/src/components/giantTree/index.vue
+++ b/src/components/giantTree/index.vue
@@ -42,10 +42,10 @@
     <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">
-      <el-card :body-style="{ padding: '10px' }">
+      <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>
@@ -302,7 +302,6 @@
       this.showDialog = true
     },
     itemClick(evt, treeId, treeNode) {
-      console.log("click")
       this.TreeDataPool.selectedNode = treeNode
       this.TreeDataPool.activeNode = treeNode
       this.TreeDataPool.treeType = this.treeName
@@ -361,6 +360,23 @@
     },
     showCameraPic(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)
     }
   }
 }
@@ -373,7 +389,7 @@
   top: 415px;
   left: 43px;
   position: fixed;
-  width: 220px;
+  width: 260px;
   z-index: 3;
 }
 .dialog-box-bg {
diff --git a/src/views/hashrate/CameraManage/index.vue b/src/views/hashrate/CameraManage/index.vue
index 8f55d57..3921bab 100644
--- a/src/views/hashrate/CameraManage/index.vue
+++ b/src/views/hashrate/CameraManage/index.vue
@@ -51,7 +51,6 @@
       cluster: "",
       clusterData: [],
       intervalTimer: null,
-      leftWith: 0,
       screenHeight: 0
     }
   },
@@ -145,7 +144,6 @@
   },
   methods: {
     TextWidthChange(e) {
-      console.log(1212)
       let odivParent = e.currentTarget.parentNode //鑾峰彇鐩爣鐖跺厓绱�
       let dx = e.clientX //褰撲綘绗竴娆″崟鍑荤殑鏃跺�欙紝瀛樺偍x杞寸殑鍧愭爣銆�
       let dw = odivParent.offsetWidth //瀛樺偍榛樿鐨刣iv鐨勫搴︺��
@@ -161,6 +159,7 @@
           odivParent.style.width = this.pdfWidth - odivParent.offsetLeft + "px"
         }
       }
+
       document.onmouseup = (e) => {
         document.onmousemove = null
         document.onmouseup = null
diff --git a/src/views/manageCenter/index.vue b/src/views/manageCenter/index.vue
index cdb76cc..f72fe0a 100644
--- a/src/views/manageCenter/index.vue
+++ b/src/views/manageCenter/index.vue
@@ -250,7 +250,7 @@
       if (this.warningChecked == 0 || this.warningTotal == 0) {
         return 0
       }
-      return parseInt(this.warningChecked / this.warningTotal) * 100 + "%"
+      return parseInt((this.warningChecked / this.warningTotal) * 100) + "%"
     }
   },
   data() {
@@ -457,17 +457,18 @@
       solvedTotal: 0,
       warningTotal: 0,
       warningChecked: 0,
-      warningSolved: 0
+      warningSolved: 0,
+      authorizedCameras: []
     }
   },
   created() {
     this.getInfo()
   },
-  mounted() {
+  async mounted() {
+    await this.getCameras()
     this.searchHandler()
     this.initBar()
     this.initPie()
-    this.getCameras()
   },
   methods: {
     async getCameras() {
@@ -481,9 +482,32 @@
       let camereReq = await getLocalCameraTree({ clusterId: clusterId })
       if (camereReq && camereReq.success) {
         this.cameraTree = camereReq.data.treeMenu
-        let tmpTree = JSON.parse(JSON.stringify(camereReq.data.treeMenu))
+
+        // 娓呯悊娌℃湁鏉冮檺绠$悊鐨勬憚鍍忔満, 鍚庣淇鍚庡垹闄�
+        let userInfo = JSON.parse(sessionStorage.getItem("userInfo"))
+
+        // 绠$悊鍛樻潈闄�
+        if (userInfo.username == "Administrator") {
+          return
+        }
+
+        let checkedCameras = userInfo.email
+
+        // basic 涓哄瓙璐︽埛榛樿鐨勭┖瀛楁,琛ㄧず鍙鐞嗙殑鎽勫儚鏈虹洰褰曚负绌�
+        if (checkedCameras == "basic") {
+          this.cameraTree = []
+        } else {
+          let cameraIds = checkedCameras.split(",")
+          this.authorizedCameras = cameraIds
+          this.TreeDataPool.removeNoAuthorizedNode(this.cameraTree, cameraIds)
+        }
+
+        let tmpTree = JSON.parse(JSON.stringify(this.cameraTree))
+
         for (let i = 0; i < tmpTree.length; i++) this.clearNode(tmpTree[i])
         this.menuTree = tmpTree
+
+        console.log(this.cameraTree)
       }
     },
     clearNode(tree) {
@@ -504,7 +528,7 @@
       let orgNodeIds = []
 
       if (this.selectedOrg == "") {
-        return orgNodeIds
+        return this.authorizedCameras
       }
 
       function findNode(node) {
@@ -567,6 +591,7 @@
           let decodeResult = JSON.parse(decodeString)
           decodeResult = []
           if (decodeResult) {
+            console.log("decodeResult", decodeResult)
             decodeResult.forEach((element) => {
               this.solvedTotal = this.solvedTotal + element.doc_count
               this.tableDataList.push({ date: element.key_as_string, count: element.doc_count })
diff --git a/src/views/personalCenter/components/Content.vue b/src/views/personalCenter/components/Content.vue
index dd146b5..c7ced9c 100644
--- a/src/views/personalCenter/components/Content.vue
+++ b/src/views/personalCenter/components/Content.vue
@@ -3,64 +3,55 @@
     <div class="heart">
       <LeftMenu @mChange="mChange"> </LeftMenu>
       <div class="right-content">
-        <SubAccount v-if="activeIndex == 2"></SubAccount>
-        <BasicInfo v-if="activeIndex == 1" @gotolist="gotolist"></BasicInfo>
-        <OrderMng v-if="activeIndex == 0"></OrderMng>
+        <SubAccount v-if="activeIndex == 'subAccount'"></SubAccount>
+        <BasicInfo v-if="activeIndex == 'baseInfo'" @gotolist="gotolist"></BasicInfo>
+        <OrderMng v-if="activeIndex == 'order'"></OrderMng>
       </div>
     </div>
   </div>
 </template>
 
 <script>
-import SubAccount from "./SubAccount";
-import LeftMenu from "./LeftMenu";
-import BasicInfo from "./BasicInfo";
-import OrderMng from "./OrderMng";
+import SubAccount from "./SubAccount"
+import LeftMenu from "./LeftMenu"
+import BasicInfo from "./BasicInfo"
+import OrderMng from "./OrderMng"
 
 export default {
-  created() {
-    window._AMapSecurityConfig = {
-      securityJsCode: "768ab79bdc4075aa082bc070c53bb3c4",
-    };
-    if (this.$route.query && this.$route.query.id) {
-      this.activeIndex = this.$route.query.id;
-    }
-  },
-  mounted() {},
   components: {
     SubAccount, //琛ㄦ牸
     LeftMenu,
     BasicInfo,
-    OrderMng,
+    OrderMng
   },
   data() {
     return {
       map: null,
       AMap: null,
-      activeIndex: 0,
+      activeIndex: "baseInfo",
       nodes: [],
       isShowCard: false,
       isFull: false, //鏄惁鍏ㄥ睆
       zoom: 4, //鍦板浘绾у埆
       center: [116.06157, 39.66157], //鍦板浘涓績
       activeNode: null, //閫変腑鐨勫湴鍥捐妭鐐�
-      geocoder: {},
-    };
+      geocoder: {}
+    }
   },
 
   methods: {
     //鍏抽棴璁惧璇︽儏寮瑰眰
     closeCard() {
-      this.isShowCard = false;
+      this.isShowCard = false
     },
     mChange(i) {
-      this.activeIndex = i;
+      this.activeIndex = i
     },
     gotolist() {
-      this.mChange(4);
-    },
-  },
-};
+      this.mChange(4)
+    }
+  }
+}
 </script>
 
 <style scoped lang="scss">
@@ -90,4 +81,4 @@
     width: 1036px;
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/personalCenter/components/LeftMenu.vue b/src/views/personalCenter/components/LeftMenu.vue
index 2670f4f..d2badd2 100644
--- a/src/views/personalCenter/components/LeftMenu.vue
+++ b/src/views/personalCenter/components/LeftMenu.vue
@@ -8,10 +8,10 @@
     <div class="menu-list">
       <div
         class="item"
-        @click="pickMenu(index)"
         v-for="(item, index) in menuList"
         :key="index"
         :class="index == activeIndex ? 'active-item' : ''"
+        @click="pickMenu(index, item.tab)"
       >
         <span class="iconfont">&#xe614;</span>
         <span class="item-name"> {{ item.name }}</span>
@@ -23,31 +23,31 @@
 <script>
 export default {
   created() {
-    this.userInfo = JSON.parse(sessionStorage.getItem("userInfo"));
+    this.userInfo = JSON.parse(sessionStorage.getItem("userInfo"))
     if (this.$route.query && this.$route.query.id) {
-      this.activeIndex = this.$route.query.id;
+      this.activeIndex = this.$route.query.id
     }
   },
   data() {
     return {
       menuList: [
         // { name: "璐︽埛鎬昏" },
-        { name: "璁㈠崟绠$悊" },
+        // { name: "璁㈠崟绠$悊" },
         // { name: "娑堟伅涓績" },
-        { name: "鍩烘湰璧勬枡" },
-        { name: "瀛愯处鎴风鐞�" },
+        { name: "鍩烘湰璧勬枡", tab: "baseInfo" },
+        { name: "瀛愯处鎴风鐞�", tab: "subAccount" }
       ],
       userInfo: null,
-      activeIndex: 0,
-    };
+      activeIndex: 0
+    }
   },
   methods: {
-    pickMenu(i) {
-      this.activeIndex = i;
-      this.$emit("mChange", i);
-    },
-  },
-};
+    pickMenu(idx, tab) {
+      this.activeIndex = idx
+      this.$emit("mChange", tab)
+    }
+  }
+}
 </script>
 
 <style scoped lang="scss">
@@ -94,4 +94,4 @@
     }
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/personalCenter/components/SubAccount.vue b/src/views/personalCenter/components/SubAccount.vue
index 996cc34..95b6f3d 100644
--- a/src/views/personalCenter/components/SubAccount.vue
+++ b/src/views/personalCenter/components/SubAccount.vue
@@ -10,17 +10,8 @@
 
         <div class="cluster">
           鎺堟潈鏃堕暱
-          <el-select
-            @change="findUserList"
-            v-model="timeLength"
-            placeholder="璇烽�夋嫨"
-          >
-            <el-option
-              v-for="item in durationArr"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
+          <el-select @change="findUserList" v-model="timeLength" placeholder="璇烽�夋嫨">
+            <el-option v-for="item in durationArr" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
         </div>
@@ -52,40 +43,31 @@
         :default-sort="{ prop: 'createTime', order: 'descending' }"
       >
         <el-table-column label="搴忓彿" width="55" class-name="index">
-          <template slot-scope="scope">{{
-            scope.$index + 1 + (page - 1) * size
-          }}</template>
+          <template slot-scope="scope">{{ scope.$index + 1 + (page - 1) * size }}</template>
         </el-table-column>
         <!--  <el-table-column
           prop="trueName"
           label="濮撳悕"
           show-overflow-tooltip
         ></el-table-column> -->
-        <el-table-column
-          prop="username"
-          label="鐢ㄦ埛鍚�"
-          show-overflow-tooltip
-        ></el-table-column>
-        <el-table-column
-          prop="phoneNum"
-          label="鎵嬫満鍙�"
-          show-overflow-tooltip
-        ></el-table-column>
+        <el-table-column prop="username" label="鐢ㄦ埛鍚�" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="phoneNum" label="鎵嬫満鍙�" show-overflow-tooltip></el-table-column>
         <el-table-column prop="userType" label="鐢ㄦ埛绫诲瀷">
           <template slot-scope="scope">
             <span>{{ scope.row.userType == 1 ? "涓汉" : "鍏徃" }}</span>
           </template>
         </el-table-column>
 
-        <el-table-column prop="authDuration" label="鎺堟潈鏃堕暱">
+        <!-- <el-table-column prop="authDuration" label="鎺堟潈鏃堕暱">
           <template slot-scope="scope">
             <span>{{ scope.row.authDuration + " 骞�" }} </span>
           </template>
-        </el-table-column>
+        </el-table-column> -->
 
         <!-- <el-table-column prop="authDuration" label="鎺堟潈鏃堕暱">
         </el-table-column> -->
-        <el-table-column prop="dataNames" label="鏉冮檺"> </el-table-column>
+        <el-table-column prop="dataNames" label="鍏徃"> </el-table-column>
+        <el-table-column prop="companyName" label="閮ㄩ棬" show-overflow-tooltip></el-table-column>
 
         <el-table-column label="鐘舵��">
           <template slot-scope="scope">
@@ -96,9 +78,7 @@
 
         <el-table-column label="鎿嶄綔">
           <template slot-scope="scope">
-            <span class="iconfont option" @click="editUser(scope.row)"
-              >缂栬緫</span
-            >
+            <span class="iconfont option" @click="editUser(scope.row)">缂栬緫</span>
           </template>
         </el-table-column>
       </el-table>
@@ -132,6 +112,7 @@
       <el-form-item label="鐢ㄦ埛鍚�" prop="username">
         <el-input v-model="ruleForm.username" style="width: 350px"></el-input>
       </el-form-item>
+      <!-- <el-form-item label="瀵嗙爜" prop="password" v-show="!isEditing"> -->
       <el-form-item label="瀵嗙爜" prop="password">
         <el-input v-model="ruleForm.password" style="width: 350px"></el-input>
       </el-form-item>
@@ -141,48 +122,38 @@
         >
       </el-form-item> -->
       <el-form-item label="鐢ㄦ埛绫诲瀷" prop="userType">
-        <el-radio v-model="ruleForm.userType" :label="1">涓汉</el-radio>
-        <el-radio v-model="ruleForm.userType" :label="2">鍏徃</el-radio>
+        <el-radio v-model="ruleForm.userType" :label="1">鏈湴</el-radio>
+        <el-radio v-model="ruleForm.userType" :label="2">OA璐︽埛</el-radio>
       </el-form-item>
+
       <el-form-item label="濮撳悕" prop="trueName">
         <el-input v-model="ruleForm.trueName" style="width: 350px"></el-input>
       </el-form-item>
-      <el-form-item label="閭">
-        <el-input v-model="ruleForm.email" style="width: 350px"></el-input>
+
+      <el-form-item label="鎵嬫満鍙�">
+        <el-input v-model="ruleForm.phoneNum" style="width: 350px"></el-input>
       </el-form-item>
 
-      <el-form-item label="琛屼笟">
-        <el-select
-          v-model="ruleForm.industryId"
-          placeholder="璇烽�夋嫨琛屼笟"
-          style="width: 350px"
-        >
-          <el-option
-            v-for="(item, index) in industrys"
-            :label="item.name"
-            :value="item.id"
-            :key="index"
-          ></el-option>
+      <el-form-item label="閮ㄩ棬">
+        <el-input v-model="ruleForm.companyName" style="width: 350px"></el-input>
+      </el-form-item>
+
+      <!-- <el-form-item label="琛屼笟">
+        <el-select v-model="ruleForm.industryId" placeholder="璇烽�夋嫨琛屼笟" style="width: 350px">
+          <el-option v-for="(item, index) in industrys" :label="item.name" :value="item.id" :key="index"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="鍦板尯">
-        <el-cascader
-          v-model="ruleForm.address"
-          :props="options"
-          style="width: 350px"
-        ></el-cascader>
-      </el-form-item>
-      <el-form-item label="鎺堟潈鏃堕暱">
-        <el-select
-          v-model="ruleForm.authDuration"
-          style="width: 350px"
-          placeholder="璇烽�夋嫨鎺堟潈鏃堕暱"
-        >
+        <el-cascader v-model="ruleForm.address" :props="options" style="width: 350px"></el-cascader>
+      </el-form-item> -->
+
+      <!-- <el-form-item label="鎺堟潈鏃堕暱">
+        <el-select v-model="ruleForm.authDuration" style="width: 350px" placeholder="璇烽�夋嫨鎺堟潈鏃堕暱">
           <el-option label="涓�骞�" :value="1"></el-option>
           <el-option label="涓ゅ勾" :value="2"></el-option>
           <el-option label="涓夊勾" :value="3"></el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
 
       <el-form-item label="鐢ㄦ埛鏉冮檺" prop="menuIds" class="user-tree">
         <div class="tree-box">
@@ -210,14 +181,28 @@
             :props="defaultProp"
             :default-checked-keys="checkedData"
             check-on-click-node
+            @check-change="selectDevice"
           >
           </el-tree>
+        </div>
+        <div class="tree-box">
+          <div class="t">鎽勫儚鏈烘潈闄�</div>
+          <tree-menu
+            ref="ztreeMenus"
+            app="Camera"
+            treeName="localTree"
+            :node="TreeDataPool.treeData"
+            :height="treeHeight"
+            :setting="treeSettings"
+            style="width:330px;max-height:440px"
+          />
         </div>
       </el-form-item>
     </el-form>
     <div class="right">
       <div class="button searchBtn" @click="saveSubUser">淇濆瓨</div>
       <div class="button resetBtn" @click="resetUser">閲嶇疆</div>
+      <div class="button resetBtn" style="margin-left:20px" @click="goback">杩斿洖</div>
     </div>
   </div>
   <div class="sub-account" v-else-if="isShowRelate">
@@ -225,24 +210,24 @@
       <span class="iconfont">&#xe614;</span>
       <span>鍏宠仈瀛愯处鎴�</span>
     </div>
-    <Steps
-      :titleList="['鍏宠仈瀛愯处鍙蜂俊鎭�', '鏉冮檺璁剧疆', '瀹屾垚']"
-      :activeIndex="activeIndex"
-    ></Steps>
+    <Steps :titleList="['鍏宠仈瀛愯处鍙蜂俊鎭�', '鏉冮檺璁剧疆', '瀹屾垚']" :activeIndex="activeIndex"></Steps>
     <StepsCard @goback="goback" @goto="goto"></StepsCard>
   </div>
 </template>
 
 <script>
-import { findUserList, saveSubUser, getMenu, getDataTree } from "@/api/user";
-import { getAreas, getDic } from "@/api/login";
+import { findUserList, saveSubUser, getMenu, getDataTree } from "@/api/user"
+import { getAreas, getDic } from "@/api/login"
 
-import Steps from "./Steps";
-import StepsCard from "./StepCard";
+import Steps from "./Steps"
+import StepsCard from "./StepCard"
+import TreeMenu from "@/components/giantTree/index"
+
 export default {
   components: {
     Steps,
     StepsCard,
+    TreeMenu
   },
   data() {
     const validateTree = (rule, value, callback) => {
@@ -252,44 +237,48 @@
         this.ruleForm.menuIds.length > 0 &&
         this.ruleForm.dataIds.length > 0
       ) {
-        callback();
+        callback()
       } else {
-        callback(new Error("璇烽�夎彍鍗曟潈闄愬拰鏁版嵁鏉冮檺"));
+        callback(new Error("璇烽�夎彍鍗曟潈闄愬拰鏁版嵁鏉冮檺"))
       }
-    };
+    }
     return {
-      searchTime: [
-        this.$moment().format("YYYY-MM-DD 00:00:00"),
-        this.$moment().format("YYYY-MM-DD HH:mm:ss"),
-      ], //鎼滅储鏃堕棿
+      searchTime: [this.$moment().format("YYYY-MM-DD 00:00:00"), this.$moment().format("YYYY-MM-DD HH:mm:ss")], //鎼滅储鏃堕棿
       page: 1,
       size: 10, //鍒嗛〉鐩稿叧
       inputText: "", //杈撳叆妗嗗唴瀹�
       activeStep: 0,
       activeIndex: 0,
       industrys: [],
-      total: 0, //鎬绘暟
+      total: 0, //鎬绘暟,
+      treeHeight: 750,
+      treeData: [],
+      treeSettings: {
+        check: {
+          enable: true
+        }
+      },
       options: {
         lazy: true,
         lazyLoad(node, resolve) {
           // 鎳掑姞杞借妭鐐圭渷甯傛暟鎹�
-          const { level } = node;
-          let nodes;
+          const { level } = node
+          let nodes
           getAreas({ parentId: level == 0 ? 0 : node.value })
             .then((json) => {
-              nodes = json.data.list;
+              nodes = json.data.list
               nodes = nodes.map((item) => ({
                 value: item.id,
                 label: item.name,
                 level: item.level,
-                leaf: level >= 1,
-              }));
-              resolve(nodes);
+                leaf: level >= 1
+              }))
+              resolve(nodes)
             })
             .catch((err) => {
-              console.log(err);
-            });
-        },
+              console.log(err)
+            })
+        }
       },
       dataList: [],
       isShowAdd: false, //鏄惁灞曠ず鏂板寮圭獥
@@ -300,16 +289,16 @@
       durationArr: [
         {
           value: 1,
-          label: "1骞�",
+          label: "1骞�"
         },
         {
           value: 2,
-          label: "2骞�",
+          label: "2骞�"
         },
         {
           value: 3,
-          label: "3骞�",
-        },
+          label: "3骞�"
+        }
       ], //鎵�灞為泦缇や笅鎷夋
       timeLength: null, //閫変腑鐨勬巿鏉冩椂闀�
       showQuit: false, //灞曠ず閫�鍑洪泦缇ょ殑寮圭獥
@@ -323,26 +312,24 @@
         userType: "",
         password: "",
         trueName: "",
-        email: "",
+        companyName: "",
+        phoneNum: "",
+        email: "basic",
         isChangePwd: false,
         industryId: "",
         address: [],
-        authDuration: 1,
+        authDuration: 3,
         areaId: "",
         provinceId: "",
         menuIds: [],
-        dataIds: [],
+        dataIds: []
       },
       rules: {
-        username: [
-          { required: true, message: "璇疯緭鍏ョ敤鎴峰悕", trigger: "blur" },
-        ],
-        password: [{ required: true, message: "璇疯緭鍏ュ瘑鐮�", trigger: "blur" }],
-        userType: [
-          { required: true, message: "璇烽�夋嫨鐢ㄦ埛绫诲瀷", trigger: "blur" },
-        ],
+        username: [{ required: true, message: "璇疯緭鍏ョ敤鎴峰悕", trigger: "blur" }],
+        // password: [{ required: true, message: "璇疯緭鍏ュ瘑鐮�", trigger: "blur" }],
+        userType: [{ required: true, message: "璇烽�夋嫨鐢ㄦ埛绫诲瀷", trigger: "blur" }],
         trueName: [{ required: true, message: "璇疯緭鍏ュ鍚�", trigger: "blur" }],
-        menuIds: [{ validator: validateTree, trigger: "blur" }],
+        menuIds: [{ validator: validateTree, trigger: "blur" }]
       },
       sysMenus: [],
       DataTree: [],
@@ -350,52 +337,87 @@
       curEditId: "",
       defaultProp: {
         children: "children",
-        label: "name",
-      },
-    };
+        label: "name"
+      }
+    }
   },
   created() {
-    this.userInfo = JSON.parse(sessionStorage.getItem("userInfo"));
-    this.findUserList();
-    this.getIndustrys();
-    this.fetchSysMenus();
-    this.fetchDataTree();
+    this.userInfo = JSON.parse(sessionStorage.getItem("userInfo"))
+    this.findUserList()
+    this.getIndustrys()
+    this.fetchSysMenus()
+    this.fetchDataTree()
+  },
+  mounted() {
+    this.TreeDataPool.reset()
+    this.TreeDataPool.multiple = true
   },
   methods: {
     fetchDataTree() {
       getDataTree({ userId: this.userInfo.id }).then((res) => {
-        this.DataTree = res.data.dataTree;
-      });
+        this.DataTree = res.data.dataTree
+      })
     },
     fetchSysMenus() {
       getMenu().then((rsp) => {
         if (rsp && rsp.success) {
-          this.sysMenus = rsp.data.menus;
+          this.sysMenus = rsp.data.menus
           // this.userMenus = [];
         }
-      });
+      })
+    },
+    selectDevice(node, checked, hasChildren) {
+      if (checked) {
+        sessionStorage.setItem("clusterId", node.id)
+        this.TreeDataPool.fetchTreeData()
+        this.treeData = this.TreeDataPool.treeData
+      } else {
+        this.treeData = []
+        this.TreeDataPool.reset()
+      }
     },
     addSubCount() {
-      this.isShowAdd = true;
-      this.resetUser();
+      this.isShowAdd = true
+      this.resetUser()
     },
-    editUser(row) {
-      this.isShowAdd = true;
-      this.isEditing = true;
-      this.ruleForm.id = row.id;
-      this.ruleForm.username = row.username;
-      this.ruleForm.userType = row.userType;
-      this.ruleForm.password = row.password;
-      this.ruleForm.trueName = row.trueName;
-      this.ruleForm.email = row.email;
-      this.ruleForm.isChangePwd = row.isChangePwd;
-      this.ruleForm.industryId = row.industryId;
-      this.ruleForm.areaId = row.areaId;
-      this.ruleForm.address = [row.provinceId, row.areaId];
-      this.ruleForm.provinceId = row.provinceId;
-      this.ruleForm.authDuration = row.authDuration;
-      this.checkedMenu = row.menuIds;
-      this.checkedData = row.dataIds;
+    async editUser(row) {
+      this.isShowAdd = true
+      this.isEditing = true
+      this.ruleForm.id = row.id
+      this.ruleForm.username = row.username
+      this.ruleForm.userType = row.userType
+      this.ruleForm.password = row.password
+      this.ruleForm.trueName = row.trueName
+      this.ruleForm.companyName = row.companyName
+      this.ruleForm.phoneNum = row.phoneNum
+      this.ruleForm.email = row.email
+      this.ruleForm.isChangePwd = row.isChangePwd
+      this.ruleForm.industryId = row.industryId
+      this.ruleForm.areaId = row.areaId
+      this.ruleForm.address = [row.provinceId, row.areaId]
+      this.ruleForm.provinceId = row.provinceId
+      this.ruleForm.authDuration = row.authDuration
+      this.checkedMenu = row.menuIds
+      this.checkedData = row.dataIds
+
+      // 鏌ヨ褰撳墠鐢ㄦ埛鏉冮檺涓嬫墍鏈夊彲绠$悊鐨勬憚鍍忔満
+      if (row.dataIds) {
+        sessionStorage.setItem("clusterId", row.dataIds[0])
+        await this.TreeDataPool.fetchTreeData()
+      }
+      // 鐢╡mail瀛楁鏆傛椂浠f浛鎽勫儚鏈洪泦鍚堝瓧娈�
+      let checkedCameras = row.email
+
+      // basic 涓哄瓙璐︽埛榛樿鐨勭┖瀛楁,琛ㄧず鍙鐞嗙殑鎽勫儚鏈虹洰褰曚负绌�
+      if (checkedCameras == "basic") {
+        return
+      }
+
+      // 鍙嶉�夋憚鍍忔満
+      if (checkedCameras.length) {
+        let cameraIds = checkedCameras.split(",")
+        this.$refs.ztreeMenus.updateNodes(cameraIds)
+      }
     },
     resetUser() {
       this.ruleForm = {
@@ -404,30 +426,33 @@
         userType: "",
         password: "",
         trueName: "",
+        companyName: "",
+        phoneNum: "",
         email: "",
         isChangePwd: false,
         address: [],
         industryId: "",
         areaId: "",
         provinceId: "",
-        authDuration: 1,
-      };
+        authDuration: 1
+      }
       this.$nextTick(() => {
-        this.$refs.treeMenus.setCheckedKeys([]);
-        this.$refs.treeData.setCheckedKeys([]);
-      });
+        this.$refs.treeMenus.setCheckedKeys([])
+        this.$refs.treeData.setCheckedKeys([])
+      })
     },
     async getIndustrys() {
-      let res = await getDic();
+      let res = await getDic()
       if (res.success) {
-        this.industrys = res.data.dics;
+        this.industrys = res.data.dics
       } else {
-        console.log("鏌ヨ琛屼笟鍒楄〃澶辫触锛�");
+        console.log("鏌ヨ琛屼笟鍒楄〃澶辫触锛�")
       }
     },
     saveSubUser() {
-      this.ruleForm.menuIds = this.$refs.treeMenus.getCheckedKeys();
-      this.ruleForm.dataIds = this.$refs.treeData.getCheckedKeys();
+      let _this = this
+      this.ruleForm.menuIds = this.$refs.treeMenus.getCheckedKeys()
+      this.ruleForm.dataIds = this.$refs.treeData.getCheckedKeys()
       this.$refs["ruleForm"].validate((valid) => {
         if (valid) {
           let json = {
@@ -437,73 +462,87 @@
             isChangePwd: this.ruleForm.isChangePwd,
             userType: this.ruleForm.userType,
             trueName: this.ruleForm.trueName,
-            email: this.ruleForm.email,
+            companyName: this.ruleForm.companyName,
+            phoneNum: this.ruleForm.phoneNum,
             industryId: this.ruleForm.industryId,
-            areaId:
-              this.ruleForm.address.length == 2 ? this.ruleForm.address[1] : "",
+            areaId: this.ruleForm.address.length == 2 ? this.ruleForm.address[1] : "",
             authDuration: this.ruleForm.authDuration,
             menuIds: this.ruleForm.menuIds,
-            dataIds: this.ruleForm.dataIds,
-          };
+            dataIds: this.ruleForm.dataIds
+          }
+
+          // 鑾峰彇瀛愯处鎴烽�変腑鐨勬憚鍍忔満鍒楄〃
+          let cameraIds = this.TreeDataPool.selectedNodes
+          if (cameraIds.length == 0) {
+            json.email = "basic"
+          } else {
+            json.email = cameraIds.join(",")
+          }
+
+          // 缂栬緫涓嶆彁浜ゅ瘑鐮�
+          if (this.isEditing) {
+            // delete json.password
+          }
 
           if (typeof json.areaId === "string") {
-            delete json.areaId;
+            delete json.areaId
           }
 
           if (typeof json.authDuration === "string") {
-            delete json.authDuration;
+            delete json.authDuration
           }
 
+          // return
           saveSubUser(json)
             .then((res) => {
               if (res.success) {
-                this.$notify.success(res.data);
-                this.isShowAdd = false;
-                this.isEditing = false;
-                this.findUserList();
+                this.$notify.success(res.data)
+                this.isShowAdd = false
+                this.isEditing = false
+                this.findUserList()
               } else {
-                this.$notify.error(res.msg);
+                this.$notify.error(res.msg)
               }
             })
             .catch((err) => {
-              this.$notify.error(err.data.msg);
-            });
+              this.$notify.error(err.data.msg)
+            })
         } else {
-          return false;
+          return false
         }
-      });
+      })
     },
     findUserList() {
       findUserList({
         inputText: this.inputText,
         page: this.page,
         size: this.size,
-        authDuration: this.timeLength,
+        authDuration: this.timeLength
       })
         .then((res) => {
           if (res.success) {
-            this.dataList = res.data.dataList;
-            this.total = res.data.total;
+            this.dataList = res.data.dataList
+            this.total = res.data.total
           } else {
-            this.$notify.error("鍔犺浇瀛愯处鎴峰垪琛ㄥけ璐�");
+            this.$notify.error("鍔犺浇瀛愯处鎴峰垪琛ㄥけ璐�")
           }
         })
         .catch((e) => {
-          this.$notify.error(e.msg);
-        });
+          this.$notify.error(e.msg)
+        })
     },
     goback() {
-      this.isShowAdd = false;
-      this.isEditing = false;
-      this.isShowRelate = false;
-      this.activeIndex = 0;
+      this.isShowAdd = false
+      this.isEditing = false
+      this.isShowRelate = false
+      this.activeIndex = 0
     },
     goto(i) {
-      this.activeIndex = i;
+      this.activeIndex = i
     },
     reset() {
-      this.inputText = "";
-      this.timeLength = null;
+      this.inputText = ""
+      this.timeLength = null
     },
     // 璺冲埌璁惧璇︽儏
     checkDetail(row) {
@@ -513,9 +552,9 @@
           id: row.devId,
           ip: row.devIp,
           port: row.serverPort,
-          ndid: row.id,
-        },
-      });
+          ndid: row.id
+        }
+      })
     },
 
     // 璺冲埌绠楁硶璇︽儏
@@ -525,9 +564,9 @@
         query: {
           id: row.devId,
           ip: row.devIp,
-          port: row.serverPort,
-        },
-      });
+          port: row.serverPort
+        }
+      })
     },
 
     // 鏌ヨ鍒楄〃
@@ -535,68 +574,65 @@
     save() {},
     //鍒嗛〉鍔熻兘
     handleSizeChange(size) {
-      this.size = size;
-      this.findUserList();
+      this.size = size
+      this.findUserList()
     },
     //鍒嗛〉鍔熻兘
     refrash(page) {
-      this.page = page;
-      this.findUserList();
+      this.page = page
+      this.findUserList()
     },
 
     //瑙g粦鎸夐挳
     Untying(row) {
-      console.log(row);
-      this.unbindId = row.id;
-      this.isShowUnbind = true;
+      console.log(row)
+      this.unbindId = row.id
+      this.isShowUnbind = true
     },
 
     //鑾峰緱榛樿鏃堕棿
     getDateInit() {
       // 瑕佹眰 榛樿涓�涓湀
-      const end = new Date();
-      const start = new Date();
-      const nowDate = new Date();
-      nowDate.setHours(0);
-      nowDate.setMinutes(0);
-      nowDate.setSeconds(0);
-      nowDate.setMilliseconds(0);
-      start.setTime(nowDate.getTime() - 3600 * 1000 * 24 * 30);
-      end.setTime(nowDate.getTime() + 3600 * 1000 * 24 - 1);
-      return [
-        this.$moment(start).format("YYYY-MM-DD HH:mm:ss"),
-        this.$moment(end).format("YYYY-MM-DD HH:mm:ss"),
-      ];
+      const end = new Date()
+      const start = new Date()
+      const nowDate = new Date()
+      nowDate.setHours(0)
+      nowDate.setMinutes(0)
+      nowDate.setSeconds(0)
+      nowDate.setMilliseconds(0)
+      start.setTime(nowDate.getTime() - 3600 * 1000 * 24 * 30)
+      end.setTime(nowDate.getTime() + 3600 * 1000 * 24 - 1)
+      return [this.$moment(start).format("YYYY-MM-DD HH:mm:ss"), this.$moment(end).format("YYYY-MM-DD HH:mm:ss")]
     },
 
     // 鍏抽棴瑙g粦寮圭獥
     closeUnbindBox() {
-      this.isShowUnbind = false;
+      this.isShowUnbind = false
     },
 
     //瑙g粦鎴愬姛鍥炶皟
     reflash() {
-      this.isShowUnbind = false;
+      this.isShowUnbind = false
     },
 
     clearSearch() {
-      this.searchTime = this.getDateInit();
-      this.inputText = "";
+      this.searchTime = this.getDateInit()
+      this.inputText = ""
     },
 
     //閫�鍑洪泦缇�
     quitCluster(equipment) {
-      this.activeEquipment = equipment;
-      this.showQuit = true;
+      this.activeEquipment = equipment
+      this.showQuit = true
     },
 
     //鍔犲叆闆嗙兢
     joinCluster(equipment) {
-      this.activeEquipment = equipment;
-      this.showJoin = true;
-    },
-  },
-};
+      this.activeEquipment = equipment
+      this.showJoin = true
+    }
+  }
+}
 </script>
 
 <style scoped lang="scss">
@@ -885,7 +921,7 @@
 }
 </style>
 
-<style >
+<style>
 .el-date-table td.start-date span,
 .el-date-table td.end-date span {
   background-color: #0065ff;
diff --git a/src/views/search/components/giantTree/index.vue b/src/views/search/components/giantTree/index.vue
index faf2f4c..de20cb0 100644
--- a/src/views/search/components/giantTree/index.vue
+++ b/src/views/search/components/giantTree/index.vue
@@ -20,29 +20,14 @@
       @onShowPic="showCameraPic"
     />
     <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' }"
-    >
+    <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"
-        >
+        <el-form :model="dialogForm" size="mini" :rules="rules" ref="dialogForm" label-width="10px">
           <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 +37,40 @@
 </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 {}
+      }
+    }
   },
   data() {
     return {
@@ -93,154 +78,128 @@
       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: "",
-    };
+      curNodeTid: ""
+    }
   },
   created() {
-    this.TreeDataPool.zTree = true;
+    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)
       }
-    },
+    }
   },
   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)
       }
     },
 
     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 +207,56 @@
         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 { offsetY = 0 } = event;
+      let { 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.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,36 +272,36 @@
     //   this.TreeDataPool.updateZTreeCheckNodes([treeNode]);
     // },
     itemCheck(evt, treeId, treeNode) {
-      this.TreeDataPool.selectedNode = treeNode;
-      this.TreeDataPool.treeType = this.treeName;
+      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()
     },
     //灞曞紑
     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) {
       // 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)
+    }
+  }
+}
 </script>
 <style lang="scss" scoped>
 .dialog-box {

--
Gitblit v1.8.0