From 261e25074b7f35010efccb86bf82f6fe36e4b10d Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期三, 14 十月 2020 10:27:19 +0800
Subject: [PATCH] 添加硬件信息显示

---
 src/pages/settings/components/ClusterManagement.vue |  305 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 194 insertions(+), 111 deletions(-)

diff --git a/src/pages/settings/components/ClusterManagement.vue b/src/pages/settings/components/ClusterManagement.vue
index 77fa912..9a04946 100644
--- a/src/pages/settings/components/ClusterManagement.vue
+++ b/src/pages/settings/components/ClusterManagement.vue
@@ -4,10 +4,10 @@
       <div class="ui-top-title">瑙嗛鍒嗘瀽闆嗙兢绠$悊</div>
     </div>
     <el-row>
-      <el-col :span="12" >
+      <el-col :span="12">
         <el-tabs v-model="activeName" id="e-alaycluster" v-if="!isHasColony">
           <el-tab-pane label="鍒涘缓闆嗙兢" name="1" :disabled="isHasColony">
-            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px">
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
               <el-form-item label="闆嗙兢鍚嶇О" prop="clustername">
                 <el-input v-model="ruleForm.clustername" placeholder="鎵嬪姩杈撳叆, 濡傗�滈泦缇鈥�" size="small"></el-input>
               </el-form-item>
@@ -19,10 +19,9 @@
                   <el-button type="text" slot="suffix" @click="generatePassword">鐢熸垚瀵嗙爜</el-button>
                 </el-input>
               </el-form-item>
-
-              <!-- <el-form-item label="铏氭嫙IP" prop="virtualip">
-                <ip-input :ip="ruleForm.virtualip" :on-blur="onIpBlur"></ip-input>
-              </el-form-item>-->
+              <el-form-item label="铏氭嫙/澶栭儴IP" prop="virtualIp">
+                <ip-input :ip="ruleForm.virtualIp" :on-blur="onIpBlur"></ip-input>
+              </el-form-item>
               <el-form-item style="width:500px">
                 <el-button type="primary" size="small" @click="submitForm('ruleForm')">淇濆瓨</el-button>
               </el-form-item>
@@ -70,7 +69,7 @@
         </el-tabs>
         <!-- 鏈夐泦缇ょ殑鎯呭喌 -->
         <div v-if="isHasColony" id="h-alaycluster">
-          <el-form :model="ruleForm" ref="ruleForm" label-width="80px">
+          <el-form :model="ruleForm" ref="ruleForm" label-width="100px">
             <el-form-item label="闆嗙兢鍚嶇О" prop="clustername">
               <el-input v-model="ruleForm.clustername" placeholder="鎵嬪姩杈撳叆, 濡傗�滈泦缇鈥�" size="small"></el-input>
             </el-form-item>
@@ -86,9 +85,9 @@
               ></el-input>
             </el-form-item>
 
-            <!-- <el-form-item label="铏氭嫙IP" prop="virtualip">
-              <ip-input :ip="ruleForm.virtualip" :on-blur="onIpBlur"></ip-input>
-            </el-form-item>-->
+            <el-form-item label="铏氭嫙IP" prop="virtualIp">
+              <ip-input :ip="ruleForm.virtualIp" :on-blur="onIpBlur"></ip-input>
+            </el-form-item>
             <el-form-item style="width:440px;text-align: right;">
               <el-button size="small" type="danger" @click="leave">閫�鍑洪泦缇�</el-button>
               <el-button
@@ -101,85 +100,76 @@
           </el-form>
         </div>
       </el-col>
-      <el-col :span="10" style="height: 100%;" v-if="members.length !== 0">
+      <el-col :span="12" style="height: 100%;" v-if="members.length !== 0">
         <serfDiagram
           ref="diagram"
           :members="members"
           :agent="agentName"
           v-loading="loading"
           @selected-node="joinNode"
+          class="nodes-svg"
         ></serfDiagram>
       </el-col>
     </el-row>
