From a2ebd9a92a375b0b6898d532d3fee782b5fd8f49 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期四, 15 十月 2020 19:22:57 +0800
Subject: [PATCH] 修复权限设置

---
 src/pages/labelTrack/index/App.vue             |  215 +++++++++++++++++
 src/pages/desktop/index/App.vue                |   37 ++
 src/components/LeftNav.vue                     |   47 ++-
 src/pages/ai/index/App.vue                     |  162 ++++++------
 src/pages/vindicate/index/App.vue              |   30 +-
 src/pages/index/App.vue                        |   46 ++-
 src/pages/labelTrack/index/api.ts              |   20 +
 package.json                                   |    2 
 src/components/fTemplate.vue                   |    4 
 src/pages/settings/components/BasicSetting.vue |   48 +++
 src/pages/cameraAccess/index/VideoManage.vue   |   38 +--
 src/pages/labelTrack/index/main.ts             |   13 +
 src/pages/analysisPower/index/App.vue          |   25 +
 13 files changed, 516 insertions(+), 171 deletions(-)

diff --git a/package.json b/package.json
index a95446e..719d2f9 100644
--- a/package.json
+++ b/package.json
@@ -84,4 +84,4 @@
   "keywords": [],
   "author": "",
   "license": "ISC"
-}
+}
\ No newline at end of file
diff --git a/src/components/LeftNav.vue b/src/components/LeftNav.vue
index 86e0a7c..1fb7a61 100644
--- a/src/components/LeftNav.vue
+++ b/src/components/LeftNav.vue
@@ -151,9 +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>
+        <el-tab-pane
+          label="闆嗙兢"
+          name="cluster"
+          :style="`height:${height - 56}px;`"
+          v-if="showCluster"
+        ></el-tab-pane>
         <el-tab-pane
           label="鏁版嵁鏍�"
           name="dataStack"
@@ -290,13 +293,32 @@
       return true;
     },
     showCam() {
-      return this.appName === "Camera" || this.appName === "Search";
+      debugger
+      return this.appName === "Camera" || (this.appName === "Search" && this.buttonAuthority.indexOf("search:camera") >= 0);
     },
     showCluster() {
-      return this.appName === "Cluster"
+      return this.appName === "Cluster";
     },
