From e678a16abbeb9371ec6669ee5302107100e9262a Mon Sep 17 00:00:00 2001 From: laijinhang <761774955@qq.com> Date: Fri, 13 Mar 2020 16:44:38 +0800 Subject: [PATCH 1/7] Switch language on the front end, implement the back end code --- modules/config/config.go | 41 ++++++++++++++++++++++ modules/language/language.go | 31 ++++++++++++++++ modules/menu/menu.go | 16 ++++++--- plugins/admin/controller/detail.go | 6 ++++ plugins/admin/controller/edit.go | 14 ++++++++ plugins/admin/controller/show.go | 6 ++-- plugins/admin/modules/response/response.go | 10 ++++-- 7 files changed, 113 insertions(+), 11 deletions(-) diff --git a/modules/config/config.go b/modules/config/config.go index 197a1517c..3eacf90ff 100644 --- a/modules/config/config.go +++ b/modules/config/config.go @@ -455,6 +455,47 @@ type ExtraInfo map[string]interface{} type UpdateConfigProcessFn func(values form.Values) (form.Values, error) +// UserConfig type is the user config of goAdmin. +type UserConfig struct { + // user id + UserId int64 `json:"userid",yaml:"userid",ini:"userid"` + + // Used to set as the user language which show in the + // interface. + Language string `json:"language",yaml:"language",ini:"language"` + + // Extend + // ... +} + +var userConfig []UserConfig + +// Get gets the config. +func SetUserConfig(uConf UserConfig) { + // insert or update to database, If there is a database + for i := 0; i < len(userConfig); i++ { + if userConfig[i].UserId == uConf.UserId { + userConfig[i] = uConf + return + } + } + userConfig = append(userConfig, uConf) +} + +// Get GetUserConf the config. +func GetUserConf(uId int64) *UserConfig { + for i := 0; i < len(userConfig); i++ { + if userConfig[i].UserId == uId { + return &userConfig[i] + } + } + SetUserConfig(UserConfig{ + UserId: uId, + Language: _global.Language, + }) + return &userConfig[len(userConfig)-1] +} + // see more: https://daneden.github.io/animate.css/ type PageAnimation struct { Type string `json:"type,omitempty" yaml:"type,omitempty" ini:"type,omitempty"` diff --git a/modules/language/language.go b/modules/language/language.go index 11539fb7a..d96de9743 100644 --- a/modules/language/language.go +++ b/modules/language/language.go @@ -160,3 +160,34 @@ func JoinScopes(scopes []string) string { } return j } + +// GetUser return the value of user scope. +func GetUser(value string, uid int64) string { + return GetUserWithScope(value, uid) +} + +// GetUserWithScope return the value of given scopes. +func GetUserWithScope(value string, uid int64, scopes ...string) string { + if config.GetUserConf(uid).Language == "" { + return value + } + + if locale, ok := Lang[config.GetUserConf(uid).Language][JoinScopes(scopes)+strings.ToLower(value)]; ok { + return locale + } + + return value +} + +// GetUserFromHtml return the value of given scopes and template.HTML value. +func GetUserFromHtml(value template.HTML, uid int64, scopes ...string) template.HTML { + if config.GetUserConf(uid).Language == "" { + return value + } + + if locale, ok := Lang[config.GetUserConf(uid).Language][JoinScopes(scopes)+strings.ToLower(string(value))]; ok { + return template.HTML(locale) + } + + return value +} \ No newline at end of file diff --git a/modules/menu/menu.go b/modules/menu/menu.go index aa78964fa..4d1110be7 100644 --- a/modules/menu/menu.go +++ b/modules/menu/menu.go @@ -203,14 +203,19 @@ func GetGlobalMenu(user models.UserModel, conn db.Connection, lang string, plugi var title string for i := 0; i < len(menus); i++ { - title = language.GetWithLang(menus[i]["title"].(string), lang) + if menus[i]["type"].(int64) == 1 { + title = language.GetUser(menus[i]["title"].(string), user.Id) + } else { + title = language.GetWithLang(menus[i]["title"].(string), lang) + } + menuOption = append(menuOption, map[string]string{ "id": strconv.FormatInt(menus[i]["id"].(int64), 10), "title": title, }) } - menuList := constructMenuTree(menus, 0, lang) + menuList := constructMenuTree(menus, 0, lang, user.Id) maxOrder := int64(0) if len(menus) > 0 { maxOrder = menus[len(menus)-1]["parent_id"].(int64) @@ -224,15 +229,16 @@ func GetGlobalMenu(user models.UserModel, conn db.Connection, lang string, plugi } } -func constructMenuTree(menus []map[string]interface{}, parentID int64, lang string) []Item { +func constructMenuTree(menus []map[string]interface{}, parentID int64, lang string, uid int64) []Item { branch := make([]Item, 0) var title string for j := 0; j < len(menus); j++ { if parentID == menus[j]["parent_id"].(int64) { + if menus[j]["type"].(int64) == 1 { - title = language.Get(menus[j]["title"].(string)) + title = language.GetUser(menus[j]["title"].(string), uid) } else { title = menus[j]["title"].(string) } @@ -256,7 +262,7 @@ func constructMenuTree(menus []map[string]interface{}, parentID int64, lang stri Icon: menus[j]["icon"].(string), Header: header, Active: "", - ChildrenList: constructMenuTree(menus, menus[j]["id"].(int64), lang), + ChildrenList: constructMenuTree(menus, menus[j]["id"].(int64), lang, uid), } branch = append(branch, child) diff --git a/plugins/admin/controller/detail.go b/plugins/admin/controller/detail.go index ab10ebd86..a783b5407 100644 --- a/plugins/admin/controller/detail.go +++ b/plugins/admin/controller/detail.go @@ -118,6 +118,9 @@ $('.delete-btn').on('click', function (event) { desc := "" isNotIframe := ctx.Query(constant.IframeKey) != "true" + if title == "" { + title = panel.GetInfo().Title + language.GetUser("Detail", user.Id) + } if isNotIframe { title = detail.Title @@ -125,6 +128,9 @@ $('.delete-btn').on('click', function (event) { if title == "" { title = info.Title + language.Get("Detail") } + if desc == "" { + desc = panel.GetInfo().Description + language.GetUser("Detail", user.Id) + } desc = detail.Description diff --git a/plugins/admin/controller/edit.go b/plugins/admin/controller/edit.go index 1a6e1ca4d..ef5b11d47 100644 --- a/plugins/admin/controller/edit.go +++ b/plugins/admin/controller/edit.go @@ -14,8 +14,10 @@ import ( "github.com/GoAdminGroup/go-admin/context" "github.com/GoAdminGroup/go-admin/modules/auth" + "github.com/GoAdminGroup/go-admin/modules/config" "github.com/GoAdminGroup/go-admin/modules/file" "github.com/GoAdminGroup/go-admin/modules/language" + "github.com/GoAdminGroup/go-admin/plugins/admin/models" "github.com/GoAdminGroup/go-admin/plugins/admin/modules" "github.com/GoAdminGroup/go-admin/plugins/admin/modules/constant" form2 "github.com/GoAdminGroup/go-admin/plugins/admin/modules/form" @@ -228,3 +230,15 @@ func (h *Handler) EditForm(ctx *context.Context) { ctx.HTML(http.StatusOK, buf.String()) ctx.AddHeader(constant.PjaxUrlHeader, param.PreviousPath) } + +func (h *Handler) SetLanguage(ctx *context.Context) { + if len(ctx.PostForm()["language"]) == 0 { + return + } + if user, ok := ctx.UserValue["user"].(models.UserModel); ok { + config.SetUserConfig(config.UserConfig{ + UserId: user.Id, + Language: ctx.PostForm()["language"][0], + }) + } +} diff --git a/plugins/admin/controller/show.go b/plugins/admin/controller/show.go index 303906ae4..0110ab55f 100644 --- a/plugins/admin/controller/show.go +++ b/plugins/admin/controller/show.go @@ -137,7 +137,7 @@ func (h *Handler) showTable(ctx *context.Context, prefix string, params paramete ext := template2.HTML("") if deleteUrl != "" { ext = html.LiEl().SetClass("divider").Get() - allActionBtns = append([]types.Button{types.GetActionButton(language.GetFromHtml("delete"), + allActionBtns = append([]types.Button{types.GetActionButton(language.GetUserFromHtml("delete", user.Id), types.NewDefaultAction(`data-id='{{.Id}}' data-param='{{(index .Value "__goadmin_delete_params").Content}}' style="cursor: pointer;"`, ext, "", ""), "grid-row-delete")}, allActionBtns...) } @@ -146,14 +146,14 @@ func (h *Handler) showTable(ctx *context.Context, prefix string, params paramete if editUrl == "" && deleteUrl == "" { ext = html.LiEl().SetClass("divider").Get() } - allActionBtns = append([]types.Button{types.GetActionButton(language.GetFromHtml("detail"), + allActionBtns = append([]types.Button{types.GetActionButton(language.GetUserFromHtml("detail", user.Id), action.Jump(detailUrl+"&"+constant.DetailPKKey+`={{.Id}}{{(index .Value "__goadmin_detail_params").Content}}`, ext))}, allActionBtns...) } if editUrl != "" { if detailUrl == "" && deleteUrl == "" { ext = html.LiEl().SetClass("divider").Get() } - allActionBtns = append([]types.Button{types.GetActionButton(language.GetFromHtml("edit"), + allActionBtns = append([]types.Button{types.GetActionButton(language.GetUserFromHtml("edit", user.Id), action.Jump(editUrl+"&"+constant.EditPKKey+`={{.Id}}{{(index .Value "__goadmin_edit_params").Content}}`, ext))}, allActionBtns...) } diff --git a/plugins/admin/modules/response/response.go b/plugins/admin/modules/response/response.go index 33706a46d..fed7bcb97 100644 --- a/plugins/admin/modules/response/response.go +++ b/plugins/admin/modules/response/response.go @@ -10,6 +10,7 @@ import ( "github.com/GoAdminGroup/go-admin/modules/errors" "github.com/GoAdminGroup/go-admin/modules/language" "github.com/GoAdminGroup/go-admin/modules/menu" + "github.com/GoAdminGroup/go-admin/plugins/admin/models" "github.com/GoAdminGroup/go-admin/template" "github.com/GoAdminGroup/go-admin/template/types" ) @@ -37,9 +38,10 @@ func OkWithData(ctx *context.Context, data map[string]interface{}) { } func BadRequest(ctx *context.Context, msg string) { + user := ctx.UserValue["user"].(models.UserModel) ctx.JSON(http.StatusBadRequest, map[string]interface{}{ "code": http.StatusBadRequest, - "msg": language.Get(msg), + "msg": language.GetUser(msg, user.Id), }) } @@ -75,9 +77,10 @@ func Alert(ctx *context.Context, desc, title, msg string, conn db.Connection, bt } func Error(ctx *context.Context, msg string, datas ...map[string]interface{}) { + user := ctx.UserValue["user"].(models.UserModel) res := map[string]interface{}{ "code": http.StatusInternalServerError, - "msg": language.Get(msg), + "msg": language.GetUser(msg, user.Id), } if len(datas) > 0 { res["data"] = datas[0] @@ -86,9 +89,10 @@ func Error(ctx *context.Context, msg string, datas ...map[string]interface{}) { } func Denied(ctx *context.Context, msg string) { + user := ctx.UserValue["user"].(models.UserModel) ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ "code": http.StatusForbidden, - "msg": language.Get(msg), + "msg": language.GetUser(msg, user.Id), }) } From 4d4df4bfb928fa48546257c4c84379b535b7bcb4 Mon Sep 17 00:00:00 2001 From: laijinhang <30384322+laijinhang@users.noreply.github.com> Date: Fri, 13 Mar 2020 16:50:32 +0800 Subject: [PATCH 2/7] Update config.go --- modules/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/config/config.go b/modules/config/config.go index 3eacf90ff..d2dfb0539 100644 --- a/modules/config/config.go +++ b/modules/config/config.go @@ -470,7 +470,7 @@ type UserConfig struct { var userConfig []UserConfig -// Get gets the config. +// Set SetUserConfig the config. func SetUserConfig(uConf UserConfig) { // insert or update to database, If there is a database for i := 0; i < len(userConfig); i++ { From a45d01eff2b3632555410d106062e7e9032ccb74 Mon Sep 17 00:00:00 2001 From: laijinhang <30384322+laijinhang@users.noreply.github.com> Date: Fri, 13 Mar 2020 17:21:56 +0800 Subject: [PATCH 3/7] Update language.go --- modules/language/language.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/language/language.go b/modules/language/language.go index d96de9743..4aab563cf 100644 --- a/modules/language/language.go +++ b/modules/language/language.go @@ -190,4 +190,4 @@ func GetUserFromHtml(value template.HTML, uid int64, scopes ...string) template. } return value -} \ No newline at end of file +} From 62a5a5a0747633026a43d4576040fce8bd0305b1 Mon Sep 17 00:00:00 2001 From: laijinhang <30384322+laijinhang@users.noreply.github.com> Date: Fri, 13 Mar 2020 17:37:24 +0800 Subject: [PATCH 4/7] Update response.go --- plugins/admin/modules/response/response.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/admin/modules/response/response.go b/plugins/admin/modules/response/response.go index fed7bcb97..39a1223bb 100644 --- a/plugins/admin/modules/response/response.go +++ b/plugins/admin/modules/response/response.go @@ -38,7 +38,11 @@ func OkWithData(ctx *context.Context, data map[string]interface{}) { } func BadRequest(ctx *context.Context, msg string) { - user := ctx.UserValue["user"].(models.UserModel) + var user = models.UserModel{} + var ok bool + if user, ok = ctx.UserValue["user"].(models.UserModel); !ok { + user.Id = -1 + } ctx.JSON(http.StatusBadRequest, map[string]interface{}{ "code": http.StatusBadRequest, "msg": language.GetUser(msg, user.Id), From 0f1658078d17531547de7c1f0de25f7dccef53cd Mon Sep 17 00:00:00 2001 From: laijinhang <761774955@qq.com> Date: Sat, 14 Mar 2020 17:33:06 +0800 Subject: [PATCH 5/7] switch language on the front end --- examples/gin/main.go | 2 +- go.mod | 2 ++ go.sum | 6 ++++++ modules/language/cn.go | 2 ++ modules/language/en.go | 1 + modules/language/jp.go | 6 ++++++ modules/language/tc.go | 1 + plugins/admin/controller/edit.go | 16 +--------------- plugins/admin/modules/table/generators.go | 15 +++++++++++++++ 9 files changed, 35 insertions(+), 16 deletions(-) diff --git a/examples/gin/main.go b/examples/gin/main.go index 8a332b4d4..4aed5fdfc 100644 --- a/examples/gin/main.go +++ b/examples/gin/main.go @@ -37,7 +37,7 @@ func main() { Port: "3306", User: "root", Pwd: "root", - Name: "godmin", + Name: "goadmin", MaxIdleCon: 50, MaxOpenCon: 150, Driver: config.DriverMysql, diff --git a/go.mod b/go.mod index 28fc3a3eb..020dda354 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,9 @@ require ( github.com/GoAdminGroup/html v0.0.1 github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e github.com/denisenkom/go-mssqldb v0.0.0-20200206145737-bbfc9a55622e + github.com/gin-gonic/gin v1.5.0 github.com/go-sql-driver/mysql v1.5.0 + github.com/gogf/gf v1.11.6 github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/lib/pq v1.3.0 github.com/magiconair/properties v1.8.1 diff --git a/go.sum b/go.sum index ae5a86449..10e267328 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5E github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/GoAdminGroup/html v0.0.1 h1:SdWNWl4OKPsvDk2GDp5ZKD6ceWoN8n4Pj6cUYxavUd0= github.com/GoAdminGroup/html v0.0.1/go.mod h1:A1laTJaOx8sQ64p2dE8IqtstDeCNBHEazrEp7hR5VvM= +github.com/GoAdminGroup/themes v0.0.27 h1:mm1JBSF2ucK8Yv2PH5w4+gzqisIPo2Q9t4+ICn8460M= +github.com/GoAdminGroup/themes v0.0.27/go.mod h1:ABCOeBeibfg9DxAsGVa1NzYK9/nIbHT/BuFrCRIKo8A= github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e h1:n+DcnTNkQnHlwpsrHoQtkrJIO7CBx029fw6oR4vIob4= github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e/go.mod h1:Bdzq+51GR4/0DIhaICZEOm+OHvXGwwB2trKZ8B4Y6eQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -87,6 +89,8 @@ github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -180,6 +184,8 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c h1:jceGD5YNJGgGMkJz79agzOln1K9TaZUjv5ird16qniQ= golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/modules/language/cn.go b/modules/language/cn.go index 708c96f4d..62308a43a 100644 --- a/modules/language/cn.go +++ b/modules/language/cn.go @@ -442,4 +442,6 @@ var cn = LangSet{ "admin.basic admin": "基础Admin", "admin.a built-in plugins of goadmin which help you to build a crud manager platform quickly.": "一个内置GoAdmin插件,帮助您快速搭建curd简易管理后台。", "admin.official": "GoAdmin官方", + + "language": "语言", } diff --git a/modules/language/en.go b/modules/language/en.go index 341f62b98..7286f1ecb 100644 --- a/modules/language/en.go +++ b/modules/language/en.go @@ -405,4 +405,5 @@ var en = LangSet{ "admin.basic admin": "Basic Admin", "admin.a built-in plugins of goadmin which help you to build a crud manager platform quickly.": "A built-in plugins of GoAdmin which help you to build a crud manager platform quickly.", "admin.official": "Official", + "language": "Language", } diff --git a/modules/language/jp.go b/modules/language/jp.go index f7164402c..70d916bc9 100644 --- a/modules/language/jp.go +++ b/modules/language/jp.go @@ -416,4 +416,10 @@ var jp = LangSet{ "admin.basic admin": "Basic Admin", "admin.a built-in plugins of goadmin which help you to build a crud manager platform quickly.": "A built-in plugins of GoAdmin which help you to build a crud manager platform quickly.", "admin.official": "Official", + + "used for login": "ログインに使用", + "used to display": "表示に使用", + "a path a line": "パスの文字列", + + "language": "言語", } diff --git a/modules/language/tc.go b/modules/language/tc.go index af38a1bde..9514fbd9b 100644 --- a/modules/language/tc.go +++ b/modules/language/tc.go @@ -434,4 +434,5 @@ var tc = LangSet{ "admin.basic admin": "基礎Admin", "admin.a built-in plugins of goadmin which help you to build a crud manager platform quickly.": "壹個內置GoAdmin插件,幫助您快速搭建curd簡易管理後臺。", "admin.official": "GoAdmin官方", + "language": "語言", } diff --git a/plugins/admin/controller/edit.go b/plugins/admin/controller/edit.go index ef5b11d47..8f9630053 100644 --- a/plugins/admin/controller/edit.go +++ b/plugins/admin/controller/edit.go @@ -6,6 +6,7 @@ import ( "net/http" "net/url" + "github.com/GoAdminGroup/go-admin/modules/language" "github.com/GoAdminGroup/go-admin/modules/logger" "github.com/GoAdminGroup/go-admin/template" @@ -14,10 +15,7 @@ import ( "github.com/GoAdminGroup/go-admin/context" "github.com/GoAdminGroup/go-admin/modules/auth" - "github.com/GoAdminGroup/go-admin/modules/config" "github.com/GoAdminGroup/go-admin/modules/file" - "github.com/GoAdminGroup/go-admin/modules/language" - "github.com/GoAdminGroup/go-admin/plugins/admin/models" "github.com/GoAdminGroup/go-admin/plugins/admin/modules" "github.com/GoAdminGroup/go-admin/plugins/admin/modules/constant" form2 "github.com/GoAdminGroup/go-admin/plugins/admin/modules/form" @@ -230,15 +228,3 @@ func (h *Handler) EditForm(ctx *context.Context) { ctx.HTML(http.StatusOK, buf.String()) ctx.AddHeader(constant.PjaxUrlHeader, param.PreviousPath) } - -func (h *Handler) SetLanguage(ctx *context.Context) { - if len(ctx.PostForm()["language"]) == 0 { - return - } - if user, ok := ctx.UserValue["user"].(models.UserModel); ok { - config.SetUserConfig(config.UserConfig{ - UserId: user.Id, - Language: ctx.PostForm()["language"][0], - }) - } -} diff --git a/plugins/admin/modules/table/generators.go b/plugins/admin/modules/table/generators.go index 40b76ea45..4de15c7d9 100644 --- a/plugins/admin/modules/table/generators.go +++ b/plugins/admin/modules/table/generators.go @@ -450,6 +450,21 @@ func (s *SystemTable) GetNormalManagerTable(ctx *context.Context) (managerTable FieldDisplay(func(value types.FieldModel) interface{} { return "" }) + m := []types.FieldOption{} + m = append(m, types.FieldOption{ + Text: language.CN, + Value: "zh", + }, types.FieldOption{ + Text: language.EN, + Value: "en", + }, types.FieldOption{ + Text: language.JP, + Value: "jp", + }, types.FieldOption{ + Text: language.TC, + Value: "tc", + }) + formList.AddField(lg("language"), "language", db.Varchar, form.SelectSingle).FieldOptions(m).FieldNotAllowAdd() formList.SetTable("goadmin_users").SetTitle(lg("Managers")).SetDescription(lg("Managers")) formList.SetUpdateFn(func(values form2.Values) error { From 02008c019005fda1a129dcce8734782fcf4be4f0 Mon Sep 17 00:00:00 2001 From: laijinhang <30384322+laijinhang@users.noreply.github.com> Date: Sat, 14 Mar 2020 18:18:46 +0800 Subject: [PATCH 6/7] Update go.mod --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 020dda354..28fc3a3eb 100644 --- a/go.mod +++ b/go.mod @@ -7,9 +7,7 @@ require ( github.com/GoAdminGroup/html v0.0.1 github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e github.com/denisenkom/go-mssqldb v0.0.0-20200206145737-bbfc9a55622e - github.com/gin-gonic/gin v1.5.0 github.com/go-sql-driver/mysql v1.5.0 - github.com/gogf/gf v1.11.6 github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/lib/pq v1.3.0 github.com/magiconair/properties v1.8.1 From 70c44d1160a3c1a909d8b07d0f0b020dc6648292 Mon Sep 17 00:00:00 2001 From: cg33 Date: Wed, 16 Feb 2022 10:13:31 +0800 Subject: [PATCH 7/7] refactor(deepsource): improve code quality --- examples/gin/main.go | 2 +- go.sum | 6 ------ modules/auth/auth.go | 2 +- modules/config/config.go | 16 +++++++-------- modules/ui/ui.go | 2 +- plugins/admin/admin.go | 2 +- plugins/admin/controller/api_list.go | 2 +- plugins/admin/controller/detail.go | 7 ++----- plugins/admin/controller/edit.go | 12 ++++++------ plugins/admin/controller/new.go | 2 +- plugins/admin/controller/show.go | 8 ++++---- plugins/admin/modules/table/generators.go | 24 +++++++++++------------ template/types/page.go | 2 +- 13 files changed, 39 insertions(+), 48 deletions(-) diff --git a/examples/gin/main.go b/examples/gin/main.go index 4aed5fdfc..8a332b4d4 100644 --- a/examples/gin/main.go +++ b/examples/gin/main.go @@ -37,7 +37,7 @@ func main() { Port: "3306", User: "root", Pwd: "root", - Name: "goadmin", + Name: "godmin", MaxIdleCon: 50, MaxOpenCon: 150, Driver: config.DriverMysql, diff --git a/go.sum b/go.sum index 10e267328..ae5a86449 100644 --- a/go.sum +++ b/go.sum @@ -7,8 +7,6 @@ github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5E github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/GoAdminGroup/html v0.0.1 h1:SdWNWl4OKPsvDk2GDp5ZKD6ceWoN8n4Pj6cUYxavUd0= github.com/GoAdminGroup/html v0.0.1/go.mod h1:A1laTJaOx8sQ64p2dE8IqtstDeCNBHEazrEp7hR5VvM= -github.com/GoAdminGroup/themes v0.0.27 h1:mm1JBSF2ucK8Yv2PH5w4+gzqisIPo2Q9t4+ICn8460M= -github.com/GoAdminGroup/themes v0.0.27/go.mod h1:ABCOeBeibfg9DxAsGVa1NzYK9/nIbHT/BuFrCRIKo8A= github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e h1:n+DcnTNkQnHlwpsrHoQtkrJIO7CBx029fw6oR4vIob4= github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e/go.mod h1:Bdzq+51GR4/0DIhaICZEOm+OHvXGwwB2trKZ8B4Y6eQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -89,8 +87,6 @@ github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -184,8 +180,6 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c h1:jceGD5YNJGgGMkJz79agzOln1K9TaZUjv5ird16qniQ= golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/modules/auth/auth.go b/modules/auth/auth.go index f587a498f..48513831b 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -161,7 +161,7 @@ type Service struct { P Processor } -func (s *Service) Name() string { +func (*Service) Name() string { return "auth" } diff --git a/modules/config/config.go b/modules/config/config.go index d2dfb0539..683d977f5 100644 --- a/modules/config/config.go +++ b/modules/config/config.go @@ -393,7 +393,7 @@ type Config struct { AssetRootPath string `json:"asset_root_path,omitempty" yaml:"asset_root_path,omitempty" ini:"asset_root_path,omitempty"` - URLFormat URLFormat `json:"url_format,omitempty" yaml:"url_format,omitempty" ini:"url_format,omitempty"` + URLFormat *URLFormat `json:"url_format,omitempty" yaml:"url_format,omitempty" ini:"url_format,omitempty"` prefix string `json:"-" yaml:"-" ini:"-"` lock sync.RWMutex `json:"-" yaml:"-" ini:"-"` @@ -438,7 +438,7 @@ type URLFormat struct { Update string `json:"update,omitempty" yaml:"update,omitempty" ini:"update,omitempty"` } -func (f URLFormat) SetDefault() URLFormat { +func (f *URLFormat) SetDefault() { f.Detail = utils.SetDefault(f.Detail, "", "/info/:__prefix/detail") f.ShowEdit = utils.SetDefault(f.ShowEdit, "", "/info/:__prefix/edit") f.ShowCreate = utils.SetDefault(f.ShowCreate, "", "/info/:__prefix/new") @@ -448,7 +448,6 @@ func (f URLFormat) SetDefault() URLFormat { f.Export = utils.SetDefault(f.Export, "", "/export/:__prefix") f.Info = utils.SetDefault(f.Info, "", "/info/:__prefix") f.Update = utils.SetDefault(f.Update, "", "/update/:__prefix") - return f } type ExtraInfo map[string]interface{} @@ -951,7 +950,8 @@ func SetDefault(cfg *Config) *Config { } else { cfg.prefix = cfg.UrlPrefix } - cfg.URLFormat = cfg.URLFormat.SetDefault() + cfg.URLFormat = new(URLFormat) + cfg.URLFormat.SetDefault() return cfg } @@ -1012,8 +1012,8 @@ func AssertPrefix() string { return _global.AssertPrefix() } -// GetIndexURL get the index url with prefix. -func GetIndexURL() string { +// GetFullIndexURL get the index url with prefix. +func GetFullIndexURL() string { return _global.GetIndexURL() } @@ -1036,7 +1036,7 @@ func Url(suffix string) string { return _global.Url(suffix) } -func GetURLFormats() URLFormat { +func GetURLFormats() *URLFormat { return _global.URLFormat } @@ -1332,7 +1332,7 @@ type Service struct { C *Config } -func (s *Service) Name() string { +func (*Service) Name() string { return "config" } diff --git a/modules/ui/ui.go b/modules/ui/ui.go index 5d8bd194b..0ff4e0ae5 100644 --- a/modules/ui/ui.go +++ b/modules/ui/ui.go @@ -15,7 +15,7 @@ type Service struct { const ServiceKey = "ui" -func (s *Service) Name() string { +func (*Service) Name() string { return "ui" } diff --git a/plugins/admin/admin.go b/plugins/admin/admin.go index a2631a65a..a703695a9 100644 --- a/plugins/admin/admin.go +++ b/plugins/admin/admin.go @@ -65,7 +65,7 @@ func (admin *Admin) InitPlugin(services service.List) { } func (admin *Admin) GetIndexURL() string { - return config.GetIndexURL() + return config.GetFullIndexURL() } func (admin *Admin) GetInfo() plugins.Info { diff --git a/plugins/admin/controller/api_list.go b/plugins/admin/controller/api_list.go index 0ece61e86..2e5b22f90 100644 --- a/plugins/admin/controller/api_list.go +++ b/plugins/admin/controller/api_list.go @@ -15,7 +15,7 @@ func (h *Handler) ApiList(ctx *context.Context) { params := parameter.GetParam(ctx.Request.URL, panel.GetInfo().DefaultPageSize, panel.GetInfo().SortField, panel.GetInfo().GetSort()) - panel, panelInfo, urls, err := h.showTableData(ctx, prefix, params, panel, "api_") + panel, panelInfo, urls, err := h._showTableData(ctx, prefix, params, panel, "api_") if err != nil { response.Error(ctx, err.Error()) return diff --git a/plugins/admin/controller/detail.go b/plugins/admin/controller/detail.go index a783b5407..5d3169816 100644 --- a/plugins/admin/controller/detail.go +++ b/plugins/admin/controller/detail.go @@ -126,16 +126,13 @@ $('.delete-btn').on('click', function (event) { title = detail.Title if title == "" { - title = info.Title + language.Get("Detail") - } - if desc == "" { - desc = panel.GetInfo().Description + language.GetUser("Detail", user.Id) + title = info.Title + language.GetUser("Detail", user.Id) } desc = detail.Description if desc == "" { - desc = info.Description + language.Get("Detail") + desc = info.Description + language.GetUser("Detail", user.Id) } } diff --git a/plugins/admin/controller/edit.go b/plugins/admin/controller/edit.go index 8f9630053..cd371cd34 100644 --- a/plugins/admin/controller/edit.go +++ b/plugins/admin/controller/edit.go @@ -28,10 +28,10 @@ import ( // ShowForm show form page. func (h *Handler) ShowForm(ctx *context.Context) { param := guard.GetShowFormParam(ctx) - h.showForm(ctx, "", param.Prefix, param.Param, false) + h._showForm(ctx, "", param.Prefix, param.Param, false) } -func (h *Handler) showForm(ctx *context.Context, alert template2.HTML, prefix string, param parameter.Parameters, isEdit bool, animation ...bool) { +func (h *Handler) _showForm(ctx *context.Context, alert template2.HTML, prefix string, param parameter.Parameters, isEdit bool, animation ...bool) { panel := h.table(prefix, ctx) @@ -147,7 +147,7 @@ func (h *Handler) EditForm(ctx *context.Context) { if ctx.WantJSON() { response.Error(ctx, err.Error()) } else { - h.showForm(ctx, aAlert().Warning(err.Error()), param.Prefix, param.Param, true) + h._showForm(ctx, aAlert().Warning(err.Error()), param.Prefix, param.Param, true) } return } @@ -177,7 +177,7 @@ func (h *Handler) EditForm(ctx *context.Context) { "token": h.authSrv().AddToken(), }) } else { - h.showForm(ctx, aAlert().Warning(err.Error()), param.Prefix, param.Param, true) + h._showForm(ctx, aAlert().Warning(err.Error()), param.Prefix, param.Param, true) } return } @@ -203,7 +203,7 @@ func (h *Handler) EditForm(ctx *context.Context) { } if isEditUrl(param.PreviousPath, param.Prefix) { - h.showForm(ctx, param.Alert, param.Prefix, param.Param, true, false) + h._showForm(ctx, param.Alert, param.Prefix, param.Param, true, false) return } @@ -223,7 +223,7 @@ func (h *Handler) EditForm(ctx *context.Context) { return } - buf := h.showTable(ctx, param.Prefix, param.Param.DeletePK().DeleteEditPk(), nil) + buf := h._showTable(ctx, param.Prefix, param.Param.DeletePK().DeleteEditPk(), nil) ctx.HTML(http.StatusOK, buf.String()) ctx.AddHeader(constant.PjaxUrlHeader, param.PreviousPath) diff --git a/plugins/admin/controller/new.go b/plugins/admin/controller/new.go index 4d840a1c9..53d0c5635 100644 --- a/plugins/admin/controller/new.go +++ b/plugins/admin/controller/new.go @@ -164,7 +164,7 @@ func (h *Handler) NewForm(ctx *context.Context) { return } - buf := h.showTable(ctx, param.Prefix, param.Param, nil) + buf := h._showTable(ctx, param.Prefix, param.Param, nil) ctx.HTML(http.StatusOK, buf.String()) ctx.AddHeader(constant.PjaxUrlHeader, h.routePathWithPrefix("info", param.Prefix)+param.Param.GetRouteParamStr()) diff --git a/plugins/admin/controller/show.go b/plugins/admin/controller/show.go index 0110ab55f..3e238caf4 100644 --- a/plugins/admin/controller/show.go +++ b/plugins/admin/controller/show.go @@ -57,11 +57,11 @@ func (h *Handler) ShowInfo(ctx *context.Context) { params := parameter.GetParam(ctx.Request.URL, panel.GetInfo().DefaultPageSize, panel.GetInfo().SortField, panel.GetInfo().GetSort()) - buf := h.showTable(ctx, prefix, params, panel) + buf := h._showTable(ctx, prefix, params, panel) ctx.HTML(http.StatusOK, buf.String()) } -func (h *Handler) showTableData(ctx *context.Context, prefix string, params parameter.Parameters, +func (h *Handler) _showTableData(ctx *context.Context, prefix string, params parameter.Parameters, panel table.Table, urlNamePrefix string) (table.Table, table.PanelInfo, []string, error) { if panel == nil { panel = h.table(prefix, ctx) @@ -97,9 +97,9 @@ func (h *Handler) showTableData(ctx *context.Context, prefix string, params para return panel, panelInfo, []string{editUrl, newUrl, deleteUrl, exportUrl, detailUrl, infoUrl, updateUrl}, nil } -func (h *Handler) showTable(ctx *context.Context, prefix string, params parameter.Parameters, panel table.Table) *bytes.Buffer { +func (h *Handler) _showTable(ctx *context.Context, prefix string, params parameter.Parameters, panel table.Table) *bytes.Buffer { - panel, panelInfo, urls, err := h.showTableData(ctx, prefix, params, panel, "") + panel, panelInfo, urls, err := h._showTableData(ctx, prefix, params, panel, "") if err != nil { return h.Execute(ctx, auth.Auth(ctx), template.WarningPanelWithDescAndTitle(err.Error(), errors.Msg, errors.Msg), "", diff --git a/plugins/admin/modules/table/generators.go b/plugins/admin/modules/table/generators.go index 4de15c7d9..8dfcf9f10 100644 --- a/plugins/admin/modules/table/generators.go +++ b/plugins/admin/modules/table/generators.go @@ -43,7 +43,7 @@ func NewSystemTable(conn db.Connection, c *config.Config) *SystemTable { return &SystemTable{conn: conn, c: c} } -func (s *SystemTable) GetManagerTable(ctx *context.Context) (managerTable Table) { +func (s *SystemTable) GetManagerTable(_ *context.Context) (managerTable Table) { managerTable = NewDefaultTable(DefaultConfigWithDriver(config.GetDatabases().GetDefault().Driver)) info := managerTable.GetInfo().AddXssJsFilter().HideFilterArea() @@ -352,7 +352,7 @@ func (s *SystemTable) GetManagerTable(ctx *context.Context) (managerTable Table) return } -func (s *SystemTable) GetNormalManagerTable(ctx *context.Context) (managerTable Table) { +func (s *SystemTable) GetNormalManagerTable(_ *context.Context) (managerTable Table) { managerTable = NewDefaultTable(DefaultConfigWithDriver(config.GetDatabases().GetDefault().Driver)) info := managerTable.GetInfo().AddXssJsFilter().HideFilterArea() @@ -452,16 +452,16 @@ func (s *SystemTable) GetNormalManagerTable(ctx *context.Context) (managerTable }) m := []types.FieldOption{} m = append(m, types.FieldOption{ - Text: language.CN, + Text: language.CN, Value: "zh", }, types.FieldOption{ - Text: language.EN, + Text: language.EN, Value: "en", }, types.FieldOption{ - Text: language.JP, + Text: language.JP, Value: "jp", }, types.FieldOption{ - Text: language.TC, + Text: language.TC, Value: "tc", }) formList.AddField(lg("language"), "language", db.Varchar, form.SelectSingle).FieldOptions(m).FieldNotAllowAdd() @@ -535,7 +535,7 @@ func (s *SystemTable) GetNormalManagerTable(ctx *context.Context) (managerTable return } -func (s *SystemTable) GetPermissionTable(ctx *context.Context) (permissionTable Table) { +func (s *SystemTable) GetPermissionTable(_ *context.Context) (permissionTable Table) { permissionTable = NewDefaultTable(DefaultConfigWithDriver(config.GetDatabases().GetDefault().Driver)) info := permissionTable.GetInfo().AddXssJsFilter().HideFilterArea() @@ -673,7 +673,7 @@ func (s *SystemTable) GetPermissionTable(ctx *context.Context) (permissionTable return } -func (s *SystemTable) GetRolesTable(ctx *context.Context) (roleTable Table) { +func (s *SystemTable) GetRolesTable(_ *context.Context) (roleTable Table) { roleTable = NewDefaultTable(DefaultConfigWithDriver(config.GetDatabases().GetDefault().Driver)) info := roleTable.GetInfo().AddXssJsFilter().HideFilterArea() @@ -830,7 +830,7 @@ func (s *SystemTable) GetRolesTable(ctx *context.Context) (roleTable Table) { return } -func (s *SystemTable) GetOpTable(ctx *context.Context) (opTable Table) { +func (s *SystemTable) GetOpTable(_ *context.Context) (opTable Table) { opTable = NewDefaultTable(Config{ Driver: config.GetDatabases().GetDefault().Driver, CanAdd: false, @@ -1054,7 +1054,7 @@ func (s *SystemTable) GetMenuTable(ctx *context.Context) (menuTable Table) { return } -func (s *SystemTable) GetSiteTable(ctx *context.Context) (siteTable Table) { +func (s *SystemTable) GetSiteTable(_ *context.Context) (siteTable Table) { siteTable = NewDefaultTable(DefaultConfigWithDriver(config.GetDatabases().GetDefault().Driver). SetOnlyUpdateForm(). SetGetDataFun(func(params parameter.Parameters) (i []map[string]interface{}, i2 int) { @@ -1398,7 +1398,7 @@ func (s *SystemTable) GetGenerateForm(ctx *context.Context) (generateTool Table) formList.AddField(lgWithScore("connection", "tool"), "conn", db.Varchar, form.SelectSingle). FieldOptions(ops). FieldOnChooseAjax("table", "/tool/choose/conn", - func(ctx *context.Context) (success bool, msg string, data interface{}) { + func(_ *context.Context) (success bool, msg string, data interface{}) { connName := ctx.FormValue("value") if connName == "" { return false, "wrong parameter", nil @@ -1417,7 +1417,7 @@ func (s *SystemTable) GetGenerateForm(ctx *context.Context) (generateTool Table) }) formList.AddField(lgWithScore("table", "tool"), "table", db.Varchar, form.SelectSingle). FieldOnChooseAjax("xxxx", "/tool/choose/table", - func(ctx *context.Context) (success bool, msg string, data interface{}) { + func(_ *context.Context) (success bool, msg string, data interface{}) { var ( tableName = ctx.FormValue("value") diff --git a/template/types/page.go b/template/types/page.go index 7de1e98c9..069be4dab 100644 --- a/template/types/page.go +++ b/template/types/page.go @@ -154,7 +154,7 @@ func NewPage(param *NewPageParam) *Page { Logo: logo, MiniLogo: config.GetMiniLogo(), ColorScheme: config.GetColorScheme(), - IndexUrl: config.GetIndexURL(), + IndexUrl: config.GetFullIndexURL(), CdnUrl: config.GetAssetUrl(), CustomHeadHtml: config.GetCustomHeadHtml(), CustomFootHtml: config.GetCustomFootHtml() + param.NavButtonsJS,