-    <div class="ui-top-view">
-      <div class="ui-top-title">婕傜ЩIP</div>
-    </div>
-    <el-row>
-      <el-col :span="12">
-        <el-form :model="vrIpForm" ref="vrIpForm" :rules="vrIpRules" style="padding:20px 40px;">
-          <el-form-item label="铏氭嫙IP" prop="virtual_ip">
-            <ip-input :ip="vrIpForm.virtual_ip" :on-blur="onIpBlur"></ip-input>
-            <el-switch v-model="vrIpForm.enable" style="margin-left:30px;"></el-switch>
-          </el-form-item>
-          <el-form-item style="width:500px">
-            <el-button type="primary" size="small" @click="saveForm('vrIpForm')">淇濆瓨</el-button>
-          </el-form-item>
-        </el-form>
-      </el-col>
-    </el-row>
+
     <div class="ui-top-view">
       <div class="ui-top-title">瀛樺偍闆嗙兢绠$悊</div>
     </div>
     <el-row>
       <el-col :span="12">
         <el-tabs id="e-dbcluster" v-model="sActiveName">
-          <el-tab-pane label="鍒涘缓闆嗙兢" name="s-first">
-            <el-button type="primary" style="float: none;margin: 20px 0px;" size="small">鍒涘缓瀛樺偍闆嗙兢</el-button>
-            <p>鐐瑰嚮灏嗘湰鏈哄垱寤轰负瀛樺偍闆嗙兢</p>
+          <el-tab-pane label="鍒涘缓闆嗙兢" name="s-first" v-if="sActiveName != 's-third1'">
+            <el-button
+              type="primary"
+              style="float: left;margin: 20px 0px;"
+              size="small"
+              @click="createEsCluster()"
+            >鍒涘缓瀛樺偍闆嗙兢</el-button>
+            <!-- <p>鐐瑰嚮灏嗘湰鏈哄垱寤轰负瀛樺偍闆嗙兢</p> -->
           </el-tab-pane>
-          <el-tab-pane label="鍔犲叆宸叉湁闆嗙兢" name="s-second">
+          <el-tab-pane label="鍔犲叆宸叉湁闆嗙兢" name="s-second" v-if="sActiveName != 's-third1'">
             <el-form label-width="80px">
-              <el-form-item label="IP鍦板潃" style="text-align: left;">
+              <el-form-item label="IP鍦板潃" style="text-align: left;width: 300px;">
                 <el-input
-                  v-model="clusterip2"
+                  v-model="esNodeIp"
                   placeholder="璇疯緭鍏ラ泦缇ゅ唴浠绘剰IP鍦板潃"
                   size="small"
                   autocomplete="off"
-                >
-                  <el-button
-                    type="text"
-                    slot="suffix"
-                    v-show="!searchDis"
-                    @click="searchColony"
-                  >鎼滅储闆嗙兢</el-button>
-                </el-input>
+                ></el-input>
+                <el-checkbox
+                  label="涓昏妭鐐�"
+                  v-model="esNodeType"
+                  style="margin-left: 20px;position: absolute;"
+                ></el-checkbox>
               </el-form-item>
               <el-form-item>
-                <el-button type="primary" @click="join('joinForm')" size="small">鍔犲叆闆嗙兢</el-button>
+                <el-button
+                  type="primary"
+                  @click="joinESCluster()"
+                  size="small"
+                  style="float: left;"
+                >鍔犲叆闆嗙兢</el-button>
               </el-form-item>
             </el-form>
           </el-tab-pane>
-          <el-tab-pane label="绠$悊闆嗙兢" name="s-third">
-            <h3 style="text-align: left;margin: 10px 0px;">
-              <b>闆嗙兢鍚嶇О</b>
-              <span>xxx</span>
-            </h3>
-            <el-table :data="tableData" style="width: 100%">
+          <el-tab-pane label="闆嗙兢淇℃伅" name="s-third">
+            <el-table :data="esNodes" style="width: 100%">
               <el-table-column prop="nodeType" label="鑺傜偣绫诲瀷"></el-table-column>