+    // 鏁版嵁鏍堥厤缃繀椤绘樉绀恒�� 妫�绱㈤�氳繃鏉冮檺鎺у埗鏄剧ず, 鏈畨瑁呮暟鎹爤涔熶笉鏄剧ず
     showDataStack() {
-      return this.appName === "DataStack" || this.appName === "Search";
+      if (this.appName === "DataStack") {
+        return true;
+      }
+
+      if (this.appName === "Search") {
+        // 鏈畨瑁呮暟鎹爤閰嶇疆
+        if (this.installedApps.indexOf("dataStack") >= 0) {
+          if (this.isAdmin) {
+            return true;
+          }
+
+          if (this.buttonAuthority.indexOf("search:stack") >= 0) {
+            return true;
+          }
+        }
+      }
+
+      return false;
     },
     showLock() {
       return this.edit;
@@ -329,6 +351,7 @@
       dataStack: "videoMonitor:dataStack",
       activeIndexVideo: "",
       buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
+      installedApps: sessionStorage.getItem("apps") || [],
       loginName: JSON.parse(sessionStorage.getItem("userInfo")).username || "鐢ㄦ埛鍚�",
       searchTypeOptions: [
         {
@@ -565,11 +588,11 @@
               promiseArr.push(createCamera(camera));
             }
             let _this = this;
-            Promise.allSettled(promiseArr).then(res=>{
-              res.forEach(item=>{
-                if(item.status === 'fulfilled'){
+            Promise.allSettled(promiseArr).then(res => {
+              res.forEach(item => {
+                if (item.status === 'fulfilled') {
                   succeed++;
-                }else{
+                } else {
                   failed++;
                 }
               });
@@ -579,10 +602,10 @@
                 message: "鎿嶄綔瀹屾垚, 瀵煎叆鎴愬姛:" + succeed + "涓� 澶辫触:" + failed + "涓�"
               })
               _this.TreeDataPool.fetchTreeData();
-            }).catch(e=>{
+            }).catch(e => {
               console.log(e)
             });
-            
+
           }
         } catch (e) {
           this.menuLoading = false
diff --git a/src/components/fTemplate.vue b/src/components/fTemplate.vue
index f095c00..6d0e485 100644
--- a/src/components/fTemplate.vue
+++ b/src/components/fTemplate.vue
@@ -29,7 +29,7 @@
     }
   },
   computed: {
-    isAdmin () {
+    isAdmin() {
       if (
         sessionStorage.getItem('userInfo') &&
         sessionStorage.getItem('userInfo') !== ''
@@ -41,7 +41,7 @@
       }
       return false
     },
-    isShow () {
+    isShow() {
       if (this.isAdmin) {
         return true
       } else if (
diff --git a/src/pages/ai/index/App.vue b/src/pages/ai/index/App.vue
index ba070c3..653f3cc 100644
--- a/src/pages/ai/index/App.vue
+++ b/src/pages/ai/index/App.vue
@@ -8,7 +8,7 @@
           </div>
         </div>
         <!-- 瓒呯骇绠$悊鍛樺彲瑙� -->
-        <div class="super" v-if="isSuperUser">
+        <div class="super">
           <div class="left-box">
             <!-- <div class="title">
           <label>绠楁硶搴�</label>
@@ -206,7 +206,7 @@
               <el-tab-pane
                 label="绂荤嚎鍗囩骇/瀹夎"
                 name="upgradeOrInstallation"
-                v-show="activeName==='upgradeOrInstallation'"
+                v-if="isShow('algorithmManage:insOffLine')"
               >
                 <div class="tab-content">
                   <div class="action-bar">
@@ -222,7 +222,7 @@
                   </div>
                 </div>
               </el-tab-pane>
-              <el-tab-pane label="搴旂敤涓績" name="algorithmMall" v-show="activeName==='algorithmMall'">
+              <el-tab-pane label="搴旂敤涓績" name="algorithmMall" v-if=" isShow('algorithmManage:buy')">
                 <div class="tab-content">
                   <p class="src-title">绠楁硶杞欢</p>
                   <div class="store-list flex-list">
@@ -442,29 +442,40 @@
     FileUploader
   },
   computed: {
-    notInstalledList () {
+    notInstalledList() {
       return this.TaskMange.list1.filter(sdk => {
         return sdk.installed === false;
       });
     },
-    installedList () {
+    installedList() {
       return this.TaskMange.list1.filter(sdk => {
         return sdk.installed === true;
       });
     },
-    ungradeList () {
+    ungradeList() {
       // 鍗囩骇澶勭悊浼氬鑷撮噸澶嶇殑key,闇�瑕佷慨鏀�
       return [];
       return this.TaskMange.list1.filter(sdk => {
         return sdk.isUpgrade === true;
       });
     },
+    isAdmin() {
+      if (
+        sessionStorage.getItem("userInfo") &&
+        sessionStorage.getItem("userInfo") !== ""
+      ) {
+        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
+        return loginName === "superadmin" || loginName === "basic";
+      }
 
+      return false;
+    },
   },
-  data () {
+  data() {
     return {
       TaskMange: new TaskManage,
       VideoManageData: new VideoManageData,
+      buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
       activeName: "myAlgorithm",
       patchUpdateStatus: "",
       dragging: false,
@@ -554,7 +565,7 @@
   },
   watch: {
     list2: {
-      handler (newVal, oldVal) {
+      handler(newVal, oldVal) {
         // window.console.log(newVal, oldVal, '鐩戝惉list2')
         if (newVal !== oldVal) {
           // window.console.log(newVal, '鐩戝惉list2')
@@ -575,13 +586,12 @@
       }
     }
   },
-  mounted () {
+  mounted() {
     this.getAllApps();
     this.findAllSdk();
     this.findByType();
     this.getBaseList();
     this.findAll();
-    this.getUser();
     this.getUnActivedList();
     this.getUnActivedAppList();
     // this.TaskMange.findAllSdk();
@@ -589,7 +599,10 @@
     this.VideoManageData.init();
   },
   methods: {
-    offlineInstall () {
+    isShow(authority) {
+      return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
+    },
+    offlineInstall() {
       this.installDialogVisible = false;
       this.isInstall = true;
       //瀹夎
@@ -617,7 +630,7 @@
         });
       })
     },
-    downloadApp (app) {
+    downloadApp(app) {
       app.installLoading = true;
       let _this = this;
       installApp({ path: app.id }).then(res => {
@@ -632,7 +645,7 @@
         }
       })
     },
-    getAllApps () {
+    getAllApps() {
       let _this = this;
       _this.installedApps = [];
       _this.storeApps = [];
@@ -654,7 +667,7 @@
       })
     },
     //鍗歌浇搴旂敤
-    unLoad (app) {
+    unLoad(app) {
       app.unloadLoading = true;
       let _this = this;
       removeApp({ appId: app.id }).then(res => {
@@ -678,7 +691,7 @@
     //   this.activeCode = '';
     //   this.activedSdkOrApp = this.newActInfo()
     // },
-    actSdkOrApp (id, type = 'sdk') {
+    actSdkOrApp(id, type = 'sdk') {
       this.actType = type;
       this.actId = id;
       this.actDrawerShow = true;
@@ -686,7 +699,7 @@
       this.activeCode = '';
       this.activedSdkOrApp = this.newActInfo()
     },
-    newActInfo () {
+    newActInfo() {
       return {
         activateCode: '',
         productName: '',
@@ -696,7 +709,7 @@
         devIds: ''
       }
     },
-    getUnActivedList () {
+    getUnActivedList() {
       getUnActivedSdk().then(res => {
         if (res.code == 200) {
           this.unActivedSDKList = res.data;
@@ -704,7 +717,7 @@
       })
 
     },
-    getUnActivedAppList () {
+    getUnActivedAppList() {
       getUnActivedApp().then(res => {
         if (res.code == 200) {
           this.unActivedAppList = res.data;
@@ -712,10 +725,10 @@
       });
     },
 
-    installFormat (percentage) {
+    installFormat(percentage) {
       return percentage === 100 ? '瀹夎鎴愬姛' : `${percentage}%`;
     },
-    actived () {
+    actived() {
       let _this = this;
       if (this.actType == 'sdk') {
         //婵�娲荤畻娉�
@@ -753,12 +766,12 @@
         });
       }
     },
-    getCodeDetail () { },
-    checkMyAlgorith () {
+    getCodeDetail() { },
+    checkMyAlgorith() {
       this.actDrawerShow = false;
       this.activeName = "myAlgorithm";
     },
-    onFileUpload (file) {
+    onFileUpload(file) {
       //this.patchUpdateStatus = `<span style="color:green">涓婁紶鎴愬姛, 鐐瑰嚮鍗囩骇鎸夐挳寮�濮嬪畨瑁�</span>`;
       this.patchFile = { ...file };
       this.fileAdded = true;
@@ -870,12 +883,12 @@
 
     },
 
-    onFileAdded (f) {
+    onFileAdded(f) {
       ;
       this.patchUpdateStatus = "";
     },
     // 鏍¢獙杈撳叆鐨勬槸鍚︽槸鏁板瓧
-    valiNum (value) {
+    valiNum(value) {
       if (value) {
         let re = /[^\-?\d.]*$/;
         if (!re.test(value)) {
@@ -892,7 +905,7 @@
       }
     },
     // 宸﹁竟鎷栧姩妯″潡寰楁嫋鍔ㄧ粨鏉熷悗鐨勮Е鍙戝嚱鏁�
-    endLeft (env) {
+    endLeft(env) {
       this.dragging = false;
       let taskId = env.to.id;
       let sdkId = this.TaskMange.list1[env.oldIndex].id;
@@ -933,24 +946,24 @@
       this.addTaskSdk(json);
     },
     // 鍙宠竟鎷栧姩妯″潡寮�濮嬫嫋鍔ㄨЕ鍙戝嚱鏁�
-    startRight (env) {
+    startRight(env) {
       this.$nextTick(() => {
         this.dragging = true;
       });
       // window.window.console.log(env, "right start");
     },
     // 鍙宠竟鎷栧姩妯″潡鎷栧姩缁撴潫瑙﹀彂鍑芥暟
-    endRight (env) {
+    endRight(env) {
       // window.window.console.log(env, "right end");
     },
-    clickSet (data) {
+    clickSet(data) {
       if (data.isSetting) {
         data.isSetting = false;
       } else {
         data.isSetting = true;
       }
     },
-    clickDel (data, Index) {
+    clickDel(data, Index) {
       this.$confirm("鎻愮ず锛氬垹闄ゅ悗锛屾浠诲姟鍦ㄦ憚鍍忔満涓殑搴旂敤澶辨晥锛屾槸鍚﹀垹闄わ紵", {
         center: true,
         showConfirmButton: true,
@@ -963,7 +976,7 @@
         })
         .catch(err => { });
     },
-    clickSetAlgo (row, data) {
+    clickSetAlgo(row, data) {
       // window.console.log(row, data, "缂栬緫浠诲姟涓煇涓�涓畻娉�");
       if (row.isShowSetAlgo && data.id === this.TaskMange.currentAlgoId) {
         row.isShowSetAlgo = false;
@@ -1029,7 +1042,7 @@
         // });
       }
     },
-    async getRulesByTaskSdk (taskId, sdkId) {
+    async getRulesByTaskSdk(taskId, sdkId) {
       let res = await getRulesByTaskSdk({
         taskId: taskId,
         sdkId: sdkId
@@ -1065,7 +1078,7 @@
         this.argsList = JSON.parse(JSON.stringify(this.TaskMange.argsList));
       }
     },
-    async findAllSdk () {
+    async findAllSdk() {
       let res = await findAllSdk();
       if (res && res.success) {
         this.TaskMange.list1 = res.data.map((i, index) => {
@@ -1082,7 +1095,7 @@
         });
       }
     },
-    addTask () {
+    addTask() {
       let obj = {
         id: "",
         name: "浠诲姟" + this.TaskMange.list2.length,
@@ -1098,7 +1111,7 @@
         taskArea.scrollTop = taskArea.scrollHeight;
       });
     },
-    async findAll () {
+    async findAll() {
       let res = await findAll();
       if (res && res.success) {
         if (res.data && res.data.length !== 0) {
@@ -1135,7 +1148,7 @@
         }
       }
     },
-    clickDelSdk (task, sdk) {
+    clickDelSdk(task, sdk) {
       this.$confirm(
         "鎻愮ず锛氬垹闄ゅ悗锛屾绠楁硶鍦ㄦ湰浠诲姟涓Щ闄わ紝鍚屾椂鍦ㄦ憚鍍忔満涓殑搴旂敤澶辨晥锛屾槸鍚﹀垹闄わ紵",
         {
@@ -1151,7 +1164,7 @@
         })
         .catch(err => { });
     },
-    selectChange (event, type, data) {
+    selectChange(event, type, data) {
       if (type === "options1") {
         // window.window.console.log(type, data, "閫夋嫨涓嬫媺妗�");
         data.options1.map(i => {
@@ -1162,7 +1175,7 @@
       }
     },
     // 鍒犻櫎浠诲姟绠楁硶
-    async delTaskSdk (task, sdk) {
+    async delTaskSdk(task, sdk) {
       let json = {
         taskId: task.id,
         sdkId: sdk.id
@@ -1182,7 +1195,7 @@
       }
     },
     // 鍒犻櫎浠诲姟
-    async deleteTask (data, index) {
+    async deleteTask(data, index) {
       // window.console.log(data, "deleteTask");
       let res = await deleteTask({ taskId: data.id });
       // this.$toast({
@@ -1199,7 +1212,7 @@
       }
     },
     // 鏇存柊浠诲姟鐘舵��
-    async updateTaskStatus (data) {
+    async updateTaskStatus(data) {
       // window.console.log(data, '鏇存柊浠诲姟鐘舵��')
       let json = {
         taskId: data.id,
@@ -1217,7 +1230,7 @@
       });
     },
     // 鏇存柊浠诲姟鍚嶇О
-    async updateTaskName (data) {
+    async updateTaskName(data) {
       let json = {
         taskId: data.id,
         taskName: data.name
@@ -1237,7 +1250,7 @@
       }
     },
     // 鑾峰彇搴曞簱鏁版嵁
-    async getBaseList () {
+    async getBaseList() {
       // let res = await getTagList();
       // if (res && res.success) {
       //   let filter = res.data.filter(i => {
@@ -1266,7 +1279,7 @@
       ];
     },
     // 鑾峰彇绠楁硶鍙傛暟
-    async getSdkArgs (data) {
+    async getSdkArgs(data) {
       let res = await getSdkArgs({
         sdkId: data.id,
         scope: "TASKRULE"
@@ -1288,7 +1301,7 @@
       }
     },
     // 鏌ヨ瀛楀吀
-    async findByType () {
+    async findByType() {
       let res = await findByType();
       if (res && res.success) {
         let list = res.data.RULECOMPUTEBETWEEN.map(i => {
@@ -1301,17 +1314,17 @@
       }
     },
     // 绠楁硶閰嶇疆锛屾柊寤�
-    add () {
+    add() {
       this.TaskMange.argsList.push(
         JSON.parse(JSON.stringify(this.TaskMange.baseObject))
       );
     },
     // 绠楁硶閰嶇疆 鍒犻櫎
-    delRule (index) {
+    delRule(index) {
       this.TaskMange.argsList.splice(index, 1);
     },
     // 绠楁硶鍙傛暟淇濆瓨
-    async save () {
+    async save() {
       let list = this.TaskMange.argsList.map(i => {
         let obj = {};
         obj.id = i.id;
@@ -1344,7 +1357,7 @@
         }
       }
     },
-    getDefault () {
+    getDefault() {
       this.deleteTaskSdkRule(
         this.TaskMange.currentTaskId,
         this.TaskMange.currentAlgoId
@@ -1355,7 +1368,7 @@
         );
       });
     },
-    async deleteTaskSdkRule (taskId, sdkId) {
+    async deleteTaskSdkRule(taskId, sdkId) {
       let json = {
         taskId: taskId,
         sdkId: sdkId
@@ -1375,7 +1388,7 @@
       }
     },
     // 缁欎换鍔℃坊鍔犵畻娉�
-    async addTaskSdk (data) {
+    async addTaskSdk(data) {
       let res = await addTaskSdk(data);
       if (res && res.success) {
         // window.console.log(res, 'res')
@@ -1383,7 +1396,7 @@
       }
     },
     // 鏂版坊鍔犱换鍔�
-    async addTaskAsync (name) {
+    async addTaskAsync(name) {
       let res = await addTask({ taskname: name });
       // this.$toast({
       //   type: res.success ? "success" : "error",
@@ -1399,7 +1412,7 @@
         this.findAll();
       }
     },
-    cancle (row) {
+    cancle(row) {
       if (row.isShowSetAlgo) {
         row.isShowSetAlgo = false;
       }
@@ -1409,12 +1422,12 @@
         this.$set(i, "isSelect", false);
       });
     },
-    cancleTask (row) {
+    cancleTask(row) {
       if (row.isSetting) {
         row.isSetting = false;
       }
     },
-    commandAlgo (command, row, item) {
+    commandAlgo(command, row, item) {
       if (command === 1) {
         // console.log('璁剧疆绠楁硶')
         this.clickSetAlgo(row, item);
@@ -1424,26 +1437,13 @@
         this.clickDelSdk(row, item);
       }
     },
-    commandTask (command, row) {
+    commandTask(command, row) {
       if (command === 1) {
         //缂栬緫浠诲姟
         this.clickSet(row);
       }
     },
-    getUser () {
-      // console.log("鐧诲綍鐢ㄦ埛",JSON.parse(sessionStorage.getItem("userInfo")).username)
-      if (
-        sessionStorage.getItem("userInfo") &&
-        (JSON.parse(sessionStorage.getItem("userInfo")).username ==
-          "superadmin" ||
-          JSON.parse(sessionStorage.getItem("userInfo")).username == "basic")
-      ) {
-        this.isSuperUser = true;
-      } else {
-        this.isSuperUser = false;
-      }
-    },
-    donwload (item) {
+    donwload(item) {
       this.downloading = true;
       this.downloadItem = item.id;
 
@@ -1467,15 +1467,15 @@
           this.downloadItem = "";
         });
     },
-    commandAlgLib (item) {
+    commandAlgLib(item) {
       this.$set(item, "isEdit", true);
     },
-    inputBlur (item) {
+    inputBlur(item) {
       // console.log(item, '淇敼鍚嶇О')
       this.$set(item, "isEdit", false);
     },
 
-    cleanTemplateForm () {
+    cleanTemplateForm() {
       this.appSceneForm.name = "";
       this.appSceneForm.desc = "";
       this.appSceneForm.rules = "";
@@ -1483,10 +1483,10 @@
 
       this.$refs.ruleEditor.cleanRule();
     },
-    handleTabClick () {
+    handleTabClick() {
 
     },
-    handleCreateScene () {
+    handleCreateScene() {
       this.sceneDialogVisible = true;
       this.dialogTitle = '鍒涘缓鍦烘櫙妯℃澘';
 
@@ -1499,10 +1499,10 @@
         this.cleanTemplateForm();
       });
     },
-    handleDialogClose () {
+    handleDialogClose() {
       this.sceneDialogVisible = false;
     },
-    handleEditScene (item) {
+    handleEditScene(item) {
       this.appSceneForm.name = item.name;
       this.appSceneForm.desc = item.desc;
 
@@ -1594,7 +1594,7 @@
 .src-title {
   //color: #bfbfbf;
   color: #bbcee8;
-  font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC';
+  font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC";
   font-weight: 650;
   font-style: normal;
   height: 36px;
@@ -1619,7 +1619,7 @@
       position: absolute;
       top: 50%;
       left: 50%;
-      background: url('/images/algo/green.gif');
+      background: url("/images/algo/green.gif");
       overflow: hidden;
       transform: translate(-50%, -50%);
       .inner-bar {
@@ -1941,16 +1941,16 @@
         }
       }
       .drawer-content {
-        font-family: 'PingFangSC-Regular';
+        font-family: "PingFangSC-Regular";
         .el-step__title.is-process {
           border-color: #3d68e1 !important;
           color: #3d68e1 !important;
-          font-family: Tahoma, Helvetica, Arial, '\5B8B\4F53', sans-serif;
+          font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
         }
         .el-step__head.is-process {
           border-color: #3d68e1 !important;
           color: #3d68e1 !important;
-          font-family: Tahoma, Helvetica, Arial, '\5B8B\4F53', sans-serif;
+          font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
         }
         .el-input {
           width: 100%;
diff --git a/src/pages/analysisPower/index/App.vue b/src/pages/analysisPower/index/App.vue
index 688f357..a915dd9 100644
--- a/src/pages/analysisPower/index/App.vue
+++ b/src/pages/analysisPower/index/App.vue
@@ -50,7 +50,13 @@
           </div>
           <span :class="stretchStyle" @click="strethTable = !strethTable"></span>
 
-          <el-button size="small" type="primary" style="float:right" @click="openDrawer">璁剧疆</el-button>
+          <el-button
+            size="small"
+            type="primary"
+            style="float:right"
+            @click="openDrawer"
+            v-if="showSetting"
+          >璁剧疆</el-button>
         </div>
 
         <el-table
@@ -235,6 +241,20 @@
       }
 
       return ret
+    },
+    isAdmin() {
+      if (
+        sessionStorage.getItem("userInfo") &&
+        sessionStorage.getItem("userInfo") !== ""
+      ) {
+        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
+        return loginName === "superadmin" || loginName === "basic";
+      }
+
+      return false;
+    },
+    showSetting() {
+      return this.isAdmin || this.buttonAuthority.indexOf("analysisPower:set") > -1
     }
   },
   data() {
@@ -249,7 +269,8 @@
       showSysInfo: false,
       drawer: false,
       formData: {},
-      strethTable: false
+      strethTable: false,
+      buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
     };
   },
   mounted() {
diff --git a/src/pages/cameraAccess/index/VideoManage.vue b/src/pages/cameraAccess/index/VideoManage.vue
index 5e2ba7e..58bb47f 100644
--- a/src/pages/cameraAccess/index/VideoManage.vue
+++ b/src/pages/cameraAccess/index/VideoManage.vue
@@ -10,21 +10,21 @@
       <el-tab-pane
         :label="firstLabeName"
         name="camera-info"
-        v-if="this.TreeDataPool.treeActiveName == 'camera' && isShow('VIDEOCAMERA:camera:info')"
+        v-if="this.TreeDataPool.treeActiveName == 'camera' && isShow('cameraAccess:cameraInfo')"
       >
         <camera-info ref="cameraInfo" />
       </el-tab-pane>
       <el-tab-pane
         :label="firstLabeName"
         name="camera-info"
-        v-if="this.TreeDataPool.treeActiveName == 'dataStack' && isShow('VIDEOCAMERA:dataStack:stackInfo')"
+        v-if="this.TreeDataPool.treeActiveName == 'dataStack' && isShow('dataStack:cameraInfo')"
       >
         <data-stack-info ref="dataStackInfo" />
       </el-tab-pane>
       <el-tab-pane
         label="鐙珛鍦烘櫙"
         name="separate-rule"
-        v-if="this.TreeDataPool.treeActiveName == 'camera' && isShow('VIDEOCAMERA:camera:selfRule')"
+        v-if="this.TreeDataPool.treeActiveName == 'camera' && isShow('cameraAccess:selfRule')"
       >
         <separate-rules ref="sepRule" />
         <!-- <local-separate ref="localSeparate" v-else></local-separate> -->
@@ -32,7 +32,7 @@
       <el-tab-pane
         label="鐙珛鍦烘櫙"
         name="separate-rule"
-        v-if="this.TreeDataPool.treeActiveName == 'dataStack' && isShow('VIDEOCAMERA:dataStack:selfRule')"
+        v-if="this.TreeDataPool.treeActiveName == 'dataStack' && isShow('dataStack:selfRule')"
       >
         <separate-rules ref="sepRule" />
         <!-- <local-separate ref="localSeparate" v-else></local-separate> -->
@@ -40,7 +40,7 @@
       <el-tab-pane
         label="鑱斿姩鍦烘櫙"
         name="linkage-rule"
-        v-if="(isShow('VIDEOCAMERA:camera:linkRule') || isShow('VIDEOCAMERA:dataStack:linkRule')) && this.TreeDataPool.treeActiveName == 'camera'"
+        v-if="(isShow('cameraAccess:linkRule')) && this.TreeDataPool.treeActiveName == 'camera'"
       >
         <linkage-rule ref="linkRule" />
       </el-tab-pane>
@@ -81,6 +81,7 @@
         let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
         return loginName === "superadmin" || loginName === "basic";
       }
+
       return false;
     },
     firstLabeName() {
@@ -131,26 +132,21 @@
   },
   created() {
     if (this.TreeDataPool.treeActiveName == 'camera') {
-      if (this.isShow('VIDEOCAMERA:camera:info')) {
+      if (this.isShow('cameraAccess:cameraInfo')) {
         this.activeName = "camera-info"
-      } else if (this.isShow('VIDEOCAMERA:camera:selfRule') || this.isShow('VIDEOCAMERA:datastack:selfRule')) {
+      } else if (this.isShow('cameraAccess:selfRule')) {
         this.activeName = "separate-rule"
-      } else if (this.isShow('VIDEOCAMERA:camera:linkRule') || this.isShow('VIDEOCAMERA:datastack:linkRule')) {
+      } else if (this.isShow('cameraAccess:linkRule')) {
         this.activeName = "linkage-rule"
-      } else if (this.isShow('VIDEOCAMERA:camera:resourceCalc') || this.isShow('VIDEOCAMERA:datastack:resourceCalc')) {
-        this.activeName = "poll-setting"
       }
     } else {
-      if (this.isShow('VIDEOCAMERA:camera:info')) {
+      if (this.isShow('dataStack:cameraInfo')) {
         this.activeName = "camera-info"
-      } else if (this.isShow('VIDEOCAMERA:camera:selfRule') || this.isShow('VIDEOCAMERA:datastack:selfRule')) {
+      } else if (this.isShow('dataStack:selfRule')) {
         this.activeName = "separate-rule"
-      } else if (this.isShow('VIDEOCAMERA:camera:linkRule') || this.isShow('VIDEOCAMERA:datastack:linkRule')) {
-        this.activeName = "linkage-rule"
-      } else if (this.isShow('VIDEOCAMERA:camera:resourceCalc') || this.isShow('VIDEOCAMERA:datastack:resourceCalc')) {
-        this.activeName = "poll-setting"
       }
     }
+
     this.TreeDataPool.readonly = true;
     this.TreeDataPool.gbReadonly = true;
     this.TreeDataPool.multiple = false;
@@ -181,15 +177,7 @@
   },
   methods: {
     isShow(authority) {
-      if (this.isAdmin) {
-        return true;
-      } else if (this.buttonAuthority.indexOf("," + authority + ",") > -1) {
-        return true;
-      } else if ("videoCamera:pollSetting" === authority) {
-        return true;
-      } else {
-        return false;
-      }
+      return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
     },
     handAddDevice(node) {
       let _this = this;
diff --git a/src/pages/desktop/index/App.vue b/src/pages/desktop/index/App.vue
index 29c1394..b90ac81 100644
--- a/src/pages/desktop/index/App.vue
+++ b/src/pages/desktop/index/App.vue
@@ -25,7 +25,25 @@
   components: {
     Desktop, NotificationCenter, NoticeTip, Tools, ToolsEntry
   },
-
+  data() {
+    return {
+      buttonAuthority: sessionStorage.getItem('buttonAuthoritys') || []
+    }
+  },
+  computed: {
+    isAdmin() {
+      if (
+        sessionStorage.getItem('userInfo') &&
+        sessionStorage.getItem('userInfo') !== ''
+      ) {
+        let loginName = JSON.parse(sessionStorage.getItem('userInfo')).username
+        return (
+          loginName === 'superadmin' || loginName === 'basic'
+        )
+      }
+      return false
+    }
+  },
   mounted() {
     document.getElementById('app').style.backgroundImage = process.env.VUE_APP_MAIN_URL;
     this.showApps();
@@ -58,9 +76,6 @@
         this.showApps();
       }
     });
-    findAllSdk().then(() => {
-
-    });
   },
   methods: {
     showApps() {
@@ -69,6 +84,7 @@
       getApps().then(rsp => {
         if (rsp && rsp.success) {
           _that.$store.state.desktop.docks = [];
+          let installedApps = [];
           rsp.data.forEach(function (item) {
             if (item.installed) {
               let temp = {
@@ -93,13 +109,16 @@
                 isDefault: item.isDefault
               }
 
-              _that.$store.commit('desktop/addDock', temp);
-              // console.log(item)
-              // console.log('apps update')
-              //console.log(this.$store.state.desktop.docks)
-            }
+              // 鍒ゆ柇鏉冮檺
+              if (_that.isAdmin || _that.buttonAuthority.indexOf(item.package) >= 0) {
+                _that.$store.commit('desktop/addDock', temp);
+              }
 
+              installedApps.push(item.package);
+            }
           });
+
+          sessionStorage.setItem("apps", installedApps.join(","));
         }
       })
     },
diff --git a/src/pages/index/App.vue b/src/pages/index/App.vue
index a3b5f16..11e0516 100644
--- a/src/pages/index/App.vue
+++ b/src/pages/index/App.vue
@@ -54,6 +54,7 @@
 import { tologin, getLoginUserData, getServerName } from './api.ts'
 import ParticleNetwork from './ParticleNetwork'
 import Licence from '@/components/licence'
+import { getMenuListData, findButtonAuthoritys, findInArr } from "@/api/utils";
 
 export default {
   name: 'login-pgae',
@@ -83,6 +84,17 @@
     currentHeight: 1057,
     currentWidth: 1920
   }),
+  created() {
+    this.getServerName()
+    this.getScreenHeight()
+  },
+  mounted() {
+    console.log(this.serverTitle)
+  },
+  watch: {},
+  beforeDestroy() {
+    window.onresize = null
+  },
   methods: {
     systemLogin() {
       this.nullRule = this.rules
@@ -138,8 +150,9 @@
           type: 'success',
           message: '鐧诲綍鎴愬姛锛�'
         })
-        // await this.getMenuList()
-        // this.$router.push('/Layout/Video')
+
+        // 鑾峰彇鏉冮檺
+        await this.getMenuList()
         location.assign("/view/desktop/")
         return json
       } else {
@@ -174,18 +187,25 @@
         sessionStorage.setItem('title', res.data.serverName)
       }
     },
+    async getMenuList() {
+      let results = await getMenuListData({});
+      if (results && results.success) {
+        /* 瀛樺偍鏉冮檺 */
+        let buttonAuthoritys = results.data;
+        // console.log(this.$route.query.is_loginsss)
+        if (results && results.length && this.$route.query.is_login) {
+          this.$router.replace(results[0].url);
+        }
+        sessionStorage.setItem("buttonAuthoritys", "," + buttonAuthoritys + ",");
+        sessionStorage.setItem("menuInfo", JSON.stringify(results));
+      } else {
+        this.$toast({
+          type: "error",
+          message: "鑿滃崟鑾峰彇澶辫触"
+        });
+      }
+    },
   },
-  created() {
-    this.getServerName()
-    this.getScreenHeight()
-  },
-  mounted(){
-    console.log(this.serverTitle)
-  },
-  watch: {},
-  beforeDestroy() {
-    window.onresize = null
-  }
 }
 </script>
 <style lang="scss">
diff --git a/src/pages/labelTrack/index/App.vue b/src/pages/labelTrack/index/App.vue
new file mode 100644
index 0000000..8741eac
--- /dev/null
+++ b/src/pages/labelTrack/index/App.vue
@@ -0,0 +1,215 @@
+<template>
+  <div class="mycanvas-container">
+    <div class="left">
+      <p>灞曠ず瑙嗗彛</p>
+      <div class="myshow">
+        <img :src="mysrc" alt width="100%" />
+        <!-- <div id="canvas" style="width:100%;height:100%" class="mycanvas"></div> -->
+      </div>
+    </div>
+    <div class="center">
+      <p>鎿嶄綔瑙嗗彛</p>
+      <div
+        class="myedit"
+        ref="myedit"
+        @mousedown.prevent="onMousedown"
+        @mousemove="onMousemove"
+        @contextmenu.prevent
+      >
+        <!-- <img src="@/assets/jia.svg" alt=""> -->
+        <img :src="mysrc" />
+        <span
+          class="myedit-span"
+          v-for="(item, index) in mydata"
+          :key="index"
+          :style="getSpanStyle(item)"
+          @contextmenu.prevent="onContextmenu(item, $event)"
+        ></span>
+        <!-- <div id="canvas" style="width:100%;height:100%" class="mycanvas"></div> -->
+      </div>
+    </div>
+    <div class="right">
+      <img src alt class="mybutton" />
+      <input v-show="0" ref="file" type="file" class="mybutton" @change="onChange" />
+      <button class="mybutton" @click="selectFile">瀵煎叆鍥剧墖</button>
+      <button class="mybutton">鏂板鏍囨敞</button>
+      <button class="mybutton">淇敼鏍囨敞</button>
+      <button class="mybutton">鍒犻櫎</button>
+      <button class="mybutton">淇濆瓨</button>
+    </div>
+    <div class="myMenu" v-show="mymenu.current" :style="mymenu.style">
+      <!-- <button @click="onRemoveItem">鍒犻櫎</button> -->
+      <ui-button type="primary" @click="onRemoveItem">鍒犻櫎</ui-button>
+      <ui-select></ui-select>
+      <select name id>
+        <option value="1">ceshi</option>
+      </select>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      mysrc: "",
+      mydata: [],
+      mymenu: { current: null, style: { left: 0, top: 0 } }
+    };
+  },
+  mounted() {
+    document.addEventListener('mouseup', this.onMouseup)
+  },
+  beforeDestroy() {
+    document.removeEventListener('mouseup', this.onMouseup)
+  },
+  methods: {
+    getXY(e) {
+      let rect = this.$refs.myedit.getBoundingClientRect()
+      return {
+        x: e.clientX - rect.left,
+        y: e.clientY - rect.top
+      }
+    },
+    // 涓婁紶鍥剧墖1
+    onChange(e) {
+      this.mysrc = window.URL.createObjectURL(e.target.files[0]);
+      e.target.value = ''
+    },
+    // 涓婁紶鍥剧墖2,
+    selectFile() {
+      this.$refs.file.click();
+    },
+    onMousedown(e) {
+      this.mymenu.current = null
+      let { x, y } = this.getXY(e)
+      this.currentItem = { x, y, w: 0, h: 0, now: Date.now() }
+      this.startPos = { x, y }
+      this.mydata.push(this.currentItem)
+    },
+    onMousemove(e) {
+      if (!this.currentItem) return;
+      let { x, y } = this.getXY(e)
+      this.currentItem.w = Math.abs(x - this.startPos.x)
+      this.currentItem.h = Math.abs(y - this.startPos.y)
+    },
+    onMouseup(e) {
+      this.currentItem = this.startPos = null;
+      this.mydata = this.mydata.filter(_ => _.w > 10 && _.h > 10)
+    },
+    onContextmenu(item, e) {
+      this.mymenu = {
+        current: item,
+        style: {
+          top: e.clientY + 'px',
+          left: e.clientX + 'px'
+        }
+      }
+    },
+    onRemoveItem() {
+      this.mydata.splice(this.mydata.indexOf(this.mymenu.current), 1)
+      this.mymenu = { ...this.mymenu, current: null }
+    },
+    getSpanStyle(item) {
+      return {
+        width: `${item.w}px`,
+        height: `${item.h}px`,
+        top: `${item.y}px`,
+        left: `${item.x}px`
+      };
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+// 璁剧疆缁樺浘鏍峰紡1
+body {
+  user-select: none;
+}
+
+.myMenu {
+  position: fixed;
+  top: 400px;
+  left: 400px;
+  width: 100px;
+  padding: 8px 0;
+  background-color: #fff;
+  > * {
+    width: 100%;
+  }
+}
+
+#canvas > div {
+  /* border: 2px solid green; */
+  position: absolute;
+  background-color: transparent;
+}
+
+#canvas > div > span {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  font-family: simsun;
+  font-size: 9pt;
+}
+
+// 璁剧疆缁樺浘鏍峰紡2
+
+.mycanvas-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  .left,
+  .center,
+  .right {
+    width: 300px;
+    // height: 520px;
+    margin: 20px;
+
+    p {
+      text-align: center;
+    }
+
+    .myshow,
+    .myedit {
+      width: 300px;
+      // height: 500px;
+      border: 1px solid #000;
+      position: relative;
+      .myedit-span {
+        position: absolute;
+        border: 1px dashed #fff;
+        background: url("/images/cameraAccess/video.png") no-repeat center
+          center;
+        background-size: contain;
+      }
+
+      .mycanvas {
+        border: 1px solid pink;
+        position: absolute;
+        top: 0;
+        left: 0;
+      }
+
+      img {
+        width: 100%;
+      }
+    }
+  }
+
+  .right {
+    width: 150px;
+    display: flex;
+    justify-content: center;
+    align-items: left;
+    flex-direction: column;
+
+    .mybutton {
+      margin-top: 20px;
+      display: block;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/pages/labelTrack/index/api.ts b/src/pages/labelTrack/index/api.ts
new file mode 100644
index 0000000..05fb010
--- /dev/null
+++ b/src/pages/labelTrack/index/api.ts
@@ -0,0 +1,20 @@
+import request from '@/scripts/httpRequest'
+import qs from 'qs'
+
+// Post
+export const tologin = (query: any) => {
+  return request({
+    url: '/data/api-u/sys/login',
+    method: 'post',
+    data: qs.stringify(query)
+  })
+}
+
+// get
+export const testDBCompare = (query: any) => {
+  return request({
+    url: '../../data/api-v/face/testEachCompareAll',
+    method: 'get',
+    params: query
+  })
+}
diff --git a/src/pages/labelTrack/index/main.ts b/src/pages/labelTrack/index/main.ts
new file mode 100644
index 0000000..72eb673
--- /dev/null
+++ b/src/pages/labelTrack/index/main.ts
@@ -0,0 +1,13 @@
+import Vue from 'vue';
+import App from './App.vue'
+
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import "@/assets/css/element-variables.scss";
+
+Vue.use(ElementUI);
+
+new Vue({
+  el: '#app',
+  render: h => h(App)
+});
diff --git a/src/pages/settings/components/BasicSetting.vue b/src/pages/settings/components/BasicSetting.vue
index 437cf00..3c05bf4 100644
--- a/src/pages/settings/components/BasicSetting.vue
+++ b/src/pages/settings/components/BasicSetting.vue
@@ -8,7 +8,7 @@
       type="border-card"
     >
       <!-- 鏈満淇℃伅 -->
-      <el-tab-pane label="鏈満淇℃伅" name="first">
+      <el-tab-pane label="鏈満淇℃伅" name="sysInfo" v-if="isShow('settings:sysInfo')">
         <el-menu
           :default-openeds="openeds"
           background-color="#fff"
@@ -179,7 +179,7 @@
       </el-tab-pane>
 
       <!-- 鏃堕棿閰嶇疆 -->
-      <el-tab-pane label="鏃堕棿閰嶇疆" name="second">
+      <el-tab-pane label="鏃堕棿閰嶇疆" name="timeSet" v-if="isShow('settings:timeSet')">
         <el-form label-width="100px">
           <el-form-item label="璁惧鏃堕棿">
             <!-- <el-input v-model="equipmentTime" placeholder="璇疯緭鍏�" size="small"></el-input> -->
@@ -269,7 +269,7 @@
       </el-tab-pane>
 
       <!-- 闆嗙兢绠$悊 -->
-      <el-tab-pane label="闆嗙兢绠$悊" name="third">
+      <el-tab-pane label="闆嗙兢绠$悊" name="cluster" v-if="isShow('settings:cluster')">
         <cluster-management></cluster-management>
       </el-tab-pane>
       <!-- <el-tab-pane label="澶栭儴璁块棶" name="fourth">
@@ -312,11 +312,11 @@
           </el-submenu>
         </el-menu>
       </el-tab-pane>-->
-      <el-tab-pane label="鏉冮檺绠$悊" name="user">
-        <authority-management v-if="activeName === 'user'"></authority-management>
+      <el-tab-pane label="鏉冮檺绠$悊" name="permission" v-if="isShow('settings:permission')">
+        <authority-management v-if="activeName === 'permission'"></authority-management>
       </el-tab-pane>
-      <el-tab-pane label="骞挎挱璁剧疆" name="radio">
-        <radio-set v-if="activeName === 'radio'"></radio-set>
+      <el-tab-pane label="骞挎挱璁剧疆" name="broadcast" v-if="isShow('settings:broadcast')">
+        <radio-set v-if="activeName === 'broadcast'"></radio-set>
       </el-tab-pane>
     </el-tabs>
   </div>
@@ -360,7 +360,18 @@
         }))
       })
       return options
-    }
+    },
+    isAdmin() {
+      if (
+        sessionStorage.getItem("userInfo") &&
+        sessionStorage.getItem("userInfo") !== ""
+      ) {
+        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
+        return loginName === "superadmin" || loginName === "basic";
+      }
+
+      return false;
+    },
   },
   directives: {
     focus: {
@@ -374,7 +385,7 @@
       loading: true,
       loadingText: "",
       gutter: 10,
-      activeName: "first",
+      activeName: "sysInfo",
       timezone: "",
       syncType: "1",
       ntpServer: "",
@@ -471,8 +482,22 @@
         countyOptions: []
       },
       webPort: 0,
-      ntpTestLoading: false
+      ntpTestLoading: false,
+      buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
     };
+  },
+  created() {
+    if (this.isShow("settings:sysInfo")) {
+      this.activeName = "sysInfo";
+    } else if (this.isShow("settings:timeSet")) {
+      this.activeName = "timeSet";
+    } else if (this.isShow("settings:cluster")) {
+      this.activeName = "cluster";
+    } else if (this.isShow("settings:permission")) {
+      this.activeName = "permission";
+    } else if (this.isShow("settings:broadcast")) {
+      this.activeName = "broadcast";
+    }
   },
   mounted() {
     this.$nextTick(() => {
@@ -489,6 +514,9 @@
     clearInterval(this.browserTimer);
   },
   methods: {
+    isShow(authority) {
+      return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
+    },
     initSysinfo() {
       this.loadingText = "姝e湪鑾峰彇璁惧淇℃伅...";
       getDevInfo().then(rsp => {
diff --git a/src/pages/vindicate/index/App.vue b/src/pages/vindicate/index/App.vue
index e41e502..7f0e417 100644
--- a/src/pages/vindicate/index/App.vue
+++ b/src/pages/vindicate/index/App.vue
@@ -1,13 +1,12 @@
 <template>
   <div class="s-system-manage">
     <el-tabs
-      
       id="systemMaintenance"
       v-model="activeName"
       v-loading="loading"
       :element-loading-text="loadingText"
     >
-      <el-tab-pane label="璁惧缁存姢" name="first">
+      <el-tab-pane label="璁惧缁存姢" name="device" v-if="isShow('vindicate:device')">
         <div class="s-system-maintenance">
           <div class="box-card">
             <div class="ui-top-view">
@@ -123,7 +122,7 @@
           </div>
         </div>
       </el-tab-pane>
-      <el-tab-pane label="鏁版嵁搴撶淮鎶�" name="second">
+      <el-tab-pane label="鏁版嵁搴撶淮鎶�" name="dbvdc" v-if="isShow('vindicate:db')">
         <div class="box">
           <p class="title">
             <label>鏁版嵁娓呯悊</label>
@@ -172,7 +171,7 @@
       timer: null,
       buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
       rebootCron: "",
-      activeName: "first",
+      activeName: "device",
       restartValue: "涓嶉噸鍚�",
       restartTimeValue: new Date(2019, 9, 10, 18, 40),
       loading: false,
@@ -193,14 +192,13 @@
         },
       },
       upgrading: false,
-      fileAdded: false
+      fileAdded: false,
     };
   },
   mounted() {
     this.getRebootCron()
-    if (!this.isShow('videoSystem:sysManage:sysfix')) {
-      console.log("榛樿鏄剧ず鏁版嵁搴撶淮鎶�")
-      this.activeName = "second"
+    if (!this.isShow('vindicate:device')) {
+      this.activeName = "dbvdc"
     }
   },
   computed: {
@@ -485,15 +483,15 @@
   width: 100%;
   height: 100%;
   .el-button--primary {
-    color: #FFFFFF;
-    background-color: #3D68E1;
-    border-color: #3D68E1;
+    color: #ffffff;
+    background-color: #3d68e1;
+    border-color: #3d68e1;
   }
-  .el-button--primary.is-disabled, 
-  .el-button--primary.is-disabled:hover, 
-  .el-button--primary.is-disabled:focus, 
-  .el-button--primary.is-disabled:active{
-    color: #FFFFFF;
+  .el-button--primary.is-disabled,
+  .el-button--primary.is-disabled:hover,
+  .el-button--primary.is-disabled:focus,
+  .el-button--primary.is-disabled:active {
+    color: #ffffff;
     background-color: #9eb4f0;
     border-color: #9eb4f0;
   }

--
Gitblit v1.8.0