mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-03 04:10:27 +08:00
商业版支持L2节点
This commit is contained in:
@@ -33,7 +33,7 @@ func (this *DetailAction) RunGet(params struct {
|
|||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
node := nodeResp.Node
|
var node = nodeResp.Node
|
||||||
if node == nil {
|
if node == nil {
|
||||||
this.WriteString("找不到要操作的节点")
|
this.WriteString("找不到要操作的节点")
|
||||||
return
|
return
|
||||||
@@ -197,7 +197,7 @@ func (this *DetailAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 运行状态
|
// 运行状态
|
||||||
status := &nodeconfigs.NodeStatus{}
|
var status = &nodeconfigs.NodeStatus{}
|
||||||
if len(node.StatusJSON) > 0 {
|
if len(node.StatusJSON) > 0 {
|
||||||
err = json.Unmarshal(node.StatusJSON, &status)
|
err = json.Unmarshal(node.StatusJSON, &status)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -285,6 +285,8 @@ func (this *DetailAction) RunGet(params struct {
|
|||||||
"isOn": node.IsOn,
|
"isOn": node.IsOn,
|
||||||
"records": recordMaps,
|
"records": recordMaps,
|
||||||
"routes": routeMaps,
|
"routes": routeMaps,
|
||||||
|
"level": node.Level,
|
||||||
|
"levelInfo": nodeconfigs.FindNodeLevel(int(node.Level)),
|
||||||
|
|
||||||
"status": maps.Map{
|
"status": maps.Map{
|
||||||
"isActive": status.IsActive,
|
"isActive": status.IsActive,
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ func InitNodeInfo(parentAction *actionutils.ParentAction, nodeId int64) (*pb.Nod
|
|||||||
"isOn": node.IsOn,
|
"isOn": node.IsOn,
|
||||||
"isUp": node.IsUp,
|
"isUp": node.IsUp,
|
||||||
"group": groupMap,
|
"group": groupMap,
|
||||||
|
"level": node.Level,
|
||||||
}
|
}
|
||||||
var clusterId int64 = 0
|
var clusterId int64 = 0
|
||||||
if node.NodeCluster != nil {
|
if node.NodeCluster != nil {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
node := nodeResp.Node
|
var node = nodeResp.Node
|
||||||
if node == nil {
|
if node == nil {
|
||||||
this.WriteString("找不到要操作的节点")
|
this.WriteString("找不到要操作的节点")
|
||||||
return
|
return
|
||||||
@@ -97,7 +97,7 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var m = maps.Map{
|
var nodeMap = maps.Map{
|
||||||
"id": node.Id,
|
"id": node.Id,
|
||||||
"name": node.Name,
|
"name": node.Name,
|
||||||
"ipAddresses": ipAddressMaps,
|
"ipAddresses": ipAddressMaps,
|
||||||
@@ -105,15 +105,16 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
"isOn": node.IsOn,
|
"isOn": node.IsOn,
|
||||||
"group": groupMap,
|
"group": groupMap,
|
||||||
"region": regionMap,
|
"region": regionMap,
|
||||||
|
"level": node.Level,
|
||||||
}
|
}
|
||||||
|
|
||||||
if node.NodeCluster != nil {
|
if node.NodeCluster != nil {
|
||||||
m["primaryCluster"] = maps.Map{
|
nodeMap["primaryCluster"] = maps.Map{
|
||||||
"id": node.NodeCluster.Id,
|
"id": node.NodeCluster.Id,
|
||||||
"name": node.NodeCluster.Name,
|
"name": node.NodeCluster.Name,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m["primaryCluster"] = nil
|
nodeMap["primaryCluster"] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(node.SecondaryNodeClusters) > 0 {
|
if len(node.SecondaryNodeClusters) > 0 {
|
||||||
@@ -124,12 +125,12 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
"name": cluster.Name,
|
"name": cluster.Name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
m["secondaryClusters"] = secondaryClusterMaps
|
nodeMap["secondaryClusters"] = secondaryClusterMaps
|
||||||
} else {
|
} else {
|
||||||
m["secondaryClusters"] = []interface{}{}
|
nodeMap["secondaryClusters"] = []interface{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Data["node"] = m
|
this.Data["node"] = nodeMap
|
||||||
|
|
||||||
this.Show()
|
this.Show()
|
||||||
}
|
}
|
||||||
@@ -144,11 +145,12 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
PrimaryClusterId int64
|
PrimaryClusterId int64
|
||||||
SecondaryClusterIds []byte
|
SecondaryClusterIds []byte
|
||||||
IsOn bool
|
IsOn bool
|
||||||
|
Level int32
|
||||||
|
|
||||||
Must *actions.Must
|
Must *actions.Must
|
||||||
}) {
|
}) {
|
||||||
// 创建日志
|
// 创建日志
|
||||||
defer this.CreateLog(oplogs.LevelInfo, "修改节点 %d", params.NodeId)
|
defer this.CreateLog(oplogs.LevelInfo, "修改节点 %d 基本信息", params.NodeId)
|
||||||
|
|
||||||
if params.NodeId <= 0 {
|
if params.NodeId <= 0 {
|
||||||
this.Fail("要操作的节点不存在")
|
this.Fail("要操作的节点不存在")
|
||||||
@@ -194,6 +196,7 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
NodeClusterId: params.PrimaryClusterId,
|
NodeClusterId: params.PrimaryClusterId,
|
||||||
SecondaryNodeClusterIds: secondaryClusterIds,
|
SecondaryNodeClusterIds: secondaryClusterIds,
|
||||||
IsOn: params.IsOn,
|
IsOn: params.IsOn,
|
||||||
|
Level: params.Level,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package cluster
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
|
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
@@ -29,6 +30,7 @@ func (this *NodesAction) RunGet(params struct {
|
|||||||
InstalledState int
|
InstalledState int
|
||||||
ActiveState int
|
ActiveState int
|
||||||
Keyword string
|
Keyword string
|
||||||
|
Level int32
|
||||||
|
|
||||||
CpuOrder string
|
CpuOrder string
|
||||||
MemoryOrder string
|
MemoryOrder string
|
||||||
@@ -40,6 +42,7 @@ func (this *NodesAction) RunGet(params struct {
|
|||||||
this.Data["installState"] = params.InstalledState
|
this.Data["installState"] = params.InstalledState
|
||||||
this.Data["activeState"] = params.ActiveState
|
this.Data["activeState"] = params.ActiveState
|
||||||
this.Data["keyword"] = params.Keyword
|
this.Data["keyword"] = params.Keyword
|
||||||
|
this.Data["level"] = params.Level
|
||||||
|
|
||||||
// 集群是否已经设置了线路
|
// 集群是否已经设置了线路
|
||||||
clusterDNSResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterDNS(this.AdminContext(), &pb.FindEnabledNodeClusterDNSRequest{NodeClusterId: params.ClusterId})
|
clusterDNSResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterDNS(this.AdminContext(), &pb.FindEnabledNodeClusterDNSRequest{NodeClusterId: params.ClusterId})
|
||||||
@@ -63,6 +66,7 @@ func (this *NodesAction) RunGet(params struct {
|
|||||||
NodeClusterId: params.ClusterId,
|
NodeClusterId: params.ClusterId,
|
||||||
NodeGroupId: params.GroupId,
|
NodeGroupId: params.GroupId,
|
||||||
NodeRegionId: params.RegionId,
|
NodeRegionId: params.RegionId,
|
||||||
|
Level: params.Level,
|
||||||
InstallState: types.Int32(params.InstalledState),
|
InstallState: types.Int32(params.InstalledState),
|
||||||
ActiveState: types.Int32(params.ActiveState),
|
ActiveState: types.Int32(params.ActiveState),
|
||||||
Keyword: params.Keyword,
|
Keyword: params.Keyword,
|
||||||
@@ -81,6 +85,7 @@ func (this *NodesAction) RunGet(params struct {
|
|||||||
NodeClusterId: params.ClusterId,
|
NodeClusterId: params.ClusterId,
|
||||||
NodeGroupId: params.GroupId,
|
NodeGroupId: params.GroupId,
|
||||||
NodeRegionId: params.RegionId,
|
NodeRegionId: params.RegionId,
|
||||||
|
Level: params.Level,
|
||||||
InstallState: types.Int32(params.InstalledState),
|
InstallState: types.Int32(params.InstalledState),
|
||||||
ActiveState: types.Int32(params.ActiveState),
|
ActiveState: types.Int32(params.ActiveState),
|
||||||
Keyword: params.Keyword,
|
Keyword: params.Keyword,
|
||||||
@@ -210,6 +215,7 @@ func (this *NodesAction) RunGet(params struct {
|
|||||||
"group": groupMap,
|
"group": groupMap,
|
||||||
"region": regionMap,
|
"region": regionMap,
|
||||||
"dnsRouteNames": dnsRouteNames,
|
"dnsRouteNames": dnsRouteNames,
|
||||||
|
"level": node.Level,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
this.Data["nodes"] = nodeMaps
|
this.Data["nodes"] = nodeMaps
|
||||||
@@ -257,6 +263,12 @@ func (this *NodesAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
this.Data["regions"] = regionMaps
|
this.Data["regions"] = regionMaps
|
||||||
|
|
||||||
|
// 级别
|
||||||
|
this.Data["levels"] = []maps.Map{}
|
||||||
|
if teaconst.IsPlus {
|
||||||
|
this.Data["levels"] = nodeconfigs.FindAllNodeLevels()
|
||||||
|
}
|
||||||
|
|
||||||
// 记录最近访问
|
// 记录最近访问
|
||||||
_, err = this.RPC().LatestItemRPC().IncreaseLatestItem(this.AdminContext(), &pb.IncreaseLatestItemRequest{
|
_, err = this.RPC().LatestItemRPC().IncreaseLatestItem(this.AdminContext(), &pb.IncreaseLatestItemRequest{
|
||||||
ItemType: "cluster",
|
ItemType: "cluster",
|
||||||
|
|||||||
31
web/public/js/components/node/node-level-selector.js
Normal file
31
web/public/js/components/node/node-level-selector.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// 节点级别选择器
|
||||||
|
Vue.component("node-level-selector", {
|
||||||
|
props: ["v-node-level"],
|
||||||
|
data: function () {
|
||||||
|
let levelCode = this.vNodeLevel
|
||||||
|
if (levelCode == null || levelCode < 1) {
|
||||||
|
levelCode = 1
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
levels: [
|
||||||
|
{
|
||||||
|
name: "边缘节点",
|
||||||
|
code: 1,
|
||||||
|
description: "普通的边缘节点。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "L2节点",
|
||||||
|
code: 2,
|
||||||
|
description: "特殊的边缘节点,同时负责同组上一级节点的回源。"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
levelCode: levelCode
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `<div>
|
||||||
|
<select class="ui dropdown auto-width" name="level" v-model="levelCode">
|
||||||
|
<option v-for="level in levels" :value="level.code">{{level.name}}</option>
|
||||||
|
</select>
|
||||||
|
<p class="comment" v-if="typeof(levels[levelCode - 1]) != null">{{levels[levelCode - 1].description}}</p>
|
||||||
|
</div>`
|
||||||
|
})
|
||||||
@@ -14,20 +14,20 @@
|
|||||||
<p class="comment">每行一个节点IP。</p>
|
<p class="comment">每行一个节点IP。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td>所属区域</td>
|
|
||||||
<td>
|
|
||||||
<node-region-selector></node-region-selector>
|
|
||||||
<p class="comment">设置区域后才能根据区域进行流量统计和计费。</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>所属分组</td>
|
<td>所属分组</td>
|
||||||
<td>
|
<td>
|
||||||
<node-group-selector :v-cluster-id="clusterId"></node-group-selector>
|
<node-group-selector :v-cluster-id="clusterId"></node-group-selector>
|
||||||
<p class="comment">仅用来筛选服务。</p>
|
<p class="comment">用来筛选节点<span v-if="teaIsPlus">,同时可以在分组中设置二级缓存节点</span>。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>所属区域</td>
|
||||||
|
<td>
|
||||||
|
<node-region-selector></node-region-selector>
|
||||||
|
<p class="comment">设置区域后可以根据区域进行流量统计和计费。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<submit-btn></submit-btn>
|
<submit-btn></submit-btn>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -41,20 +41,20 @@
|
|||||||
<p class="comment">当前节点对应的DNS线路,可用线路是根据集群设置的域名获取的,注意DNS服务商可能对这些线路有其他限制。</p>
|
<p class="comment">当前节点对应的DNS线路,可用线路是根据集群设置的域名获取的,注意DNS服务商可能对这些线路有其他限制。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td>所属区域</td>
|
|
||||||
<td>
|
|
||||||
<node-region-selector></node-region-selector>
|
|
||||||
<p class="comment">设置区域后才能根据区域进行流量统计和计费。</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>所属分组</td>
|
<td>所属分组</td>
|
||||||
<td>
|
<td>
|
||||||
<node-group-selector :v-cluster-id="clusterId"></node-group-selector>
|
<node-group-selector :v-cluster-id="clusterId"></node-group-selector>
|
||||||
<p class="comment">仅用来筛选服务。</p>
|
<p class="comment">用来筛选节点<span v-if="teaIsPlus">,同时可以在分组中设置二级缓存节点</span>。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>所属区域</td>
|
||||||
|
<td>
|
||||||
|
<node-region-selector></node-region-selector>
|
||||||
|
<p class="comment">设置区域后可以根据区域进行流量统计和计费。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<more-options-indicator></more-options-indicator>
|
<more-options-indicator></more-options-indicator>
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
<second-menu>
|
<second-menu>
|
||||||
<a :href="'/clusters/cluster/nodes?clusterId=' + clusterId" class="item">{{currentClusterName}}</a>
|
<a :href="'/clusters/cluster/nodes?clusterId=' + clusterId" class="item">{{currentClusterName}}</a>
|
||||||
<raquo-item></raquo-item>
|
<raquo-item></raquo-item>
|
||||||
<a :href="'/clusters/cluster/nodes?clusterId=' + clusterId + '&groupId=' + node.group.id" v-if="node.group != null" class="item" style="padding-left: 0">{{node.group.name}}</a>
|
<a :href="'/clusters/cluster/nodes?clusterId=' + clusterId + '&groupId=' + node.group.id" v-if="node.group != null" class="item">{{node.group.name}}</a>
|
||||||
<raquo-item v-if="node.group != null"></raquo-item>
|
<raquo-item v-if="node.group != null"></raquo-item>
|
||||||
<menu-item :href="'/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id">{{node.name}}</menu-item>
|
<menu-item :href="'/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id">
|
||||||
|
{{node.name}}
|
||||||
|
<sup v-if="node.level > 1"> <span class="blue">L{{node.level}}</span></sup>
|
||||||
|
</menu-item>
|
||||||
<raquo-item></raquo-item>
|
<raquo-item></raquo-item>
|
||||||
<menu-item :href="'/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id" code="node" v-if="!teaIsPlus">节点详情</menu-item>
|
<menu-item :href="'/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id" code="node" v-if="!teaIsPlus">节点详情</menu-item>
|
||||||
<menu-item :href="'/clusters/cluster/node/boards?clusterId=' + clusterId + '&nodeId=' + node.id" code="board" v-if="teaIsPlus">节点看板</menu-item>
|
<menu-item :href="'/clusters/cluster/node/boards?clusterId=' + clusterId + '&nodeId=' + node.id" code="board" v-if="teaIsPlus">节点看板</menu-item>
|
||||||
<menu-item :href="'/clusters/cluster/node/detail?clusterId=' + clusterId + '&nodeId=' + node.id" code="node" v-if="teaIsPlus">节点详情</menu-item>
|
<menu-item :href="'/clusters/cluster/node/detail?clusterId=' + clusterId + '&nodeId=' + node.id" code="node" v-if="teaIsPlus">节点详情</menu-item>
|
||||||
<menu-item :href="'/clusters/cluster/node/logs?clusterId=' + clusterId + '&nodeId=' + node.id" code="log">运行日志</menu-item>
|
<menu-item :href="'/clusters/cluster/node/logs?clusterId=' + clusterId + '&nodeId=' + node.id" code="log">运行日志</menu-item>
|
||||||
<menu-item :href="'/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + node.id" code="install">安装节点</menu-item>
|
<menu-item :href="'/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + node.id" code="install">安装节点</menu-item>
|
||||||
<menu-item :href="'/clusters/cluster/node/update?clusterId=' + clusterId + '&nodeId=' + node.id" code="update">修改设置</menu-item>
|
<menu-item :href="'/clusters/cluster/node/update?clusterId=' + clusterId + '&nodeId=' + node.id" code="update">节点设置</menu-item>
|
||||||
</second-menu>
|
</second-menu>
|
||||||
@@ -84,6 +84,12 @@
|
|||||||
<span v-else class="disabled">没有设置分组。</span>
|
<span v-else class="disabled">没有设置分组。</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr v-if="teaIsPlus">
|
||||||
|
<td>级别</td>
|
||||||
|
<td>
|
||||||
|
<span :class="{blue: node.levelInfo.code > 1}">{{node.levelInfo.name}}</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><more-options-indicator>更多选项</more-options-indicator></td>
|
<td colspan="2"><more-options-indicator>更多选项</more-options-indicator></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -30,24 +30,30 @@
|
|||||||
<p class="comment">用于访问节点和域名解析等。</p>
|
<p class="comment">用于访问节点和域名解析等。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td>所属区域</td>
|
|
||||||
<td>
|
|
||||||
<node-region-selector :v-region="node.region"></node-region-selector>
|
|
||||||
<p class="comment">设置区域后才能根据区域进行流量统计和计费。</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>所属分组</td>
|
<td>所属分组</td>
|
||||||
<td>
|
<td>
|
||||||
<node-group-selector :v-cluster-id="clusterId" :v-group="node.group"></node-group-selector>
|
<node-group-selector :v-cluster-id="clusterId" :v-group="node.group"></node-group-selector>
|
||||||
<p class="comment">仅用来筛选服务。</p>
|
<p class="comment">用来筛选节点<span v-if="teaIsPlus">,同时可以在分组中设置二级缓存节点</span>。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>所属区域</td>
|
||||||
|
<td>
|
||||||
|
<node-region-selector :v-region="node.region"></node-region-selector>
|
||||||
|
<p class="comment">设置区域后可以根据区域进行流量统计和计费。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tbody v-show="moreOptionsVisible">
|
<tbody v-show="moreOptionsVisible">
|
||||||
|
<tr v-if="teaIsPlus">
|
||||||
|
<td>级别</td>
|
||||||
|
<td>
|
||||||
|
<node-level-selector :v-node-level="node.level"></node-level-selector>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>是否启用</td>
|
<td>是否启用</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -31,12 +31,18 @@
|
|||||||
<option value="2">未安装</option>
|
<option value="2">未安装</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="ui field" v-if="teaIsPlus && levels.length > 0">
|
||||||
|
<select class="ui dropdown" name="level" v-model="level">
|
||||||
|
<option value="0">[级别]</option>
|
||||||
|
<option v-for="levelInfo in levels" :value="levelInfo.code">{{levelInfo.name}}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<input type="text" name="keyword" placeholder="关键词" v-model="keyword" style="width:10em"/>
|
<input type="text" name="keyword" placeholder="关键词" v-model="keyword" style="width:10em"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<button class="ui button" type="submit">搜索</button>
|
<button class="ui button" type="submit">搜索</button>
|
||||||
<a :href="'/clusters/cluster/nodes?clusterId=' + clusterId" v-if="regionId >0 || groupId > 0 || installState > 0 || activeState > 0 || keyword.length > 0">[清除条件]</a>
|
<a :href="'/clusters/cluster/nodes?clusterId=' + clusterId" v-if="regionId > 0 || groupId > 0 || installState > 0 || activeState > 0 || keyword.length > 0 || level > 0">[清除条件]</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@@ -66,7 +72,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tr v-for="node in nodes">
|
<tr v-for="node in nodes">
|
||||||
<td><a :href="'/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id">{{node.name}}</a>
|
<td><a :href="'/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id">{{node.name}}<sup v-if="node.level > 1"><span class="blue"> L{{node.level}}</span></sup></a>
|
||||||
<div v-if="node.region != null">
|
<div v-if="node.region != null">
|
||||||
<grey-label>区域:{{node.region.name}}</grey-label>
|
<grey-label>区域:{{node.region.name}}</grey-label>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<second-menu>
|
<second-menu>
|
||||||
<menu-item :href="'/clusters/cluster?clusterId=' + clusterId">{{currentClusterName}}</menu-item>
|
<menu-item :href="'/clusters/cluster?clusterId=' + clusterId">{{currentClusterName}}</menu-item>
|
||||||
<span class="disabled item" style="padding: 0">»</span>
|
<raquo-item></raquo-item>
|
||||||
<menu-item :href="'/clusters/cluster/settings?clusterId=' + clusterId">设置</menu-item>
|
<menu-item :href="'/clusters/cluster/settings?clusterId=' + clusterId">集群设置</menu-item>
|
||||||
<span class="disabled item" style="padding: 0" v-if="leftMenuActiveItem != null">»</span>
|
<raquo-item></raquo-item>
|
||||||
<a class="item active" v-if="leftMenuActiveItem != null" :href="leftMenuActiveItem.url">"{{leftMenuActiveItem.name}}"设置</a>
|
<a class="item active" v-if="leftMenuActiveItem != null" :href="leftMenuActiveItem.url">"{{leftMenuActiveItem.name}}"设置</a>
|
||||||
</second-menu>
|
</second-menu>
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
<span v-if="task.type == 'configChanged'">同步配置</span>
|
<span v-if="task.type == 'configChanged'">同步配置</span>
|
||||||
<span v-if="task.type == 'ipItemChanged'">同步IP名单</span>
|
<span v-if="task.type == 'ipItemChanged'">同步IP名单</span>
|
||||||
<span v-if="task.type == 'scriptsChanged'">同步脚本</span>
|
<span v-if="task.type == 'scriptsChanged'">同步脚本</span>
|
||||||
|
<span v-if="task.type == 'nodeLevelChanged'">同步L2节点</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<span v-if="task.isDone" class="red">{{task.error}}</span>
|
<span v-if="task.isDone" class="red">{{task.error}}</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user