diff --git a/internal/web/actions/default/clusters/cluster/groups/options.go b/internal/web/actions/default/clusters/cluster/groups/options.go deleted file mode 100644 index c8eb2b01..00000000 --- a/internal/web/actions/default/clusters/cluster/groups/options.go +++ /dev/null @@ -1,31 +0,0 @@ -package groups - -import ( - "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/iwind/TeaGo/maps" -) - -type OptionsAction struct { - actionutils.ParentAction -} - -func (this *OptionsAction) RunPost(params struct { - ClusterId int64 -}) { - groupsResp, err := this.RPC().NodeGroupRPC().FindAllEnabledNodeGroupsWithClusterId(this.AdminContext(), &pb.FindAllEnabledNodeGroupsWithClusterIdRequest{ClusterId: params.ClusterId}) - if err != nil { - this.ErrorPage(err) - } - - groupMaps := []maps.Map{} - for _, group := range groupsResp.Groups { - groupMaps = append(groupMaps, maps.Map{ - "id": group.Id, - "name": group.Name, - }) - } - this.Data["groups"] = groupMaps - - this.Success() -} diff --git a/internal/web/actions/default/clusters/cluster/init.go b/internal/web/actions/default/clusters/cluster/init.go index ce1af33e..d6a11830 100644 --- a/internal/web/actions/default/clusters/cluster/init.go +++ b/internal/web/actions/default/clusters/cluster/init.go @@ -42,7 +42,6 @@ func init() { GetPost("/groups/updatePopup", new(groups.UpdatePopupAction)). Post("/groups/delete", new(groups.DeleteAction)). Post("/groups/sort", new(groups.SortAction)). - Post("/groups/options", new(groups.OptionsAction)). GetPost("/groups/selectPopup", new(groups.SelectPopupAction)). EndAll() diff --git a/internal/web/actions/default/servers/components/groups/init.go b/internal/web/actions/default/servers/components/groups/init.go index c86b6297..c5c88233 100644 --- a/internal/web/actions/default/servers/components/groups/init.go +++ b/internal/web/actions/default/servers/components/groups/init.go @@ -16,7 +16,6 @@ func init() { Get("", new(IndexAction)). GetPost("/createPopup", new(CreatePopupAction)). GetPost("/updatePopup", new(UpdatePopupAction)). - Post("/options", new(OptionsAction)). GetPost("/selectPopup", new(SelectPopupAction)). Post("/delete", new(DeleteAction)). Post("/sort", new(SortAction)). diff --git a/internal/web/actions/default/servers/components/groups/options.go b/internal/web/actions/default/servers/components/groups/options.go deleted file mode 100644 index 79eb8c47..00000000 --- a/internal/web/actions/default/servers/components/groups/options.go +++ /dev/null @@ -1,11 +0,0 @@ -package groups - -import "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" - -type OptionsAction struct { - actionutils.ParentAction -} - -func (this *OptionsAction) RunPost(params struct{}) { - this.Success() -} diff --git a/internal/web/actions/default/servers/components/groups/selectPopup.go b/internal/web/actions/default/servers/components/groups/selectPopup.go index 9fbaedb2..3eb98c01 100644 --- a/internal/web/actions/default/servers/components/groups/selectPopup.go +++ b/internal/web/actions/default/servers/components/groups/selectPopup.go @@ -1,6 +1,14 @@ package groups -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/actions" + "github.com/iwind/TeaGo/lists" + "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/types" + "strings" +) type SelectPopupAction struct { actionutils.ParentAction @@ -10,6 +18,61 @@ func (this *SelectPopupAction) Init() { this.Nav("", "", "") } -func (this *SelectPopupAction) RunGet(params struct{}) { +func (this *SelectPopupAction) RunGet(params struct { + SelectedGroupIds string +}) { + groupsResp, err := this.RPC().ServerGroupRPC().FindAllEnabledServerGroups(this.AdminContext(), &pb.FindAllEnabledServerGroupsRequest{}) + if err != nil { + this.ErrorPage(err) + } + + selectedGroupIds := []int64{} + if len(params.SelectedGroupIds) > 0 { + for _, v := range strings.Split(params.SelectedGroupIds, ",") { + selectedGroupIds = append(selectedGroupIds, types.Int64(v)) + } + } + + groupMaps := []maps.Map{} + for _, group := range groupsResp.Groups { + // 已经选过的就跳过 + if lists.ContainsInt64(selectedGroupIds, group.Id) { + continue + } + groupMaps = append(groupMaps, maps.Map{ + "id": group.Id, + "name": group.Name, + }) + } + this.Data["groups"] = groupMaps + this.Show() } + +func (this *SelectPopupAction) RunPost(params struct { + GroupId int64 + + Must *actions.Must +}) { + if params.GroupId <= 0 { + this.Fail("请选择要使用的分组") + } + + groupResp, err := this.RPC().ServerGroupRPC().FindEnabledServerGroup(this.AdminContext(), &pb.FindEnabledServerGroupRequest{GroupId: params.GroupId}) + if err != nil { + this.ErrorPage(err) + return + } + group := groupResp.Group + if group == nil { + this.NotFound("serverGroup", params.GroupId) + return + } + + this.Data["group"] = maps.Map{ + "id": group.Id, + "name": group.Name, + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/create.go b/internal/web/actions/default/servers/create.go index 505ba886..a652d55e 100644 --- a/internal/web/actions/default/servers/create.go +++ b/internal/web/actions/default/servers/create.go @@ -47,6 +47,7 @@ func (this *CreateAction) RunPost(params struct { Name string Description string ClusterId int64 + GroupIds []int64 ServerType string Addresses string @@ -259,6 +260,7 @@ func (this *CreateAction) RunPost(params struct { ExcludeNodesJSON: excludeNodesJSON, WebId: webId, ReverseProxyJSON: reverseProxyRefJSON, + GroupIds: params.GroupIds, } if httpConfig != nil { data, err := json.Marshal(httpConfig) diff --git a/internal/web/actions/default/servers/index.go b/internal/web/actions/default/servers/index.go index 0b003cdb..9a56e37d 100644 --- a/internal/web/actions/default/servers/index.go +++ b/internal/web/actions/default/servers/index.go @@ -95,6 +95,17 @@ func (this *IndexAction) RunGet(params struct{}) { } } + // 分组 + groupMaps := []maps.Map{} + if len(server.Groups) > 0 { + for _, group := range server.Groups { + groupMaps = append(groupMaps, maps.Map{ + "id": group.Id, + "name": group.Name, + }) + } + } + serverMaps = append(serverMaps, maps.Map{ "id": server.Id, "isOn": server.IsOn, @@ -105,6 +116,7 @@ func (this *IndexAction) RunGet(params struct{}) { }, "ports": portMaps, "serverTypeName": serverconfigs.FindServerType(server.Type).GetString("name"), + "groups": groupMaps, }) } this.Data["servers"] = serverMaps diff --git a/internal/web/actions/default/servers/server/settings/index.go b/internal/web/actions/default/servers/server/settings/index.go index 648e2a83..85be531d 100644 --- a/internal/web/actions/default/servers/server/settings/index.go +++ b/internal/web/actions/default/servers/server/settings/index.go @@ -57,6 +57,17 @@ func (this *IndexAction) RunGet(params struct { clusterId = server.Cluster.Id } + // 分组 + groupMaps := []maps.Map{} + if len(server.Groups) > 0 { + for _, group := range server.Groups { + groupMaps = append(groupMaps, maps.Map{ + "id": group.Id, + "name": group.Name, + }) + } + } + this.Data["server"] = maps.Map{ "id": server.Id, "clusterId": clusterId, @@ -64,6 +75,7 @@ func (this *IndexAction) RunGet(params struct { "name": server.Name, "description": server.Description, "isOn": server.IsOn, + "groups": groupMaps, } serverType := serverconfigs.FindServerType(server.Type) @@ -84,6 +96,7 @@ func (this *IndexAction) RunPost(params struct { Name string Description string ClusterId int64 + GroupIds []int64 IsOn bool Must *actions.Must @@ -102,6 +115,7 @@ func (this *IndexAction) RunPost(params struct { Description: params.Description, ClusterId: params.ClusterId, IsOn: params.IsOn, + GroupIds: params.GroupIds, }) if err != nil { this.ErrorPage(err) diff --git a/web/public/js/components/node/node-group-selector.js b/web/public/js/components/node/node-group-selector.js index 9e36caf4..82473834 100644 --- a/web/public/js/components/node/node-group-selector.js +++ b/web/public/js/components/node/node-group-selector.js @@ -1,20 +1,8 @@ Vue.component("node-group-selector", { props: ["v-cluster-id", "v-group"], - mounted: function () { - let that = this - Tea.action("/clusters/cluster/groups/options") - .post() - .params({ - clusterId: this.vClusterId - }) - .success(function (resp) { - - }) - }, data: function () { return { - groups: [], - selectedGroup: this.vGroup, + selectedGroup: this.vGroup } }, methods: { diff --git a/web/public/js/components/server/server-group-selector.js b/web/public/js/components/server/server-group-selector.js new file mode 100644 index 00000000..e772151c --- /dev/null +++ b/web/public/js/components/server/server-group-selector.js @@ -0,0 +1,53 @@ +Vue.component("server-group-selector", { + props: ["v-groups"], + data: function () { + let groups = this.vGroups + if (groups == null) { + groups = [] + } + return { + groups: groups + } + }, + methods: { + selectGroup: function () { + let that = this + let groupIds = this.groups.map(function (v) { + return v.id.toString() + }).join(",") + teaweb.popup("/servers/components/groups/selectPopup?selectedGroupIds=" + groupIds, { + callback: function (resp) { + that.groups.push(resp.data.group) + } + }) + }, + addGroup: function () { + let that = this + teaweb.popup("/servers/components/groups/createPopup", { + callback: function (resp) { + that.groups.push(resp.data.group) + } + }) + }, + removeGroup: function (index) { + this.groups.$remove(index) + }, + groupIds: function () { + return this.groups.map(function (v) { + return v.id + }) + } + }, + template: `
` +}) \ No newline at end of file diff --git a/web/views/@default/servers/create.html b/web/views/@default/servers/create.html index 2c76cbfc..b2509da5 100644 --- a/web/views/@default/servers/create.html +++ b/web/views/@default/servers/create.html @@ -82,6 +82,13 @@ +