From 3b536106bb5bec0590338fa2484c118086272351 Mon Sep 17 00:00:00 2001
From: hanbaoshan <hanbaoshan@aiotlink.com>
Date: 星期一, 19 十月 2020 10:18:56 +0800
Subject: [PATCH] 统计查询(集群)切换摄像机搜索节点信息,首页添加修改密码,轮询搜索集群节点信息

---
 src/pages/settings/components/ClusterManagement.vue |   10 +++
 src/pages/desktop/index/components/ToolsEntry.vue   |    1 
 src/pages/desktop/index/components/Tools.vue        |  135 +++++++++++++++++++++++++++++++++++++-------
 src/Pool/TreeData.ts                                |    7 +
 src/components/serfDiagram/index.vue                |    7 +-
 5 files changed, 130 insertions(+), 30 deletions(-)

diff --git a/src/Pool/TreeData.ts b/src/Pool/TreeData.ts
index ee52310..2008d98 100644
--- a/src/Pool/TreeData.ts
+++ b/src/Pool/TreeData.ts
@@ -111,7 +111,6 @@
       this.selectedNodes = [this.selectedNode.id];
       return;
     }
-
     let _selected = this.selectedNodes;
     function nodeFilter(node: any) {
       if (node.type === "4" && node.selected) {
@@ -130,6 +129,11 @@
     }
     if (this.selectedNode.cameraType === 1) {
       this.gb28181Data.forEach((n: any) => {
+        nodeFilter(n);
+      });
+    }
+    if (this.selectedNode.cameraType === -1) {
+      this.clusterData.forEach((n: any) => {
         nodeFilter(n);
       });
     }
@@ -310,7 +314,6 @@
   }
 
   async fetchClusterTree (){
-    debugger
     const rsp: any = await getClusterTree({
       searchType: this.searchCamType,
       cameraName: this.searchInput
diff --git a/src/components/serfDiagram/index.vue b/src/components/serfDiagram/index.vue
index 0f5b367..9a03442 100644
--- a/src/components/serfDiagram/index.vue
+++ b/src/components/serfDiagram/index.vue
@@ -52,12 +52,11 @@
           id: i,
           name: v.nodeName,
           svgSym: RoleIcon[v.role],
-          _color:
-            this.agent === v.nodeName
-              ? "red"
-              : v.role === "master"
+          _color: 
+              v.role === "master"
                 ? "orange"
                 : ""
+
         });
       });
 
diff --git a/src/pages/desktop/index/components/Tools.vue b/src/pages/desktop/index/components/Tools.vue
index 8bc66e7..f968873 100644
--- a/src/pages/desktop/index/components/Tools.vue
+++ b/src/pages/desktop/index/components/Tools.vue
@@ -12,10 +12,15 @@
       </div>
     </div>
     <div class="tools-middle">
-      <div v-for="dock in $store.state.desktop.minDocks" :key="dock.id" class="dock-item-wrap" :class="{'actived':dock.highlight}" >
+      <div
+        v-for="dock in $store.state.desktop.minDocks"
+        :key="dock.id"
+        class="dock-item-wrap"
+        :class="{'actived':dock.highlight}"
+      >
         <a @click="dockClick(dock)">
           <img class="dock-item" :src="dock.src" :alt="dock.alt" />
-          <img class="dock-shot" :src="dock.screenshot" v-if="dock.screenshot"/>
+          <img class="dock-shot" :src="dock.screenshot" v-if="dock.screenshot" />
           <!-- <iframe class="dock-shot" :src="dock.url"  ></iframe> -->
         </a>
       </div>
@@ -36,37 +41,96 @@
             <img :src="`${publicPath}images/desktop/header-icon/user.png`" alt />
             <!-- <i class="el-icon-arrow-down el-icon--right"></i> -->
           </span>
-          <el-dropdown-menu slot="dropdown" style='top: 44px;'>
-            <el-dropdown-item @click.native='toLogout'>
-              閫�鍑虹櫥褰�
+          <el-dropdown-menu slot="dropdown" style="top: 44px;">
+            <el-dropdown-item style="text-align:left">
+              <b>Hi {{userInfo.username}}</b>
             </el-dropdown-item>