-              <el-table-column prop="nodeName" label="鑺傜偣鍚嶇О"></el-table-column>
-              <el-table-column prop="nodeIp" label="鑺傜偣IP鍦板潃"></el-table-column>
-              <el-table-column prop="registerTime" label="娉ㄥ唽鏃堕棿"></el-table-column>
+              <el-table-column prop="name" label="鑺傜偣鍚嶇О"></el-table-column>
+              <el-table-column prop="ip" label="鑺傜偣IP鍦板潃" min-width="90px"></el-table-column>
+              <el-table-column prop="buildDate" label="娉ㄥ唽鏃堕棿" min-width="120px"></el-table-column>
             </el-table>
           </el-tab-pane>
         </el-tabs>
       </el-col>
     </el-row>
+
   </div>
 </template>
 
 <script>
 import {
-  createColony,
+  createSerfCluster,
   randomPwd,
   search,
   getSearchNodes,
@@ -189,17 +179,25 @@
   joinCluster,
   leave,
   getVrrp,
-  setVrrp
+  setVrrp,
+  createESNode,
+  addESNode,
+  getEsClusterInfo
 } from "@/api/clusterManage";
+
+import {
+  getDevInfo
+} from "@/api/system";
+
 import serfDiagram from "@/components/serfDiagram";
 import ipInput from "@/components/subComponents/IPInput";
-
+import {isIPv4} from "@/scripts/validate";
 export default {
   components: {
     serfDiagram,
     ipInput
   },
-  data () {
+  data() {
     const checkPwd = (rule, value, callback) => {
       if (!value) {
         return callback(new Error("瀵嗙爜涓嶈兘涓虹┖"));
@@ -217,17 +215,19 @@
         }
       }, 1000);
     };
+    
     return {
       activeName: "1",
       sActiveName: "s-first",
       clusterid: "",
-      clusterip2: "",
+      esNodeIp: "",
+      esNodeType: "",
       clusterpwd2: "",
       sClusterip: "",
       ruleForm: {
         clustername: "",
         clusterpwd: "",
-        //virtualip: ""
+        virtualIp: ""
       },
       vrIpForm: {
         enable: true,
@@ -249,41 +249,22 @@
           { required: true, message: "璇疯緭鍏ラ泦缇ゅ悕绉�", trigger: "change" }
         ],
         clusterpwd: [{ validator: checkPwd, trigger: "change" }],
-        // virtualip: [
-        //   { required: true, message: "璇疯緭鍏ヨ櫄鎷烮P", trigger: "change" }
-        // ]
-      },
-      vrIpRules: {
-        virtualip: [
-          { required: true, message: "璇疯緭鍏ヨ櫄鎷烮P", trigger: "change" }
+        virtualIp: [
+          { required: true, validator: isIPv4, trigger: "change" }
         ]
       },
+      // vrIpRules: {
+      //   virtualIp: [
+      //     { required: true, message: "璇疯緭鍏ヨ櫄鎷烮P", trigger: "change" }
+      //   ]
+      // },
       joinRules: {
         clusterpwd: [
           { required: true, message: "璇疯緭鍏ラ泦缇ゅ瘑鐮�", trigger: "change" },
           { validator: checkPwd, trigger: "change" }
         ]
       },
-      tableData: [
-        {
-          nodeType: "涓昏妭鐐�",
-          nodeName: "xxxx",
-          nodeIp: "192.168.12.102",
-          registerTime: "2016-04-04"
-        },
-        {
-          nodeType: "涓昏妭鐐�",
-          nodeName: "xxxx",
-          nodeIp: "192.168.14.122",
-          registerTime: "2016-05-04"
-        },
-        {
-          nodeType: "涓昏妭鐐�",
-          nodeName: "xxxx",
-          nodeIp: "192.168.10.132",
-          registerTime: "2016-02-12"
-        }
-      ],
+      esNodes: [],
       scheduleId: "",
       isHasColony: false,
       currentCluster: {},
@@ -294,25 +275,30 @@
       members: []
     };
   },
