2020-08-21 12:32:16 +08:00
|
|
|
package serverutils
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"errors"
|
|
|
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
|
|
|
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
2020-09-13 20:37:07 +08:00
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
2020-08-21 12:32:16 +08:00
|
|
|
"github.com/iwind/TeaGo/actions"
|
|
|
|
|
"github.com/iwind/TeaGo/logs"
|
|
|
|
|
"github.com/iwind/TeaGo/maps"
|
|
|
|
|
"github.com/iwind/TeaGo/types"
|
|
|
|
|
"net/http"
|
|
|
|
|
"strconv"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type ServerHelper struct {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewServerHelper() *ServerHelper {
|
|
|
|
|
return &ServerHelper{}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *ServerHelper) BeforeAction(action *actions.ActionObject) {
|
|
|
|
|
if action.Request.Method != http.MethodGet {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
action.Data["teaMenu"] = "servers"
|
|
|
|
|
|
|
|
|
|
// 左侧菜单
|
|
|
|
|
this.createLeftMenu(action)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *ServerHelper) createLeftMenu(action *actions.ActionObject) {
|
|
|
|
|
// 初始化
|
2020-09-21 19:51:50 +08:00
|
|
|
if !action.Data.Has("leftMenuItemIsDisabled") {
|
|
|
|
|
action.Data["leftMenuItemIsDisabled"] = false
|
|
|
|
|
}
|
2020-08-21 12:32:16 +08:00
|
|
|
action.Data["leftMenuItems"] = []maps.Map{}
|
|
|
|
|
mainTab, _ := action.Data["mainTab"]
|
|
|
|
|
secondMenuItem, _ := action.Data["secondMenuItem"]
|
|
|
|
|
|
|
|
|
|
serverId := action.ParamInt64("serverId")
|
2020-09-20 08:58:48 +08:00
|
|
|
if serverId == 0 {
|
|
|
|
|
return
|
|
|
|
|
}
|
2020-08-21 12:32:16 +08:00
|
|
|
serverIdString := strconv.FormatInt(serverId, 10)
|
2020-09-13 20:37:07 +08:00
|
|
|
action.Data["serverId"] = serverId
|
2020-08-21 12:32:16 +08:00
|
|
|
|
|
|
|
|
// 读取server信息
|
|
|
|
|
rpcClient, err := rpc.SharedRPC()
|
|
|
|
|
if err != nil {
|
|
|
|
|
logs.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
serverResp, err := rpcClient.ServerRPC().FindEnabledServer(rpcClient.Context(action.Context.GetInt64("adminId")), &pb.FindEnabledServerRequest{ServerId: serverId})
|
|
|
|
|
if err != nil {
|
|
|
|
|
logs.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
server := serverResp.Server
|
|
|
|
|
if server == nil {
|
|
|
|
|
logs.Error(errors.New("can not find the server"))
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-13 20:37:07 +08:00
|
|
|
// 服务管理
|
2020-08-21 12:32:16 +08:00
|
|
|
serverConfig := &serverconfigs.ServerConfig{}
|
|
|
|
|
err = json.Unmarshal(server.Config, serverConfig)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logs.Error(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TABBAR
|
|
|
|
|
selectedTabbar, _ := action.Data["mainTab"]
|
|
|
|
|
tabbar := actionutils.NewTabbar()
|
2020-10-04 14:27:05 +08:00
|
|
|
tabbar.Add("服务列表", "", "/servers", "", false)
|
2020-09-21 11:37:24 +08:00
|
|
|
//tabbar.Add("看板", "", "/servers/server/board?serverId="+serverIdString, "dashboard", selectedTabbar == "board")
|
2020-08-21 12:32:16 +08:00
|
|
|
tabbar.Add("日志", "", "/servers/server/log?serverId="+serverIdString, "history", selectedTabbar == "log")
|
2020-09-21 11:37:24 +08:00
|
|
|
//tabbar.Add("统计", "", "/servers/server/stat?serverId="+serverIdString, "chart area", selectedTabbar == "stat")
|
2020-08-21 12:32:16 +08:00
|
|
|
tabbar.Add("设置", "", "/servers/server/settings?serverId="+serverIdString, "setting", selectedTabbar == "setting")
|
|
|
|
|
tabbar.Add("删除", "", "/servers/server/delete?serverId="+serverIdString, "trash", selectedTabbar == "delete")
|
2020-10-02 17:22:24 +08:00
|
|
|
{
|
|
|
|
|
m := tabbar.Add("当前服务:"+server.Name, "", "/servers/server?serverId="+serverIdString, "", false)
|
|
|
|
|
m["right"] = true
|
|
|
|
|
}
|
2020-08-21 12:32:16 +08:00
|
|
|
|
|
|
|
|
actionutils.SetTabbar(action, tabbar)
|
|
|
|
|
|
|
|
|
|
// 左侧操作子菜单
|
|
|
|
|
switch types.String(mainTab) {
|
|
|
|
|
case "board":
|
2020-08-21 21:09:42 +08:00
|
|
|
action.Data["leftMenuItems"] = this.createBoardMenu(types.String(secondMenuItem), serverIdString, serverConfig)
|
2020-08-21 12:32:16 +08:00
|
|
|
case "log":
|
2020-08-21 21:09:42 +08:00
|
|
|
action.Data["leftMenuItems"] = this.createLogMenu(types.String(secondMenuItem), serverIdString, serverConfig)
|
2020-08-21 12:32:16 +08:00
|
|
|
case "stat":
|
2020-08-21 21:09:42 +08:00
|
|
|
action.Data["leftMenuItems"] = this.createStatMenu(types.String(secondMenuItem), serverIdString, serverConfig)
|
2020-08-21 12:32:16 +08:00
|
|
|
case "setting":
|
|
|
|
|
action.Data["leftMenuItems"] = this.createSettingsMenu(types.String(secondMenuItem), serverIdString, serverConfig)
|
|
|
|
|
case "delete":
|
2020-08-21 21:09:42 +08:00
|
|
|
action.Data["leftMenuItems"] = this.createDeleteMenu(types.String(secondMenuItem), serverIdString, serverConfig)
|
2020-08-21 12:32:16 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-21 21:09:42 +08:00
|
|
|
// 看板菜单
|
|
|
|
|
func (this *ServerHelper) createBoardMenu(secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
|
|
|
|
menuItems := []maps.Map{}
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "看板",
|
|
|
|
|
"url": "/servers/server/board?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "index",
|
|
|
|
|
})
|
|
|
|
|
return menuItems
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 日志菜单
|
|
|
|
|
func (this *ServerHelper) createLogMenu(secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
|
|
|
|
menuItems := []maps.Map{}
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "实时",
|
|
|
|
|
"url": "/servers/server/log?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "index",
|
|
|
|
|
})
|
|
|
|
|
return menuItems
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 统计菜单
|
|
|
|
|
func (this *ServerHelper) createStatMenu(secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
|
|
|
|
menuItems := []maps.Map{}
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "统计",
|
|
|
|
|
"url": "/servers/server/stat?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "index",
|
|
|
|
|
})
|
|
|
|
|
return menuItems
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置菜单
|
2020-08-21 12:32:16 +08:00
|
|
|
func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) (items []maps.Map) {
|
|
|
|
|
menuItems := []maps.Map{
|
|
|
|
|
{
|
|
|
|
|
"name": "基本信息",
|
|
|
|
|
"url": "/servers/server/settings?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "basic",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOff": !serverConfig.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// HTTP
|
|
|
|
|
if serverConfig.IsHTTP() {
|
2020-09-16 09:09:10 +08:00
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "域名",
|
|
|
|
|
"url": "/servers/server/settings/serverNames?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "serverName",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": len(serverConfig.ServerNames) > 0,
|
2020-09-16 09:09:10 +08:00
|
|
|
})
|
2020-08-21 12:32:16 +08:00
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "HTTP",
|
2020-08-21 21:09:42 +08:00
|
|
|
"url": "/servers/server/settings/http?serverId=" + serverIdString,
|
2020-08-21 12:32:16 +08:00
|
|
|
"isActive": secondMenuItem == "http",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": (serverConfig.HTTP != nil && serverConfig.HTTP.IsOn && len(serverConfig.HTTP.Listen) > 0) || (serverConfig.Web != nil && serverConfig.Web.RedirectToHttps != nil && serverConfig.Web.RedirectToHttps.IsOn),
|
2020-09-28 16:25:26 +08:00
|
|
|
"isOff": serverConfig.HTTP != nil && !serverConfig.HTTP.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "HTTPS",
|
2020-08-21 21:09:42 +08:00
|
|
|
"url": "/servers/server/settings/https?serverId=" + serverIdString,
|
2020-08-21 12:32:16 +08:00
|
|
|
"isActive": secondMenuItem == "https",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.HTTPS != nil && serverConfig.HTTPS.IsOn && len(serverConfig.HTTPS.Listen) > 0,
|
2020-09-28 16:25:26 +08:00
|
|
|
"isOff": serverConfig.HTTPS != nil && !serverConfig.HTTPS.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "Web设置",
|
2020-08-21 21:09:42 +08:00
|
|
|
"url": "/servers/server/settings/web?serverId=" + serverIdString,
|
2020-08-21 12:32:16 +08:00
|
|
|
"isActive": secondMenuItem == "web",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.Root != nil && serverConfig.Web.Root.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "反向代理",
|
|
|
|
|
"url": "/servers/server/settings/reverseProxy?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "reverseProxy",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.ReverseProxyRef != nil && serverConfig.ReverseProxyRef.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
2020-09-28 16:25:26 +08:00
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "-",
|
|
|
|
|
"url": "",
|
|
|
|
|
"isActive": false,
|
|
|
|
|
})
|
2020-08-21 12:32:16 +08:00
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "路径规则",
|
|
|
|
|
"url": "/servers/server/settings/locations?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "locations",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && len(serverConfig.Web.Locations) > 0,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
2020-09-26 19:54:09 +08:00
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "重写规则",
|
|
|
|
|
"url": "/servers/server/settings/rewrite?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "rewrite",
|
2020-09-28 16:25:26 +08:00
|
|
|
"isOn": serverConfig.Web != nil && len(serverConfig.Web.RewriteRefs) > 0,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "WAF",
|
|
|
|
|
"url": "/servers/server/settings/waf?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "waf",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.FirewallRef != nil && serverConfig.Web.FirewallRef.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "缓存",
|
|
|
|
|
"url": "/servers/server/settings/cache?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "cache",
|
2020-10-04 20:38:27 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.Cache != nil && serverConfig.Web.Cache.IsOn && len(serverConfig.Web.Cache.CacheRefs) > 0,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-09-28 16:25:26 +08:00
|
|
|
"name": "访问控制",
|
|
|
|
|
"url": "/servers/server/settings/access?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "access",
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-09-16 20:29:13 +08:00
|
|
|
"name": "字符编码",
|
2020-08-21 21:09:42 +08:00
|
|
|
"url": "/servers/server/settings/charset?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "charset",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.Charset != nil && serverConfig.Web.Charset.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "访问日志",
|
|
|
|
|
"url": "/servers/server/settings/accessLog?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "accessLog",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.AccessLogRef != nil && serverConfig.Web.AccessLogRef.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "统计",
|
|
|
|
|
"url": "/servers/server/settings/stat?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "stat",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.StatRef != nil && serverConfig.Web.StatRef.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "Gzip压缩",
|
|
|
|
|
"url": "/servers/server/settings/gzip?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "gzip",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.GzipRef != nil && serverConfig.Web.GzipRef.IsOn,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-08-21 21:09:42 +08:00
|
|
|
"name": "特殊页面",
|
|
|
|
|
"url": "/servers/server/settings/pages?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "pages",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && (len(serverConfig.Web.Pages) > 0 || (serverConfig.Web.Shutdown != nil && serverConfig.Web.Shutdown.IsOn)),
|
2020-08-21 21:09:42 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "HTTP Header",
|
|
|
|
|
"url": "/servers/server/settings/headers?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "header",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && ((serverConfig.Web.RequestHeaderPolicyRef != nil && serverConfig.Web.RequestHeaderPolicyRef.IsOn) || (serverConfig.Web.ResponseHeaderPolicyRef != nil && serverConfig.Web.ResponseHeaderPolicyRef.IsOn)),
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
2020-09-26 19:54:09 +08:00
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "Websocket",
|
|
|
|
|
"url": "/servers/server/settings/websocket?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "websocket",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Web != nil && serverConfig.Web.WebsocketRef != nil && serverConfig.Web.WebsocketRef.IsOn,
|
2020-09-26 19:54:09 +08:00
|
|
|
})
|
2020-08-21 12:32:16 +08:00
|
|
|
} else if serverConfig.IsTCP() {
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "TCP",
|
2020-08-21 21:09:42 +08:00
|
|
|
"url": "/servers/server/settings/tcp?serverId=" + serverIdString,
|
2020-08-21 12:32:16 +08:00
|
|
|
"isActive": secondMenuItem == "tcp",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.TCP != nil && serverConfig.TCP.IsOn && len(serverConfig.TCP.Listen) > 0,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
2020-09-13 20:37:07 +08:00
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-09-16 09:09:10 +08:00
|
|
|
"name": "TLS",
|
|
|
|
|
"url": "/servers/server/settings/tls?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "tls",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.TLS != nil && serverConfig.TLS.IsOn && len(serverConfig.TLS.Listen) > 0,
|
2020-09-16 09:09:10 +08:00
|
|
|
})
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
2020-09-13 20:37:07 +08:00
|
|
|
"name": "反向代理",
|
|
|
|
|
"url": "/servers/server/settings/reverseProxy?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "reverseProxy",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.ReverseProxyRef != nil && serverConfig.ReverseProxyRef.IsOn,
|
2020-09-13 20:37:07 +08:00
|
|
|
})
|
2020-08-21 12:32:16 +08:00
|
|
|
} else if serverConfig.IsUnix() {
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "Unix",
|
2020-08-21 21:09:42 +08:00
|
|
|
"url": "/servers/server/settings/unix?serverId=" + serverIdString,
|
2020-08-21 12:32:16 +08:00
|
|
|
"isActive": secondMenuItem == "unix",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.Unix != nil && serverConfig.Unix.IsOn && len(serverConfig.Unix.Listen) > 0,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
} else if serverConfig.IsUDP() {
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "UDP",
|
2020-08-21 21:09:42 +08:00
|
|
|
"url": "/servers/server/settings/udp?serverId=" + serverIdString,
|
2020-08-21 12:32:16 +08:00
|
|
|
"isActive": secondMenuItem == "udp",
|
2020-09-27 18:40:55 +08:00
|
|
|
"isOn": serverConfig.UDP != nil && serverConfig.UDP.IsOn && len(serverConfig.UDP.Listen) > 0,
|
2020-08-21 12:32:16 +08:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return menuItems
|
|
|
|
|
}
|
2020-08-21 21:09:42 +08:00
|
|
|
|
|
|
|
|
// 删除菜单
|
|
|
|
|
func (this *ServerHelper) createDeleteMenu(secondMenuItem string, serverIdString string, serverConfig *serverconfigs.ServerConfig) []maps.Map {
|
|
|
|
|
menuItems := []maps.Map{}
|
|
|
|
|
menuItems = append(menuItems, maps.Map{
|
|
|
|
|
"name": "删除",
|
|
|
|
|
"url": "/servers/server/delete?serverId=" + serverIdString,
|
|
|
|
|
"isActive": secondMenuItem == "index",
|
|
|
|
|
})
|
|
|
|
|
return menuItems
|
|
|
|
|
}
|