+            <el-dropdown-item @click.native="showPasswdForm = true">淇敼瀵嗙爜</el-dropdown-item>
+            <el-dropdown-item @click.native="toLogout">閫�鍑虹櫥褰�</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
-        
       </div>
     </div>
+    <el-dialog title="淇敼瀵嗙爜" :visible.sync="showPasswdForm" :append-to-body="true" width="500px">
+      <el-form :model="passwdForm" ref="ruleForm" :rules="rules" label-width="90px">
+        <el-form-item label="鏃у瘑鐮�" prop="oldPwd">
+          <el-input show-password v-model="passwdForm.oldPwd" autocomplete="off" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="鏂板瘑鐮�" prop="newPwd">
+          <el-input show-password v-model="passwdForm.newPwd" autocomplete="off" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="纭瀵嗙爜" prop="checkPwd">
+          <el-input show-password v-model="passwdForm.checkPwd" autocomplete="off" size="small"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info" @click="showPasswdForm = false" size="small">鍙� 娑�</el-button>
+        <el-button type="primary" @click="submitForm('ruleForm')" size="small">纭� 瀹�</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import html2canvas from 'html2canvas';
-import {logout} from "@/api/login";
+import { logout,updatePwd } from "@/api/login";
 export default {
   name: "Tools",
-  data() {
+  data () {
+    var validatePass = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('璇疯緭鍏ュ瘑鐮�'));
+      } else {
+        if (this.passwdForm.checkPwd !== '') {
+          this.$refs.ruleForm.validateField('checkPwd');
+        }
+        callback();
+      }
+    };
+    var validatePass2 = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('璇峰啀娆¤緭鍏ュ瘑鐮�'));
+      } else if (value !== this.passwdForm.newPwd) {
+        callback(new Error('涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!'));
+      } else {
+        callback();
+      }
+    };
     return {
       publicPath: process.env.BASE_URL,
       notificationCenterVisible: false,
       notificationCenterMessageCount: 0,
       maxOrder: 0,
-      maxOrderOne: ''
+      maxOrderOne: '',
+      userInfo: {},
+      showPasswdForm: false,
+      rules:{
+        oldPwd: [
+          {required: true, message: '璇疯緭鍏ユ棫瀵嗙爜', trigger: 'blur'}
+        ],
+        newPwd: [
+          { required: true, validator: validatePass, trigger: 'blur' }
+        ],
+        checkPwd: [
+          { required: true, validator: validatePass2, trigger: 'blur' }
+        ]
+      },
+      passwdForm: {
+        oldPwd: "",
+        newPwd: "",
+        checkPwd: ""
+      },
+
     };
   },
