Skip to content

Commit 2bf3f88

Browse files
author
piexlMax(奇淼
committed
feat: 优化重置密码操作
1 parent d5c4c24 commit 2bf3f88

File tree

5 files changed

+114
-24
lines changed

5 files changed

+114
-24
lines changed

Diff for: server/api/v1/system/sys_user.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -467,13 +467,13 @@ func (b *BaseApi) GetUserInfo(c *gin.Context) {
467467
// @Success 200 {object} response.Response{msg=string} "重置用户密码"
468468
// @Router /user/resetPassword [post]
469469
func (b *BaseApi) ResetPassword(c *gin.Context) {
470-
var user system.SysUser
471-
err := c.ShouldBindJSON(&user)
470+
var rps systemReq.ResetPassword
471+
err := c.ShouldBindJSON(&rps)
472472
if err != nil {
473473
response.FailWithMessage(err.Error(), c)
474474
return
475475
}
476-
err = userService.ResetPassword(user.ID)
476+
err = userService.ResetPassword(rps.ID, rps.Password)
477477
if err != nil {
478478
global.GVA_LOG.Error("重置失败!", zap.Error(err))
479479
response.FailWithMessage("重置失败"+err.Error(), c)

Diff for: server/model/system/request/sys_user.go

+5
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ type ChangePasswordReq struct {
3333
NewPassword string `json:"newPassword"` // 新密码
3434
}
3535

36+
type ResetPassword struct {
37+
ID uint `json:"ID" form:"ID"`
38+
Password string `json:"password" form:"password" gorm:"comment:用户登录密码"` // 用户登录密码
39+
}
40+
3641
// SetUserAuth Modify user's auth structure
3742
type SetUserAuth struct {
3843
AuthorityId uint `json:"authorityId"` // 角色ID

Diff for: server/service/system/sys_user.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ func (userService *UserService) FindUserByUuid(uuid string) (user *system.SysUse
311311
//@param: ID uint
312312
//@return: err error
313313

314-
func (userService *UserService) ResetPassword(ID uint) (err error) {
315-
err = global.GVA_DB.Model(&system.SysUser{}).Where("id = ?", ID).Update("password", utils.BcryptHash("123456")).Error
314+
func (userService *UserService) ResetPassword(ID uint, password string) (err error) {
315+
err = global.GVA_DB.Model(&system.SysUser{}).Where("id = ?", ID).Update("password", utils.BcryptHash(password)).Error
316316
return err
317317
}

Diff for: web/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"tailwindcss": "^3.4.10",
4343
"universal-cookie": "^7",
4444
"vform3-builds": "^3.0.10",
45-
"vite-auto-import-svg": "^1.4.0",
45+
"vite-auto-import-svg": "^1.5.0",
4646
"vue": "^3.5.7",
4747
"vue-cropper": "^1.1.4",
4848
"vue-echarts": "^7.0.3",

Diff for: web/src/view/superAdmin/user/user.vue

+103-18
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,38 @@
143143
/>
144144
</div>
145145
</div>
146+
<!-- 重置密码对话框 -->
147+
<el-dialog
148+
v-model="resetPwdDialog"
149+
title="重置密码"
150+
width="500px"
151+
:close-on-click-modal="false"
152+
:close-on-press-escape="false"
153+
>
154+
<el-form :model="resetPwdInfo" ref="resetPwdForm" label-width="100px">
155+
<el-form-item label="用户账号">
156+
<el-input v-model="resetPwdInfo.userName" disabled />
157+
</el-form-item>
158+
<el-form-item label="用户昵称">
159+
<el-input v-model="resetPwdInfo.nickName" disabled />
160+
</el-form-item>
161+
<el-form-item label="新密码">
162+
<div class="flex w-full">
163+
<el-input class="flex-1" v-model="resetPwdInfo.password" placeholder="请输入新密码" show-password />
164+
<el-button type="primary" @click="generateRandomPassword" style="margin-left: 10px">
165+
生成随机密码
166+
</el-button>
167+
</div>
168+
</el-form-item>
169+
</el-form>
170+
<template #footer>
171+
<div class="dialog-footer">
172+
<el-button @click="closeResetPwdDialog">取 消</el-button>
173+
<el-button type="primary" @click="confirmResetPassword">确 定</el-button>
174+
</div>
175+
</template>
176+
</el-dialog>
177+
146178
<el-drawer
147179
v-model="addUserDialog"
148180
:size="appStore.drawerSize"
@@ -332,27 +364,80 @@
332364
333365
initPage()
334366
367+
// 重置密码对话框相关
368+
const resetPwdDialog = ref(false)
369+
const resetPwdForm = ref(null)
370+
const resetPwdInfo = ref({
371+
ID: '',
372+
userName: '',
373+
nickName: '',
374+
password: ''
375+
})
376+
377+
// 生成随机密码
378+
const generateRandomPassword = () => {
379+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
380+
let password = ''
381+
for (let i = 0; i < 12; i++) {
382+
password += chars.charAt(Math.floor(Math.random() * chars.length))
383+
}
384+
resetPwdInfo.value.password = password
385+
// 复制到剪贴板
386+
navigator.clipboard.writeText(password).then(() => {
387+
ElMessage({
388+
type: 'success',
389+
message: '密码已复制到剪贴板'
390+
})
391+
}).catch(() => {
392+
ElMessage({
393+
type: 'error',
394+
message: '复制失败,请手动复制'
395+
})
396+
})
397+
}
398+
399+
// 打开重置密码对话框
335400
const resetPasswordFunc = (row) => {
336-
ElMessageBox.confirm('是否将此用户密码重置为123456?', '警告', {
337-
confirmButtonText: '确定',
338-
cancelButtonText: '取消',
339-
type: 'warning'
340-
}).then(async () => {
341-
const res = await resetPassword({
342-
ID: row.ID
401+
resetPwdInfo.value.ID = row.ID
402+
resetPwdInfo.value.userName = row.userName
403+
resetPwdInfo.value.nickName = row.nickName
404+
resetPwdInfo.value.password = ''
405+
resetPwdDialog.value = true
406+
}
407+
408+
// 确认重置密码
409+
const confirmResetPassword = async () => {
410+
if (!resetPwdInfo.value.password) {
411+
ElMessage({
412+
type: 'warning',
413+
message: '请输入或生成密码'
343414
})
344-
if (res.code === 0) {
345-
ElMessage({
346-
type: 'success',
347-
message: res.msg
348-
})
349-
} else {
350-
ElMessage({
351-
type: 'error',
352-
message: res.msg
353-
})
354-
}
415+
return
416+
}
417+
418+
const res = await resetPassword({
419+
ID: resetPwdInfo.value.ID,
420+
password: resetPwdInfo.value.password
355421
})
422+
423+
if (res.code === 0) {
424+
ElMessage({
425+
type: 'success',
426+
message: res.msg || '密码重置成功'
427+
})
428+
resetPwdDialog.value = false
429+
} else {
430+
ElMessage({
431+
type: 'error',
432+
message: res.msg || '密码重置失败'
433+
})
434+
}
435+
}
436+
437+
// 关闭重置密码对话框
438+
const closeResetPwdDialog = () => {
439+
resetPwdInfo.value.password = ''
440+
resetPwdDialog.value = false
356441
}
357442
const setAuthorityIds = () => {
358443
tableData.value &&

0 commit comments

Comments
 (0)