diff --git a/internal/configloaders/ui_config.go b/internal/configloaders/admin_ui_config.go similarity index 64% rename from internal/configloaders/ui_config.go rename to internal/configloaders/admin_ui_config.go index 722296d0..a6663cf6 100644 --- a/internal/configloaders/ui_config.go +++ b/internal/configloaders/admin_ui_config.go @@ -9,17 +9,17 @@ import ( "reflect" ) -var sharedUIConfig *systemconfigs.AdminUIConfig = nil +var sharedAdminUIConfig *systemconfigs.AdminUIConfig = nil const ( - UISettingName = "adminUIConfig" + AdminUISettingName = "adminUIConfig" ) -func LoadUIConfig() (*systemconfigs.AdminUIConfig, error) { +func LoadAdminUIConfig() (*systemconfigs.AdminUIConfig, error) { locker.Lock() defer locker.Unlock() - config, err := loadUIConfig() + config, err := loadAdminUIConfig() if err != nil { return nil, err } @@ -28,7 +28,7 @@ func LoadUIConfig() (*systemconfigs.AdminUIConfig, error) { return &v, nil } -func UpdateUIConfig(uiConfig *systemconfigs.AdminUIConfig) error { +func UpdateAdminUIConfig(uiConfig *systemconfigs.AdminUIConfig) error { locker.Lock() defer locker.Unlock() @@ -41,48 +41,48 @@ func UpdateUIConfig(uiConfig *systemconfigs.AdminUIConfig) error { return err } _, err = rpcClient.SysSettingRPC().UpdateSysSetting(rpcClient.Context(0), &pb.UpdateSysSettingRequest{ - Code: UISettingName, + Code: AdminUISettingName, ValueJSON: valueJSON, }) if err != nil { return err } - sharedUIConfig = uiConfig + sharedAdminUIConfig = uiConfig return nil } -func loadUIConfig() (*systemconfigs.AdminUIConfig, error) { - if sharedUIConfig != nil { - return sharedUIConfig, nil +func loadAdminUIConfig() (*systemconfigs.AdminUIConfig, error) { + if sharedAdminUIConfig != nil { + return sharedAdminUIConfig, nil } var rpcClient, err = rpc.SharedRPC() if err != nil { return nil, err } resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{ - Code: UISettingName, + Code: AdminUISettingName, }) if err != nil { return nil, err } if len(resp.ValueJSON) == 0 { - sharedUIConfig = defaultUIConfig() - return sharedUIConfig, nil + sharedAdminUIConfig = defaultAdminUIConfig() + return sharedAdminUIConfig, nil } config := &systemconfigs.AdminUIConfig{} err = json.Unmarshal(resp.ValueJSON, config) if err != nil { logs.Println("[UI_MANAGER]" + err.Error()) - sharedUIConfig = defaultUIConfig() - return sharedUIConfig, nil + sharedAdminUIConfig = defaultAdminUIConfig() + return sharedAdminUIConfig, nil } - sharedUIConfig = config - return sharedUIConfig, nil + sharedAdminUIConfig = config + return sharedAdminUIConfig, nil } -func defaultUIConfig() *systemconfigs.AdminUIConfig { +func defaultAdminUIConfig() *systemconfigs.AdminUIConfig { return &systemconfigs.AdminUIConfig{ ProductName: "GoEdge", AdminSystemName: "GoEdge管理员系统", diff --git a/internal/configloaders/ui_config_test.go b/internal/configloaders/admin_ui_config_test.go similarity index 100% rename from internal/configloaders/ui_config_test.go rename to internal/configloaders/admin_ui_config_test.go diff --git a/internal/configloaders/user_ui_config.go b/internal/configloaders/user_ui_config.go new file mode 100644 index 00000000..eab50eb2 --- /dev/null +++ b/internal/configloaders/user_ui_config.go @@ -0,0 +1,92 @@ +package configloaders + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/rpc" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs" + "github.com/iwind/TeaGo/logs" + "reflect" +) + +var sharedUserUIConfig *systemconfigs.UserUIConfig = nil + +const ( + UserUISettingName = "userUIConfig" +) + +func LoadUserUIConfig() (*systemconfigs.UserUIConfig, error) { + locker.Lock() + defer locker.Unlock() + + config, err := loadUserUIConfig() + if err != nil { + return nil, err + } + + v := reflect.Indirect(reflect.ValueOf(config)).Interface().(systemconfigs.UserUIConfig) + return &v, nil +} + +func UpdateUserUIConfig(uiConfig *systemconfigs.UserUIConfig) error { + locker.Lock() + defer locker.Unlock() + + var rpcClient, err = rpc.SharedRPC() + if err != nil { + return err + } + valueJSON, err := json.Marshal(uiConfig) + if err != nil { + return err + } + _, err = rpcClient.SysSettingRPC().UpdateSysSetting(rpcClient.Context(0), &pb.UpdateSysSettingRequest{ + Code: UserUISettingName, + ValueJSON: valueJSON, + }) + if err != nil { + return err + } + sharedUserUIConfig = uiConfig + + return nil +} + +func loadUserUIConfig() (*systemconfigs.UserUIConfig, error) { + if sharedUserUIConfig != nil { + return sharedUserUIConfig, nil + } + var rpcClient, err = rpc.SharedRPC() + if err != nil { + return nil, err + } + resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{ + Code: UserUISettingName, + }) + if err != nil { + return nil, err + } + if len(resp.ValueJSON) == 0 { + sharedUserUIConfig = defaultUserUIConfig() + return sharedUserUIConfig, nil + } + + config := &systemconfigs.UserUIConfig{} + err = json.Unmarshal(resp.ValueJSON, config) + if err != nil { + logs.Println("[UI_MANAGER]" + err.Error()) + sharedUserUIConfig = defaultUserUIConfig() + return sharedUserUIConfig, nil + } + sharedUserUIConfig = config + return sharedUserUIConfig, nil +} + +func defaultUserUIConfig() *systemconfigs.UserUIConfig { + return &systemconfigs.UserUIConfig{ + ProductName: "GoEdge", + UserSystemName: "GoEdge用户系统", + ShowOpenSourceInfo: true, + ShowVersion: true, + } +} diff --git a/internal/web/actions/default/clusters/init.go b/internal/web/actions/default/clusters/init.go index 0db9cd5f..ca308978 100644 --- a/internal/web/actions/default/clusters/init.go +++ b/internal/web/actions/default/clusters/init.go @@ -17,6 +17,12 @@ func init() { GetPost("/create", new(CreateAction)). Post("/sync", new(SyncAction)). Post("/checkChange", new(CheckChangeAction)). + + // 只要登录即可访问的Action + EndHelpers(). + Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeCommon)). + Post("/options", new(OptionsAction)). + EndAll() }) } diff --git a/internal/web/actions/default/clusters/options.go b/internal/web/actions/default/clusters/options.go new file mode 100644 index 00000000..35838dfd --- /dev/null +++ b/internal/web/actions/default/clusters/options.go @@ -0,0 +1,30 @@ +package clusters + +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{}) { + clustersResp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClusters(this.AdminContext(), &pb.FindAllEnabledNodeClustersRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + + clusterMaps := []maps.Map{} + for _, cluster := range clustersResp.Clusters { + clusterMaps = append(clusterMaps, maps.Map{ + "id": cluster.Id, + "name": cluster.Name, + }) + } + this.Data["clusters"] = clusterMaps + + this.Success() +} diff --git a/internal/web/actions/default/clusters/regions/prices.go b/internal/web/actions/default/clusters/regions/prices.go index 8235d2cd..9c87f09b 100644 --- a/internal/web/actions/default/clusters/regions/prices.go +++ b/internal/web/actions/default/clusters/regions/prices.go @@ -78,7 +78,7 @@ func (this *PricesAction) formatBits(bits int64) string { } else if bits < 1_000_000_000_000_000 { sizeHuman = fmt.Sprintf("%.2fTBPS", float64(bits)/1000/1000/1000/1000) } else { - sizeHuman = fmt.Sprintf("%.2fPTBPS", float64(bits)/1000/1000/1000/1000/1000) + sizeHuman = fmt.Sprintf("%.2fPBPS", float64(bits)/1000/1000/1000/1000/1000) } return sizeHuman } diff --git a/internal/web/actions/default/finance/index.go b/internal/web/actions/default/finance/index.go index d68cafae..e77c1c7d 100644 --- a/internal/web/actions/default/finance/index.go +++ b/internal/web/actions/default/finance/index.go @@ -13,6 +13,4 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct{}) { // TODO 暂时先跳转到账单页,将来做成Dashboard this.RedirectURL("/finance/bills") - - this.Show() } diff --git a/internal/web/actions/default/index/index.go b/internal/web/actions/default/index/index.go index f6cd8fd2..994a3ba3 100644 --- a/internal/web/actions/default/index/index.go +++ b/internal/web/actions/default/index/index.go @@ -50,7 +50,7 @@ func (this *IndexAction) RunGet(params struct { this.Data["token"] = stringutil.Md5(TokenSalt+timestamp) + timestamp this.Data["from"] = params.From - config, err := configloaders.LoadUIConfig() + config, err := configloaders.LoadAdminUIConfig() if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/settings/settingutils/helper.go b/internal/web/actions/default/settings/settingutils/helper.go index 5718d8be..c18105dd 100644 --- a/internal/web/actions/default/settings/settingutils/helper.go +++ b/internal/web/actions/default/settings/settingutils/helper.go @@ -30,7 +30,8 @@ func (this *Helper) BeforeAction(actionPtr actions.ActionWrapper) (goNext bool) var adminId = session.GetInt64("adminId") if configloaders.AllowModule(adminId, configloaders.AdminModuleCodeSetting) { tabbar.Add("Web服务", "", "/settings/server", "", this.tab == "server") - tabbar.Add("界面设置", "", "/settings/ui", "", this.tab == "ui") + tabbar.Add("管理界面设置", "", "/settings/ui", "", this.tab == "ui") + tabbar.Add("用户界面设置", "", "/settings/user-ui", "", this.tab == "userUI") tabbar.Add("安全设置", "", "/settings/security", "", this.tab == "security") tabbar.Add("IP库", "", "/settings/ip-library", "", this.tab == "ipLibrary") tabbar.Add("备份", "", "/settings/backup", "", this.tab == "backup") diff --git a/internal/web/actions/default/settings/ui/index.go b/internal/web/actions/default/settings/ui/index.go index 891d372d..72ea4bd7 100644 --- a/internal/web/actions/default/settings/ui/index.go +++ b/internal/web/actions/default/settings/ui/index.go @@ -1,4 +1,4 @@ -package server +package ui import ( "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" @@ -15,7 +15,7 @@ func (this *IndexAction) Init() { } func (this *IndexAction) RunGet(params struct{}) { - config, err := configloaders.LoadUIConfig() + config, err := configloaders.LoadAdminUIConfig() if err != nil { this.ErrorPage(err) return @@ -41,7 +41,7 @@ func (this *IndexAction) RunPost(params struct { Field("adminSystemName", params.AdminSystemName). Require("请输入管理员系统名称") - config, err := configloaders.LoadUIConfig() + config, err := configloaders.LoadAdminUIConfig() if err != nil { this.ErrorPage(err) return @@ -51,7 +51,7 @@ func (this *IndexAction) RunPost(params struct { config.ShowOpenSourceInfo = params.ShowOpenSourceInfo config.ShowVersion = params.ShowVersion config.Version = params.Version - err = configloaders.UpdateUIConfig(config) + err = configloaders.UpdateAdminUIConfig(config) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/settings/ui/init.go b/internal/web/actions/default/settings/ui/init.go index 5faaf9ee..372cf6f0 100644 --- a/internal/web/actions/default/settings/ui/init.go +++ b/internal/web/actions/default/settings/ui/init.go @@ -1,4 +1,4 @@ -package server +package ui import ( "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" diff --git a/internal/web/actions/default/settings/user-ui/index.go b/internal/web/actions/default/settings/user-ui/index.go new file mode 100644 index 00000000..598cce09 --- /dev/null +++ b/internal/web/actions/default/settings/user-ui/index.go @@ -0,0 +1,61 @@ +package userui + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/iwind/TeaGo/actions" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.Nav("", "", "") +} + +func (this *IndexAction) RunGet(params struct{}) { + config, err := configloaders.LoadUserUIConfig() + if err != nil { + this.ErrorPage(err) + return + } + this.Data["config"] = config + + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + ProductName string + UserSystemName string + ShowOpenSourceInfo bool + ShowVersion bool + Version string + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + params.Must. + Field("productName", params.ProductName). + Require("请输入产品名称"). + Field("userSystemName", params.UserSystemName). + Require("请输入管理员系统名称") + + config, err := configloaders.LoadUserUIConfig() + if err != nil { + this.ErrorPage(err) + return + } + config.ProductName = params.ProductName + config.UserSystemName = params.UserSystemName + config.ShowOpenSourceInfo = params.ShowOpenSourceInfo + config.ShowVersion = params.ShowVersion + config.Version = params.Version + err = configloaders.UpdateUserUIConfig(config) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/settings/user-ui/init.go b/internal/web/actions/default/settings/user-ui/init.go new file mode 100644 index 00000000..68bc54b2 --- /dev/null +++ b/internal/web/actions/default/settings/user-ui/init.go @@ -0,0 +1,19 @@ +package userui + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/settingutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" + "github.com/iwind/TeaGo" +) + +func init() { + TeaGo.BeforeStart(func(server *TeaGo.Server) { + server. + Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeCommon)). + Helper(settingutils.NewHelper("userUI")). + Prefix("/settings/user-ui"). + GetPost("", new(IndexAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/users/createPopup.go b/internal/web/actions/default/users/createPopup.go index d92494bd..cad2c73d 100644 --- a/internal/web/actions/default/users/createPopup.go +++ b/internal/web/actions/default/users/createPopup.go @@ -20,14 +20,15 @@ func (this *CreatePopupAction) RunGet(params struct{}) { } func (this *CreatePopupAction) RunPost(params struct { - Username string - Pass1 string - Pass2 string - Fullname string - Mobile string - Tel string - Email string - Remark string + Username string + Pass1 string + Pass2 string + Fullname string + Mobile string + Tel string + Email string + Remark string + ClusterId int64 Must *actions.Must CSRF *actionutils.CSRF @@ -60,6 +61,10 @@ func (this *CreatePopupAction) RunPost(params struct { Field("fullname", params.Fullname). Require("请输入全名") + if params.ClusterId <= 0 { + this.Fail("请选择关联集群") + } + if len(params.Mobile) > 0 { params.Must. Field("mobile", params.Mobile). @@ -72,14 +77,15 @@ func (this *CreatePopupAction) RunPost(params struct { } createResp, err := this.RPC().UserRPC().CreateUser(this.AdminContext(), &pb.CreateUserRequest{ - Username: params.Username, - Password: params.Pass1, - Fullname: params.Fullname, - Mobile: params.Mobile, - Tel: params.Tel, - Email: params.Email, - Remark: params.Remark, - Source: "admin:" + numberutils.FormatInt64(this.AdminId()), + Username: params.Username, + Password: params.Pass1, + Fullname: params.Fullname, + Mobile: params.Mobile, + Tel: params.Tel, + Email: params.Email, + Remark: params.Remark, + Source: "admin:" + numberutils.FormatInt64(this.AdminId()), + ClusterId: params.ClusterId, }) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/users/index.go b/internal/web/actions/default/users/index.go index 46d14b65..656c8b79 100644 --- a/internal/web/actions/default/users/index.go +++ b/internal/web/actions/default/users/index.go @@ -34,6 +34,13 @@ func (this *IndexAction) RunGet(params struct { } userMaps := []maps.Map{} for _, user := range usersResp.Users { + var clusterMap maps.Map = nil + if user.Cluster != nil { + clusterMap = maps.Map{ + "id": user.Cluster.Id, + "name": user.Cluster.Name, + } + } userMaps = append(userMaps, maps.Map{ "id": user.Id, "username": user.Username, @@ -43,6 +50,7 @@ func (this *IndexAction) RunGet(params struct { "mobile": user.Mobile, "tel": user.Tel, "createdTime": timeutil.FormatTime("Y-m-d H:i:s", user.CreatedAt), + "cluster": clusterMap, }) } this.Data["users"] = userMaps diff --git a/internal/web/actions/default/users/update.go b/internal/web/actions/default/users/update.go index 8314424d..59a91fb3 100644 --- a/internal/web/actions/default/users/update.go +++ b/internal/web/actions/default/users/update.go @@ -47,20 +47,26 @@ func (this *UpdateAction) RunGet(params struct { "isOn": user.IsOn, } + this.Data["clusterId"] = 0 + if user.Cluster != nil { + this.Data["clusterId"] = user.Cluster.Id + } + this.Show() } func (this *UpdateAction) RunPost(params struct { - UserId int64 - Username string - Pass1 string - Pass2 string - Fullname string - Mobile string - Tel string - Email string - Remark string - IsOn bool + UserId int64 + Username string + Pass1 string + Pass2 string + Fullname string + Mobile string + Tel string + Email string + Remark string + IsOn bool + ClusterId int64 Must *actions.Must CSRF *actionutils.CSRF @@ -109,15 +115,16 @@ func (this *UpdateAction) RunPost(params struct { } _, err = this.RPC().UserRPC().UpdateUser(this.AdminContext(), &pb.UpdateUserRequest{ - UserId: params.UserId, - Username: params.Username, - Password: params.Pass1, - Fullname: params.Fullname, - Mobile: params.Mobile, - Tel: params.Tel, - Email: params.Email, - Remark: params.Remark, - IsOn: params.IsOn, + UserId: params.UserId, + Username: params.Username, + Password: params.Pass1, + Fullname: params.Fullname, + Mobile: params.Mobile, + Tel: params.Tel, + Email: params.Email, + Remark: params.Remark, + IsOn: params.IsOn, + ClusterId: params.ClusterId, }) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/users/user.go b/internal/web/actions/default/users/user.go index 9966b2aa..8b63b004 100644 --- a/internal/web/actions/default/users/user.go +++ b/internal/web/actions/default/users/user.go @@ -35,6 +35,14 @@ func (this *UserAction) RunGet(params struct { return } + var clusterMap maps.Map = nil + if user.Cluster != nil { + clusterMap = maps.Map{ + "id": user.Cluster.Id, + "name": user.Cluster.Name, + } + } + this.Data["user"] = maps.Map{ "id": user.Id, "username": user.Username, @@ -44,6 +52,7 @@ func (this *UserAction) RunGet(params struct { "remark": user.Remark, "mobile": user.Mobile, "isOn": user.IsOn, + "cluster": clusterMap, } this.Show() diff --git a/internal/web/helpers/user_must_auth.go b/internal/web/helpers/user_must_auth.go index 85b51efd..d7321b6a 100644 --- a/internal/web/helpers/user_must_auth.go +++ b/internal/web/helpers/user_must_auth.go @@ -74,7 +74,7 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam return true } - config, err := configloaders.LoadUIConfig() + config, err := configloaders.LoadAdminUIConfig() if err != nil { action.WriteString(err.Error()) return false diff --git a/internal/web/import.go b/internal/web/import.go index c71aeef3..0563e039 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -86,6 +86,7 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/ui" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/upgrade" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/user-nodes" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/user-ui" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/setup" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/ui" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/users" diff --git a/web/public/js/components/cluster/cluster-selector.js b/web/public/js/components/cluster/cluster-selector.js new file mode 100644 index 00000000..17faf648 --- /dev/null +++ b/web/public/js/components/cluster/cluster-selector.js @@ -0,0 +1,28 @@ +Vue.component("cluster-selector", { + mounted: function () { + let that = this + + Tea.action("/clusters/options") + .post() + .success(function (resp) { + that.clusters = resp.data.clusters + }) + }, + props: ["v-cluster-id"], + data: function () { + let clusterId = this.vClusterId + if (clusterId == null) { + clusterId = 0 + } + return { + clusters: [], + clusterId: clusterId + } + }, + template: `
+ +
` +}) \ No newline at end of file diff --git a/web/views/@default/@layout.css b/web/views/@default/@layout.css index 57f694aa..d4bd3582 100644 --- a/web/views/@default/@layout.css +++ b/web/views/@default/@layout.css @@ -213,9 +213,6 @@ body .ui.menu .item .blink { body.expanded .main-menu { display: none; } -body.expanded .sub-menu { - display: none; -} body.expanded .main { left: 1em; } @@ -226,6 +223,7 @@ body.expanded .main { width: 100%; z-index: 1000; overflow-x: auto; + border: 0 !important; background: #276ac6 !important; } .top-nav::-webkit-scrollbar { @@ -362,6 +360,8 @@ body.expanded .main { } .main-menu .menu { background: #276ac6 !important; + border: 0 !important; + box-shadow: none !important; } .main-menu::-webkit-scrollbar { width: 2px; @@ -401,113 +401,6 @@ body.expanded .main { z-index: 999999; background: white; } -/** 子菜单 **/ -.main.without-menu .sub-menu { - display: none; -} -.sub-menu { - position: fixed; - left: 8em; - width: 12.5em; - top: 3em; - bottom: 2.8em; -} -.sub-menu .menus-box { - overflow-y: auto; - position: absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; - padding-right: 0.4em !important; -} -.sub-menu .menus-box::-webkit-scrollbar { - width: 4px; - height: 4px; -} -.sub-menu .menu { - max-width: 12em !important; - border-right: 0 !important; -} -@media screen and (max-width: 512px) { - .sub-menu { - position: relative; - width: 100%; - left: 0; - top: 0; - } - .sub-menu .menus-box { - position: relative !important; - } - .sub-menu .menu { - width: 100% !important; - max-width: 30em !important; - } - .sub-menu .menus-box .menu .item { - width: 100% !important; - max-width: 30em !important; - } -} -.sub-menu .menu .item.active { - font-weight: normal !important; - outline: none !important; -} -.sub-menu .menu .item:not(.header) { - padding-top: 0.7em !important; - padding-bottom: 0.7em !important; -} -.sub-menu .menu .item:not(.header) span { - font-size: 0.8em; - display: block; - margin-top: 0.6em !important; - line-height: 1.5; -} -.sub-menu .menu .item:not(.active):hover { - background: rgba(0, 0, 0, 0.05) !important; - border-top: 1px white solid !important; - border-bottom: 1px white solid !important; - margin-top: -1px !important; - margin-bottom: -1px !important; -} -.sub-menu .menu .item.active { - background: rgba(0, 0, 0, 0.05) !important; -} -.sub-menu .menu .item var { - font-style: normal; -} -.sub-menu .menu .item:not(.active) var.grey { - color: grey; -} -.sub-menu .menu .item span:not(.green) { - color: grey; -} -.sub-menu .menu .item span.red { - color: #db2828 !important; -} -.sub-menu .menus-box .menu .item.header { - padding-right: 0.2em !important; - cursor: pointer; -} -.sub-menu .menus-box .menu .item.header span { - font-weight: normal; - color: grey; - font-size: 0.8em; -} -.sub-menu .menus-box .menu a { - display: block; - word-break: break-all; - line-height: 1.6 !important; -} -.sub-menu .menus-box .menu .item .menu { - margin-top: 0 !important; -} -.sub-menu .fourth-menu { - margin-left: 1.2em; -} -.sub-menu .fourth-menu .icon, -.sub-menu .third-menu .icon { - float: left !important; -} /** 右侧文本子菜单 **/ .text.menu { overflow-x: auto; diff --git a/web/views/@default/@layout.css.map b/web/views/@default/@layout.css.map index 88e61195..bbfac9b2 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":"AAAA;EACC,UAAA;EACA,eAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,4BAAA;;AAPD,SASC;EACC,qBAAA;;AAVF,SASC,MAGC;EACC,gBAAA;EACA,kBAAA;EACA,4BAAA;;AAfH,SASC,MAGC,MAKC;EACC,kBAAA;EACA,QAAA;EACA,OAAA;EACA,kBAAA;;AArBJ,SASC,MAgBC,MAAK;EACJ,wCAAA;EACA,cAAA;EACA,iBAAA;EACA,wBAAA;EACA,2BAAA;;AA9BH,SASC,MAwBC,MAAK,GACJ;EACC,8BAAA;;AAnCJ,SASC,MA8BC,MAAK,IACJ,KACC;EACC,kBAAA;EACA,mBAAA;EACA,YAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,gBAAA;;AAhDL,SASC,MA6CC;EACC,6BAAA;EACA,0BAAA;EACA,8BAAA;;AAQH,SAAS;EACR,UAAA;;AAGD,SAAS;EACR,YAAA;;AAGD,SAAS;EACR,WAAA;;AAGD,SAAS;EACR,QAAA;;AAGD;EACC,eAAA;EACA,UAAA;EACA,aAAA;EACA,QAAA;EACA,UAAA;EACA,kBAAA;EACA,mBAAA;EACA,gBAAA;;AAGD,UAAU;EACT,WAAA;EACA,YAAA;;AAGD,UAAU;EACT,UAAA;;AAGD,UAAU;EACT,QAAA;;;ACnGD;EACC,WAAA;;AAGD;EACC,aAAA;;AAGD;EACC,qBAAA;;AAGD,CAAC;AAAW,CAAC,SAAS;AAAQ,CAAC,SAAS;AAAS,IAAI;EACpD,sBAAA;;AAGD,CAAC;AAAU,IAAI;AAAU,IAAI;EAC5B,cAAA;;AAGD,IAAI;AAAO,KAAK;AAAO,CAAC;EACvB,sBAAA;;AAGD,CAAC;EACA,iBAAA;;AAGD,IAAI;AAAM,GAAG;EACZ,cAAA;;AAGD,IAAI;EACH,cAAA;;AAGD,GAAG,IAAI;EACN,mBAAmB,8CAAnB;;AAGD;EACC,uBAAA;;AAGD,MAAM;EACL,sBAAA;;AAGD,MAAM;EACL,sBAAA;;AAGD,MAAM;EACL,sBAAA;;AAGD,MAAO;AAAI,MAAO;EACjB,2BAAA;;AAGD,MAAO,GAAE,OAAQ;EAChB,+BAAA;;AAGD,CAAC;AAAU,GAAG;EACb,yBAAA;EACA,kBAAA;EACA,cAAA;;AAGD,CAAC,QAAS;AAAI,GAAG,QAAS;EACzB,6BAAA;;AAGD;EACC,mBAAA;EACA,2BAAA;EACA,gBAAA;EACA,uBAAA;;AAGD,GAAG;AAAS,CAAC;EACZ,eAAA;;;AAID,GAAG;EACF,UAAA;;AAGD,GAAG;EACF,YAAA;;AAGD,GAAG;EACF,UAAA;;AAGD,GAAG;EACF,WAAA;;;AAID,UACC,IAAG;EACF,uBAAA;EACA,2BAAA;;AAmBF,mBAfqC;EACpC,UAAW,IAAG;IACb,uBAAA;;EAGD,UAAW,IAAG,KAAM;IACnB,gBAAA;IACA,qBAAA;;EAGD,UAAW,IAAG,KAAM,MAAM;IACzB,aAAA;;;AAIF,UAAW,IAAG,QAAQ,KAAK,KAAM;EAChC,gBAAA;;AAGD,UACC,IAAG,KAKF,WACC;EACC,+BAAA;;AARJ,UACC,IAAG,KAKF,WAKC,MAAK;EACJ,oCAAA;;;AAOJ,MAAM;EACL,aAAA;;;AAID;EACC;IACC,YAAA;;EAED;IACC,YAAA;;;AAIF,IAAK,IAAG,KAAM,MAAM;EACnB,4BAAA;;AAGD,IAAI,SAAU;EACb,aAAA;;AAGD,IAAI,SAAU;EACb,SAAA;;;AAID;EACC,2BAAA;EACA,eAAA;EACA,WAAA;EACA,aAAA;EACA,gBAAA;EACA,oBAAA;EACA,8BAAA;;AAGD,QAAQ;EACP,WAAA;;AAGD,QAAS,IAAG;EACX,uBAAA;EACA,wBAAA;EACA,cAAA;EACA,gBAAA;EACA,oBAAA;EACA,8BAAA;;AAGD,QAAS;EACR,kBAAA;EACA,gBAAA;EACA,mBAAA;;AAGD,QAAS,MAAK;EACb,qBAAA;;;AAID;EACC,eAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,YAAA;EACA,iBAAA;;AAGD,mBAAoB;EACnB,wBAAA;EACA,2BAAA;EACA,2BAAA;;AAGD,mBAAoB,MAAM;EACzB,kBAAA;;AAGD,mBAAoB;EACnB,wBAAA;EACA,2BAAA;;AAUD,mBAPqC;EACpC;IACC,SAAA;;;;AAKF;EACC,kBAAA;EACA,UAAA;EACA,UAAA;EACA,mBAAA;EACA,kBAAA;EACA,UAAA;;AASD,mBANqC;EACpC;IACC,SAAA;;;AAIF,KAAK;EACJ,SAAA;;AAGD,KAAK;EACJ,UAAA;;AASD,mBANqC;EACpC,KAAK;IACJ,SAAA;;;AAIF,KAAM,MAAM,GAAE;EACb,WAAA;;AAGD,KAAM,MAAM,GAAE;EACb,WAAA;;AAGD,KAAM,MAAM;EACX,mBAAA;;AAGD,KAAM,MAAM,GAAE;EACb,yCAAA;;AAGD,KAAM,MAAM,GAAE;EACb,mBAAA;;AAGD,KAAM,MAAM,GAAE;EACb,sBAAA;;AAGD,KAAM,MAAM,GAAE,aAAc;EAC3B,mBAAA;;AAGD,KAAM,MAAM,GAAG;EACd,mBAAA;EACA,kBAAA;EACA,gBAAA;;AAGD,KAAM;EACL,mBAAA;EACA,0BAAA;EACA,kBAAA;;AAGD,KAAM,GAAG;EACR,gBAAA;;AAGD,KAAM,GAAG,KAAI;EACZ,cAAA;;AAGD,KAAM,GAAG;EACR,gBAAA;EACA,0BAAA;EACA,UAAA;;AAGD,KAAM;EACL,mBAAA;;AAGD,KAAM,GAAG,KAAI;EACZ,gBAAA;;AAGD,KAAM,QAAO;EACZ,gBAAA;EACA,cAAA;EACA,gBAAA;;AAGD;EACC,eAAA;;EAEA,QAAA;EACA,SAAA;EACA,gBAAA;EACA,8BAAA;EACA,WAAA;;AAPD,UASC;EACC,8BAAA;EACA,oBAAA;EACA,2BAAA;;AAIF,UAAU;EACT,UAAA;;AAGD,KACC;EACC,0BAAA;EACA,2BAAA;EACA,gBAAA;EACA,kBAAA;;AALF,KACC,UAMC;EACC,uBAAA;;AARH,KACC,UAMC,MAGC;EACC,kBAAA;;AAXJ,KACC,UAMC,MAOC;EACC,gBAAA;EACA,mBAAA;;AAhBJ,KACC,UAMC,MAYC;EACC,kBAAA;;AApBJ,KACC,UAuBC,MAAK;EACJ,8BAAA;;AAzBH,KA6BC,UAAS;EACR,WAAA;;AAKF,KAAM;EACL,eAAA;EACA,YAAA;EACA,WAAA;EACA,cAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;;;AAID,KAAK;EACJ,gBAAA;;AAGD,KAAK,KAAK;EACT,UAAA;EACA,WAAA;;;AAID;EACC,eAAA;EACA,SAAA;EACA,gBAAA;EACA,WAAA;EACA,WAAA;EACA,2BAAA;EACA,WAAA;EACA,gBAAA;;AAGD,OAAO;EACN,WAAA;;AAGD,OAAQ;EACP,gBAAA;;AAGD,OAAQ,EAAE;EACT,aAAA;;AAGD,OAAQ,EAAC,MAAO;AAAM,OAAQ,EAAC,OAAQ;EACtC,aAAA;;AAGD,OAAQ,EAAC,MAAO;AAAM,OAAQ,EAAC,OAAQ;EACtC,cAAA;;AAGD,OAAQ,KAAK;EACZ,UAAA;EACA,SAAA;;AAGD;EACC,eAAA;EACA,eAAA;EACA,OAAA;EACA,MAAA;EACA,QAAA;EACA,8BAAA;EACA,aAAA;;AAGD,iBAAkB;EACjB,WAAA;EACA,kBAAA;EACA,QAAA;EACA,SAAA;EACA,iBAAA;EACA,kBAAA;;AAGD,iBAAkB,QAAQ;EACzB,WAAA;;AAGD,iBAAkB,QAAQ;EACzB,kBAAA;EACA,YAAA;EACA,UAAA;;AAWD,mBARqC;EACpC,iBAAkB;IACjB,cAAA;IACA,WAAA;;;;AAKF;EACC,wBAAA;;;AAID,iBAAkB;EACjB,2BAAA;;AAGD,iBAAkB,MAAK;EACtB,UAAA;;AAGD,iBAAkB,MAAM;EACvB,2BAAA;;AAGD,MAAM;EACL,sBAAA;;;AAWD,mBAPqC;EACpC,OAAO,IAAI;IACV,sBAAA;;;AAKF,KAAK;EACJ,0BAAA;;AAGD,KAAK;EACJ,yBAAA;;;AAID,WAAY,MAAK;EAChB,wBAAA;EACA,2BAAA;;AAGD,WAAY;EACX,wBAAA;EACA,2BAAA;;AAGD,YAAa,MAAK;EACjB,wBAAA;EACA,2BAAA;;AAGD,YAAa,MAAK,KAAM;EACvB,kBAAA;;AAGD,YAAa;EACZ,wBAAA;;AAGD,KAAM;EACL,aAAA;;;AAID,IAAI;AAAQ,GAAG;EACd,yBAAA;;AAGD,GAAG;EACF,8BAAA;;;AAID,SAAU,MAAM;AAAG,SAAU;EAC5B,2BAAA;;;AAQD;EACC,eAAA;EAEA,2BAAA;;AAHD,KAKC;EACC,qBAAA;EACA,mBAAA;EACA,WAAA;EACA,iBAAA;EACA,SAAA;EACA,gBAAA;EACA,sBAAA;EACA,cAAA;;AAbF,KAgBC,EAAC;EACA,8BAAA;EACA,YAAA;;AAlBF,KAqBC,EAAC;EACA,gBAAA;;;AAKF;EACC,kBAAA;;AAGD;AAAc,YAAY;EACzB,SAAA;;AAGD,cAAc;AAAQ,aAAa;EAClC,iCAAA;;AAGD;AAAgB;EACf,iCAAA;;AAGD;EACC,2BAAA;;;AAID;EACC,2BAAA;EACA,YAAA;;AAGD;EACC,YAAA;;AAGD,KAAK;EACJ,eAAA;;AAGD,MAAM;EACL,4BAAA;EACA,+BAAA;EACA,cAAA;EACA,gBAAA;;AAID;EACC,qBAAA;;AAGD,EAAG,OAAM;EACR,+BAAA;;AAID;EACC,qBAAA","file":"@layout.css"} \ No newline at end of file diff --git a/web/views/@default/@layout.less b/web/views/@default/@layout.less index 6059c7b1..d80b7032 100644 --- a/web/views/@default/@layout.less +++ b/web/views/@default/@layout.less @@ -171,10 +171,6 @@ body.expanded .main-menu { display: none; } -body.expanded .sub-menu { - display: none; -} - body.expanded .main { left: 1em; } @@ -186,6 +182,7 @@ body.expanded .main { width: 100%; z-index: 1000; overflow-x: auto; + border: 0 !important; background: #276ac6 !important; } @@ -349,10 +346,12 @@ body.expanded .main { overflow-y: auto; background: #276ac6 !important; z-index: 10; -} -.main-menu .menu { - background: #276ac6 !important; + .menu { + background: #276ac6 !important; + border: 0 !important; + box-shadow: none !important; + } } .main-menu::-webkit-scrollbar { @@ -405,136 +404,6 @@ body.expanded .main { background: white; } -/** 子菜单 **/ -.main.without-menu .sub-menu { - display: none; -} - -.sub-menu { - position: fixed; - left: 8em; - width: 12.5em; - top: 3em; - bottom: 2.8em; -} - -.sub-menu .menus-box { - overflow-y: auto; - position: absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; - padding-right: 0.4em !important; -} - -.sub-menu .menus-box::-webkit-scrollbar { - width: 4px; - height: 4px; -} - -.sub-menu .menu { - max-width: 12em !important; - border-right: 0 !important; -} - -@media screen and (max-width: 512px) { - .sub-menu { - position: relative; - width: 100%; - left: 0; - top: 0; - } - - .sub-menu .menus-box { - position: relative !important; - } - - .sub-menu .menu { - width: 100% !important; - max-width: 30em !important; - } - - .sub-menu .menus-box .menu .item { - width: 100% !important; - max-width: 30em !important; - } -} - -.sub-menu .menu .item.active { - font-weight: normal !important; - outline: none !important; -} - -.sub-menu .menu .item:not(.header) { - padding-top: 0.7em !important; - padding-bottom: 0.7em !important; -} - -.sub-menu .menu .item:not(.header) span { - font-size: 0.8em; - display: block; - margin-top: 0.6em !important; - line-height: 1.5; -} - -.sub-menu .menu .item:not(.active):hover { - background: rgba(0, 0, 0, 0.05) !important; - border-top: 1px white solid !important; - border-bottom: 1px white solid !important; - margin-top: -1px !important; - margin-bottom: -1px !important; -} - -.sub-menu .menu .item.active { - background: rgba(0, 0, 0, 0.05) !important; -} - -.sub-menu .menu .item var { - font-style: normal; -} - -.sub-menu .menu .item:not(.active) var.grey { - color: grey; -} - -.sub-menu .menu .item span:not(.green) { - color: grey; -} - -.sub-menu .menu .item span.red { - color: #db2828 !important; -} - -.sub-menu .menus-box .menu .item.header { - padding-right: 0.2em !important; - cursor: pointer; -} - -.sub-menu .menus-box .menu .item.header span { - font-weight: normal; - color: grey; - font-size: 0.8em; -} - -.sub-menu .menus-box .menu a { - display: block; - word-break: break-all; - line-height: 1.6 !important; -} - -.sub-menu .menus-box .menu .item .menu { - margin-top: 0 !important; -} - -.sub-menu .fourth-menu { - margin-left: 1.2em; -} - -.sub-menu .fourth-menu .icon, .sub-menu .third-menu .icon { - float: left !important; -} - /** 右侧文本子菜单 **/ .text.menu { overflow-x: auto; diff --git a/web/views/@default/settings/user-ui/index.html b/web/views/@default/settings/user-ui/index.html new file mode 100644 index 00000000..bd749bd1 --- /dev/null +++ b/web/views/@default/settings/user-ui/index.html @@ -0,0 +1,41 @@ +{$layout} + +
+ + + + + + + + + + + + + + + + + + + + + + + +
产品名称 * + +
用户系统名称 * + +
是否显示底部开源信息 + +
是否显示版本号 + +
定制版本号 + +

定制自己的版本号,留空表示使用系统自带的版本号。

+
+ + +
\ No newline at end of file diff --git a/web/views/@default/settings/user-ui/index.js b/web/views/@default/settings/user-ui/index.js new file mode 100644 index 00000000..295a9aaf --- /dev/null +++ b/web/views/@default/settings/user-ui/index.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.success = NotifyReloadSuccess("保存成功") +}) \ No newline at end of file diff --git a/web/views/@default/users/createPopup.html b/web/views/@default/users/createPopup.html index 1ed538c2..81fb0e96 100644 --- a/web/views/@default/users/createPopup.html +++ b/web/views/@default/users/createPopup.html @@ -31,6 +31,13 @@

用户姓名或者公司名称等等。

+ + 关联集群 * + + +

用户发布的网站服务会自动部署到此集群。

+ + diff --git a/web/views/@default/users/index.html b/web/views/@default/users/index.html index 38f87d2e..44087265 100644 --- a/web/views/@default/users/index.html +++ b/web/views/@default/users/index.html @@ -10,6 +10,7 @@ 用户名 全名 + 关联集群 手机号 注册时间 状态 @@ -19,6 +20,10 @@ {{user.username}} {{user.fullname}} + + {{user.cluster.name}} + - + {{user.mobile}} - diff --git a/web/views/@default/users/index.js b/web/views/@default/users/index.js index 494be81e..0941fbe1 100644 --- a/web/views/@default/users/index.js +++ b/web/views/@default/users/index.js @@ -1,6 +1,7 @@ Tea.context(function () { this.createUser = function () { teaweb.popup(Tea.url(".createPopup"), { + height: "30em", callback: function () { teaweb.success("保存成功", function () { teaweb.reload() diff --git a/web/views/@default/users/update.html b/web/views/@default/users/update.html index 07d6807a..3225c6f2 100644 --- a/web/views/@default/users/update.html +++ b/web/views/@default/users/update.html @@ -38,6 +38,13 @@

用户姓名或者公司名称等等。

+ + 关联集群 * + + +

用户发布的网站服务会自动部署到此集群。

+ + diff --git a/web/views/@default/users/user.html b/web/views/@default/users/user.html index ccb78242..efbffeb0 100644 --- a/web/views/@default/users/user.html +++ b/web/views/@default/users/user.html @@ -20,6 +20,13 @@ {{user.fullname}} + + 关联集群 + + {{user.cluster.name}} + - + + 手机号