-  created() {
+  created () {
     let _that = this;
+    this.userInfo = sessionStorage.getItem("userInfo") && JSON.parse(sessionStorage.getItem("userInfo"));
+    console.log(this.userInfo)
     if (window.toolIntervalArr) {
       window.toolIntervalArr.forEach(item => clearInterval(item));
     }
+
     window.toolIntervalArr = [
       setInterval(function () {
         _that.notificationCenterMessageCount += 1;
@@ -89,8 +153,34 @@
   //   }
   // },
 
-  
+
   methods: {
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          let json = {
+            oldPwd: this.passwdForm.oldPwd,
+            newPwd: this.passwdForm.checkPwd
+          }
+          updatePwd(json).then(res=>{
+            console.log(res,'淇敼瀵嗙爜')
+            this.$notify({
+              type:res.success?'success':'error',
+              message:res.msg
+            })
+            if(res.success){
+              this.showPasswdForm = false
+              // this.$nextTick(_=>{
+              //   this.toLogout('淇敼瀵嗙爜鎴愬姛锛岃閲嶆柊鐧诲綍锛�')
+              // })
+            }
+          })
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
     notificationCenterClick: function () {
       this.notificationCenterVisible = !this.notificationCenterVisible;
       this.$store.commit(
@@ -108,7 +198,7 @@
       );
     },
 
-    togglePreference() {
+    togglePreference () {
       //this.$store.commit("desktop/togglePreference");
       //鏄剧ず妗岄潰,鏈�灏忓寲宸叉墦寮�鐨勫簲鐢�
       ;
@@ -122,8 +212,8 @@
         });
       })
     },
-    dockClick(dock) {
-      
+    dockClick (dock) {
+
       if (dock.type === "1") {
         window.open(dock.url);
       } else if (dock.type === "2") {
@@ -139,11 +229,12 @@
         this.$store.commit("desktop/refreshFrame", dock);
       }
     },
-    toolHover(dock){
+    toolHover (dock) {
       //this.$parent.screenShot(dock)
     },
 
-    toLogout(){
+    toLogout () {
+      let _this = this;
       this.$confirm("鎻愮ず锛氱‘瀹氶��鍑哄悧锛�", {
         center: true,
         cancelButtonClass: "comfirm-class-cancle",
@@ -152,6 +243,7 @@
         logout().then(res => {
           if (res === "閫�鍑烘垚鍔�") {
             sessionStorage.removeItem("userInfo");
+            _this.userInfo = {};
             location.assign('/view/index');
             this.$notify({
               title: "鎻愮ず",
@@ -205,7 +297,7 @@
 .tools .tools-middle::before {
   width: 1px;
   height: 20px;
-  content: "";
+  content: '';
   position: absolute;
   top: 10px;
   left: 0;
@@ -220,11 +312,11 @@
   border-bottom: 2px solid transparent;
   position: relative;
 }
-.tools .tools-middle .dock-item-wrap:hover{
+.tools .tools-middle .dock-item-wrap:hover {
   color: white;
   background-color: #98aabe;
 }
-.tools-middle .dock-item-wrap.actived{
+.tools-middle .dock-item-wrap.actived {
   border-color: #40c3ff;
   background-color: #98aabe;
 }
@@ -255,9 +347,8 @@
   vertical-align: top;
   line-height: 56px;
   padding: 0 15px;
-  
 }
-.tools-icon img{
+.tools-icon img {
   -webkit-user-drag: none;
 }
 .tools .tools-icon:not(.no-hover-style):hover,
@@ -272,7 +363,7 @@
   height: 100%;
   margin-right: 14px;
 }
-.el-dropdown-menu{
+.el-dropdown-menu {
   top: 40px !important;
 }
 </style>
\ No newline at end of file
diff --git a/src/pages/desktop/index/components/ToolsEntry.vue b/src/pages/desktop/index/components/ToolsEntry.vue
index c622e64..8ffbfc7 100644
--- a/src/pages/desktop/index/components/ToolsEntry.vue
+++ b/src/pages/desktop/index/components/ToolsEntry.vue
@@ -61,7 +61,6 @@
   },
   methods: {
     dockClick(dock) {
-      debugger
       if (dock.type === '1') {
         window.open(dock.url);
       } else if (dock.type === '2' && !dock.isOpen) {
diff --git a/src/pages/settings/components/ClusterManagement.vue b/src/pages/settings/components/ClusterManagement.vue
index f9aa80c..51173b1 100644
--- a/src/pages/settings/components/ClusterManagement.vue
+++ b/src/pages/settings/components/ClusterManagement.vue
@@ -288,11 +288,19 @@
       agentName: "",
       members: [],
       innerNodes: [],
+      intervalTimer: null,
     };
   },
   mounted() {
     this.findCluster();
+    let _this = this;
+    this.intervalTimer = setInterval(()=>{
+      _this.findCluster();
+    },30000);
     this.getEsClusterNodes();
+  },
+  beforeDestroy(){
+    clearInterval(this.intervalTimer);
   },
   methods: {
     cleanValue() {
@@ -505,7 +513,7 @@
             obj.node_ip = i.node_ip;
             obj.nodeName = i.node_name;
             obj.Address = i.node_ip;
-            obj.role = i.role ? i.role : "pc";
+            obj.role = i.drift_state ? i.drift_state : "pc";
             return obj;
           });
 

--
Gitblit v1.8.0