diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index 87cde058..f7cfec41 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -306,6 +306,11 @@ func (this *RPCClient) pickConn() *grpc.ClientConn { if len(availableConns) > 0 { return availableConns[rands.Int(0, len(availableConns)-1)] } + + // 关闭 + for _, conn := range this.conns { + _ = conn.Close() + } } // 重新初始化 diff --git a/internal/web/actions/default/dns/domainOptions.go b/internal/web/actions/default/dns/domainOptions.go new file mode 100644 index 00000000..4cae7ba8 --- /dev/null +++ b/internal/web/actions/default/dns/domainOptions.go @@ -0,0 +1,39 @@ +package dns + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" +) + +// 域名列表选项 +type DomainOptionsAction struct { + actionutils.ParentAction +} + +func (this *DomainOptionsAction) RunPost(params struct { + ProviderId int64 +}) { + domainsResp, err := this.RPC().DNSDomainRPC().FindAllEnabledBasicDNSDomainsWithDNSProviderId(this.AdminContext(), &pb.FindAllEnabledBasicDNSDomainsWithDNSProviderIdRequest{ + DnsProviderId: params.ProviderId, + }) + if err != nil { + this.ErrorPage(err) + return + } + domainMaps := []maps.Map{} + for _, domain := range domainsResp.DnsDomains { + // 未开启的先跳过 + if !domain.IsOn { + continue + } + + domainMaps = append(domainMaps, maps.Map{ + "id": domain.Id, + "name": domain.Name, + }) + } + this.Data["domains"] = domainMaps + + this.Success() +} diff --git a/internal/web/actions/default/dns/domains/routesPopup.go b/internal/web/actions/default/dns/domains/routesPopup.go new file mode 100644 index 00000000..406b297e --- /dev/null +++ b/internal/web/actions/default/dns/domains/routesPopup.go @@ -0,0 +1,30 @@ +package domains + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" +) + +type RoutesPopupAction struct { + actionutils.ParentAction +} + +func (this *RoutesPopupAction) Init() { + this.Nav("", "", "") +} + +func (this *RoutesPopupAction) RunGet(params struct { + DomainId int64 +}) { + routesResp, err := this.RPC().DNSDomainRPC().FindAllDNSDomainRoutes(this.AdminContext(), &pb.FindAllDNSDomainRoutesRequest{DnsDomainId: params.DomainId}) + if err != nil { + this.ErrorPage(err) + return + } + if len(routesResp.Routes) == 0 { + routesResp.Routes = []string{} + } + this.Data["routes"] = routesResp.Routes + + this.Show() +} diff --git a/internal/web/actions/default/dns/domains/sync.go b/internal/web/actions/default/dns/domains/sync.go new file mode 100644 index 00000000..6a693c56 --- /dev/null +++ b/internal/web/actions/default/dns/domains/sync.go @@ -0,0 +1,33 @@ +package domains + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" +) + +type SyncAction struct { + actionutils.ParentAction +} + +func (this *SyncAction) RunPost(params struct { + DomainId int64 +}) { + // 记录日志 + this.CreateLog(oplogs.LevelInfo, "同步DNS域名数据 %d", params.DomainId) + + // 执行同步 + resp, err := this.RPC().DNSDomainRPC().SyncDNSDomainData(this.AdminContext(), &pb.SyncDNSDomainDataRequest{DnsDomainId: params.DomainId}) + if err != nil { + this.ErrorPage(err) + return + } + if resp.IsOk { + this.Success() + } else { + this.Data["shouldFix"] = resp.ShouldFix + this.Fail(resp.Error) + } + + this.Success() +} diff --git a/internal/web/actions/default/dns/domains/updatePopup.go b/internal/web/actions/default/dns/domains/updatePopup.go index 3d9b0cd1..f7a34112 100644 --- a/internal/web/actions/default/dns/domains/updatePopup.go +++ b/internal/web/actions/default/dns/domains/updatePopup.go @@ -1,6 +1,14 @@ package domains -import "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/domains/domainutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" + "strings" +) type UpdatePopupAction struct { actionutils.ParentAction @@ -10,6 +18,62 @@ func (this *UpdatePopupAction) Init() { this.Nav("", "", "") } -func (this *UpdatePopupAction) RunGet(params struct{}) { +func (this *UpdatePopupAction) RunGet(params struct { + DomainId int64 +}) { + domainResp, err := this.RPC().DNSDomainRPC().FindEnabledDNSDomain(this.AdminContext(), &pb.FindEnabledDNSDomainRequest{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"] = maps.Map{ + "id": domain.Id, + "name": domain.Name, + "isOn": domain.IsOn, + } + this.Show() } + +func (this *UpdatePopupAction) RunPost(params struct { + DomainId int64 + Name string + IsOn bool + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + // TODO 检查DomainId + + // 记录日志 + this.CreateLog(oplogs.LevelInfo, "修改管理域名到DNS服务商 %d", params.DomainId) + + params.Must. + Field("name", params.Name). + Require("请输入域名") + + // 校验域名 + domain := strings.ToLower(params.Name) + domain = strings.Replace(domain, " ", "", -1) + if !domainutils.ValidateDomainFormat(domain) { + this.Fail("域名格式不正确,请修改后重新提交") + } + + _, err := this.RPC().DNSDomainRPC().UpdateDNSDomain(this.AdminContext(), &pb.UpdateDNSDomainRequest{ + DnsDomainId: params.DomainId, + Name: domain, + IsOn: params.IsOn, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/dns/index.go b/internal/web/actions/default/dns/index.go index 3439231c..00144d95 100644 --- a/internal/web/actions/default/dns/index.go +++ b/internal/web/actions/default/dns/index.go @@ -1,6 +1,10 @@ package dns -import "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" +) type IndexAction struct { actionutils.ParentAction @@ -11,5 +15,66 @@ func (this *IndexAction) Init() { } func (this *IndexAction) RunGet(params struct{}) { + countResp, err := this.RPC().NodeClusterRPC().CountAllEnabledNodeClusters(this.AdminContext(), &pb.CountAllEnabledNodeClustersRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + page := this.NewPage(countResp.Count) + this.Data["page"] = page.AsHTML() + + clustersResp, err := this.RPC().NodeClusterRPC().ListEnabledNodeClusters(this.AdminContext(), &pb.ListEnabledNodeClustersRequest{ + Offset: page.Offset, + Size: page.Size, + }) + if err != nil { + this.ErrorPage(err) + return + } + clusterMaps := []maps.Map{} + for _, cluster := range clustersResp.Clusters { + domainId := cluster.DnsDomainId + domainName := "" + providerId := int64(0) + providerName := "" + providerTypeName := "" + + if cluster.DnsDomainId > 0 { + domainResp, err := this.RPC().DNSDomainRPC().FindEnabledBasicDNSDomain(this.AdminContext(), &pb.FindEnabledBasicDNSDomainRequest{DnsDomainId: domainId}) + if err != nil { + this.ErrorPage(err) + return + } + domain := domainResp.DnsDomain + if domain == nil { + domainId = 0 + } else { + domainName = domain.Name + providerResp, err := this.RPC().DNSProviderRPC().FindEnabledDNSProvider(this.AdminContext(), &pb.FindEnabledDNSProviderRequest{DnsProviderId: domain.ProviderId}) + if err != nil { + this.ErrorPage(err) + return + } + if providerResp.DnsProvider != nil { + providerId = providerResp.DnsProvider.Id + providerName = providerResp.DnsProvider.Name + providerTypeName = providerResp.DnsProvider.TypeName + } + } + } + + clusterMaps = append(clusterMaps, maps.Map{ + "id": cluster.Id, + "name": cluster.Name, + "dnsName": cluster.DnsName, + "domainId": domainId, + "domainName": domainName, + "providerId": providerId, + "providerName": providerName, + "providerTypeName": providerTypeName, + }) + } + this.Data["clusters"] = clusterMaps + this.Show() } diff --git a/internal/web/actions/default/dns/init.go b/internal/web/actions/default/dns/init.go index daafed66..bcbfe7ef 100644 --- a/internal/web/actions/default/dns/init.go +++ b/internal/web/actions/default/dns/init.go @@ -2,6 +2,7 @@ package dns import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/domains" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/issues" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/providers" "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" "github.com/iwind/TeaGo" @@ -14,6 +15,9 @@ func init() { Helper(new(Helper)). Prefix("/dns"). Get("", new(IndexAction)). + GetPost("/updateClusterPopup", new(UpdateClusterPopupAction)). + Post("/providerOptions", new(ProviderOptionsAction)). + Post("/domainOptions", new(DomainOptionsAction)). // 服务商 Prefix("/dns/providers"). @@ -31,6 +35,14 @@ func init() { GetPost("/createPopup", new(domains.CreatePopupAction)). GetPost("/updatePopup", new(domains.UpdatePopupAction)). Post("/delete", new(domains.DeleteAction)). + Post("/sync", new(domains.SyncAction)). + Get("/routesPopup", new(domains.RoutesPopupAction)). + EndData(). + + // 问题修复 + Prefix("/dns/issues"). + Data("teaSubMenu", "issue"). + Get("", new(issues.IndexAction)). EndData(). EndAll() diff --git a/internal/web/actions/default/dns/issues/index.go b/internal/web/actions/default/dns/issues/index.go new file mode 100644 index 00000000..78359cdb --- /dev/null +++ b/internal/web/actions/default/dns/issues/index.go @@ -0,0 +1,15 @@ +package issues + +import "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.Nav("", "", "") +} + +func (this *IndexAction) RunGet(params struct{}) { + this.Show() +} diff --git a/internal/web/actions/default/dns/providerOptions.go b/internal/web/actions/default/dns/providerOptions.go new file mode 100644 index 00000000..dbe62de3 --- /dev/null +++ b/internal/web/actions/default/dns/providerOptions.go @@ -0,0 +1,32 @@ +package dns + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" +) + +// 服务商选项 +type ProviderOptionsAction struct { + actionutils.ParentAction +} + +func (this *ProviderOptionsAction) RunPost(params struct { + Type string +}) { + providersResp, err := this.RPC().DNSProviderRPC().FindAllEnabledDNSProvidersWithType(this.AdminContext(), &pb.FindAllEnabledDNSProvidersWithTypeRequest{ProviderTypeCode: params.Type}) + if err != nil { + this.ErrorPage(err) + return + } + providerMaps := []maps.Map{} + for _, provider := range providersResp.DnsProviders { + providerMaps = append(providerMaps, maps.Map{ + "id": provider.Id, + "name": provider.Name, + }) + } + this.Data["providers"] = providerMaps + + this.Success() +} diff --git a/internal/web/actions/default/dns/providers/provider.go b/internal/web/actions/default/dns/providers/provider.go index 3cfa805b..bbd0d26c 100644 --- a/internal/web/actions/default/dns/providers/provider.go +++ b/internal/web/actions/default/dns/providers/provider.go @@ -60,10 +60,15 @@ func (this *ProviderAction) RunGet(params struct { dataUpdatedTime = timeutil.FormatTime("Y-m-d H:i:s", domain.DataUpdatedAt) } domainMaps = append(domainMaps, maps.Map{ - "id": domain.Id, - "name": domain.Name, - "isOn": domain.IsOn, - "dataUpdatedTime": dataUpdatedTime, + "id": domain.Id, + "name": domain.Name, + "isOn": domain.IsOn, + "dataUpdatedTime": dataUpdatedTime, + "countRoutes": len(domain.Routes), + "countServerRecords": domain.ServerRecords, + "allServersResolved": domain.AllServersResolved, + "countClusterRecords": domain.ClusterRecords, + "allClustersResolved": domain.AllClustersResolved, }) } this.Data["domains"] = domainMaps diff --git a/internal/web/actions/default/dns/updateClusterPopup.go b/internal/web/actions/default/dns/updateClusterPopup.go new file mode 100644 index 00000000..70a74f42 --- /dev/null +++ b/internal/web/actions/default/dns/updateClusterPopup.go @@ -0,0 +1,103 @@ +package dns + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/domains/domainutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" +) + +// 修改集群的DNS设置 +type UpdateClusterPopupAction struct { + actionutils.ParentAction +} + +func (this *UpdateClusterPopupAction) Init() { + this.Nav("", "", "") +} + +func (this *UpdateClusterPopupAction) RunGet(params struct { + ClusterId int64 +}) { + this.Data["clusterId"] = params.ClusterId + + dnsResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterDNS(this.AdminContext(), &pb.FindEnabledNodeClusterDNSRequest{NodeClusterId: params.ClusterId}) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["dnsName"] = dnsResp.Name + if dnsResp.Domain != nil { + this.Data["domainId"] = dnsResp.Domain.Id + this.Data["domain"] = dnsResp.Domain.Name + } else { + this.Data["domainId"] = 0 + this.Data["domain"] = "" + } + if dnsResp.Provider != nil { + this.Data["providerType"] = dnsResp.Provider.Type + this.Data["providerId"] = dnsResp.Provider.Id + } else { + this.Data["providerType"] = "" + this.Data["providerId"] = 0 + } + + // 所有服务商 + providerTypesResp, err := this.RPC().DNSProviderRPC().FindAllDNSProviderTypes(this.AdminContext(), &pb.FindAllDNSProviderTypesRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + providerTypeMaps := []maps.Map{} + for _, providerType := range providerTypesResp.ProviderTypes { + providerTypeMaps = append(providerTypeMaps, maps.Map{ + "name": providerType.Name, + "code": providerType.Code, + }) + } + this.Data["providerTypes"] = providerTypeMaps + + this.Show() +} + +func (this *UpdateClusterPopupAction) RunPost(params struct { + ClusterId int64 + DnsName string + DomainId int64 + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + params.Must. + Field("dnsName", params.DnsName). + Require("请输入子域名") + + if !domainutils.ValidateDomainFormat(params.DnsName) { + this.FailField("dnsName", "子域名格式错误") + } + + checkResp, err := this.RPC().NodeClusterRPC().CheckNodeClusterDNSName(this.AdminContext(), &pb.CheckNodeClusterDNSNameRequest{ + NodeClusterId: params.ClusterId, + DnsName: params.DnsName, + }) + if err != nil { + this.ErrorPage(err) + return + } + if checkResp.IsUsed { + this.FailField("dnsName", "此子域名已经被占用,请修改后重新提交") + } + + _, err = this.RPC().NodeClusterRPC().UpdateNodeClusterDNS(this.AdminContext(), &pb.UpdateNodeClusterDNSRequest{ + NodeClusterId: params.ClusterId, + DnsName: params.DnsName, + DnsDomainId: params.DomainId, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/helpers/user_must_auth.go b/internal/web/helpers/user_must_auth.go index 446852b8..1804714a 100644 --- a/internal/web/helpers/user_must_auth.go +++ b/internal/web/helpers/user_must_auth.go @@ -109,6 +109,11 @@ func (this *UserMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam "name": "域名解析", "icon": "globe", "subItems": []maps.Map{ + { + "name": "问题修复", + "url": "/dns/issues", + "code": "issue", + }, { "name": "DNS服务商", "url": "/dns/providers", diff --git a/web/views/@default/@layout.css b/web/views/@default/@layout.css index 88bba3a8..942467c3 100644 --- a/web/views/@default/@layout.css +++ b/web/views/@default/@layout.css @@ -684,9 +684,6 @@ var.dash { .swal2-cancel { margin-left: 2em !important; } -form .fields { - margin-bottom: 0 !important; -} /** 排序 **/ .sortable-ghost { background: #ddd !important; diff --git a/web/views/@default/@layout.css.map b/web/views/@default/@layout.css.map index 14a5b293..675c73a8 100644 --- a/web/views/@default/@layout.css.map +++ b/web/views/@default/@layout.css.map @@ -1 +1 @@ -{"version":3,"sources":["@left_menu.less","@layout.less"],"names":[],"mappings":"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","file":"@layout.css"} \ No newline at end of file +{"version":3,"sources":["@left_menu.less","@layout.less"],"names":[],"mappings":"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","file":"@layout.css"} \ No newline at end of file diff --git a/web/views/@default/@layout.less b/web/views/@default/@layout.less index 30b43b45..2b046a9a 100644 --- a/web/views/@default/@layout.less +++ b/web/views/@default/@layout.less @@ -746,13 +746,6 @@ var.dash { margin-left: 2em !important; } -// fields -form { - .fields { - margin-bottom: 0 !important; - } -} - /** 排序 **/ .sortable-ghost { background: #ddd !important; diff --git a/web/views/@default/@layout_override.css b/web/views/@default/@layout_override.css index a6edaef5..b3ca8910 100644 --- a/web/views/@default/@layout_override.css +++ b/web/views/@default/@layout_override.css @@ -9,4 +9,7 @@ .ui.label.basic { background-color: white !important; } +form .fields { + margin-bottom: 0 !important; +} /*# sourceMappingURL=@layout_override.css.map */ \ No newline at end of file diff --git a/web/views/@default/@layout_override.css.map b/web/views/@default/@layout_override.css.map index ef0f593e..07e1cf17 100644 --- a/web/views/@default/@layout_override.css.map +++ b/web/views/@default/@layout_override.css.map @@ -1 +1 @@ -{"version":3,"sources":["@layout_override.less"],"names":[],"mappings":"AACA,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,QAAO;EACrG,oCAAA;;AAGD,GAAG,OAAO,SAAU,MAAK,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,QAAS,QAAO;EACzF,oCAAA;;AAGD,GAAG,MAAM;EACR,kCAAA","file":"@layout_override.css"} \ No newline at end of file +{"version":3,"sources":["@layout_override.less"],"names":[],"mappings":"AACA,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,QAAO;EACrG,oCAAA;;AAGD,GAAG,OAAO,SAAU,MAAK,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,QAAS,QAAO;EACzF,oCAAA;;AAGD,GAAG,MAAM;EACR,kCAAA;;AAID,IACC;EACC,2BAAA","file":"@layout_override.css"} \ No newline at end of file diff --git a/web/views/@default/@layout_override.less b/web/views/@default/@layout_override.less index aaf8dfaf..db9fba25 100644 --- a/web/views/@default/@layout_override.less +++ b/web/views/@default/@layout_override.less @@ -9,4 +9,11 @@ .ui.label.basic { background-color: white !important; -} \ No newline at end of file +} + +// fields +form { + .fields { + margin-bottom: 0 !important; + } +} diff --git a/web/views/@default/dns/domains/routesPopup.html b/web/views/@default/dns/domains/routesPopup.html new file mode 100644 index 00000000..263b60b4 --- /dev/null +++ b/web/views/@default/dns/domains/routesPopup.html @@ -0,0 +1,17 @@ +{$layout "layout_popup"} + +

域名支持的线路

+ + + + + + +
线路 +

暂时还没有支持的线路。

+
+
{{route}}
+
+
+ + \ No newline at end of file diff --git a/web/views/@default/dns/domains/routesPopup.js b/web/views/@default/dns/domains/routesPopup.js new file mode 100644 index 00000000..ccf3c259 --- /dev/null +++ b/web/views/@default/dns/domains/routesPopup.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.close = NotifyPopup +}) \ No newline at end of file diff --git a/web/views/@default/dns/domains/updatePopup.html b/web/views/@default/dns/domains/updatePopup.html new file mode 100644 index 00000000..95d82bb6 --- /dev/null +++ b/web/views/@default/dns/domains/updatePopup.html @@ -0,0 +1,33 @@ +{$layout "layout_popup"} + +

