节点IP地址可以设置专属集群

This commit is contained in:
GoEdgeLab
2023-03-01 11:38:21 +08:00
parent 1faed99e5b
commit 1e596a216f
13 changed files with 265 additions and 33 deletions

View File

@@ -0,0 +1,53 @@
Vue.component("node-ip-address-clusters-selector", {
props: ["vClusters"],
mounted: function () {
this.checkClusters()
},
data: function () {
let clusters = this.vClusters
if (clusters == null) {
clusters = []
}
return {
clusters: clusters,
hasCheckedCluster: false,
clustersVisible: false
}
},
methods: {
checkClusters: function () {
let that = this
let b = false
this.clusters.forEach(function (cluster) {
if (cluster.isChecked) {
b = true
}
})
this.hasCheckedCluster = b
return b
},
changeCluster: function (cluster) {
cluster.isChecked = !cluster.isChecked
this.checkClusters()
},
showClusters: function () {
this.clustersVisible = !this.clustersVisible
}
},
template: `<div>
<span v-if="!hasCheckedCluster">默认用于所有集群 &nbsp; <a href="" @click.prevent="showClusters">修改 <i class="icon angle" :class="{down: !clustersVisible, up:clustersVisible}"></i></a></span>
<div v-if="hasCheckedCluster">
<span v-for="cluster in clusters" class="ui label basic small" v-if="cluster.isChecked">{{cluster.name}}</span> &nbsp; <a href="" @click.prevent="showClusters">修改 <i class="icon angle" :class="{down: !clustersVisible, up:clustersVisible}"></i></a>
<p class="comment">当前IP仅在所选集群中有效。</p>
</div>
<div v-show="clustersVisible">
<div class="ui divider"></div>
<checkbox v-for="cluster in clusters" :v-value="cluster.id" :value="cluster.isChecked ? cluster.id : 0" style="margin-right: 1em" @input="changeCluster(cluster)" name="clusterIds">
{{cluster.name}}
</checkbox>
</div>
</div>`
})

View File

