You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WeChat/src/views/main-navbar-update-password...

129 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<!-- 使用Element UI的对话框组件 -->
<el-dialog title="修改密码" :visible.sync="visible" :append-to-body="true">
<!-- 表单用于输入原密码和新密码 -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
<!-- 显示用户名不可编辑 -->
<el-form-item label="账号">
<span>{{ userName }}</span>
</el-form-item>
<!-- 输入原密码 -->
<el-form-item label="原密码" prop="password">
<el-input type="password" v-model="dataForm.password"></el-input>
</el-form-item>
<!-- 输入新密码 -->
<el-form-item label="新密码" prop="newPassword">
<el-input type="password" v-model="dataForm.newPassword"></el-input>
</el-form-item>
<!-- 确认新密码 -->
<el-form-item label="确认密码" prop="confirmPassword">
<el-input type="password" v-model="dataForm.confirmPassword"></el-input>
</el-form-item>
</el-form>
<!-- 对话框底部按钮 -->
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()"></el-button>
</span>
</el-dialog>
</template>
<script>
import { clearLoginInfo } from '@/utils' // 引入清除登录信息的工具函数
export default {
data() {
// 验证确认密码与新密码是否一致的函数
var validateConfirmPassword = (rule, value, callback) => {
if (this.dataForm.newPassword !== value) {
callback(new Error('确认密码与新密码不一致'))
} else {
callback()
}
}
return {
// 对话框显示状态
visible: false,
// 表单数据
dataForm: {
password: '', // 原密码
newPassword: '', // 新密码
confirmPassword: '' // 确认密码
},
// 表单验证规则
dataRule: {
password: [
{ required: true, message: '原密码不能为空', trigger: 'blur' }
],
newPassword: [
{ required: true, message: '新密码不能为空', trigger: 'blur' }
],
confirmPassword: [
{ required: true, message: '确认密码不能为空', trigger: 'blur' },
{ validator: validateConfirmPassword, trigger: 'blur' } // 自定义验证规则
]
}
}
},
computed: {
// 计算属性,用于获取当前用户名
userName: {
get() { return this.$store.state.user.name }
},
// 计算属性,用于获取和设置主标签页
mainTabs: {
get() { return this.$store.state.common.mainTabs },
set(val) { this.$store.commit('common/updateMainTabs', val) }
}
},
methods: {
// 初始化方法,显示对话框并重置表单
init() {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
})
},
// 表单提交方法
dataFormSubmit() {
// 验证表单
this.$refs['dataForm'].validate((valid) => {
if (valid) {
// 发送请求修改密码
this.$http({
url: this.$http.adornUrl('/sys/user/password'), // 请求地址
method: 'post', // 请求方法
data: this.$http.adornData({ // 发送的数据
'password': this.dataForm.password,
'newPassword': this.dataForm.newPassword
})
}).then(({ data }) => {
if (data && data.code === 200) {
// 密码修改成功
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
// 关闭对话框
this.visible = false
this.$nextTick(() => {
// 清空主标签页
this.mainTabs = []
// 清除登录信息
clearLoginInfo()
// 重定向到登录页面
this.$router.replace({ name: 'login' })
})
}
})
} else {
// 密码修改失败,显示错误信息
this.$message.error(data.msg)
}
})
}
})
}
}
}
</script>