From 870f8569cf90e24cb8a80ec247f458ff87401f42 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 28 一月 2022 16:21:05 +0800
Subject: [PATCH] 修复系统日志模糊查询功能
---
src/pages/settings/views/clusterManagement.vue | 513 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 407 insertions(+), 106 deletions(-)
diff --git a/src/pages/settings/views/clusterManagement.vue b/src/pages/settings/views/clusterManagement.vue
index dbd06bf..9db717a 100644
--- a/src/pages/settings/views/clusterManagement.vue
+++ b/src/pages/settings/views/clusterManagement.vue
@@ -1,9 +1,13 @@
<template>
<div class="all">
- <div class="cluster-guanli" v-if="showCurCluster">
- <cloud-node :nodes="innerNodes"></cloud-node>
+ <!-- -->
+ <div class="cluster-guanli" v-if="showCurCluster && isHasColony">
+ <!-- <cloud-node :nodes="innerNodes"></cloud-node> -->
+ <net-node :innerNodes="innerNodes"></net-node>
- <div class="bar">
+ <div class="cls-bar">瑙嗛鍒嗘瀽闆嗙兢绠$悊</div>
+
+ <div class="cls-bar">
<div class="title">闆嗙兢鍚嶇О</div>
<div class="input-area">
<div class="text" v-show="!isFillingName">
@@ -23,31 +27,33 @@
>
<span
class="icon iconfont"
+ style="font-size: 18px"
@click="clearInput(1)"
v-show="isFillingName"
- ></span
+ ></span
>
<span
class="icon iconfont"
+ style="font-size: 20px; color: var(--colorCard)"
@click="updateCluster(1)"
v-show="isFillingName"
></span
>
</div>
</div>
- <div class="bar">
+ <div class="cls-bar">
<div class="title">闆嗙兢ID</div>
<div class="input-area">
<div class="text">{{ clusterid }}</div>
</div>
</div>
- <div class="bar">
+ <div class="cls-bar">
<div class="title">闆嗙兢瀵嗙爜</div>
<div class="input-area">
<div class="text">{{ ruleForm.clusterpwd }}</div>
</div>
</div>
- <div class="bar">
+ <div class="cls-bar">
<div class="title">闆嗙兢IP</div>
<div class="input-area">
<div class="text" v-show="!isFillingIp">{{ ruleForm.virtualIp }}</div>
@@ -66,43 +72,57 @@
>
<span
class="icon iconfont"
+ style="font-size: 18px"
@click="clearInput(2)"
v-show="isFillingIp"
- ></span
+ ></span
>
<span
class="icon iconfont"
@click="updateCluster(2)"
+ style="font-size: 20px; color: var(--colorCard)"
v-show="isFillingIp"
></span
>
</div>
</div>
-
- <div class="exit" @click="exitCluster">閫�鍑洪泦缇�</div>
- </div>
-
- <div class="cluster-content">
- <div class="cluster-center" ref="left" v-if="!showCurCluster">
- <div class="menu-item" @click="isCreate = true">鍒涘缓闆嗙兢</div>
- <div class="menu-item" @click="isCreate = false">鍔犲叆宸叉湁闆嗙兢</div>
+ <div class="btns">
+ <div class="ok" @click="updateCluster">淇濆瓨</div>
+ <div class="exit" @click="exitCluster">閫�鍑洪泦缇�</div>
</div>
- <div class="cluster-right" v-if="!showCurCluster">
- <div class="create-new" v-if="isCreate">
- <el-form
- :model="ruleForm"
- :rules="rules"
- ref="ruleForm"
- label-width="150px"
- >
- <el-form-item label="闆嗙兢鍚嶇О" prop="clustername">
+ </div>
+ <!-- !showCurCluster || !isHasColony -->
+ <div class="cluster-content" v-if="!showCurCluster || !isHasColony">
+ <div
+ class="cluster-center"
+ ref="left"
+ v-if="!showCurCluster || !isHasColony"
+ >
+ <div
+ class="menu-item"
+ :class="activePage == i ? 'menu-item-active' : ''"
+ v-for="(item, i) in tabList"
+ :key="i"
+ @click="openRight(i)"
+ >
+ <span class="icon iconfont" v-if="activePage == 0"></span>
+ <span class="icon iconfont" v-if="activePage == 1"></span>
+ {{ item }}
+ </div>
+ </div>
+ <div class="cluster-right" v-if="!showCurCluster || !isHasColony">
+ <div class="create-new" v-if="activePage == 0">
+ <el-form :model="ruleForm" :rules="rules" ref="ruleForm">
+ <el-form-item prop="clustername">
+ <div class="p-title">闆嗙兢鍚嶇О</div>
<el-input
v-model="ruleForm.clustername"
placeholder="鎵嬪姩杈撳叆, 濡傗�滈泦缇鈥�"
size="small"
></el-input>
</el-form-item>
- <el-form-item label="闆嗙兢ID">
+ <el-form-item>
+ <div class="p-title">闆嗙兢ID</div>
<el-input
v-model="clusterid"
placeholder="涓嶅厑璁歌緭鍏�,淇濆瓨鍚庡洖鏄�"
@@ -110,7 +130,8 @@
size="small"
></el-input>
</el-form-item>
- <el-form-item label="闆嗙兢瀵嗙爜" prop="clusterpwd">
+ <el-form-item prop="clusterpwd">
+ <div class="p-title">闆嗙兢瀵嗙爜</div>
<el-input
v-model="ruleForm.clusterpwd"
placeholder="璇疯緭鍏�6浣嶅瘑鐮�,鎴栫偣鍑荤敓鎴�"
@@ -121,7 +142,8 @@
>
</el-input>
</el-form-item>
- <el-form-item label="闆嗙兢IP" prop="virtualIp">
+ <el-form-item prop="virtualIp">
+ <div class="p-title">闆嗙兢IP</div>
<ip-input
:ip="ruleForm.virtualIp"
:on-blur="onIpBlur"
@@ -129,22 +151,26 @@
></ip-input>
</el-form-item>
</el-form>
- <div class="save-btn" @click="saveCluster('ruleForm')">淇濆瓨</div>
+ <div class="btns">
+ <div class="ok" @click="saveCluster('ruleForm')">淇濆瓨</div>
+ </div>
</div>
- <div class="join-exist" v-if="!isCreate">
+
+ <div class="join-exist" v-if="activePage == 1">
<el-form
:model="joinForm"
- :rules="joinRules"
+ :rules="joinExistRules"
ref="joinForm"
class="join-form"
- label-width="150px"
v-loading="joinLoading"
>
- <el-form-item label="闆嗙兢ID" prop="clusterid">
+ <el-form-item prop="clusterid">
+ <div class="p-title">闆嗙兢ID</div>
<el-input v-model="joinForm.clusterid" size="small"></el-input>
</el-form-item>
- <el-form-item label="IP鍦板潃" prop="clusterip">
+ <el-form-item prop="clusterip">
+ <div class="p-title">IP鍦板潃</div>
<el-input
v-model="joinForm.clusterip"
placeholder="璇疯緭鍏ラ泦缇ゅ唴浠绘剰IP鍦板潃"
@@ -152,7 +178,8 @@
autocomplete="new-password"
></el-input>
</el-form-item>
- <el-form-item label="闆嗙兢瀵嗙爜" prop="clusterpwd">
+ <el-form-item prop="clusterpwd">
+ <div class="p-title">闆嗙兢瀵嗙爜</div>
<el-input
v-model="joinForm.clusterpwd"
placeholder="璇疯緭鍏ラ泦缇ゅ瘑鐮�"
@@ -178,8 +205,21 @@
</el-input>
</el-form-item>
</el-form>
-
- <div class="save-btn" @click="join('joinForm')">鍔犲叆闆嗙兢</div>
+ <div class="clu-list">
+ <!-- :class="pickedNodeI == index ? 'clu-item-active' : ''" -->
+ <div
+ class="clu-item"
+ v-for="(item, index) in members"
+ :key="index"
+ @click="pickNode(index)"
+ >
+ <i class="iconfont"></i>
+ {{ item.Address }}
+ </div>
+ </div>
+ <div class="btns">
+ <div class="ok" @click="join('joinForm')">鍔犲叆闆嗙兢</div>
+ </div>
</div>
</div>
</div>
@@ -190,36 +230,37 @@
import {
createSerfCluster,
randomPwd,
+ leave,
search,
getSearchNodes,
stopSearching,
findCluster,
updateClusterName,
joinCluster,
- leave,
- getVrrp,
- setVrrp,
- createESNode,
- addESNode,
- getEsClusterInfo,
} from "@/api/clusterManage";
-import cloudNode from "../components/CloudNode";
-import ipInput from "@/components/subComponents/IPInput";
+// import cloudNode from "../components/CloudNode";
+import NetNode from "../components/NetNode";
+import ipInput from "../components/IPInput";
import { isIPv4 } from "@/scripts/validate";
export default {
data() {
const checkPwd = (rule, value, callback) => {
+ if (value == "") {
+ return callback(new Error("瀵嗙爜涓嶈兘涓虹┖"));
+ }
+ // setTimeout(() => {
+ if (value.length != 6) {
+ callback(new Error("瀵嗙爜搴斾负6浣�!"));
+ } else {
+ callback();
+ }
+ // }, 1000);
+ };
+ const checkID = (rule, value, callback) => {
if (!value) {
return callback(new Error("瀵嗙爜涓嶈兘涓虹┖"));
}
- setTimeout(() => {
- if (value.length != 6) {
- callback(new Error("瀵嗙爜搴斾负6浣�!"));
- } else {
- callback();
- }
- }, 1000);
};
return {
innerNodes: [],
@@ -227,8 +268,10 @@
isFillingName: false,
isFillingIp: false,
inputName: "",
+ activePage: 0,
inputIp: "",
serverIp: "",
+ pickedNodeI: null,
members: [],
virtualIp: "192.168.1.188",
searchDis: false,
@@ -255,38 +298,87 @@
searchNum: "",
scheduleId: "",
isCreate: true,
+ tabList: ["鍒涘缓闆嗙兢", "鍔犲叆宸叉湁闆嗙兢"],
rules: {
clustername: [
- { required: true, message: "璇疯緭鍏ラ泦缇ゅ悕绉�", trigger: "change" },
+ { required: true, message: "璇疯緭鍏ラ泦缇ゅ悕绉�", trigger: "blur" },
],
- clusterpwd: [{ validator: checkPwd, trigger: "change" }],
+ clusterpwd: [{ validator: checkPwd, required: true, trigger: "blur" }],
virtualIp: [{ required: true, validator: isIPv4, trigger: "change" }],
},
- joinRules: {
- clusterid: [
- { required: true, message: "璇疯緭鍏ラ泦缇D", trigger: "change" },
- ],
- clusterip: [{ required: true, validator: isIPv4, trigger: "change" }],
- clusterpwd: [{ validator: checkPwd, trigger: "change" }],
+ joinExistRules: {
+ clusterid: [{ validator: checkID, trigger: "blur" }],
+ clusterip: [{ validator: isIPv4, trigger: "blur" }],
+ clusterpwd: [{ validator: checkPwd, required: true, trigger: "blur" }],
},
};
},
components: {
- cloudNode,
+ // cloudNode,
+ NetNode,
ipInput,
},
mounted() {
this.findCluster();
- let _this = this;
this.intervalTimer = setInterval(() => {
- _this.findCluster();
+ this.findCluster();
}, 30000);
},
beforeDestroy() {
clearInterval(this.intervalTimer);
},
- props: ["barName"],
methods: {
+ pickNode(index) {
+ this.pickedNodeI = index;
+ const node = this.members[index];
+ const h = this.$createElement;
+ // Address: "192.168.20.189:30190"
+ // cluster_id: "5ee1dfa8-e3fb-4d62-8692-388d7632859b"
+ // create_time: ""
+ // id: "DSVAD010120190703"
+ // nodeName: "192.168.20.189:30190"
+ // node_id: "DSVAD010120190703"
+ // role: "pc"
+ this.$msgbox({
+ title: "",
+ message: h(
+ "div",
+ {
+ style:
+ "display: flex; flex-direction: column; justify-content: center; align-items: center;",
+ },
+ [
+ h("span", { class: "icon iconfont warn-icon" }, "\ue71c"),
+ h("span", { class: "warn-title" }, "鍔犲叆闆嗙兢"),
+ h(
+ "span",
+ { class: "warn-dec" },
+ `鎮ㄦ槸鍚﹁鍔犲叆 ${node.Address} 鍚楋紵`
+ ),
+ ]
+ ),
+ showCancelButton: true,
+ showClose: true,
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ customClass: "del-account-message-box",
+ }).then(() => {
+ this.joinLoading = true;
+ let data = {
+ clusterId: node.cluster_id,
+ password: this.joinForm.clusterpwd,
+ nodeIps: [node.Address],
+ };
+ this.joinCluster(data)
+ .then(() => {
+ this.joinLoading = false;
+ this.findCluster();
+ })
+ .catch((e) => {
+ this.joinLoading = false;
+ });
+ });
+ },
async createCluster(json) {
let res = await createSerfCluster(json);
this.$notify({
@@ -323,12 +415,12 @@
async joinCluster(json) {
let res = await joinCluster(json);
if (res.success) {
- this.members = []
+ this.members = [];
}
this.$notify({
title: res.success ? "鎴愬姛" : "澶辫触",
message: res.msg,
- type: res.success ? "success" : "error"
+ type: res.success ? "success" : "error",
});
},
join(formName) {
@@ -336,14 +428,12 @@
this.$refs[formName].validate((valid) => {
if (valid) {
_this.joinLoading = true;
- let nodeIps = _this.members.map((i) => {
- return i.Address;
- });
let data = {
clusterId: _this.joinForm.clusterid,
password: _this.joinForm.clusterpwd,
nodeIps: [_this.joinForm.clusterip],
};
+ debugger;
_this
.joinCluster(data)
.then(() => {
@@ -399,6 +489,9 @@
this.stopSearch();
}, 10 * 1000);
},
+ openRight(i) {
+ this.activePage = i;
+ },
async stopSearch() {
if (!this.loading) {
return true;
@@ -407,7 +500,7 @@
searchNum: this.searchNum,
})
.then((res) => {
- this.loading = false;
+ this.loading = false;
this.searchDis = false;
window.clearInterval(this.scheduleId);
})
@@ -448,12 +541,55 @@
this.ruleForm.clusterpwd = uuid.join("");
},
exitCluster() {
- clearInterval(this.intervalTimer);
- this.showCurCluster = false;
- this.ruleForm.virtualIp = "";
- this.ruleForm.clustername = "";
- this.ruleForm.clusterpwd = "";
- this.clusterid = "";
+ const h = this.$createElement;
+ this.$msgbox({
+ title: "",
+ message: h(
+ "div",
+ {
+ style:
+ "display: flex; flex-direction: column; justify-content: center; align-items: center;",
+ },
+ [
+ h("span", { class: "icon iconfont warn-icon" }, "\ue71c"),
+ h("span", { class: "warn-title" }, "閫�鍑洪泦缇�"),
+ h("span", { class: "warn-dec" }, "纭畾閫�鍑洪泦缇ゅ悧锛�"),
+ ]
+ ),
+ showCancelButton: true,
+ showClose: true,
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ customClass: "del-account-message-box",
+ }).then(
+ // () => {
+ // this.showCurCluster = false;
+ // }
+ async () => {
+ let res = await leave();
+ this.$notify({
+ title: res.success ? "鎴愬姛" : "澶辫触",
+ message: res.msg,
+ type: res.success ? "success" : "error",
+ });
+ if (res && res.success) {
+ clearInterval(this.intervalTimer);
+ this.showCurCluster = false;
+ this.ruleForm.virtualIp = "";
+ this.ruleForm.clustername = "";
+ this.ruleForm.clusterpwd = "";
+ this.clusterid = "";
+ }
+ },
+ (err) => {
+ clearInterval(this.intervalTimer);
+ this.showCurCluster = false;
+ this.ruleForm.virtualIp = "";
+ this.ruleForm.clustername = "";
+ this.ruleForm.clusterpwd = "";
+ this.clusterid = "";
+ }
+ );
},
clearInput(typ) {
if (typ == 1) {
@@ -480,11 +616,10 @@
}
},
onIpBlur(ip) {
- console.log(ip);
this.ruleForm.virtualIp = ip;
},
async updateCluster(v) {
- if (v == 1) {
+ if (v == 1 || v == undefined) {
this.ruleForm.clustername = this.selfForm.clustername;
}
if (this.ruleForm.clustername === "") {
@@ -502,6 +637,7 @@
if (res.success) {
this.findCluster();
}
+
this.$notify({
title: res.success ? "鎴愬姛" : "澶辫触",
message: res.msg,
@@ -550,27 +686,94 @@
<style lang="scss">
.all {
width: 100%;
+ background: #f2f2f7;
}
.cluster-guanli {
margin: 0 auto;
- width: 520px;
- .bar {
- height: 40px;
- background-color: rgba(248, 248, 248, 1);
- margin-bottom: 10px;
+ width: 760px;
+ padding: 0 10px;
+ .btns {
+ margin-top: 30px !important;
+
+ .exit {
+ width: 188px;
+ height: 40px;
+ cursor: pointer;
+ border-radius: 25px;
+ background-color: #fe6d68;
+ color: #fff;
+ line-height: 40px;
+ font-weight: bold;
+ font-size: 16px;
+ margin-left: 60px;
+ margin-top: 0;
+ }
+ }
+
+ .cloud {
+ width: 100%;
+ display: flex;
+ height: 255px;
+ border-radius: 8px;
+ background: linear-gradient(
+ 180deg,
+ #ffffff 0%,
+ rgba(255, 255, 255, 0) 100%
+ );
+ .inner {
+ background: url(/images/settings/easy-cloud.png) no-repeat;
+ background-size: contain;
+ margin: 0 auto;
+ width: 240px;
+ .rect {
+ position: relative;
+ margin: 0;
+ height: 100%;
+ }
+ }
+ }
+ .cls-bar {
+ height: 48px;
+ background-color: #ffffff;
+ margin-bottom: 6px;
display: flex;
box-sizing: border-box;
- padding: 0 20px;
+ padding: 0 30px;
justify-content: space-between;
align-items: center;
+ border-radius: 8px;
+ font-weight: bold;
+ font-size: 14px;
+ color: #333333;
+ .title {
+ font-size: 14px;
+ }
.input-area {
display: flex;
- width: 340px;
+ width: 540px;
height: 30px;
line-height: 30px;
justify-content: inherit;
- // padding: 0 20px;
box-sizing: border-box;
+ background: #f2f2f7;
+ border-radius: 20px;
+ padding: 0 30px;
+ .el-input--mini .el-input__inner {
+ height: 24px;
+ line-height: 24px;
+ /* border: 1px solid transparent; */
+ background: inherit;
+ padding-left: 0;
+ border: none;
+ border-radius: 0px;
+ font-size: 14px;
+ }
+
+ .icon {
+ cursor: pointer;
+ font-size: 14px;
+ margin-left: 10px;
+ }
}
}
.exit {
@@ -583,6 +786,7 @@
line-height: 40px;
font-size: 14px;
margin-top: 20px;
+ cursor: pointer;
}
}
.cluster-content {
@@ -592,6 +796,8 @@
flex: 1;
flex-basis: auto;
box-sizing: border-box;
+ background: #fbfaff;
+
.cluster-center {
height: 100%;
width: 280px;
@@ -599,25 +805,41 @@
box-sizing: border-box;
flex-shrink: 0;
padding: 10px;
- // background-color: lightpink;
+ padding-top: 6px;
+ border-right: 4px solid #f2f2f7;
+ border-left: 4px solid #f2f2f7;
+ border-top: 4px solid #f2f2f7;
.menu-item {
background-color: #f8f8f8;
- height: 40px;
+ cursor: pointer;
+ height: 56px;
margin-bottom: 10px;
border-radius: 8px;
- line-height: 40px;
- font-size: 14px;
+ line-height: 56px;
+ text-align: left;
+ box-sizing: border-box;
+ padding: 0 20px;
+ font-weight: bold;
+ font-size: 16px;
}
+ .menu-item-active {
+ background-color: var(--colorCard);
+ color: white;
+ }
+ // .menu-item:hover {
+ // background-color: var(--colorCard);
+ // color: white;
+ // }
}
.cluster-right {
flex: 1;
flex-basis: auto;
overflow: auto;
- // background-color: rgba(240, 242, 245, 1);
box-sizing: border-box;
position: relative;
+ border-top: 4px solid #f2f2f7;
padding: 20px 40px;
- // .create-new .join-exist {
+ padding-top: 16px;
.el-form-item.is-required:not(.is-no-asterisk)
> .el-form-item__label:before,
.el-form-item.is-required:not(.is-no-asterisk)
@@ -625,28 +847,107 @@
> .el-form-item__label:before {
display: none;
}
- .el-form-item {
- margin-bottom: 10px;
- height: 50px;
- background: #f8f8f8;
- padding: 4px 20px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- border-radius: 10px;
- .el-form-item__label {
+ .clu-list {
+ background: #f2f2f7;
+ border-radius: 8px;
+ margin-top: 20px;
+ .clu-item {
+ border-radius: 8px;
+ height: 40px;
+ cursor: pointer;
+ line-height: 40px;
text-align: left;
- line-height: 42px;
+ padding: 0 20px;
+ font-size: 14px;
+ .iconfont {
+ margin-right: 8px;
+ }
+ }
+ .clu-item:hover {
+ background: var(--colorCard);
+ color: #fff;
+ }
+ .clu-item-active {
+ background: var(--colorCard);
+ color: #fff;
}
}
.el-form-item__content {
- line-height: 40px;
- position: relative;
- font-size: 14px;
+ line-height: 48px;
+ display: flex;
+ align-items: center;
+ background: #f2f2f7;
+ border-radius: 8px;
+ padding: 0 15px 0 20px;
+ .el-select-dropdown__item {
+ color: #333333;
+ height: 32px;
+ font-size: 12px;
+ line-height: 32px;
+ text-align: center;
+ }
+ .el-popper {
+ margin-top: 0;
+ background: #fbfaff;
+ box-shadow: 0px 2px 6px rgb(0 0 0 / 18%);
+ border-radius: 2px;
+ .el-select-dropdown__item.hover,
+ .el-select-dropdown__item:hover {
+ background-color: #f2f2f7;
+ color: var(--colorCard);
+ }
+ }
+ }
+ .el-form-item__error {
+ line-height: 0.7;
+ left: 20px;
+ }
+ .el-form-item {
+ margin-bottom: 16px;
+ .el-input__inner {
+ background-color: #ffffff;
+ border: 2px solid transparent;
+ border-radius: 20px;
+ height: 32px;
+ line-height: 32px;
+ padding: 0 15px;
+ font-size: 14px;
+ font-weight: bold;
+ }
+ .el-input__inner:focus {
+ border: 2px solid var(--colorCard);
+ }
+ .el-input__inner::placeholder {
+ color: #c0c4cc;
+ font-size: 12px;
+ font-weight: normal;
+ }
+ .el-select {
+ width: 100%;
+ }
+ .el-select .el-input .el-select__caret {
+ color: #333333;
+ font-size: 14px;
+ font-weight: 600;
+ }
+ }
+ .p-title {
+ height: 48px;
+ text-align: left;
+ line-height: 48px;
+ width: 90px;
+ font-weight: 600;
}
.ip-input-container {
max-width: none !important;
+ height: 32px;
+ line-height: normal;
+ box-sizing: border-box;
+ // background-color: #f2f2f7;
+ text-align: left;
+ border-radius: 20px;
+ border: 2px solid transparent;
}
- // }
.ntp-bar {
height: 40px;
background-color: rgba(248, 248, 248, 1);
--
Gitblit v1.8.0