问题:点击确定按钮,submitForm事件正常触发了,但是没有进行表单校验(validate),也没执行表单校验之后的代码
javascript
<el-dialog>
<el-form>
<el-form-item>
</el-form-item>
....
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="cancel(formRef)">取 消</el-button>
<el-button
type="primary"
v-reclick
@click="submitForm(formRef)"
>确 定</el-button>
</span>
</template>
</el-dialog>
script
const submitForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return
console.log('22222222');
try {
await formEl.validate()
console.log('?????');
....
} catch (error: any) {
console.log("🚀 ~ submitForm ~ error:", error)
}
最后发现是因为表单验证规则的定义有问题
javascript
const formRules = {
serveName: [{ required: true, message: "请输入服务名称", trigger: ["blur", "change"] }],
serveImages: [{ required: true, message: "请上传服务图片", trigger: ["change"] }],
serveStatus: [{ required: true, message: "请选择服务状态", trigger: ["change"] }],
servePrice: [
{ required: true, message: "请输入服务价格", trigger: ["blur", "change"] },
...validatorMethod("服务价格"),
],
duration: [
{ required: true, message: "请输入服务时长", trigger: ["blur", "change"] },
// 只能是正整数
{
validator: (rule: any, value: any, callback: any) => {
if (!/^\d+$/.test(value)) {
callback(new Error("服务时长必须为正整数"));
return;
}
}
},
],
selectProductList: [
{ required: true, message: "请选择服务产品", trigger: ["change"] }
]
};
问题点:formRules.duration定义的有问题 : 没有callback
javascript
const formRules = {
...
duration: [
{ required: true, message: "请输入服务时长", trigger: ["blur", "change"] },
// 只能是正整数
{
validator: (rule: any, value: any, callback: any) => {
if (!/^\d+$/.test(value)) {
callback(new Error("服务时长必须为正整数"));
return;
} else {
// ⚠️ 重要:验证通过时必须调用 callback()
callback();
}
},
trigger: "blur"
},
],
...
};