-  watch: {},
+  mounted() {
+    this.findCluster();
+    this.getVrrpInfo();
+    this.getEsClusterNodes();
+  },
   methods: {
-    cleanValue () {
+    cleanValue() {
       this.members = [];
     },
-    sHandleClick (tab, event) {
+    sHandleClick(tab, event) {
       console.log(tab, event);
     },
-    submitForm (formName) {
+    submitForm(formName) {
       this.$refs[formName].validate(valid => {
         if (valid) {
+          debugger
           //alert("submit!");
           let json = {
             clusterId: this.clusterid,
             clusterName: this.ruleForm.clustername,
             password: this.ruleForm.clusterpwd,
-            //virtualip: this.ruleForm.virtualip
+            virtualIp: this.ruleForm.virtualIp
           };
-          this.createColony(json).then(() => {
+          this.createCluster(json).then(() => {
             this.findCluster();
           });
         } else {
@@ -321,8 +307,8 @@
         }
       });
     },
-    saveForm (formName) {
-      debugger
+
+    saveForm(formName) {
       this.$refs[formName].validate(valid => {
         if (valid) {
           alert("submit!");
@@ -341,6 +327,7 @@
         }
       });
     },
+   
     join (formName) {
       this.$refs[formName].validate(valid => {
         if (valid) {
@@ -369,8 +356,8 @@
         }
       });
     },
-    async createColony (json) {
-      let res = await createColony(json);
+    async createCluster(json) {
+      let res = await createSerfCluster(json);
       console.log(res, "鍒涘缓闆嗙兢");
       this.$notify({
         title: res.success ? "鎴愬姛" : "澶辫触",
@@ -378,13 +365,13 @@
         type: res.success ? "success" : "error"
       });
     },
-    async randomPwd () {
+    async randomPwd() {
       let res = await randomPwd();
       if (res && res.success) {
         this.ruleForm.clusterpwd = res.data;
       }
     },
-    async searchColony () {
+    async searchColony() {
       this.$refs["joinForm"].validate(valid => {
         if (valid) {
           this.members = [];
@@ -410,7 +397,7 @@
         }
       });
     },
-    async search (json) {
+    async search(json) {
       let res = await search(json);
       if (res && res.success) {
         console.log(res, "鎼滅储闆嗙兢");
@@ -422,7 +409,7 @@
         this.stopSearch();
       }, 10 * 1000);
     },
-    async getSearchNodes () {
+    async getSearchNodes() {
       let res = await getSearchNodes();
       if (res && res.success) {
         let list = res.data.map(i => {
@@ -446,12 +433,12 @@
         });
       }
     },
-    setSchedule () {
+    setSchedule() {
       this.scheduleId = window.setInterval(() => {
         this.getSearchNodes();
       }, 1000);
     },
-    async stopSearch () {
+    async stopSearch() {
       if (!this.loading) {
         return true;
       }
@@ -476,7 +463,7 @@
         // },2000)
       })
     },
-    async findCluster () {
+    async findCluster() {
       let res = await findCluster();
       if (res && res.success) {
         if (res.data && res.data.clusterId) {
@@ -485,9 +472,11 @@
           this.clusterid = res.data.clusterId;
           this.ruleForm.clustername = res.data.clusterName;
           this.ruleForm.clusterpwd = res.data.clusterpwd
-          //this.ruleForm.virtualip = res.data.virtualip
+          this.ruleForm.virtualIp = res.data.virtualIp
           let list = res.data.nodes.map(i => {
+            debugger
             let obj = {};
+            obj.device_type = i.device_type;
             obj.cluster_id = i.cluster_id;
             obj.clusterName = res.data.clusterName;
             obj.create_time = i.create_time;
@@ -506,7 +495,7 @@
         }
       }
     },
-    getVrrpInfo () {
+    getVrrpInfo() {
       getVrrp().then(res => {
         if (res.success) {
           this.vrIpForm.virtual_ip = res.data.virtual_ip;
@@ -516,7 +505,7 @@
         console.log(e)
       })
     },
-    async updateClusterName () {
+    async updateClusterName() {
       let res = await updateClusterName({
         clusterName: this.mangeForm.colonyName
       });
@@ -526,7 +515,7 @@
         type: res.success ? "success" : "error"
       });
     },
-    async joinCluster (json) {
+    async joinCluster(json) {
       let res = await joinCluster(json);
       if (res.success) {
         this.members = []
@@ -537,7 +526,7 @@
         type: res.success ? "success" : "error"
       });
     },
-    leave () {
+    leave() {
       this.$confirm(`纭畾閫�鍑洪泦缇ゅ悧?`, {
         center: true,
         cancelButtonClass: "comfirm-class-cancle",
@@ -560,8 +549,7 @@
       }).catch(() => { });
 
     },
-    joinNode (event, node) {
-      debugger
+    joinNode(event, node) {
       this.currentCluster.cluster_id = node.cluster_id;
       if (this.activeName === "3") {
         this.manageForm.clustername = node.clusterName;
@@ -605,7 +593,7 @@
         });
       }
     },
-    generatePassword () {
+    generatePassword() {
       var chars =
         "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
       var uuid = [];
@@ -616,15 +604,107 @@
 
       this.ruleForm.clusterpwd = uuid.join("");
     },
+
+    async getEsClusterNodes() {
+      let rsp = await getDevInfo();
+      let hostIpAddr = "";
+      if (rsp && rsp.success) {
+        hostIpAddr = rsp.data.ip;
+      }
+
+      if (hostIpAddr.length) {
+        rsp = await getEsClusterInfo({ ip: hostIpAddr });
+        if (rsp && rsp.success) {
+          this.esNodes = rsp.data.map(el => {
+            return {
+              // buildDate: "2018-06-11T23:38:03.357887Z",
+              buildDate: el.buildDate.split("T")[0] + " " + el.buildDate.split("T")[1].slice(0, 8),
+              ip: el.ip,
+              name: el.name,
+              nodeType: el.nodeType,
+            }
+          })
+
+          if (this.esNodes.length) {
+            this.sActiveName = 's-third';
+          }
+        }
+      }
+    },
+    createEsCluster() {
+      createESNode().then(rsp => {
+        if (rsp && rsp.success) {
+          this.$message({
+            type: "success",
+            duration: 2000,
+            message: "鍒涘缓鎴愬姛"
+          });
+
+          this.getSearchNodes();
+        } else {
+          this.$message({
+            type: "error",
+            duration: 2000,
+            message: rsp.msg
+          });
+        }
+      }).catch(rsp => {
+        this.$message({
+          type: "error",
+          duration: 2000,
+          message: rsp.msg
+        });
+      })
+    },
+    joinESCluster() {
+      if (!this.esNodeIp.length) {
+        this.$message({
+          type: "error",
+          duration: 2000,
+          message: "璇疯緭鍏ユ纭殑ip鍦板潃"
+        });
+        return;
+      }
+
+      addESNode({ ip: this.esNodeIp, option: this.esNodeType ? "1" : "2" }).then(rsp => {
+        if (rsp && rsp.success) {
+          this.$message({
+            type: "success",
+            duration: 2000,
+            message: "鍔犲叆鎴愬姛"
+          });
+
+          this.getSearchNodes();
+        } else {
+          this.$message({
+            type: "error",
+            duration: 2000,
+            message: rsp.msg
+          });
+        }
+      }).catch(rsp => {
+        this.$message({
+          type: "error",
+          duration: 2000,
+          message: rsp.msg
+        });
+      })
+    },
     onIpBlur (ip) {
-      this.vrIpForm.virtual_ip = ip;
+      //this.vrIpForm.virtual_ip = ip;
+      this.ruleForm.virtualIp = ip;
+      console.log(this.ruleForm.virtualIp)
     }
+  
+
+    
   },
   mounted () {
     this.findCluster();
-    this.getVrrpInfo();
+    
   },
   created () { }
+
 };
 </script>
 <style lang="scss">
@@ -696,4 +776,7 @@
   height: 30px;
   line-height: 30px;
 }
+.nodes-svg{
+  background-color: aquamarine;
+}
 </style>

--
Gitblit v1.8.0