From 401524fb5661d57ffb2229d683fe4de85b65fd1c Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期四, 31 八月 2023 17:54:24 +0800
Subject: [PATCH] 生产管理看板+删不需要的文件

---
 src/pages/settings/components/ClusterManagement.vue |  885 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 885 insertions(+), 0 deletions(-)

diff --git a/src/pages/settings/components/ClusterManagement.vue b/src/pages/settings/components/ClusterManagement.vue
new file mode 100644
index 0000000..bedd193
--- /dev/null
+++ b/src/pages/settings/components/ClusterManagement.vue
@@ -0,0 +1,885 @@
+<template>
+  <div class="s-cluster-management">
+    <div class="ui-top-view">
+      <div class="ui-top-title">瑙嗛鍒嗘瀽闆嗙兢绠$悊</div>
+    </div>
+    <el-row>
+      <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="100px">
+              <el-form-item label="闆嗙兢鍚嶇О" prop="clustername">
+                <el-input v-model="ruleForm.clustername" placeholder="鎵嬪姩杈撳叆, 濡傗�滈泦缇鈥�" size="small"></el-input>
+              </el-form-item>
+              <el-form-item label="闆嗙兢ID">
+                <el-input v-model="clusterid" placeholder="涓嶅厑璁歌緭鍏�,淇濆瓨鍚庡洖鏄�" disabled size="small"></el-input>
+              </el-form-item>
+              <el-form-item label="闆嗙兢瀵嗙爜" prop="clusterpwd">
+                <el-input v-model="ruleForm.clusterpwd" placeholder="璇疯緭鍏�6浣嶅瘑鐮�,鎴栫偣鍑荤敓鎴�" size="small">
+                  <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" class="ip-input-comp"></ip-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" size="small" @click="submitForm('ruleForm')">淇濆瓨</el-button>
+              </el-form-item>
+            </el-form>
+          </el-tab-pane>
+
+          <!-- 鍔犲叆宸叉湁闆嗙兢 -->
+          <el-tab-pane label="鍔犲叆宸叉湁闆嗙兢" name="2" :disabled="isHasColony">
+            <el-form
+              label-width="80px"
+              :model="joinForm"
+              :rules="joinRules"
+              ref="joinForm"
+              class="join-form"
+              v-loading="joinLoading"
+            >
+              <el-form-item label="闆嗙兢ID" style="width:440px" prop="clusterid">
+                <el-input v-model="joinForm.clusterid" placeholder size="small"></el-input>
+              </el-form-item>
+              <el-form-item label="IP鍦板潃" style="width:440px" prop="clusterip">
+                <el-input
+                  v-model="joinForm.clusterip"
+                  placeholder="璇疯緭鍏ラ泦缇ゅ唴浠绘剰IP鍦板潃"
+                  size="small"
+                  autocomplete="new-password"
+                ></el-input>
+
+                <!-- <el-button size="mini" :disabled="searchDis" @click="searchColony">鎼滅储闆嗙兢</el-button>
+                <el-button size="mini" @click="stopSearch">鍋滄鎼滅储</el-button>-->
+              </el-form-item>
+              <el-form-item label="闆嗙兢瀵嗙爜" prop="clusterpwd" style="width:440px">
+                <el-input
+                  v-model="joinForm.clusterpwd"
+                  placeholder="璇疯緭鍏ラ泦缇ゅ瘑鐮�"
+                  show-password
+                  size="small"
+                  autocomplete="new-password"
+                >
+                  <el-button
+                    type="text"
+                    slot="suffix"
+                    v-show="!searchDis"
+                    @click="searchColony"
+                  >鎼滅储闆嗙兢</el-button>
+                  <el-button type="text" slot="suffix" v-show="searchDis" @click="stopSearch">
+                    <i class="el-icon-loading"></i>鍋滄鎼滅储
+                  </el-button>
+                </el-input>
+              </el-form-item>
+              <el-form-item style="width:440px">
+                <el-button type="primary" @click="join('joinForm')" size="small">鍔犲叆闆嗙兢</el-button>
+              </el-form-item>
+              <div class="form-tip">璇疯緭鍏ヤ互涓婁俊鎭姞鍏ラ泦缇�,鎴栬�呴�氳繃闆嗙兢瀵嗙爜鎼滅储鍚庤繘琛屽姞鍏�</div>
+            </el-form>
+          </el-tab-pane>
+        </el-tabs>
+        <!-- 鏈夐泦缇ょ殑鎯呭喌 -->
+        <div v-if="isHasColony" id="h-alaycluster">
+          <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>
+            <el-form-item label="闆嗙兢ID">
+              <el-input v-model="clusterid" placeholder="涓嶅厑璁歌緭鍏�,淇濆瓨鍚庡洖鏄�" disabled size="small"></el-input>
+            </el-form-item>
+            <el-form-item label="闆嗙兢瀵嗙爜" prop="clusterpwd">
+              <el-input
+                v-model="ruleForm.clusterpwd"
+                disabled
+                placeholder="璇疯緭鍏�6浣嶅瘑鐮�,鎴栫偣鍑荤敓鎴�"
+                size="small"
+              ></el-input>
+            </el-form-item>
+
+            <el-form-item label="闆嗙兢IP" prop="virtualIp">
+              <ip-input :ip="ruleForm.virtualIp" :on-blur="onIpBlur" class="ip-input-comp"></ip-input>
+            </el-form-item>
+            <el-form-item style="text-align: right;">
+              <el-button size="small" type="danger" @click="leave">閫�鍑洪泦缇�</el-button>
+              <el-button
+                style="margin-right:10px;"
+                type="primary"
+                size="small"
+                @click="updateCluster('manageForm')"
+              >淇濆瓨</el-button>
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-col>
+      <el-col
+        :span="12"
+        style="height: 100%;"
+        v-if="members.length !== 0 && isSearch"
+        class="node-container"
+      >
+        <serfDiagram
+          ref="diagram"
+          :members="members"
+          :agent="agentName"
+          v-loading="loading"
+          :isShowHover="false"
+          @selected-node="joinNode"
+          class="nodes-svg"
+        ></serfDiagram>
+      </el-col>
+      <el-col
+        :span="12"
+        style="height: 100%;"
+        v-if="innerNodes.length !== 0 && !isSearch"
+        class="node-container"
+      >
+        <cloud-node :nodes="innerNodes"></cloud-node>
+      </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" v-if="sActiveName != 's-third1'">
+            <el-button
+              type="primary"
+              style="float: left;margin: 20px 0px;"
+              size="small"
+              @click="createEsCluster()"
+            >鍒涘缓瀛樺偍闆嗙兢</el-button>
+            
+          </el-tab-pane>
+          <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;width: 300px;">
+                <el-input
+                  v-model="esNodeIp"
+                  placeholder="璇疯緭鍏ラ泦缇ゅ唴浠绘剰IP鍦板潃"
+                  size="small"
+                  autocomplete="off"
+                ></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="joinESCluster()"
+                  size="small"
+                  style="float: left;"
+                >鍔犲叆闆嗙兢</el-button>
+              </el-form-item>
+            </el-form>
+          </el-tab-pane>
+          <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="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 {
+  createSerfCluster,
+  randomPwd,
+  search,
+  getSearchNodes,
+  stopSearching,
+  findCluster,
+  updateClusterName,
+  joinCluster,
+  leave,
+  getVrrp,
+  setVrrp,
+  createESNode,
+  addESNode,
+  getEsClusterInfo
+} from "@/api/clusterManage";
+
+import {
+  getDevInfo
+} from "@/api/system";
+import cloudNode from "./CloudNode";
+import serfDiagram from "@/components/serfDiagram";
+import ipInput from "@/components/subComponents/IPInput";
+import { isIPv4 } from "@/scripts/validate";
+export default {
+  components: {
+    serfDiagram,
+    ipInput,
+    cloudNode
+  },
+  data() {
+    const checkPwd = (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error("瀵嗙爜涓嶈兘涓虹┖"));
+      }
+      setTimeout(() => {
+        if (value.length != 6) {
+          callback(new Error("瀵嗙爜搴斾负6浣�!"));
+        } else {
+          callback();
+        }
+      }, 1000);
+    };
+
+    return {
+      activeName: "1",
+      sActiveName: "s-first",
+      clusterid: "",
+      esNodeIp: "",
+      esNodeType: "",
+      clusterpwd2: "",
+      sClusterip: "",
+      ruleForm: {
+        clustername: "",
+        clusterpwd: "",
+        virtualIp: ""
+      },
+      vrIpForm: {
+        enable: true,
+        //serve_port: "",
+        serve_port: null,
+        virtual_ip: ""
+      },
+      manageForm: {
+        clustername: "娴嬭瘯闆嗙兢1",
+        clusterpwd: "123456",
+        virtualip: "192.168.1.188"
+      },
+      joinForm: {
+        clusterid: "",
+        clusterip: "",
+        clusterpwd: ""
+      },
+      rules: {
+        clustername: [
+          { required: true, message: "璇疯緭鍏ラ泦缇ゅ悕绉�", trigger: "change" }
+        ],
+        clusterpwd: [{ validator: checkPwd, trigger: "change" }],
+        virtualIp: [
+          { required: true, validator: isIPv4, trigger: "change" }
+        ]
+      },
+      // vrIpRules: {
+      //   virtualIp: [
+      //     { required: true, message: "璇疯緭鍏ヨ櫄鎷烮P", trigger: "change" }
+      //   ]
+      // },
+      joinRules: {
+        clusterid: [
+          { required: true, message: "璇疯緭鍏ラ泦缇D", trigger: "change" },
+        ],
+        clusterip: [
+          { required: true, validator: isIPv4, trigger: "change" }
+        ],
+        clusterpwd: [
+          { validator: checkPwd, trigger: "change" }
+        ]
+      },
+      esNodes: [],
+      scheduleId: "",
+      isHasColony: false,
+      isSearch: false,
+      currentCluster: {},
+      searchNum: "",
+      loading: false,
+      searchDis: false,
+      agentName: "",
+      members: [],
+      innerNodes: [],
+      intervalTimer: null,
+      joinLoading: false,
+      showJoinConfirm: false
+    };
+  },
+  mounted() {
+    this.findCluster();
+    let _this = this;
+    this.intervalTimer = setInterval(() => {
+      _this.findCluster();
+    }, 30000);
+    //this.getEsClusterNodes();
+  },
+  beforeDestroy() {
+    clearInterval(this.intervalTimer);
+  },
+  methods: {
+    checkPsd(psd) {
+      return psd.trim().length === 6
+    },
+    // cleanValue() {
+    //   this.members = [];
+    // },
+    // sHandleClick(tab, event) {
+    //   console.log(tab, event);
+    // },
+    submitForm(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          //alert("submit!");
+          let json = {
+            clusterId: this.clusterid,
+            clusterName: this.ruleForm.clustername,
+            password: this.ruleForm.clusterpwd,
+            virtualIp: this.ruleForm.virtualIp
+          };
+          this.createCluster(json).then(() => {
+            this.findCluster();
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+
+    // saveForm(formName) {
+    //   this.$refs[formName].validate(valid => {
+    //     if (valid) {
+    //       alert("submit!");
+    //       let json = {
+    //         enable: this.vrIpForm.enable,
+    //         serve_port: this.vrIpForm.serve_port,
+    //         virtual_ip: this.vrIpForm.virtual_ip,
+
+    //       };
+    //       setVrrp(json).then(() => {
+    //         this.getVrrpInfo();
+    //       });
+    //     } else {
+    //       console.log("error submit!!");
+    //       return false;
+    //     }
+    //   });
+    // },
+
+    join(formName) {
+      let _this = this;
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          _this.joinLoading = true;
+          // if (Object.keys(this.currentCluster).length === 0) {
+          //   this.$notify({
+          //     type: "info",
+          //     duration: 1000,
+          //     message: "璇峰厛閫夋嫨涓�涓泦缇よ妭鐐�"
+          //   });
+          //   _this.joinLoading = false;
+          //   return true;
+          // }
+          let nodeIps = this.members.map(i => {
+            return i.Address;
+          });
+          let json = {
+            //clusterId: this.currentCluster.cluster_id,
+            clusterId: this.joinForm.clusterid,
+            password: this.joinForm.clusterpwd,
+            nodeIps: [this.joinForm.clusterip]
+          };
+          this.joinCluster(json).then(() => {
+            _this.joinLoading = false;
+            this.findCluster();
+          }).catch(e => {
+            console.log(e);
+            _this.joinLoading = false;
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    async createCluster(json) {
+      let res = await createSerfCluster(json);
+      console.log(res, "鍒涘缓闆嗙兢");
+      this.$notify({
+        title: res.success ? "鎴愬姛" : "澶辫触",
+        message: res.msg,
+        type: res.success ? "success" : "error"
+      });
+    },
+    async randomPwd() {
+      let res = await randomPwd();
+      if (res && res.success) {
+        this.ruleForm.clusterpwd = res.data;
+      }
+    },
+    async searchColony() {
+      this.isSearch = true;
+      this.$refs["joinForm"].clearValidate();
+      this.$refs["joinForm"].validateField('clusterpwd');
+      if (this.checkPsd(this.joinForm.clusterpwd)) {
+        this.members = [];
+        let json = {
+          password: this.joinForm.clusterpwd,
+          //ip: this.joinForm.clusterip
+        };
+
+        this.search(json)
+          .then(() => {
+            this.setSchedule();
+            // this.searchDis = false;
+            // this.loading = false;
+          })
+          .catch(() => {
+            this.searchDis = false;
+            this.loading = false;
+            this.isSearch = false;
+          });
+      } else {
+        this.searchDis = false;
+        this.loading = false;
+        this.isSearch = false;
+        return false;
+      }
+      //});
+    },
+    async search(json) {
+      let res = await search(json);
+      if (res && res.success) {
+        console.log(res, "鎼滅储闆嗙兢");
+        this.searchNum = res.data;
+      }
+      this.searchDis = true;
+      this.loading = true;
+      window.setTimeout(() => {
+        this.stopSearch();
+      }, 10 * 1000);
+    },
+    //鎼滅储闆嗙兢
+    async getSearchNodes() {
+      let res = await getSearchNodes();
+      if (res && res.success) {
+        let list = res.data.map(i => {
+          let obj = {};
+          obj.cluster_id = i.clusterID ? i.clusterID : "";
+          obj.create_time = i.create_time ? i.create_time : "";
+          obj.id = i.nodeID ? i.nodeID : "";
+          obj.node_id = i.nodeID ? i.nodeID : "";
+          obj.Address = i.nodeAddress ? i.nodeAddress : "";
+          obj.nodeName = i.nodeAddress ? i.nodeAddress : "";
+          obj.role = i.role ? i.role : "pc";
+          return obj;
+        });
+        list.map(i => {
+          let found = this.members.find(element => {
+            return element.node_id === i.node_id;
+          });
+          if (found === undefined) {
+            this.members.push(i);
+          }
+        });
+      }
+    },
+    setSchedule() {
+      this.scheduleId = window.setInterval(() => {
+        this.getSearchNodes();
+      }, 1000);
+    },
+    async stopSearch() {
+      if (!this.loading) {
+        return true;
+      }
+      stopSearching({
+        searchNum: this.searchNum
+      }).then((res) => {
+        console.log(res, '姝e父缁撴潫')
+        this.loading = false;
+        this.searchDis = false;
+        window.clearInterval(this.scheduleId);
+      }).catch((err) => {
+        console.log(err, '鎶ラ敊缁撴潫')
+        this.$notify({
+          type: 'error',
+          duration: 1000,
+          message: '鍋滄鎼滅储鎶ラ敊锛�'
+        })
+        // window.setTimeout(()=>{
+        //   this.loading = false;
+        //   this.searchDis = false;
+        //   window.clearInterval(this.scheduleId);
+        // },2000)
+      })
+    },
+    async findCluster() {
+      let res = await findCluster();
+      if (res && res.success) {
+        if (res.data && res.data.clusterId) {
+          this.isHasColony = true;
+          this.activeName = "3";
+          this.clusterid = res.data.clusterId;
+          this.ruleForm.clustername = res.data.clusterName;
+          this.ruleForm.clusterpwd = '******';
+          this.ruleForm.virtualIp = res.data.virtualIp
+          //let list = res.data.nodes.map(i => {
+          this.isSearch = false;
+          this.innerNodes = res.data.nodes.map(i => {
+            let obj = {};
+            obj.device_type = i.device_type;
+            obj.workType = i.device_type.substr(2, 2);
+            obj.hardwareType = i.device_type.substr(4, 2);
+            obj.cluster_id = i.cluster_id;
+            obj.clusterName = res.data.clusterName;
+            obj.create_time = i.create_time;
+            obj.id = i.id;
+            obj.node_id = i.node_id;
+            obj.node_ip = i.node_ip;
+            obj.nodeName = i.node_name;
+            obj.Address = i.node_ip;
+            obj.role = i.drift_state ? i.drift_state : "pc";
+            return obj;
+          });
+
+          //this.members = this.members.concat(list);
+          console.log(this.members)
+        } else {
+          this.isHasColony = false;
+          // this.activeName = '1'
+        }
+      }
+    },
+    // getVrrpInfo() {
+    //   getVrrp().then(res => {
+    //     if (res.success) {
+    //       this.vrIpForm.virtual_ip = res.data.virtual_ip;
+    //       this.vrIpForm.enable = res.data.enable;
+    //     }
+    //   }).catch(e => {
+    //     console.log(e)
+    //   })
+    // },
+    async updateCluster() {
+      if (this.ruleForm.clustername === "") {
+        this.$message({
+          type: "error",
+          message: "闆嗙兢鍚嶇О涓嶈兘涓虹┖"
+        })
+
+        return
+      }
+
+      let res = await updateClusterName({
+        clusterName: this.ruleForm.clustername,
+        virtualIp: this.ruleForm.virtualIp
+      });
+      this.$notify({
+        title: res.success ? "鎴愬姛" : "澶辫触",
+        message: res.msg,
+        type: res.success ? "success" : "error"
+      });
+    },
+    async joinCluster(json) {
+      let res = await joinCluster(json);
+      if (res.success) {
+        this.members = []
+      }
+      this.$notify({
+        title: res.success ? "鎴愬姛" : "澶辫触",
+        message: res.msg,
+        type: res.success ? "success" : "error"
+      });
+    },
+    leave() {
+      this.$confirm(`纭畾閫�鍑洪泦缇ゅ悧?`, {
+        center: true,
+        cancelButtonClass: "comfirm-class-cancle",
+        confirmButtonClass: "comfirm-class-sure"
+      }).then(async () => {
+        let res = await leave();
+        this.$notify({
+          title: res.success ? "鎴愬姛" : "澶辫触",
+          message: res.msg,
+          type: res.success ? "success" : "error"
+        });
+        if (res && res.success) {
+          this.ruleForm.clustername = "";
+          this.ruleForm.clusterpwd = ""
+          this.clusterid = "";
+          this.isHasColony = false;
+          this.activeName = "1";
+          this.members = [];
+          this.innerNodes = [];
+        }
+      }).catch(() => {
+         this.ruleForm.clustername = "";
+          this.ruleForm.clusterpwd = ""
+          this.clusterid = "";
+          this.isHasColony = false;
+          this.activeName = "1";
+          this.members = [];
+          this.innerNodes = [];
+       });
+
+    },
+    joinNode(event, node) {
+      console.log('join', node)
+      let _this = this;
+      this.currentCluster.cluster_id = node.cluster_id;
+      if (this.activeName === "3") {
+        this.manageForm.clustername = node.clusterName;
+        this.clusterid = node.cluster_id;
+        return;
+      }
+      if (this.activeName === "2") {
+        if (_this.showJoinConfirm) return;
+
+        this.$confirm("鏄惁瑕佸姞鍏ヨ妭鐐� " + node.nodeName + "?", "鍔犲叆闆嗙兢", {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "success"
+        })
+          .then(() => {
+            _this.showJoinConfirm = true;
+            let json = {
+              //clusterId: this.currentCluster.cluster_id,
+              clusterId: node.cluster_id,
+              password: this.joinForm.clusterpwd,
+              nodeIps: [node.Address]
+            };
+            this.joinCluster(json).then(() => {
+              _this.showJoinConfirm = false;
+              this.findCluster();
+            }).catch(e => {
+              console.log(e);
+              _this.showJoinConfirm = false;
+            });
+          }).catch(e => {
+            console.log(e)
+          });
+
+        // this.$refs["joinForm"].validate(valid => {
+        //   if (valid) {
+        //     if (_this.showJoinConfirm) return;
+        //     _this.showJoinConfirm = true;
+        //     this.$confirm("鏄惁瑕佸姞鍏ヨ妭鐐� " + node.nodeName + "?", "鍔犲叆闆嗙兢", {
+        //       confirmButtonText: "纭畾",
+        //       cancelButtonText: "鍙栨秷",
+        //       type: "success"
+        //     })
+        //       .then(() => {
+
+        //         console.log(this.currentCluster, '閫夋嫨鐨勯泦缇よ妭鐐�')
+        //         this.join("joinForm");
+        //         _this.showJoinConfirm = false;
+        //       })
+        //       .catch(() => {
+        //         this.$notify({
+        //           type: "info",
+        //           duration: 1000,
+        //           message: "宸插彇娑�"
+        //         });
+        //         _this.showJoinConfirm = false;
+        //       });
+        //   } else {
+        //     console.log("error submit!!");
+        //     return false;
+        //   }
+        // });
+      }
+    },
+    generatePassword() {
+      var chars =
+        "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+      var uuid = [];
+
+      for (let i = 0; i < 6; i++) {
+        uuid[i] = chars[0 | (Math.random() * 50)];
+      }
+
+      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.ruleForm.virtualIp = ip;
+      console.log(this.ruleForm.virtualIp)
+    }
+
+  },
+
+  created() { }
+
+};
+</script>
+<style lang="scss">
+.s-cluster-management {
+  width: 100%;
+  height: 100%;
+  overflow: auto;
+  .el-form-item {
+    width: 500px;
+  }
+  .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before,
+  .el-form-item.is-required:not(.is-no-asterisk)
+    .el-form-item__label-wrap
+    > .el-form-item__label:before {
+    display: none;
+  }
+  .ip-input-comp {
+    width: 400px;
+    max-width: 400px;
+  }
+  .el-button {
+    float: right;
+  }
+  .el-form-item__content {
+    text-align: left;
+
+    input {
+      max-width: 400px !important;
+    }
+  }
+
+  #e-alaycluster,
+  #e-dbcluster {
+    .el-tabs__header {
+      border: 0px solid #dcdfe6;
+      .el-tabs__item {
+        padding: 5px 50px;
+        height: 50px;
+        font-family: PingFangSC-Regular;
+        font-size: 14px;
+        color: #222222;
+        text-align: center;
+        border: 0px solid transparent;
+      }
+      .el-tabs__item:nth-child(2) {
+        padding-left: 50px;
+      }
+      .el-tabs__item:last-child {
+        padding-right: 50px;
+      }
+      .el-tabs__item.is-active {
+        color: #ff7733;
+        font-weight: bold;
+        // border-right-color: #fff;
+        // border-left-color: #fff;
+      }
+      .el-tabs__item:not(.is-disabled):hover {
+        color: #ff7733;
+      }
+    }
+    .el-tabs__active-bar {
+      background-color: #ff7733;
+    }
+    .el-form-item__content {
+      text-align: left;
+      input {
+        max-width: 420px;
+      }
+    }
+  }
+
+  #h-alaycluster {
+    .el-form-item__content {
+      text-align: left;
+      // input {
+      //   max-width: 360px;
+      // }
+    }
+  }
+}
+.ui-top-view {
+  height: 30px;
+  line-height: 30px;
+}
+</style>

--
Gitblit v1.8.0