From 6b02f3f8127efaa1909f2f3f6cbc3019f7bd83a7 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 5 Jan 2022 10:45:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=94=A8=E6=88=B7=E6=B3=A8?= =?UTF-8?q?=E5=86=8C/=E5=AE=A1=E6=A0=B8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/serverutils/server_helper.go | 4 ++ internal/web/actions/default/users/index.go | 24 ++++---- internal/web/actions/default/users/init.go | 2 +- internal/web/actions/default/users/user.go | 43 ++++++++++---- .../actions/default/users/userutils/utils.go | 4 +- .../web/actions/default/users/verifyPopup.go | 56 +++++++++++++++++++ web/public/js/components/common/labels.js | 12 +++- web/views/@default/index/index.html | 4 +- .../@default/settings/user-ui/index.html | 8 ++- web/views/@default/users/index.html | 10 +++- .../@default/users/setting/index_plus.css | 9 +++ .../@default/users/setting/index_plus.css.map | 1 + .../@default/users/setting/index_plus.less | 13 +++++ web/views/@default/users/user.html | 19 ++++++- web/views/@default/users/user.js | 11 ++++ web/views/@default/users/verifyPopup.html | 31 ++++++++++ web/views/@default/users/verifyPopup.js | 3 + 17 files changed, 226 insertions(+), 28 deletions(-) create mode 100644 internal/web/actions/default/users/verifyPopup.go create mode 100644 web/views/@default/users/setting/index_plus.css create mode 100644 web/views/@default/users/setting/index_plus.css.map create mode 100644 web/views/@default/users/setting/index_plus.less create mode 100644 web/views/@default/users/user.js create mode 100644 web/views/@default/users/verifyPopup.html create mode 100644 web/views/@default/users/verifyPopup.js diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index 9aa7c646..c0697c15 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -378,6 +378,10 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "isActive": secondMenuItem == "traffic", "isOn": serverConfig.TrafficLimit != nil && serverConfig.TrafficLimit.IsOn, }) + + if serverConfig.Web != nil && serverConfig.Web.RequestScripts != nil { + _ = serverConfig.Web.RequestScripts.Init() + } menuItems = append(menuItems, maps.Map{ "name": "边缘脚本", "url": "/servers/server/settings/requestScripts?serverId=" + serverIdString, diff --git a/internal/web/actions/default/users/index.go b/internal/web/actions/default/users/index.go index 82877bca..ce1bdcb1 100644 --- a/internal/web/actions/default/users/index.go +++ b/internal/web/actions/default/users/index.go @@ -36,7 +36,7 @@ func (this *IndexAction) RunGet(params struct { this.ErrorPage(err) return } - userMaps := []maps.Map{} + var userMaps = []maps.Map{} for _, user := range usersResp.Users { var clusterMap maps.Map = nil if user.NodeCluster != nil { @@ -45,16 +45,20 @@ func (this *IndexAction) RunGet(params struct { "name": user.NodeCluster.Name, } } + userMaps = append(userMaps, maps.Map{ - "id": user.Id, - "username": user.Username, - "isOn": user.IsOn, - "fullname": user.Fullname, - "email": user.Email, - "mobile": user.Mobile, - "tel": user.Tel, - "createdTime": timeutil.FormatTime("Y-m-d H:i:s", user.CreatedAt), - "cluster": clusterMap, + "id": user.Id, + "username": user.Username, + "isOn": user.IsOn, + "fullname": user.Fullname, + "email": user.Email, + "mobile": user.Mobile, + "tel": user.Tel, + "createdTime": timeutil.FormatTime("Y-m-d H:i:s", user.CreatedAt), + "cluster": clusterMap, + "registeredIP": user.RegisteredIP, + "isVerified": user.IsVerified, + "isRejected": user.IsRejected, }) } this.Data["users"] = userMaps diff --git a/internal/web/actions/default/users/init.go b/internal/web/actions/default/users/init.go index cfc3e07d..73f94f4f 100644 --- a/internal/web/actions/default/users/init.go +++ b/internal/web/actions/default/users/init.go @@ -19,6 +19,7 @@ func init() { GetPost("/update", new(UpdateAction)). Post("/delete", new(DeleteAction)). GetPost("/features", new(FeaturesAction)). + GetPost("/verifyPopup", new(VerifyPopupAction)). // AccessKeys Prefix("/users/accessKeys"). @@ -26,7 +27,6 @@ func init() { GetPost("/createPopup", new(accesskeys.CreatePopupAction)). Post("/delete", new(accesskeys.DeleteAction)). Post("/updateIsOn", new(accesskeys.UpdateIsOnAction)). - EndAll() }) } diff --git a/internal/web/actions/default/users/user.go b/internal/web/actions/default/users/user.go index e11318ac..613e1e48 100644 --- a/internal/web/actions/default/users/user.go +++ b/internal/web/actions/default/users/user.go @@ -20,6 +20,11 @@ func (this *UserAction) RunGet(params struct { }) { err := userutils.InitUser(this.Parent(), params.UserId) if err != nil { + if err == userutils.ErrUserNotFound { + this.RedirectURL("/users") + return + } + this.ErrorPage(err) return } @@ -51,17 +56,35 @@ func (this *UserAction) RunGet(params struct { } countAccessKeys := countAccessKeyResp.Count + // IP地址 + var registeredRegion = "" + if len(user.RegisteredIP) > 0 { + regionResp, err := this.RPC().IPLibraryRPC().LookupIPRegion(this.AdminContext(), &pb.LookupIPRegionRequest{Ip: user.RegisteredIP}) + if err != nil { + this.ErrorPage(err) + return + } + if regionResp.IpRegion != nil { + registeredRegion = regionResp.IpRegion.Summary + } + } + this.Data["user"] = maps.Map{ - "id": user.Id, - "username": user.Username, - "fullname": user.Fullname, - "email": user.Email, - "tel": user.Tel, - "remark": user.Remark, - "mobile": user.Mobile, - "isOn": user.IsOn, - "cluster": clusterMap, - "countAccessKeys": countAccessKeys, + "id": user.Id, + "username": user.Username, + "fullname": user.Fullname, + "email": user.Email, + "tel": user.Tel, + "remark": user.Remark, + "mobile": user.Mobile, + "isOn": user.IsOn, + "cluster": clusterMap, + "countAccessKeys": countAccessKeys, + "isRejected": user.IsRejected, + "rejectReason": user.RejectReason, + "isVerified": user.IsVerified, + "registeredIP": user.RegisteredIP, + "registeredRegion": registeredRegion, } this.Show() diff --git a/internal/web/actions/default/users/userutils/utils.go b/internal/web/actions/default/users/userutils/utils.go index 8d456577..d513d8f5 100644 --- a/internal/web/actions/default/users/userutils/utils.go +++ b/internal/web/actions/default/users/userutils/utils.go @@ -7,6 +7,8 @@ import ( "github.com/iwind/TeaGo/maps" ) +var ErrUserNotFound = errors.New("not found user") + // InitUser 查找用户基本信息 func InitUser(p *actionutils.ParentAction, userId int64) error { resp, err := p.RPC().UserRPC().FindEnabledUser(p.AdminContext(), &pb.FindEnabledUserRequest{UserId: userId}) @@ -14,7 +16,7 @@ func InitUser(p *actionutils.ParentAction, userId int64) error { return err } if resp.User == nil { - return errors.New("not found user") + return ErrUserNotFound } // AccessKey数量 diff --git a/internal/web/actions/default/users/verifyPopup.go b/internal/web/actions/default/users/verifyPopup.go new file mode 100644 index 00000000..cdd9b275 --- /dev/null +++ b/internal/web/actions/default/users/verifyPopup.go @@ -0,0 +1,56 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package users + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/actions" +) + +type VerifyPopupAction struct { + actionutils.ParentAction +} + +func (this *VerifyPopupAction) RunGet(params struct { + UserId int64 +}) { + this.Data["userId"] = params.UserId + + this.Show() +} + +func (this *VerifyPopupAction) RunPost(params struct { + UserId int64 + Result string + RejectReason string + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + defer this.CreateLogInfo("审核用户:%d 结果:%s", params.UserId, params.Result) + + if params.Result == "pass" { + params.RejectReason = "" + } + + _, err := this.RPC().UserRPC().VerifyUser(this.AdminContext(), &pb.VerifyUserRequest{ + UserId: params.UserId, + IsRejected: params.Result == "reject" || params.Result == "delete", + RejectReason: params.RejectReason, + }) + if err != nil { + this.ErrorPage(err) + return + } + + if params.Result == "delete" { + _, err = this.RPC().UserRPC().DeleteUser(this.AdminContext(), &pb.DeleteUserRequest{UserId: params.UserId}) + if err != nil { + this.ErrorPage(err) + return + } + } + + this.Success() +} diff --git a/web/public/js/components/common/labels.js b/web/public/js/components/common/labels.js index 4d541e35..ef3c8a92 100644 --- a/web/public/js/components/common/labels.js +++ b/web/public/js/components/common/labels.js @@ -31,5 +31,15 @@ Vue.component("micro-basic-label", { // 灰色的Label Vue.component("grey-label", { - template: `` + props: ["color"], + data: function () { + let color = "grey" + if (this.color != null && this.color.length > 0) { + color = "red" + } + return { + labelColor: color + } + }, + template: `` }) diff --git a/web/views/@default/index/index.html b/web/views/@default/index/index.html index 9b0f97cd..ec360cd2 100644 --- a/web/views/@default/index/index.html +++ b/web/views/@default/index/index.html @@ -31,13 +31,13 @@
- +
- +
diff --git a/web/views/@default/settings/user-ui/index.html b/web/views/@default/settings/user-ui/index.html index ed2a11a5..7e5a3920 100644 --- a/web/views/@default/settings/user-ui/index.html +++ b/web/views/@default/settings/user-ui/index.html @@ -71,8 +71,14 @@

显示在系统界面上的图标,请使用PNG格式。

+ + 注册设置 + + 修改用户注册相关设置 » + + -

修改后,可能需要等待数分钟才会生效。

+

修改后,在3分钟内生效。

\ No newline at end of file diff --git a/web/views/@default/users/index.html b/web/views/@default/users/index.html index 7d0598ce..e6620e1e 100644 --- a/web/views/@default/users/index.html +++ b/web/views/@default/users/index.html @@ -18,7 +18,15 @@ - {{user.username}} + + {{user.username}} +
+ 未审核 +
+
+ 已拒绝 +
+ {{user.fullname}} {{user.cluster.name}} diff --git a/web/views/@default/users/setting/index_plus.css b/web/views/@default/users/setting/index_plus.css new file mode 100644 index 00000000..2e6d4b48 --- /dev/null +++ b/web/views/@default/users/setting/index_plus.css @@ -0,0 +1,9 @@ +.feature-boxes .feature-box { + margin-bottom: 1em; + width: 24em; + float: left; +} +.feature-boxes .feature-box:hover label { + font-weight: bold; +} +/*# sourceMappingURL=index_plus.css.map */ \ No newline at end of file diff --git a/web/views/@default/users/setting/index_plus.css.map b/web/views/@default/users/setting/index_plus.css.map new file mode 100644 index 00000000..9bd6ee5a --- /dev/null +++ b/web/views/@default/users/setting/index_plus.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["index_plus.less"],"names":[],"mappings":"AAAA,cACC;EACC,kBAAA;EACA,WAAA;EACA,WAAA;;AAJF,cAOC,aAAY,MACX;EACC,iBAAA","file":"index_plus.css"} \ No newline at end of file diff --git a/web/views/@default/users/setting/index_plus.less b/web/views/@default/users/setting/index_plus.less new file mode 100644 index 00000000..29cf75ea --- /dev/null +++ b/web/views/@default/users/setting/index_plus.less @@ -0,0 +1,13 @@ +.feature-boxes { + .feature-box { + margin-bottom: 1em; + width: 24em; + float: left; + } + + .feature-box:hover { + label { + font-weight: bold; + } + } +} \ No newline at end of file diff --git a/web/views/@default/users/user.html b/web/views/@default/users/user.html index efbffeb0..8acdac18 100644 --- a/web/views/@default/users/user.html +++ b/web/views/@default/users/user.html @@ -5,7 +5,16 @@ 状态 - + + 未审核   [审核] + + 已拒绝 +   [重新审核] + + + + +

拒绝原因:{{user.rejectReason}}

@@ -55,4 +64,12 @@ - + + 注册IP + + - + {{user.registeredIP}} + {{user.registeredIP}}({{user.registeredRegion}}) + + \ No newline at end of file diff --git a/web/views/@default/users/user.js b/web/views/@default/users/user.js new file mode 100644 index 00000000..e8a872eb --- /dev/null +++ b/web/views/@default/users/user.js @@ -0,0 +1,11 @@ +Tea.context(function () { + this.verify = function () { + teaweb.popup(".verifyPopup?userId=" + this.user.id, { + callback: function () { + teaweb.success("保存成功", function () { + teaweb.reload() + }) + } + }) + } +}) \ No newline at end of file diff --git a/web/views/@default/users/verifyPopup.html b/web/views/@default/users/verifyPopup.html new file mode 100644 index 00000000..fd1af5fe --- /dev/null +++ b/web/views/@default/users/verifyPopup.html @@ -0,0 +1,31 @@ +{$layout "layout_popup"} + +

审核

+
+ + + + + + + + + + + + +
审核结果 + +

通过后,用户可正常创建服务。

+

拒绝后,用户不可创建服务。

+

将删除当前用户信息。

+
拒绝原因 + +
+ + +
\ No newline at end of file diff --git a/web/views/@default/users/verifyPopup.js b/web/views/@default/users/verifyPopup.js new file mode 100644 index 00000000..63a27a6f --- /dev/null +++ b/web/views/@default/users/verifyPopup.js @@ -0,0 +1,3 @@ +Tea.context(function () { + this.result = "pass" +}) \ No newline at end of file