添加管理域名

+ +
+ + + + + + + + + + + + + + + + +
域名 * + +

在DNS服务商中可以管理的域名。

+
是否启用 +
+ + +
+
+ + +
\ No newline at end of file diff --git a/web/views/@default/dns/domains/updatePopup.js b/web/views/@default/dns/domains/updatePopup.js new file mode 100644 index 00000000..c8fe9515 --- /dev/null +++ b/web/views/@default/dns/domains/updatePopup.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.success = NotifyPopup +}) \ No newline at end of file diff --git a/web/views/@default/dns/index.css b/web/views/@default/dns/index.css new file mode 100644 index 00000000..7d3cbcd4 --- /dev/null +++ b/web/views/@default/dns/index.css @@ -0,0 +1,4 @@ +.italic { + font-style: italic !important; +} +/*# sourceMappingURL=index.css.map */ \ No newline at end of file diff --git a/web/views/@default/dns/index.css.map b/web/views/@default/dns/index.css.map new file mode 100644 index 00000000..14e46f26 --- /dev/null +++ b/web/views/@default/dns/index.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["index.less"],"names":[],"mappings":"AAAA;EACC,6BAAA","file":"index.css"} \ No newline at end of file diff --git a/web/views/@default/dns/index.html b/web/views/@default/dns/index.html index a98dc909..bda4920e 100644 --- a/web/views/@default/dns/index.html +++ b/web/views/@default/dns/index.html @@ -1,3 +1,39 @@ {$layout} -

