|
@ -10,9 +10,9 @@ |
|
|
<h3 class="form-title">修改密码</h3> |
|
|
<h3 class="form-title">修改密码</h3> |
|
|
|
|
|
|
|
|
<!-- 原密码 --> |
|
|
<!-- 原密码 --> |
|
|
<el-form-item prop="oldVal" label="原密码"> |
|
|
|
|
|
|
|
|
<el-form-item prop="oldPassword" label="原密码"> |
|
|
<el-input |
|
|
<el-input |
|
|
v-model.trim="passwd.oldVal" |
|
|
|
|
|
|
|
|
v-model.trim="passwd.oldPassword" |
|
|
type="password" |
|
|
type="password" |
|
|
placeholder="请输入原密码" |
|
|
placeholder="请输入原密码" |
|
|
show-password |
|
|
show-password |
|
@ -20,9 +20,9 @@ |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
<!-- 新密码 --> |
|
|
<!-- 新密码 --> |
|
|
<el-form-item prop="newVal" label="新密码"> |
|
|
|
|
|
|
|
|
<el-form-item prop="newPassword" label="新密码"> |
|
|
<el-input |
|
|
<el-input |
|
|
v-model.trim="passwd.newVal" |
|
|
|
|
|
|
|
|
v-model.trim="passwd.newPassword" |
|
|
type="password" |
|
|
type="password" |
|
|
placeholder="请输入新密码" |
|
|
placeholder="请输入新密码" |
|
|
show-password |
|
|
show-password |
|
@ -30,9 +30,9 @@ |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
<!-- 重复密码 --> |
|
|
<!-- 重复密码 --> |
|
|
<el-form-item prop="repeatNewVal" label="重复密码"> |
|
|
|
|
|
|
|
|
<el-form-item prop="againPassword" label="重复密码"> |
|
|
<el-input |
|
|
<el-input |
|
|
v-model.trim="passwd.repeatNewVal" |
|
|
|
|
|
|
|
|
v-model.trim="passwd.againPassword" |
|
|
type="password" |
|
|
type="password" |
|
|
placeholder="请再次输入新密码" |
|
|
placeholder="请再次输入新密码" |
|
|
show-password |
|
|
show-password |
|
@ -79,7 +79,7 @@ |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
<script setup> |
|
|
<script setup> |
|
|
import {ref, reactive, computed, watch} from 'vue' |
|
|
|
|
|
|
|
|
import {ref, reactive, computed, watch, onMounted} from 'vue' |
|
|
import {CircleCloseFilled, SuccessFilled} from '@element-plus/icons-vue' |
|
|
import {CircleCloseFilled, SuccessFilled} from '@element-plus/icons-vue' |
|
|
import {ElMessage} from "element-plus"; |
|
|
import {ElMessage} from "element-plus"; |
|
|
import API from '@/util/http' |
|
|
import API from '@/util/http' |
|
@ -91,22 +91,34 @@ const emit = defineEmits(['confirm']) |
|
|
|
|
|
|
|
|
const passwdFormRef = ref(null) |
|
|
const passwdFormRef = ref(null) |
|
|
const passwd = reactive({ |
|
|
const passwd = reactive({ |
|
|
oldVal: '', |
|
|
|
|
|
newVal: '', |
|
|
|
|
|
repeatNewVal: '' |
|
|
|
|
|
|
|
|
account: '', |
|
|
|
|
|
oldPassword: '', |
|
|
|
|
|
newPassword: '', |
|
|
|
|
|
againPassword: '' |
|
|
}) |
|
|
}) |
|
|
const errorMsg = ref('') |
|
|
const errorMsg = ref('') |
|
|
|
|
|
|
|
|
|
|
|
//获取用户信息的account |
|
|
|
|
|
const getAccount= async function() { |
|
|
|
|
|
try { |
|
|
|
|
|
const adminData = ref({}) |
|
|
|
|
|
const result = await API({ url: '/admin/userinfo', data: {} }) |
|
|
|
|
|
adminData.value = result |
|
|
|
|
|
console.log('管理员用户信息', adminData.value) |
|
|
|
|
|
passwd.account = adminData.value.account |
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
console.log('请求失败', error) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
// 实时密码规则校验 |
|
|
// 实时密码规则校验 |
|
|
const isLengthValid = computed(() => passwd.newVal.length >= 8 && passwd.newVal.length <= 16) |
|
|
|
|
|
|
|
|
const isLengthValid = computed(() => passwd.newPassword.length >= 8 && passwd.newPassword.length <= 16) |
|
|
|
|
|
|
|
|
const isComplexValid = computed(() => { |
|
|
const isComplexValid = computed(() => { |
|
|
const rules = [/\d/, /[a-z]/, /[A-Z]/, /[^a-zA-Z0-9]/] |
|
|
const rules = [/\d/, /[a-z]/, /[A-Z]/, /[^a-zA-Z0-9]/] |
|
|
return rules.filter((r) => r.test(passwd.newVal)).length >= 2 |
|
|
|
|
|
|
|
|
return rules.filter((r) => r.test(passwd.newPassword)).length >= 2 |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
watch(() => passwd.newVal, (val) => { |
|
|
|
|
|
if (val && val === passwd.oldVal) { |
|
|
|
|
|
|
|
|
watch(() => passwd.newPassword, (val) => { |
|
|
|
|
|
if (val && val === passwd.oldPassword) { |
|
|
errorMsg.value = '新密码不能与旧密码一致' |
|
|
errorMsg.value = '新密码不能与旧密码一致' |
|
|
} else { |
|
|
} else { |
|
|
errorMsg.value = '' |
|
|
errorMsg.value = '' |
|
@ -116,12 +128,12 @@ watch(() => passwd.newVal, (val) => { |
|
|
const loading = ref(false) |
|
|
const loading = ref(false) |
|
|
// 表单校验规则 |
|
|
// 表单校验规则 |
|
|
const rules = reactive({ |
|
|
const rules = reactive({ |
|
|
oldVal: [{required: true, message: '请输入原密码', trigger: 'blur'}], |
|
|
|
|
|
newVal: [ |
|
|
|
|
|
|
|
|
oldPassword: [{required: true, message: '请输入原密码', trigger: 'blur'}], |
|
|
|
|
|
newPassword: [ |
|
|
{required: true, message: '新密码不能为空', trigger: 'blur'}, |
|
|
{required: true, message: '新密码不能为空', trigger: 'blur'}, |
|
|
{ |
|
|
{ |
|
|
validator: (rule, value, callback) => { |
|
|
validator: (rule, value, callback) => { |
|
|
if (value === passwd.oldVal) { |
|
|
|
|
|
|
|
|
if (value === passwd.oldPassword) { |
|
|
callback(new Error('新密码不能与旧密码一致')) |
|
|
callback(new Error('新密码不能与旧密码一致')) |
|
|
} else if (value.length < 8 || value.length > 16) { |
|
|
} else if (value.length < 8 || value.length > 16) { |
|
|
callback(new Error('长度应在 8 到 16 个字符')) |
|
|
callback(new Error('长度应在 8 到 16 个字符')) |
|
@ -138,11 +150,11 @@ const rules = reactive({ |
|
|
trigger: 'blur' |
|
|
trigger: 'blur' |
|
|
} |
|
|
} |
|
|
], |
|
|
], |
|
|
repeatNewVal: [ |
|
|
|
|
|
|
|
|
againPassword: [ |
|
|
{required: true, message: '请再次输入新密码', trigger: 'blur'}, |
|
|
{required: true, message: '请再次输入新密码', trigger: 'blur'}, |
|
|
{ |
|
|
{ |
|
|
validator: (rule, value, callback) => { |
|
|
validator: (rule, value, callback) => { |
|
|
if (value !== passwd.newVal) { |
|
|
|
|
|
|
|
|
if (value !== passwd.newPassword) { |
|
|
callback(new Error('两次输入密码不一致')) |
|
|
callback(new Error('两次输入密码不一致')) |
|
|
} else { |
|
|
} else { |
|
|
callback() |
|
|
callback() |
|
@ -153,72 +165,74 @@ const rules = reactive({ |
|
|
] |
|
|
] |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
// // 修改密码接口调用方法 |
|
|
|
|
|
// const changePassword = async function () { |
|
|
|
|
|
// try { |
|
|
|
|
|
// const params = { |
|
|
|
|
|
// oldVal: passwd.oldVal, |
|
|
|
|
|
// newVal: passwd.newVal |
|
|
|
|
|
// } |
|
|
|
|
|
// |
|
|
|
|
|
// const result = await API({url: '/user/changePassword', data: params}) |
|
|
|
|
|
// console.log('@@@@@@@@@@@修改密码结果:', result) |
|
|
|
|
|
// if(result.status === 200){ |
|
|
|
|
|
// // 显示成功弹窗 |
|
|
|
|
|
// |
|
|
|
|
|
// ElMessage.success('修改密码成功') |
|
|
|
|
|
// // 重置表单字段 |
|
|
|
|
|
// resetFields() |
|
|
|
|
|
// router.replace ('/PasswordSuccess'); |
|
|
|
|
|
// }else if(result === 400){ |
|
|
|
|
|
// //todo 待完善 |
|
|
|
|
|
// } |
|
|
|
|
|
// |
|
|
|
|
|
// } catch (error) { |
|
|
|
|
|
// console.log('re:', result) |
|
|
|
|
|
// console.error('修改密码失败', error) |
|
|
|
|
|
// ElMessage.error('操作失败') |
|
|
|
|
|
// // 抛出错误让外层捕获,保持finally正常执行 |
|
|
|
|
|
// throw error |
|
|
|
|
|
// } |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
// 修改密码接口调用方法(模拟始终成功) |
|
|
|
|
|
|
|
|
// 修改密码接口调用方法 |
|
|
const changePassword = async function () { |
|
|
const changePassword = async function () { |
|
|
try { |
|
|
try { |
|
|
// 模拟API调用 |
|
|
|
|
|
const result = { |
|
|
|
|
|
status: 200, |
|
|
|
|
|
data: {success: true, message: '密码修改成功'} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
console.log('修改密码结果:', result); |
|
|
|
|
|
|
|
|
const params = { |
|
|
|
|
|
account: passwd.account, |
|
|
|
|
|
oldPassword: passwd.oldPassword, |
|
|
|
|
|
newPassword: passwd.newPassword, |
|
|
|
|
|
againPassword: passwd.againPassword |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 统一处理成功逻辑 |
|
|
|
|
|
if (result.status === 200 ) { |
|
|
|
|
|
// 显示成功提示 |
|
|
|
|
|
ElMessage.success(result.data.message || '修改密码成功'); |
|
|
|
|
|
|
|
|
const result = await API({url: '/admin/password', data: params}) |
|
|
|
|
|
console.log('@@@@@@@@@@@修改密码结果:', result) |
|
|
|
|
|
if(result.status === 200){ |
|
|
|
|
|
// 显示成功弹窗 |
|
|
|
|
|
|
|
|
|
|
|
ElMessage.success('修改密码成功') |
|
|
// 重置表单字段 |
|
|
// 重置表单字段 |
|
|
resetFields(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
resetFields() |
|
|
router.replace ('/PasswordSuccess'); |
|
|
router.replace ('/PasswordSuccess'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
} else { |
|
|
|
|
|
// 处理API返回但状态非成功的情况 |
|
|
|
|
|
const errorMsg = result.data.message || '密码修改失败'; |
|
|
|
|
|
ElMessage.error(errorMsg); |
|
|
|
|
|
throw new Error(errorMsg); |
|
|
|
|
|
|
|
|
}else if(result === 400){ |
|
|
|
|
|
//todo 待完善 |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} catch (error) { |
|
|
} catch (error) { |
|
|
// 处理网络错误或API异常 |
|
|
|
|
|
console.error('修改密码失败:', error); |
|
|
|
|
|
ElMessage.error(error.message || '操作失败,请重试'); |
|
|
|
|
|
throw error; |
|
|
|
|
|
|
|
|
console.log('re:', result) |
|
|
|
|
|
console.error('修改密码失败', error) |
|
|
|
|
|
ElMessage.error('操作失败') |
|
|
|
|
|
// 抛出错误让外层捕获,保持finally正常执行 |
|
|
|
|
|
throw error |
|
|
} |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 修改密码接口调用方法(模拟始终成功) |
|
|
|
|
|
// const changePassword = async function () { |
|
|
|
|
|
// try { |
|
|
|
|
|
// // 模拟API调用 |
|
|
|
|
|
// const result = { |
|
|
|
|
|
// status: 200, |
|
|
|
|
|
// data: {success: true, message: '密码修改成功'} |
|
|
|
|
|
// }; |
|
|
|
|
|
|
|
|
|
|
|
// console.log('修改密码结果:', result); |
|
|
|
|
|
|
|
|
|
|
|
// // 统一处理成功逻辑 |
|
|
|
|
|
// if (result.status === 200 ) { |
|
|
|
|
|
// // 显示成功提示 |
|
|
|
|
|
// ElMessage.success(result.data.message || '修改密码成功'); |
|
|
|
|
|
|
|
|
|
|
|
// // 重置表单字段 |
|
|
|
|
|
// resetFields(); |
|
|
|
|
|
|
|
|
|
|
|
// router.replace ('/PasswordSuccess'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// return result; |
|
|
|
|
|
// } else { |
|
|
|
|
|
// // 处理API返回但状态非成功的情况 |
|
|
|
|
|
// const errorMsg = result.data.message || '密码修改失败'; |
|
|
|
|
|
// ElMessage.error(errorMsg); |
|
|
|
|
|
// throw new Error(errorMsg); |
|
|
|
|
|
// } |
|
|
|
|
|
// } catch (error) { |
|
|
|
|
|
// // 处理网络错误或API异常 |
|
|
|
|
|
// console.error('修改密码失败:', error); |
|
|
|
|
|
// ElMessage.error(error.message || '操作失败,请重试'); |
|
|
|
|
|
// throw error; |
|
|
|
|
|
// } |
|
|
|
|
|
// }; |
|
|
|
|
|
|
|
|
// 表单提交与重置 |
|
|
// 表单提交与重置 |
|
|
const resetFields = () => { |
|
|
const resetFields = () => { |
|
@ -247,6 +261,10 @@ const onSubmit = () => { |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
|
|
getAccount() |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style scoped> |
|
|
<style scoped> |
|
|