@@ -1,10 +1,16 @@
// 节点IP地址管理标签形式
Vue.component("node-ip-addresses-box", {
props: ["v-ip-addresses", "role"],
props: ["v-ip-addresses", "role", "v-node-id"],
data: function () {
let nodeId = this.vNodeId
if (nodeId == null) {
nodeId = 0
}
return {
ipAddresses: (this.vIpAddresses == null) ? [] : this.vIpAddresses,
supportThresholds: this.role != "ns"
supportThresholds: this.role != "ns",
nodeId: nodeId
}
},
methods: {
@@ -13,7 +19,7 @@ Vue.component("node-ip-addresses-box", {
window.UPDATING_NODE_IP_ADDRESS = null
let that = this;
teaweb.popup("/nodes/ipAddresses/createPopup?supportThresholds=" + (this.supportThresholds ? 1 : 0), {
teaweb.popup("/nodes/ipAddresses/createPopup?nodeId=" + this.nodeId + "&supportThresholds=" + (this.supportThresholds ? 1 : 0), {
callback: function (resp) {
that.ipAddresses.push(resp.data.ipAddress);
},
@@ -24,10 +30,10 @@ Vue.component("node-ip-addresses-box", {
// 修改地址
updateIPAddress: function (index, address) {
window.UPDATING_NODE_IP_ADDRESS = address
window.UPDATING_NODE_IP_ADDRESS = teaweb.clone(address)
let that = this;
teaweb.popup("/nodes/ipAddresses/updatePopup?supportThresholds=" + (this.supportThresholds ? 1 : 0), {
teaweb.popup("/nodes/ipAddresses/updatePopup?nodeId=" + this.nodeId + "&supportThresholds=" + (this.supportThresholds ? 1 : 0), {
callback: function (resp) {
Vue.set(that.ipAddresses, index, resp.data.ipAddress);
},
@@ -58,6 +64,11 @@ Vue.component("node-ip-addresses-box", {
<span class="small red" v-if="!address.isUp" title="已下线">[down]</span>
<span class="small" v-if="address.thresholds != null && address.thresholds.length > 0">[{{address.thresholds.length}}个阈值]</span>
&nbsp;
<span v-if="address.clusters != null && address.clusters.length > 0">
&nbsp; <span class="small grey">专属集群:[</span><span v-for="(cluster, index) in address.clusters" class="small grey">{{cluster.name}}<span v-if="index < address.clusters.length - 1"></span></span><span class="small grey">]</span>
&nbsp;
</span>
<a href="" title="修改" @click.prevent="updateIPAddress(index, address)"><i class="icon pencil small"></i></a>
<a href="" title="删除" @click.prevent="removeIPAddress(index)"><i class="icon remove"></i></a>
</div>

View File

@@ -22,7 +22,7 @@
<td>
<div v-if="node.ipAddresses.length > 0">
<div>
<div v-for="(address, index) in node.ipAddresses" class="ui label tiny basic">
<div v-for="(address, index) in node.ipAddresses" class="ui label small basic">
<span v-if="address.ip.indexOf(':') > -1" class="grey">[IPv6]</span> {{address.ip}}
<span class="small red" v-if="address.originIP != null && address.originIP.length > 0 && address.originIP != address.ip">(原:{{address.originIP}}</span>
<span class="small grey" v-if="address.name.length > 0">{{address.name}}<span v-if="!address.canAccess">,不可访问</span></span>
@@ -30,6 +30,10 @@
<span class="small red" v-if="!address.isOn">[off]</span>
<span class="small red" v-if="!address.isUp">[down]</span>
<span class="small" v-if="address.thresholds != null && address.thresholds.length > 0">[阈值]</span>
<span v-if="address.clusters.length > 0">
&nbsp; <span class="small grey">专属集群:[</span><span v-for="(cluster, index) in address.clusters" class="small grey">{{cluster.name}}<span v-if="index < address.clusters.length - 1"></span></span><span class="small grey">]</span>
</span>
</div>
</div>
</div>
@@ -51,6 +55,7 @@
<table class="ui table celled">
<thead class="full-width">
<tr>
<th>集群</th>
<th>记录名</th>
<th>记录类型</th>
<th>线路</th>
@@ -59,6 +64,7 @@
</thead>
<tr v-for="record in node.records">
<td>{{record.clusterName}}</td>
<td>{{record.name}}</td>
<td>{{record.type}}</td>
<td>

View File

@@ -26,7 +26,7 @@
<tr>
<td>IP地址 *</td>
<td>
<node-ip-addresses-box :v-ip-addresses="ipAddresses"></node-ip-addresses-box>
<node-ip-addresses-box :v-ip-addresses="ipAddresses" :v-node-id="node.id"></node-ip-addresses-box>
<p class="comment">用于访问节点和域名解析等。</p>
</td>
</tr>

View File

@@ -12,7 +12,7 @@
</td>
</tr>
<tr>
<td>是否可以访问</td>
<td>允许公开访问</td>
<td>
<div class="ui checkbox">
<input type="checkbox" name="canAccess" value="1" checked="checked"/>
@@ -46,6 +46,10 @@
<node-ip-address-thresholds-box></node-ip-address-thresholds-box>
</td>
</tr>
<tr v-show="clusters != null && clusters.length > 0">
<td>专属集群</td>
<td><node-ip-address-clusters-selector :v-clusters="clusters"></node-ip-address-clusters-selector></td>
</tr>
</tbody>
</table>
<submit-btn></submit-btn>

View File

@@ -14,7 +14,7 @@
</td>
</tr>
<tr>
<td>是否可以访问</td>
<td>允许公开访问</td>
<td>
<div class="ui checkbox">
<input type="checkbox" name="canAccess" value="1" v-model="address.canAccess"/>
@@ -28,7 +28,7 @@
</tr>
<tbody v-show="moreOptionsVisible">
<tr>
<td>是否启用</td>
<td>启用当前IP</td>
<td>
<div class="ui checkbox">
<input type="checkbox" name="isOn" value="1" v-model="address.isOn"/>
@@ -58,6 +58,10 @@
<node-ip-address-thresholds-box :v-thresholds="address.thresholds"></node-ip-address-thresholds-box>
</td>
</tr>
<tr v-show="clusters != null && clusters.length > 0">
<td>专属集群</td>
<td><node-ip-address-clusters-selector :v-clusters="clusters"></node-ip-address-clusters-selector></td>
</tr>
</tbody>
</table>
<submit-btn></submit-btn>

View File

@@ -4,5 +4,15 @@ Tea.context(function () {
this.address = window.parent.UPDATING_NODE_IP_ADDRESS
if (this.address != null) {
this.address.isUp = (this.address.isUp ? 1 : 0)
// 专属集群
if (this.address.clusters != null) {
let selectedClusterIds = this.address.clusters.map(function (cluster) {
return cluster.id
})
this.clusters.forEach(function (cluster) {
cluster.isChecked = selectedClusterIds.$contains(cluster.id)
})
}
}
})