此功能暂未开放,敬请期待。

\ No newline at end of file +
+ +

暂时还没有集群。

+ + + + + + + + + + + + + + + + + +
集群域名解析DNS服务商DNS服务商账号操作
+ {{cluster.name}} + + {{cluster.dnsName}}.{{cluster.domainName}} + - + + {{cluster.providerTypeName}} + - + + {{cluster.providerName}} + - + + 修改 +
+

这里列出了所有集群对应的域名设置。

+ +
\ No newline at end of file diff --git a/web/views/@default/dns/index.js b/web/views/@default/dns/index.js new file mode 100644 index 00000000..2227ab69 --- /dev/null +++ b/web/views/@default/dns/index.js @@ -0,0 +1,12 @@ +Tea.context(function () { + this.updateCluster = function (clusterId) { + teaweb.popup("/dns/updateClusterPopup?clusterId=" + clusterId, { + height: "22em", + callback: function () { + teaweb.success("保存成功", function () { + teaweb.reload() + }) + } + }) + } +}) \ No newline at end of file diff --git a/web/views/@default/dns/index.less b/web/views/@default/dns/index.less new file mode 100644 index 00000000..b59a888b --- /dev/null +++ b/web/views/@default/dns/index.less @@ -0,0 +1,3 @@ +.italic { + font-style: italic !important; +} \ No newline at end of file diff --git a/web/views/@default/dns/issues/index.html b/web/views/@default/dns/issues/index.html new file mode 100644 index 00000000..a98dc909 --- /dev/null +++ b/web/views/@default/dns/issues/index.html @@ -0,0 +1,3 @@ +{$layout} + +

