一,官方文档地址:
https://element-plus.gitee.io/zh-CN/component/form.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A0%A1%E9%AA%8C%E8%A7%84%E5%88%99
二,js代码:
<template>
<div class="view_root">
<el-card shadow="never">
<el-form :model="ruleForm" status-icon :rules="rules" ref="refForm" label-width="100px" class="demo-ruleForm" style="width:600px;">
<el-form-item label="原始密码" prop="originPass" style="margin-bottom: 20px;">
<el-input type="password" v-model="ruleForm.originPass" placeholder="请输入原始密码" autocomplete="off" show-password></el-input>
</el-form-item>
<el-form-item label="新密码" prop="newPass" style="margin-bottom: 20px;">
<el-input type="password" placeholder="请输入新密码" v-model="ruleForm.newPass" autocomplete="off" show-password></el-input>
</el-form-item>
<el-form-item label="确认新密码" prop="checkPass" style="margin-bottom: 20px;">
<el-input type="password" placeholder="请再次输入新密码" v-model="ruleForm.checkPass" autocomplete="off" show-password></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
import {ElMessage} from "element-plus";
import {ref,reactive} from "vue";
import {post} from "@/api/axios";
export default {
name:"UserPassword",
setup() {
//表单的ref
const refForm = ref(null);
//提交表单
const submitForm = () => {
refForm.value.validate((valid) => {
if (valid) {
//提交到api
try {
var data = new FormData();
// 创建一个表单数据
data.append("originpass",ruleForm.originPass);
data.append("newpass",ruleForm.newPass);
data.append("checkpass",ruleForm.checkPass);
post('/api/login/password',data).then(res => {
if (res.code == 0) {
//提示
ElMessage.success("密码修改成功!");
} else {
ElMessage.error("密码修改失败:"+res.msg);
}
}).catch((error) => {
console.log(error)
})
} catch (error) {
console.log(error)
ElMessage.error("密码修改出错");
}
} else {
console.log('error submit!!');
return false;
}
});
};
//重置表单
const resetForm = () => {
refForm.value.resetFields();
}
//表单的数据
const ruleForm = reactive({
originPass:'',
newPass: '',
checkPass: '',
});
//原始密码的验证
const validateOriginPass = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入原始密码'));
} else if (value.length < 3) {
callback(new Error('密码长度应不低于6个字符'));
} else {
callback();
}
};
//新输入密码的验证
const validatePass = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入新密码'));
} else if (value.length < 6) {
callback(new Error('密码长度应不低于6个字符'));
} else {
if (ruleForm.checkPass !== '') {
refForm.value.validateField('checkPass', () => null);
}
callback();
}
};
//确认密码的验证
const validatePass2 = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'));
} else if (value.length < 6) {
callback(new Error('密码长度应不低于6个字符'));
} else if (value !== ruleForm.newPass) {
callback(new Error('两次输入密码不一致!'));
} else {
callback();
}
};
//表单验证的规则
const rules = ref({
originPass: [
{required: true, validator: validateOriginPass, trigger: 'blur' }
],
newPass: [
{ required: true,validator: validatePass, trigger: 'blur' }
],
checkPass: [
{required: true, validator: validatePass2, trigger: 'blur' }
],
});
return {
refForm,
rules,
ruleForm,
resetForm,
submitForm,
}
},
}
</script>
三,效果
说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2023/09/29/vue-zi-ding-yi-validator-yan-zheng-gui-ze-elementplus-2-3-12/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com
四,查看vue/element-plus框架版本:
liuhongdi@lhdpc:/data/vue/responsive$ npm list vue responsive@0.1.0 /data/vue/responsive └─┬ vue@3.3.4 └─┬ @vue/server-renderer@3.3.4 └── vue@3.3.4 deduped
liuhongdi@lhdpc:/data/vue/responsive$ npm list element-plus responsive@0.1.0 /data/vue/responsive └── element-plus@2.3.12