修改密码功能

This commit is contained in:
灌糖包子 2026-03-25 15:14:16 +08:00
parent ad9c2b0086
commit e9fa36a661
Signed by: sookie
GPG Key ID: 67E8D0AE905C79B0
2 changed files with 67 additions and 7 deletions

View File

@ -51,14 +51,36 @@
</el-main> </el-main>
</el-container> </el-container>
</el-container> </el-container>
<el-dialog v-model="changePwdModal" title="修改密码" width="420px" @closed="resetPwdForm">
<el-form ref="changePwdForm" :model="changePwdData" :rules="changePwdRules" :label-width="100">
<el-form-item label="旧密码" prop="oldPassword">
<el-input v-model="changePwdData.oldPassword" type="password" show-password />
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-input v-model="changePwdData.newPassword" type="password" show-password />
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="changePwdData.confirmPassword" type="password" show-password />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="changePwdModal = false">取消</el-button>
<el-button type="primary" @click="submitChangePassword" :loading="changePwdLoading">确定</el-button>
</span>
</template>
</el-dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from 'vue' import { ref, reactive, computed, nextTick } from 'vue'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import menus from '../config/menu' import menus from '../config/menu'
import http from '@/utils/http' import http from '@/utils/http'
import { ElMessage } from 'element-plus'
import { VForm } from '@/types'
const store = useStore() const store = useStore()
const router = useRouter() const router = useRouter()
@ -69,6 +91,32 @@ const currentYear = new Date().getFullYear()
const defaultActiveMenuKey = ref<string | null>(null) const defaultActiveMenuKey = ref<string | null>(null)
const openMenuNames = ref<string[]>([]) const openMenuNames = ref<string[]>([])
const changePwdModal = ref(false)
const changePwdLoading = ref(false)
const changePwdForm = ref<VForm>()
const changePwdData = reactive({
oldPassword: '',
newPassword: '',
confirmPassword: ''
})
const changePwdRules = {
oldPassword: [
{ required: true, message: '请输入旧密码', trigger: 'blur' }
],
newPassword: [
{ required: true, message: '请输入新密码', trigger: 'blur' },
{ min: 8, max: 16, message: '密码长度8~16位', trigger: 'blur' },
{ pattern: /^(?![\d]+$)(?![a-zA-Z]+$)(?![-=+_.,]+$)[\da-zA-Z-=+_.,]{8,16}$/, message: '密码由字母、数字、特殊字符中的任意两种组成', trigger: 'blur' }
],
confirmPassword: [
{ required: true, message: '请再次输入新密码', trigger: 'blur' },
{ validator: (_rule: object, value: string, callback: Function) => {
value !== changePwdData.newPassword ? callback(new Error('两次输入的密码不一致')) : callback()
}, trigger: 'blur'
}
]
}
const realname = computed((): null | string => { const realname = computed((): null | string => {
return store.state.loginInfo.userInfo return store.state.loginInfo.userInfo
? store.state.loginInfo.userInfo.realname : null ? store.state.loginInfo.userInfo.realname : null
@ -103,7 +151,7 @@ function dropdownMenuCommand(command: string): void {
router.push('/') router.push('/')
break break
case 'changePassword': case 'changePassword':
// TODO changePwdModal.value = true
break break
case 'logout': case 'logout':
store.commit('logout') store.commit('logout')
@ -111,6 +159,23 @@ function dropdownMenuCommand(command: string): void {
break break
} }
} }
function submitChangePassword(): void {
changePwdForm.value?.validate(async (valid: boolean) => {
if (!valid) return
changePwdLoading.value = true
await http.post('/api/v2/system/user/changePassword', changePwdData).finally(() => {
changePwdLoading.value = false
})
changePwdModal.value = false
ElMessage.success('密码修改成功')
})
}
function resetPwdForm(): void {
changePwdData.oldPassword = ''
changePwdData.newPassword = ''
changePwdData.confirmPassword = ''
nextTick(() => changePwdForm.value?.clearValidate())
}
function openMenu(path: string): void { function openMenu(path: string): void {
router.push(path) router.push(path)
} }

View File

@ -3290,11 +3290,6 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1, function-bind@^1.1.2: function-bind@^1.1.1, function-bind@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"