From 6f0a8b95d4d685b2685780bfe53aecb53812d43f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E5=90=89=E5=85=86?= <303176530@qq.com> Date: Wed, 17 Nov 2021 22:45:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=8D=E7=BD=AE=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=86=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/v1/system/sys_user.go | 18 +++++ server/model/system/sys_initdb.go | 2 +- server/router/system/sys_user.go | 1 + server/service/system/sys_initdb_mysql.go | 1 - server/service/system/sys_user.go | 11 +++ server/source/api.go | 1 + server/source/casbin.go | 1 + server/source/system/api.go | 1 + web/src/api/user.js | 7 ++ .../assets/{dashbord.png => dashboard.png} | Bin web/src/view/person/person.vue | 37 ++++++++- web/src/view/superAdmin/user/user.vue | 74 +++++++++++++++++- 12 files changed, 149 insertions(+), 5 deletions(-) rename web/src/assets/{dashbord.png => dashboard.png} (100%) diff --git a/server/api/v1/system/sys_user.go b/server/api/v1/system/sys_user.go index a5a3a2f2..6a3bde67 100644 --- a/server/api/v1/system/sys_user.go +++ b/server/api/v1/system/sys_user.go @@ -301,3 +301,21 @@ func (b *BaseApi) GetUserInfo(c *gin.Context) { response.OkWithDetailed(gin.H{"userInfo": ReqUser}, "获取成功", c) } } + +// @Tags SysUser +// @Summary 用户修改密码 +// @Security ApiKeyAuth +// @Produce application/json +// @Param data body system.SysUser true "ID" +// @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}" +// @Router /user/resetPassword [post] +func (b *BaseApi) ResetPassword(c *gin.Context) { + var user system.SysUser + _ = c.ShouldBindJSON(&user) + if err := userService.ResetPassword(user.ID); err != nil { + global.GVA_LOG.Error("重置失败!", zap.Error(err)) + response.FailWithMessage("重置失败"+err.Error(), c) + } else { + response.OkWithMessage("重置成功", c) + } +} diff --git a/server/model/system/sys_initdb.go b/server/model/system/sys_initdb.go index 46901b85..07ea0d3d 100644 --- a/server/model/system/sys_initdb.go +++ b/server/model/system/sys_initdb.go @@ -41,7 +41,7 @@ func MysqlDataInitialize(inits ...InitData) error { if err := inits[i].Initialize(); err != nil { color.Info.Printf(InitDataFailed, Mysql, err) - continue + return err } else { color.Info.Printf(InitDataSuccess, Mysql, inits[i].TableName()) } diff --git a/server/router/system/sys_user.go b/server/router/system/sys_user.go index d520379e..7cdc6f3b 100644 --- a/server/router/system/sys_user.go +++ b/server/router/system/sys_user.go @@ -20,6 +20,7 @@ func (s *UserRouter) InitUserRouter(Router *gin.RouterGroup) { userRouter.DELETE("deleteUser", baseApi.DeleteUser) // 删除用户 userRouter.PUT("setUserInfo", baseApi.SetUserInfo) // 设置用户信息 userRouter.POST("setUserAuthorities", baseApi.SetUserAuthorities) // 设置用户权限组 + userRouter.POST("resetPassword", baseApi.ResetPassword) // 设置用户权限组 } { userRouterWithoutRecord.POST("getUserList", baseApi.GetUserList) // 分页获取用户列表 diff --git a/server/service/system/sys_initdb_mysql.go b/server/service/system/sys_initdb_mysql.go index c26b8da1..a3a4b4a9 100644 --- a/server/service/system/sys_initdb_mysql.go +++ b/server/service/system/sys_initdb_mysql.go @@ -110,7 +110,6 @@ func (initDBService *InitDBService) initMysqlData() error { system.AuthoritiesMenus, system.DictionaryDetail, system.ViewAuthorityMenuMysql, - example.File, ) } diff --git a/server/service/system/sys_user.go b/server/service/system/sys_user.go index 9942d72c..f39f804a 100644 --- a/server/service/system/sys_user.go +++ b/server/service/system/sys_user.go @@ -187,3 +187,14 @@ func (userService *UserService) FindUserByUuid(uuid string) (err error, user *sy } return nil, &u } + +//@author: [piexlmax](https://github.com/piexlmax) +//@function: resetPassword +//@description: 修改用户密码 +//@param: ID uint +//@return: err error + +func (userService *UserService) ResetPassword(ID uint) (err error) { + err = global.GVA_DB.Model(&system.SysUser{}).Where("id = ?", ID).Update("password", utils.MD5V([]byte("123456"))).Error + return err +} diff --git a/server/source/api.go b/server/source/api.go index 69e8c9ed..51b33cdb 100644 --- a/server/source/api.go +++ b/server/source/api.go @@ -93,6 +93,7 @@ var apis = []system.SysApi{ {global.GVA_MODEL{ID: 89, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/delSysHistory", "删除回滚记录", "autoCode", "POST"}, {global.GVA_MODEL{ID: 90, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/setUserAuthorities", "设置权限组", "user", "POST"}, {global.GVA_MODEL{ID: 91, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/getUserInfo", "获取自身信息(必选)", "user", "GET"}, + {global.GVA_MODEL{ID: 92, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/resetPassword", "重置指定用户密码", "user", "POST"}, } //@author: [SliverHorn](https://github.com/SliverHorn) diff --git a/server/source/casbin.go b/server/source/casbin.go index 18cbcd9b..bdaf1747 100644 --- a/server/source/casbin.go +++ b/server/source/casbin.go @@ -92,6 +92,7 @@ var carbines = []gormadapter.CasbinRule{ {PType: "p", V0: "888", V1: "/autoCode/delSysHistory", V2: "POST"}, {PType: "p", V0: "888", V1: "/user/setUserAuthorities", V2: "POST"}, {PType: "p", V0: "888", V1: "/user/getUserInfo", V2: "GET"}, + {PType: "p", V0: "888", V1: "/user/resetPassword", V2: "POST"}, {PType: "p", V0: "8881", V1: "/base/login", V2: "POST"}, {PType: "p", V0: "8881", V1: "/user/register", V2: "POST"}, {PType: "p", V0: "8881", V1: "/api/createApi", V2: "POST"}, diff --git a/server/source/system/api.go b/server/source/system/api.go index e45e33cf..e1d6b5f9 100644 --- a/server/source/system/api.go +++ b/server/source/system/api.go @@ -28,6 +28,7 @@ func (a *api) Initialize() error { {ApiGroup: "系统用户", Method: "POST", Path: "/user/setUserAuthorities", Description: "设置权限组"}, {ApiGroup: "系统用户", Method: "POST", Path: "/user/changePassword", Description: "修改密码(建(选择)"}, {ApiGroup: "系统用户", Method: "POST", Path: "/user/setUserAuthority", Description: "修改用户角色(必选)"}, + {ApiGroup: "系统用户", Method: "POST", Path: "/api/resetPassword", Description: "重置用户密码"}, {ApiGroup: "api", Method: "POST", Path: "/api/createApi", Description: "创建api"}, {ApiGroup: "api", Method: "POST", Path: "/api/deleteApi", Description: "删除Api"}, diff --git a/web/src/api/user.js b/web/src/api/user.js index 32ee55c1..ba5d0b11 100644 --- a/web/src/api/user.js +++ b/web/src/api/user.js @@ -141,3 +141,10 @@ export const getUserInfo = () => { method: 'get' }) } + +export const resetPassword = () => { + return service({ + url: '/user/resetPassword', + method: 'post' + }) +} diff --git a/web/src/assets/dashbord.png b/web/src/assets/dashboard.png similarity index 100% rename from web/src/assets/dashbord.png rename to web/src/assets/dashboard.png diff --git a/web/src/view/person/person.vue b/web/src/view/person/person.vue index a46324ef..3840f4bb 100644 --- a/web/src/view/person/person.vue +++ b/web/src/view/person/person.vue @@ -10,7 +10,12 @@ 重新上传
-