此功能暂未开放,敬请期待。

\ No newline at end of file diff --git a/web/views/@default/dns/providers/provider.html b/web/views/@default/dns/providers/provider.html index 0a06ef46..6d8ef7d9 100644 --- a/web/views/@default/dns/providers/provider.html +++ b/web/views/@default/dns/providers/provider.html @@ -39,21 +39,46 @@ 域名 + 线路 + 集群域名 + 服务域名 数据更新时间 状态 - 操作 + 操作 - + {{domain.name}} + + {{domain.countRoutes}}个 + 0个 + + + {{domain.countClusterRecords}}个 + 0个 + + + {{domain.countServerRecords}}个 + 0个 + {{domain.dataUpdatedTime}} 尚未更新 - - 修改   - 删除 +
+ 需要同步 + 正在同步... +
+
+ +
+ + + 同步 + 正在同步...  + 修改   + 删除 \ No newline at end of file diff --git a/web/views/@default/dns/providers/provider.js b/web/views/@default/dns/providers/provider.js index 7cd8b75b..17f5a71c 100644 --- a/web/views/@default/dns/providers/provider.js +++ b/web/views/@default/dns/providers/provider.js @@ -20,6 +20,16 @@ Tea.context(function () { }) } + this.updateDomain = function (domainId) { + teaweb.popup("/dns/domains/updatePopup?domainId=" + domainId, { + callback: function () { + teaweb.success("保存成功", function () { + teaweb.reload() + }) + } + }) + } + this.deleteDomain = function (domain) { let that = this teaweb.confirm("确定要删除域名\"" + domain.name + "\"吗?", function () { @@ -31,4 +41,34 @@ Tea.context(function () { .refresh() }) } + + this.syncDomain = function (index, domain) { + domain.isSyncing = true + Vue.set(this.domains, index, domain) + + this.$post("/dns/domains/sync") + .params({ + domainId: domain.id + }) + .success(function () { + teaweb.success("同步成功", function () { + teaweb.reload() + }) + }) + .fail(function (resp) { + teaweb.warn(resp.message, function () { + if (resp.data.shouldFix) { + window.location = "/dns/issues" + } + }) + }) + .done(function () { + domain.isSyncing = false + Vue.set(this.domains, index, domain) + }) + } + + this.showRoutes = function (domainId) { + teaweb.popup("/dns/domains/routesPopup?domainId=" + domainId) + } }) \ No newline at end of file diff --git a/web/views/@default/dns/updateClusterPopup.html b/web/views/@default/dns/updateClusterPopup.html new file mode 100644 index 00000000..baf72101 --- /dev/null +++ b/web/views/@default/dns/updateClusterPopup.html @@ -0,0 +1,49 @@ +{$layout "layout_popup"} + +

