mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-05 06:10:26 +08:00
[域名解析]优化解析状态显示
This commit is contained in:
@@ -39,6 +39,7 @@ func (this *ClusterAction) RunGet(params struct {
|
|||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
domainName := ""
|
||||||
dnsMap := maps.Map{
|
dnsMap := maps.Map{
|
||||||
"dnsName": dnsResp.Name,
|
"dnsName": dnsResp.Name,
|
||||||
"domainId": 0,
|
"domainId": 0,
|
||||||
@@ -48,6 +49,7 @@ func (this *ClusterAction) RunGet(params struct {
|
|||||||
"providerTypeName": "",
|
"providerTypeName": "",
|
||||||
}
|
}
|
||||||
if dnsResp.Domain != nil {
|
if dnsResp.Domain != nil {
|
||||||
|
domainName = dnsResp.Domain.Name
|
||||||
dnsMap["domainId"] = dnsResp.Domain.Id
|
dnsMap["domainId"] = dnsResp.Domain.Id
|
||||||
dnsMap["domainName"] = dnsResp.Domain.Name
|
dnsMap["domainName"] = dnsResp.Domain.Name
|
||||||
}
|
}
|
||||||
@@ -69,6 +71,23 @@ func (this *ClusterAction) RunGet(params struct {
|
|||||||
for _, node := range nodesResp.Nodes {
|
for _, node := range nodesResp.Nodes {
|
||||||
if len(node.Routes) > 0 {
|
if len(node.Routes) > 0 {
|
||||||
for _, route := range node.Routes {
|
for _, route := range node.Routes {
|
||||||
|
// 检查是否已解析
|
||||||
|
isResolved := false
|
||||||
|
if cluster.DnsDomainId > 0 && len(cluster.DnsName) > 0 && len(node.IpAddr) > 0 {
|
||||||
|
checkResp, err := this.RPC().DNSDomainRPC().ExistDNSDomainRecord(this.AdminContext(), &pb.ExistDNSDomainRecordRequest{
|
||||||
|
DnsDomainId: cluster.DnsDomainId,
|
||||||
|
Name: cluster.DnsName,
|
||||||
|
Type: "A",
|
||||||
|
Route: route.Code,
|
||||||
|
Value: node.IpAddr,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isResolved = checkResp.IsOk
|
||||||
|
}
|
||||||
|
|
||||||
nodeMaps = append(nodeMaps, maps.Map{
|
nodeMaps = append(nodeMaps, maps.Map{
|
||||||
"id": node.Id,
|
"id": node.Id,
|
||||||
"name": node.Name,
|
"name": node.Name,
|
||||||
@@ -78,6 +97,7 @@ func (this *ClusterAction) RunGet(params struct {
|
|||||||
"code": route.Code,
|
"code": route.Code,
|
||||||
},
|
},
|
||||||
"clusterId": node.NodeClusterId,
|
"clusterId": node.NodeClusterId,
|
||||||
|
"isResolved": isResolved,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -90,6 +110,7 @@ func (this *ClusterAction) RunGet(params struct {
|
|||||||
"code": "",
|
"code": "",
|
||||||
},
|
},
|
||||||
"clusterId": node.NodeClusterId,
|
"clusterId": node.NodeClusterId,
|
||||||
|
"isResolved": false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,10 +124,27 @@ func (this *ClusterAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
serverMaps := []maps.Map{}
|
serverMaps := []maps.Map{}
|
||||||
for _, server := range serversResp.Servers {
|
for _, server := range serversResp.Servers {
|
||||||
|
// 检查是否已解析
|
||||||
|
isResolved := false
|
||||||
|
if cluster.DnsDomainId > 0 && len(cluster.DnsName) > 0 && len(server.DnsName) > 0 && len(domainName) > 0 {
|
||||||
|
checkResp, err := this.RPC().DNSDomainRPC().ExistDNSDomainRecord(this.AdminContext(), &pb.ExistDNSDomainRecordRequest{
|
||||||
|
DnsDomainId: cluster.DnsDomainId,
|
||||||
|
Name: server.DnsName,
|
||||||
|
Type: "CNAME",
|
||||||
|
Value: cluster.DnsName + "." + domainName,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isResolved = checkResp.IsOk
|
||||||
|
}
|
||||||
|
|
||||||
serverMaps = append(serverMaps, maps.Map{
|
serverMaps = append(serverMaps, maps.Map{
|
||||||
"id": server.Id,
|
"id": server.Id,
|
||||||
"name": server.Name,
|
"name": server.Name,
|
||||||
"dnsName": server.DnsName,
|
"dnsName": server.DnsName,
|
||||||
|
"isResolved": isResolved,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
this.Data["servers"] = serverMaps
|
this.Data["servers"] = serverMaps
|
||||||
|
|||||||
68
internal/web/actions/default/dns/domains/clustersPopup.go
Normal file
68
internal/web/actions/default/dns/domains/clustersPopup.go
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package domains
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ClustersPopupAction struct {
|
||||||
|
actionutils.ParentAction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ClustersPopupAction) Init() {
|
||||||
|
this.Nav("", "", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ClustersPopupAction) RunGet(params struct {
|
||||||
|
DomainId int64
|
||||||
|
}) {
|
||||||
|
// 域名信息
|
||||||
|
domainResp, err := this.RPC().DNSDomainRPC().FindEnabledBasicDNSDomain(this.AdminContext(), &pb.FindEnabledBasicDNSDomainRequest{
|
||||||
|
DnsDomainId: params.DomainId,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
domain := domainResp.DnsDomain
|
||||||
|
if domain == nil {
|
||||||
|
this.NotFound("dnsDomain", params.DomainId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Data["domain"] = domain.Name
|
||||||
|
|
||||||
|
// 集群
|
||||||
|
clustersResp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClustersWithDNSDomainId(this.AdminContext(), &pb.FindAllEnabledNodeClustersWithDNSDomainIdRequest{DnsDomainId: params.DomainId})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
clusterMaps := []maps.Map{}
|
||||||
|
for _, cluster := range clustersResp.NodeClusters {
|
||||||
|
isOk := false
|
||||||
|
if len(cluster.Name) > 0 {
|
||||||
|
checkResp, err := this.RPC().DNSDomainRPC().ExistDNSDomainRecord(this.AdminContext(), &pb.ExistDNSDomainRecordRequest{
|
||||||
|
DnsDomainId: params.DomainId,
|
||||||
|
Name: cluster.DnsName,
|
||||||
|
Type: "A",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isOk = checkResp.IsOk
|
||||||
|
}
|
||||||
|
|
||||||
|
clusterMaps = append(clusterMaps, maps.Map{
|
||||||
|
"id": cluster.Id,
|
||||||
|
"name": cluster.Name,
|
||||||
|
"dnsName": cluster.DnsName,
|
||||||
|
"isOk": isOk,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.Data["clusters"] = clusterMaps
|
||||||
|
|
||||||
|
this.Show()
|
||||||
|
}
|
||||||
113
internal/web/actions/default/dns/domains/nodesPopup.go
Normal file
113
internal/web/actions/default/dns/domains/nodesPopup.go
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
package domains
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NodesPopupAction struct {
|
||||||
|
actionutils.ParentAction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *NodesPopupAction) Init() {
|
||||||
|
this.Nav("", "", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *NodesPopupAction) RunGet(params struct {
|
||||||
|
DomainId int64
|
||||||
|
}) {
|
||||||
|
// 域名信息
|
||||||
|
domainResp, err := this.RPC().DNSDomainRPC().FindEnabledBasicDNSDomain(this.AdminContext(), &pb.FindEnabledBasicDNSDomainRequest{
|
||||||
|
DnsDomainId: params.DomainId,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
domain := domainResp.DnsDomain
|
||||||
|
if domain == nil {
|
||||||
|
this.NotFound("dnsDomain", params.DomainId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Data["domain"] = domain.Name
|
||||||
|
|
||||||
|
// 集群
|
||||||
|
clusterMaps := []maps.Map{}
|
||||||
|
clustersResp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClustersWithDNSDomainId(this.AdminContext(), &pb.FindAllEnabledNodeClustersWithDNSDomainIdRequest{DnsDomainId: params.DomainId})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, cluster := range clustersResp.NodeClusters {
|
||||||
|
// 节点DNS解析记录
|
||||||
|
nodesResp, err := this.RPC().NodeRPC().FindAllEnabledNodesDNSWithClusterId(this.AdminContext(), &pb.FindAllEnabledNodesDNSWithClusterIdRequest{NodeClusterId: cluster.Id})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nodeMaps := []maps.Map{}
|
||||||
|
for _, node := range nodesResp.Nodes {
|
||||||
|
if len(node.Routes) > 0 {
|
||||||
|
for _, route := range node.Routes {
|
||||||
|
// 检查是否有域名解析记录
|
||||||
|
isOk := false
|
||||||
|
if len(route.Name) > 0 && len(node.IpAddr) > 0 && len(cluster.DnsName) > 0 {
|
||||||
|
checkResp, err := this.RPC().DNSDomainRPC().ExistDNSDomainRecord(this.AdminContext(), &pb.ExistDNSDomainRecordRequest{
|
||||||
|
DnsDomainId: params.DomainId,
|
||||||
|
Name: cluster.DnsName,
|
||||||
|
Type: "A",
|
||||||
|
Route: route.Code,
|
||||||
|
Value: node.IpAddr,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isOk = checkResp.IsOk
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeMaps = append(nodeMaps, maps.Map{
|
||||||
|
"id": node.Id,
|
||||||
|
"name": node.Name,
|
||||||
|
"ipAddr": node.IpAddr,
|
||||||
|
"route": maps.Map{
|
||||||
|
"name": route.Name,
|
||||||
|
"code": route.Code,
|
||||||
|
},
|
||||||
|
"clusterId": node.NodeClusterId,
|
||||||
|
"isOk": isOk,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
nodeMaps = append(nodeMaps, maps.Map{
|
||||||
|
"id": node.Id,
|
||||||
|
"name": node.Name,
|
||||||
|
"ipAddr": node.IpAddr,
|
||||||
|
"route": maps.Map{
|
||||||
|
"name": "",
|
||||||
|
"code": "",
|
||||||
|
},
|
||||||
|
"clusterId": node.NodeClusterId,
|
||||||
|
"isOk": false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(nodeMaps) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
clusterMaps = append(clusterMaps, maps.Map{
|
||||||
|
"id": cluster.Id,
|
||||||
|
"name": cluster.Name,
|
||||||
|
"dnsName": cluster.DnsName,
|
||||||
|
"nodes": nodeMaps,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.Data["clusters"] = clusterMaps
|
||||||
|
|
||||||
|
this.Show()
|
||||||
|
}
|
||||||
83
internal/web/actions/default/dns/domains/serversPopup.go
Normal file
83
internal/web/actions/default/dns/domains/serversPopup.go
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
package domains
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ServersPopupAction struct {
|
||||||
|
actionutils.ParentAction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ServersPopupAction) Init() {
|
||||||
|
this.Nav("", "", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ServersPopupAction) RunGet(params struct {
|
||||||
|
DomainId int64
|
||||||
|
}) {
|
||||||
|
// 域名信息
|
||||||
|
domainResp, err := this.RPC().DNSDomainRPC().FindEnabledBasicDNSDomain(this.AdminContext(), &pb.FindEnabledBasicDNSDomainRequest{
|
||||||
|
DnsDomainId: params.DomainId,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
domain := domainResp.DnsDomain
|
||||||
|
if domain == nil {
|
||||||
|
this.NotFound("dnsDomain", params.DomainId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Data["domain"] = domain.Name
|
||||||
|
|
||||||
|
// 服务信息
|
||||||
|
clusterMaps := []maps.Map{}
|
||||||
|
clustersResp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClustersWithDNSDomainId(this.AdminContext(), &pb.FindAllEnabledNodeClustersWithDNSDomainIdRequest{DnsDomainId: params.DomainId})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, cluster := range clustersResp.NodeClusters {
|
||||||
|
serversResp, err := this.RPC().ServerRPC().FindAllEnabledServersDNSWithClusterId(this.AdminContext(), &pb.FindAllEnabledServersDNSWithClusterIdRequest{NodeClusterId: cluster.Id})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
serverMaps := []maps.Map{}
|
||||||
|
for _, server := range serversResp.Servers {
|
||||||
|
isOk := false
|
||||||
|
if len(cluster.DnsName) > 0 && len(server.DnsName) > 0 {
|
||||||
|
checkResp, err := this.RPC().DNSDomainRPC().ExistDNSDomainRecord(this.AdminContext(), &pb.ExistDNSDomainRecordRequest{
|
||||||
|
DnsDomainId: params.DomainId,
|
||||||
|
Name: server.DnsName,
|
||||||
|
Type: "CNAME",
|
||||||
|
Value: cluster.DnsName + "." + domain.Name,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isOk = checkResp.IsOk
|
||||||
|
}
|
||||||
|
|
||||||
|
serverMaps = append(serverMaps, maps.Map{
|
||||||
|
"id": server.Id,
|
||||||
|
"name": server.Name,
|
||||||
|
"dnsName": server.DnsName,
|
||||||
|
"isOk": isOk,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
clusterMaps = append(clusterMaps, maps.Map{
|
||||||
|
"id": cluster.Id,
|
||||||
|
"name": cluster.Name,
|
||||||
|
"dnsName": cluster.DnsName,
|
||||||
|
"servers": serverMaps,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.Data["clusters"] = clusterMaps
|
||||||
|
|
||||||
|
this.Show()
|
||||||
|
}
|
||||||
@@ -45,6 +45,9 @@ func init() {
|
|||||||
Post("/sync", new(domains.SyncAction)).
|
Post("/sync", new(domains.SyncAction)).
|
||||||
Get("/routesPopup", new(domains.RoutesPopupAction)).
|
Get("/routesPopup", new(domains.RoutesPopupAction)).
|
||||||
GetPost("/selectPopup", new(domains.SelectPopupAction)).
|
GetPost("/selectPopup", new(domains.SelectPopupAction)).
|
||||||
|
Get("/clustersPopup", new(domains.ClustersPopupAction)).
|
||||||
|
Get("/nodesPopup", new(domains.NodesPopupAction)).
|
||||||
|
Get("/serversPopup", new(domains.ServersPopupAction)).
|
||||||
EndData().
|
EndData().
|
||||||
|
|
||||||
// 问题修复
|
// 问题修复
|
||||||
|
|||||||
@@ -69,6 +69,9 @@ func (this *ProviderAction) RunGet(params struct {
|
|||||||
"serversChanged": domain.ServersChanged,
|
"serversChanged": domain.ServersChanged,
|
||||||
"countNodeRecords": domain.CountNodeRecords,
|
"countNodeRecords": domain.CountNodeRecords,
|
||||||
"nodesChanged": domain.NodesChanged,
|
"nodesChanged": domain.NodesChanged,
|
||||||
|
"countClusters": domain.CountNodeClusters,
|
||||||
|
"countAllNodes": domain.CountAllNodes,
|
||||||
|
"countAllServers": domain.CountAllServers,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
this.Data["domains"] = domainMaps
|
this.Data["domains"] = domainMaps
|
||||||
|
|||||||
@@ -21,6 +21,16 @@ func (this *CreateAction) Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *CreateAction) RunGet(params struct{}) {
|
func (this *CreateAction) RunGet(params struct{}) {
|
||||||
|
// 审核中的数量
|
||||||
|
countAuditingResp, err := this.RPC().ServerRPC().CountAllEnabledServersMatch(this.AdminContext(), &pb.CountAllEnabledServersMatchRequest{
|
||||||
|
AuditingFlag: 1,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.Data["countAuditing"] = countAuditingResp.Count
|
||||||
|
|
||||||
// 所有集群
|
// 所有集群
|
||||||
resp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClusters(this.AdminContext(), &pb.FindAllEnabledNodeClustersRequest{})
|
resp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClusters(this.AdminContext(), &pb.FindAllEnabledNodeClustersRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -26,6 +26,6 @@ Vue.component("checkbox", {
|
|||||||
},
|
},
|
||||||
template: `<div class="ui checkbox">
|
template: `<div class="ui checkbox">
|
||||||
<input type="checkbox" :name="name" :value="elementValue" :id="elementId" @change="change" v-model="newValue"/>
|
<input type="checkbox" :name="name" :value="elementValue" :id="elementId" @change="change" v-model="newValue"/>
|
||||||
<label :for="elementId"><slot></slot></label>
|
<label :for="elementId" style="font-size: 0.85em!important;"><slot></slot></label>
|
||||||
</div>`
|
</div>`
|
||||||
})
|
})
|
||||||
@@ -44,10 +44,12 @@ Vue.component("popup-icon", {
|
|||||||
props: ["title", "href", "height"],
|
props: ["title", "href", "height"],
|
||||||
methods: {
|
methods: {
|
||||||
clickPrevent: function () {
|
clickPrevent: function () {
|
||||||
|
if (this.href != null && this.href.length > 0) {
|
||||||
teaweb.popup(this.href, {
|
teaweb.popup(this.href, {
|
||||||
height: this.height
|
height: this.height
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
template: `<span><slot></slot> <a href="" :title="title" @click.prevent="clickPrevent"><i class="icon clone outline small"></i></a></span>`
|
template: `<span><slot></slot> <a href="" :title="title" @click.prevent="clickPrevent"><i class="icon clone outline small"></i></a></span>`
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -54,6 +54,7 @@
|
|||||||
<th>记录类型</th>
|
<th>记录类型</th>
|
||||||
<th>记录值</th>
|
<th>记录值</th>
|
||||||
<th>线路</th>
|
<th>线路</th>
|
||||||
|
<th>状态</th>
|
||||||
<th class="two op">操作</th>
|
<th class="two op">操作</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -72,6 +73,10 @@
|
|||||||
<span v-if="node.route.code.length > 0">{{node.route.name}}</span>
|
<span v-if="node.route.code.length > 0">{{node.route.name}}</span>
|
||||||
<link-red v-else title="点击设置" @click.prevent="updateNode(node.id)">没有设置</link-red>
|
<link-red v-else title="点击设置" @click.prevent="updateNode(node.id)">没有设置</link-red>
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<span class="green" v-if="node.isResolved">已解析</span>
|
||||||
|
<span v-else class="red">未解析</span>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<link-popup @click.prevent="updateNode(node.id)">修改</link-popup>
|
<link-popup @click.prevent="updateNode(node.id)">修改</link-popup>
|
||||||
</td>
|
</td>
|
||||||
@@ -87,6 +92,7 @@
|
|||||||
<th>子域名</th>
|
<th>子域名</th>
|
||||||
<th>记录类型</th>
|
<th>记录类型</th>
|
||||||
<th>记录值</th>
|
<th>记录值</th>
|
||||||
|
<th>状态</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tr v-for="server in servers">
|
<tr v-for="server in servers">
|
||||||
@@ -97,5 +103,9 @@
|
|||||||
<span v-if="dnsInfo.domainName.length > 0"><var>{{dnsInfo.dnsName}}</var>.{{dnsInfo.domainName}}.</span>
|
<span v-if="dnsInfo.domainName.length > 0"><var>{{dnsInfo.dnsName}}</var>.{{dnsInfo.domainName}}.</span>
|
||||||
<link-red title="点击设置" v-else @click.prevent="updateCluster(cluster.id)">没有设置</link-red>
|
<link-red title="点击设置" v-else @click.prevent="updateCluster(cluster.id)">没有设置</link-red>
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<span class="green" v-if="server.isResolved">已解析</span>
|
||||||
|
<span v-else class="red">未解析</span>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
20
web/views/@default/dns/domains/clustersPopup.html
Normal file
20
web/views/@default/dns/domains/clustersPopup.html
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{$layout "layout_popup"}
|
||||||
|
|
||||||
|
<h3>使用域名"{{domain}}"的集群</h3>
|
||||||
|
<table class="ui table selectable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>集群</th>
|
||||||
|
<th>域名</th>
|
||||||
|
<th class="width10">解析状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr v-for="cluster in clusters">
|
||||||
|
<td>{{cluster.name}}<a :href="'/clusters/cluster?clusterId=' + cluster.id" target="_blank"><link-icon></link-icon></a> </td>
|
||||||
|
<td>{{cluster.dnsName}}.{{domain}}</td>
|
||||||
|
<td>
|
||||||
|
<span class="green" v-if="cluster.isOk">已解析</span>
|
||||||
|
<span class="red" v-else>未解析</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
41
web/views/@default/dns/domains/nodesPopup.html
Normal file
41
web/views/@default/dns/domains/nodesPopup.html
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{$layout "layout_popup"}
|
||||||
|
|
||||||
|
<h3>使用域名"{{domain}}"的节点</h3>
|
||||||
|
<form class="ui form">
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
<input type="text" placeholder="关键词" v-model="keyword"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<select class="ui dropdown auto-width" v-model="status">
|
||||||
|
<option value="">[全部状态]</option>
|
||||||
|
<option value="ok">已解析</option>
|
||||||
|
<option value="notOk">未解析</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div class="ui divider"></div>
|
||||||
|
<table class="ui table selectable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>集群</th>
|
||||||
|
<th>节点</th>
|
||||||
|
<th>子域名</th>
|
||||||
|
<th>线路</th>
|
||||||
|
<th>IP</th>
|
||||||
|
<th class="width10">解析状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr v-for="node in nodes">
|
||||||
|
<td>{{node.cluster.name}}<a :href="'/clusters/cluster?clusterId=' + node.cluster.id" target="_blank"><link-icon></link-icon></a> </td>
|
||||||
|
<td>{{node.name}}<a :href="'/clusters/cluster/node?clusterId=' + node.cluster.id + '&nodeId=' + node.id" target="_blank"><link-icon></link-icon></a></td>
|
||||||
|
<td>{{node.cluster.dnsName}}</td>
|
||||||
|
<td>{{node.route.name}}</td>
|
||||||
|
<td>{{node.ipAddr}}</td>
|
||||||
|
<td>
|
||||||
|
<span class="green" v-if="node.isOk">已解析</span>
|
||||||
|
<span class="red" v-else>未解析</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
45
web/views/@default/dns/domains/nodesPopup.js
Normal file
45
web/views/@default/dns/domains/nodesPopup.js
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
Tea.context(function () {
|
||||||
|
this.keyword = ""
|
||||||
|
this.status = ""
|
||||||
|
|
||||||
|
let allNodes = []
|
||||||
|
this.clusters.forEach(function (cluster) {
|
||||||
|
let nodes = cluster.nodes
|
||||||
|
nodes.forEach(function (node) {
|
||||||
|
node.cluster = cluster
|
||||||
|
allNodes.push(node)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
this.nodes = allNodes
|
||||||
|
|
||||||
|
this.$delay(function () {
|
||||||
|
this.$watch("keyword", function () {
|
||||||
|
this.reloadNodes()
|
||||||
|
})
|
||||||
|
this.$watch("status", function () {
|
||||||
|
this.reloadNodes()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
this.reloadNodes = function () {
|
||||||
|
let that = this
|
||||||
|
this.nodes = allNodes.$copy().$findAll(function (k, v) {
|
||||||
|
if (that.keyword.length > 0
|
||||||
|
&& !teaweb.match(v.cluster.name, that.keyword)
|
||||||
|
&& !teaweb.match(v.cluster.dnsName, that.keyword)
|
||||||
|
&& !teaweb.match(v.name, that.keyword)
|
||||||
|
&& !teaweb.match(v.ipAddr, that.keyword)
|
||||||
|
&& !teaweb.match(v.route.name, that.keyword)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (that.status == "ok" && !v.isOk) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (that.status == "notOk" && v.isOk) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
39
web/views/@default/dns/domains/serversPopup.html
Normal file
39
web/views/@default/dns/domains/serversPopup.html
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{$layout "layout_popup"}
|
||||||
|
|
||||||
|
<h3>使用域名"{{domain}}"的节点</h3>
|
||||||
|
<form class="ui form">
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
<input type="text" placeholder="关键词" v-model="keyword"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<select class="ui dropdown auto-width" v-model="status">
|
||||||
|
<option value="">[全部状态]</option>
|
||||||
|
<option value="ok">已解析</option>
|
||||||
|
<option value="notOk">未解析</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div class="ui divider"></div>
|
||||||
|
<table class="ui table selectable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>集群</th>
|
||||||
|
<th>服务</th>
|
||||||
|
<th>子域名</th>
|
||||||
|
<th>CNAME</th>
|
||||||
|
<th class="width10">解析状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr v-for="server in servers">
|
||||||
|
<td>{{server.cluster.name}}<a :href="'/clusters/cluster?clusterId=' + server.cluster.id" target="_blank"><link-icon></link-icon></a> </td>
|
||||||
|
<td>{{server.name}}<a :href="'/servers/server?clusterId=' + server.cluster.id + '&serverId=' + server.id" target="_blank"><link-icon></link-icon></a></td>
|
||||||
|
<td>{{server.cluster.dnsName}}</td>
|
||||||
|
<td>{{server.dnsName}}</td>
|
||||||
|
<td>
|
||||||
|
<span class="green" v-if="server.isOk">已解析</span>
|
||||||
|
<span class="red" v-else>未解析</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
44
web/views/@default/dns/domains/serversPopup.js
Normal file
44
web/views/@default/dns/domains/serversPopup.js
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
Tea.context(function () {
|
||||||
|
this.keyword = ""
|
||||||
|
this.status = ""
|
||||||
|
|
||||||
|
let allServers = []
|
||||||
|
this.clusters.forEach(function (cluster) {
|
||||||
|
let servers = cluster.servers
|
||||||
|
servers.forEach(function (server) {
|
||||||
|
server.cluster = cluster
|
||||||
|
allServers.push(server)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
this.servers = allServers
|
||||||
|
|
||||||
|
this.$delay(function () {
|
||||||
|
this.$watch("keyword", function () {
|
||||||
|
this.reloadServers()
|
||||||
|
})
|
||||||
|
this.$watch("status", function () {
|
||||||
|
this.reloadServers()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
this.reloadServers = function () {
|
||||||
|
let that = this
|
||||||
|
this.servers = allServers.$copy().$findAll(function (k, v) {
|
||||||
|
if (that.keyword.length > 0
|
||||||
|
&& !teaweb.match(v.cluster.name, that.keyword)
|
||||||
|
&& !teaweb.match(v.cluster.dnsName, that.keyword)
|
||||||
|
&& !teaweb.match(v.name, that.keyword)
|
||||||
|
&& !teaweb.match(v.dnsName, that.keyword)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (that.status == "ok" && !v.isOk) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (that.status == "notOk" && v.isOk) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -52,9 +52,10 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>域名</th>
|
<th>域名</th>
|
||||||
<th class="width10 center">线路</th>
|
<th class="center" style="width: 7em">线路</th>
|
||||||
<th class="width10 center">节点域名</th>
|
<th class="center" style="width: 6em">集群</th>
|
||||||
<th class="width10 center">服务域名</th>
|
<th class="center" style="width: 7em">节点域名</th>
|
||||||
|
<th class="center" style="width: 7em">服务域名</th>
|
||||||
<th>数据更新时间</th>
|
<th>数据更新时间</th>
|
||||||
<th class="center width10">状态</th>
|
<th class="center width10">状态</th>
|
||||||
<th class="three op">操作</th>
|
<th class="three op">操作</th>
|
||||||
@@ -63,15 +64,19 @@
|
|||||||
<tr v-for="(domain, index) in domains">
|
<tr v-for="(domain, index) in domains">
|
||||||
<td>{{domain.name}}</td>
|
<td>{{domain.name}}</td>
|
||||||
<td class="center">
|
<td class="center">
|
||||||
<a href="" v-if="domain.countRoutes > 0" @click.prevent="showRoutes(domain.id)">{{domain.countRoutes}}个</a>
|
<a href="" v-if="domain.countRoutes > 0" @click.prevent="showRoutes(domain.id)">{{domain.countRoutes}}个<popup-icon></popup-icon></a>
|
||||||
<span v-else class="disabled">0个</span>
|
<span v-else class="disabled">0个</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="center">
|
<td class="center">
|
||||||
<span v-if="domain.countNodeRecords > 0">{{domain.countNodeRecords}}个</span>
|
<a href="" v-if="domain.countClusters > 0" @click.prevent="viewClusters(domain.id)">{{domain.countClusters}}<popup-icon></popup-icon></a>
|
||||||
<span v-else class="disabled">0个</span>
|
<span v-else class="disabled">0个</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="center">
|
<td class="center">
|
||||||
<span v-if="domain.countServerRecords > 0">{{domain.countServerRecords}}个</span>
|
<a href="" v-if="domain.countAllNodes > 0" @click.prevent="viewNodes(domain.id)">{{domain.countNodeRecords}}/{{domain.countAllNodes}}个<popup-icon></popup-icon></a>
|
||||||
|
<span v-else class="disabled">0个</span>
|
||||||
|
</td>
|
||||||
|
<td class="center">
|
||||||
|
<a href="" v-if="domain.countAllServers > 0" @click.prevent="viewServers(domain.id)">{{domain.countServerRecords}}/{{domain.countAllServers}}个<popup-icon></popup-icon></a>
|
||||||
<span v-else class="disabled">0个</span>
|
<span v-else class="disabled">0个</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -73,4 +73,19 @@ Tea.context(function () {
|
|||||||
this.showRoutes = function (domainId) {
|
this.showRoutes = function (domainId) {
|
||||||
teaweb.popup("/dns/domains/routesPopup?domainId=" + domainId)
|
teaweb.popup("/dns/domains/routesPopup?domainId=" + domainId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.viewClusters = function (domainId) {
|
||||||
|
teaweb.popup("/dns/domains/clustersPopup?domainId=" + domainId)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.viewNodes = function (domainId) {
|
||||||
|
teaweb.popup("/dns/domains/nodesPopup?domainId=" + domainId, {
|
||||||
|
width: "50em",
|
||||||
|
height: "30em"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.viewServers = function (domainId) {
|
||||||
|
teaweb.popup("/dns/domains/serversPopup?domainId=" + domainId)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user