一:业务需求
1.在注册时候,电话密码验证码是必填的,在获取验证码的时候,电话密码是必填项,由于初始化就将rules定义了验证码必填,因此在获取验证码的事件中需要将它定义为false
2.我最初使用的是对特定的字段进行校验,发现有bug,当必填内容失去焦点时候,验证码也会弹出校验,这是我的初始代码
formRef.value.validateField(['nickName', 'password', 'confirmPassword', 'username'], valid => {
if (valid) {
ElMessage.success('表单已完成初步验证');
// 检查验证码是否填写
if (state.form.phoneCode) {
ElMessage.success('验证通过,正在提交');
// 提交逻辑
} else {
ElMessage.error('请填写验证码');
}
} else {
ElMessage.error('表单验证未通过,请检查输入内容');
}
});
3.我发现可以直接修改rules中的required属性依旧可以达到效果
1.这是获取验证码时关闭对验证码必填项的判断
const getSmsCodeEvent = async () => {
formRules.phoneCode[0].required = false
console.log("获取验证码", formRules.phoneCode[0].required)
formRef.value?.validate((valid) => {
if (valid) {
console.log("获取验证码")
} else {
console.log("error submit!")
}
})
}
2.在最终的表单校验将验证码校验开启。
const confirmEvent = async (formEl: FormInstance | undefined) => {
formRules.phoneCode[0].required = true
if (!formEl) return
await formEl.validate((valid, fields) => {
if (valid) {
console.log("确认修改")
} else {
console.log("error submit!", fields)
}
})
}
末尾:如果大家有更好的方法可以跟我讲一下~