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":"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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 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}}
+ -
+ |
+
| 手机号 |
|