修改集群DNS设置

+ +
+ + + + + + + + + + + + + + + + + + + + +
DNS服务商 + +
账号 +

没有账号可选

+ +
域名 +

没有域名可选

+ +
子域名 +
+ + .主域名{{domain}} +
+

子域名和主域名共同组成集群的域名。

+
+ + +
\ No newline at end of file diff --git a/web/views/@default/dns/updateClusterPopup.js b/web/views/@default/dns/updateClusterPopup.js new file mode 100644 index 00000000..b3dc3772 --- /dev/null +++ b/web/views/@default/dns/updateClusterPopup.js @@ -0,0 +1,80 @@ +Tea.context(function () { + this.$delay(function () { + this.changeProviderType() + this.changeProvider() + + this.$watch("providerId", function () { + this.changeProvider() + }) + this.$watch("domainId", function () { + this.changeDomain() + }) + }) + + this.success = NotifyPopup + + // 初始化的内容 + // this.domainId = 0 + // this.domain = "" + // this.providerId = 0 + + if (this.providerType == "") { + this.providerType = this.providerTypes[0].code + } + this.providers = [] + this.domains = [] + + this.changeProviderType = function () { + this.$post(".providerOptions") + .params({ + type: this.providerType + }) + .success(function (resp) { + this.providers = resp.data.providers + + // 检查providerId + if (this.providers.length == 0) { + this.providerId = 0 + return + } + let that = this + if (this.providers.$find(function (k, v) { + return v.id == that.providerId + }) == null) { + this.providerId = this.providers[0].id + } + this.changeProvider() + }) + } + + this.changeProvider = function () { + this.$post(".domainOptions") + .params({ + providerId: this.providerId + }) + .success(function (resp) { + this.domains = resp.data.domains + this.changeDomain() + }) + } + + this.changeDomain = function () { + if (this.domains.length == 0) { + this.domainId = 0 + this.domain = "" + return + } + + let domainId = this.domainId + let domainInfo = this.domains.$find(function (k, v) { + return v.id == domainId + }) + if (domainInfo == null) { + // 默认选取第一个 + this.domainId = this.domains[0].id + this.domain = this.domains[0].name + } else { + this.domain = domainInfo.name + } + } +}) \ No newline at end of file