{{ userInfo.nickName }}

+

{{ userInfo.nickName }}

+

+ + + +

这个家伙很懒,什么都没有留下

@@ -118,6 +123,8 @@ export default { activeName: 'second', showPassword: false, pwdModify: {}, + nickName: '', + editFlag: false, rules: { password: [ { required: true, message: '请输入密码', trigger: 'blur' }, @@ -188,6 +195,26 @@ export default { }) } }, + openEidt() { + this.nickName = this.userInfo.nickName + this.editFlag = true + }, + closeEdit() { + this.nickName = '' + this.editFlag = false + }, + async enterEdit() { + const res = await setUserInfo({ nickName: this.nickName, ID: this.userInfo.ID }) + if (res.code === 0) { + this.ResetUserInfo({ nickName: this.nickName }) + this.$message({ + type: 'success', + message: '设置成功' + }) + } + this.nickName = '' + this.editFlag = false + }, handleClick(tab, event) { console.log(tab, event) } @@ -236,7 +263,10 @@ export default { p { font-size: 16px; } - .nickname { + .nickName { + display: flex; + justify-content: center; + align-items: center; font-size: 26px; } .person-info{ @@ -314,4 +344,7 @@ export default { color:transparent; } } + .pointer{ + cursor: pointer; + } diff --git a/web/src/view/superAdmin/user/user.vue b/web/src/view/superAdmin/user/user.vue index 8a10ead1..05ec9ee8 100644 --- a/web/src/view/superAdmin/user/user.vue +++ b/web/src/view/superAdmin/user/user.vue @@ -13,7 +13,16 @@ - + + + + 重置密码 @@ -110,6 +120,7 @@ import { mapGetters } from 'vuex' import CustomPic from '@/components/customPic/index.vue' import ChooseImg from '@/components/chooseImg/index.vue' import warningBar from '@/components/warningBar/warningBar.vue' +import { setUserInfo, resetPassword } from '@/api/user.js' export default { name: 'Api', components: { CustomPic, ChooseImg, warningBar }, @@ -120,6 +131,7 @@ export default { path: path, authOptions: [], addUserDialog: false, + backNickName: '', userInfo: { username: '', password: '', @@ -160,6 +172,32 @@ export default { this.setOptions(res.data.list) }, methods: { + resetPassword(row) { + this.$confirm( + '是否将此用户密码重置为123456?', + '警告', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + } + ).then(async() => { + const res = await resetPassword({ + ID: row.ID, + }) + if (res.code === 0) { + this.$message({ + type: 'success', + message: res.msg, + }) + } else { + this.$message({ + type: 'error', + message: res.msg, + }) + } + }) + }, setAuthorityIds() { this.tableData && this.tableData.forEach((user) => { const authorityIds = user.authorities && user.authorities.map(i => { @@ -175,6 +213,30 @@ export default { this.authOptions = [] this.setAuthorityOptions(authData, this.authOptions) }, + openEidt(row) { + if (this.tableData.some(item => item.editFlag)) { + this.$message('当前存在正在编辑的用户') + return + } + this.backNickName = row.nickName + row.editFlag = true + }, + async enterEdit(row) { + const res = await setUserInfo({ nickName: row.nickName, ID: row.ID }) + if (res.code === 0) { + this.$message({ + type: 'success', + message: '设置成功' + }) + } + this.backNickName = '' + row.editFlag = false + }, + closeEdit(row) { + row.nickName = this.backNickName + this.backNickName = '' + row.editFlag = false + }, setAuthorityOptions(AuthorityData, optionsData) { AuthorityData && AuthorityData.forEach(item => { @@ -273,4 +335,14 @@ export default { display: block; } } +.nickName{ + display: flex; + justify-content: flex-start; + align-items: center; +} +.pointer{ + cursor: pointer; + font-size: 16px; + margin-left: 2px; +}