<template>
<div class="container">
<el-form
ref="form"
:model="info"
status-icon
:rules="rules"
v-loading="loading"
label-width="100px"
label-position="right"
>
<el-form-item label="密码" prop="newPassword">
<el-input clearable type="password" v-model="info.newPassword" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword" label-position="top">
<el-input clearable type="password" v-model="info.confirmPassword" autocomplete="off"></el-input>
</el-form-item>
<el-form-item v-show="false">
<el-button type="primary" @click="submitForm">保存</el-button>
<el-button @click="resetForm">取消</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { ElMessage } from 'element-plus'
import { reactive, ref } from 'vue'
import AdminModel from '@/lin/model/admin'
export default {
props: ['id'],
setup(props, ctx) {
const form = ref(null)
const loading = ref(false)
const info = reactive({
newPassword: '',
confirmPassword: '',
})
/**
* 表单规则
*/
const rules = getRules(ctx, info, form)
/**
* 提交表单数据
*/
const submitForm = () => {
if (!info.newPassword && !info.confirmPassword) {
ctx.emit('handlePasswordResult', true)
return
}
form.value.validate(async valid => {
if (valid) {
let res = {}
try {
loading.value = true
res = await AdminModel.changePassword(info.newPassword, info.confirmPassword, props.id)
} catch (e) {
loading.value = false
}
if (res.code < window.MAX_SUCCESS_CODE) {
loading.value = false
ElMessage.success(`${res.message}`)
resetForm()
ctx.emit('handlePasswordResult', true)
} else {
loading.value = false
ElMessage.error(`${res.message}`)
}
} else {
ElMessage.error('请填写正确的密码信息')
}
})
}
// 重置表单
const resetForm = () => {
form.value.resetFields()
}
return {
info,
form,
rules,
loading,
resetForm,
submitForm,
}
},
}
/**
* 表单规则
*/
function getRules(ctx, info, form) {
const validatePassword = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入密码'))
} else if (value.length < 6) {
callback(new Error('密码长度不能少于6位数'))
} else {
if (info.confirmPassword) {
form.value.validateField('confirmPassword')
}
callback()
}
}
const validatePassword2 = (rule, value, callback) => {
if (!value) {
callback(new Error('请再次输入密码'))
} else if (value !== info.newPassword) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
// 验证规则
return {
newPassword: [{ validator: validatePassword, trigger: 'blur', required: true }],
confirmPassword: [{ validator: validatePassword2, trigger: 'blur', required: true }],
}
}
</script>
<style lang="scss" scoped>
.el-form-item :v-deep(.el-form-item__label) {
padding-right: 10px !important;
}
</style>