vue代码实现主要分为以下三部分
user.js文件下代码:
export const userUpdatePasswordService = ({ old_pwd, new_pwd, re_pwd, token }) =>
request.patch('/user/updatePwd', { old_pwd, new_pwd, re_pwd }, { headers: { Authorization: token } });
token.js文件下代码:
import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useTokenStore = defineStore('token', () => {
const token = ref('')
const setToken = (newToken) => {
token.value = newToken
}
const removeToken = () => {
token.value = ''
}
// 新增获取 token 的函数
const getToken = () => {
return token.value
}
return {
token,
setToken,
removeToken,
getToken // 添加了获取 token 的函数
}
}, {
persist: true
});
UserResetPassword.vue文件下代码:
<script setup>
import { ref } from 'vue'
import { userUpdatePasswordService } from '@/api/user'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import {useTokenStore} from '@/stores/token.js'
const formRef = ref()
const pwdForm = ref({
old_pwd: '',
new_pwd: '',
re_pwd: ''
})
const checkDifferent = (rule, value, callback) => {
// 校验新密码和原密码不能一样
if (value === pwdForm.value.old_pwd) {
callback(new Error('新密码不能与原密码一样'))
} else {
callback()
}
}
const checkSameAsNewPwd = (rule, value, callback) => {
// 校验确认密码必须和新密码一样
if (value !== pwdForm.value.new_pwd) {
callback(new Error('确认密码必须和新密码一样'))
} else {
callback()
}
}
const rules = ref({
old_pwd: [
{ required: true, message: '请输入原密码', trigger: 'blur' },
{ min: 6, max: 15, message: '原密码长度在6-15位之间', trigger: 'blur' }
],
new_pwd: [
{ required: true, message: '请输入新密码', trigger: 'blur' },
{ min: 6, max: 15, message: '新密码长度在6-15位之间', trigger: 'blur' },
{ validator: checkDifferent, trigger: 'blur' }
],
re_pwd: [
{ required: true, message: '请再次输入新密码', trigger: 'blur' },
{ min: 6, max: 15, message: '确认密码长度在6-15位之间', trigger: 'blur' },
{ validator: checkSameAsNewPwd, trigger: 'blur' }
]
})
const tokenStore = useTokenStore();
const router = useRouter()
const submitForm = async () => {
await formRef.value.validate()
// 获取用户的 Token
const token = tokenStore.getToken()
// 在请求头中添加 Token
await userUpdatePasswordService({ ...pwdForm.value, token })
ElMessage.success('密码修改成功')
// 密码修改成功后,退出重新登录
// 清空本地存储的 token
tokenStore.setToken('')
// 拦截登录
router.push('/login')
}
const resetForm = () => {
formRef.value.resetFields()
}
</script>
<template>
<page-container title="修改密码">
<el-row>
<el-col :span="12">
<el-form
ref="formRef"
:model="pwdForm"
:rules="rules"
label-width="100px"
>
<el-form-item label="原密码" prop="old_pwd">
<el-input v-model="pwdForm.old_pwd" show-password></el-input>
</el-form-item>
<el-form-item label="新密码" prop="new_pwd">
<el-input v-model="pwdForm.new_pwd" show-password></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="re_pwd">
<el-input v-model="pwdForm.re_pwd" show-password></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">修改密码</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form></el-col
>
</el-row>
</page-container>
</template>