From f2fa2e4efa0a7077e08d8f8c45a3ee4cad329ef4 Mon Sep 17 00:00:00 2001 From: LCJ-MinYa <1049468118@qq.com> Date: Thu, 30 Oct 2025 09:56:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ElementUI=E7=9A=84form=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=BD=BF=E7=94=A8rules=E6=97=B6=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=B9=B6=E4=BC=A0=E5=85=A5=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/modules/demo.ts | 4 + src/views/demo/computedRules/config.js | 57 ++++++++++ src/views/demo/computedRules/index.vue | 138 +++++++++++++++++++++++++ 3 files changed, 199 insertions(+) create mode 100644 src/views/demo/computedRules/config.js create mode 100644 src/views/demo/computedRules/index.vue diff --git a/src/router/modules/demo.ts b/src/router/modules/demo.ts index 1e946bb..7a30dda 100644 --- a/src/router/modules/demo.ts +++ b/src/router/modules/demo.ts @@ -142,6 +142,10 @@ const titleArr = [ key: 'resizeElementDialog', title: '动态调整element弹窗大小', }, + { + key: 'computedRules', + title: 'ElementUI的form组件使用rules时动态计算并传入组件实例', + }, ]; // @/views/demo/**/*.vue diff --git a/src/views/demo/computedRules/config.js b/src/views/demo/computedRules/config.js new file mode 100644 index 0000000..8fca295 --- /dev/null +++ b/src/views/demo/computedRules/config.js @@ -0,0 +1,57 @@ +export const checkIdNumber = (context) => { + const { form } = context; + return (rule, value, callback) => { + if (!form.idType) { + return callback(new Error('请选择证件类型')); + } + if (form.idType === '身份证') { + if (!/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|21|22|23|24|25|26|27|28)\d{3}[0-9Xx]$/i.test(value)) { + callback(new Error('身份证格式不正确')); + } + } else if (form.idType === '护照') { + if (!/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|21|22|23|24|25|26|27|28)\d{3}[0-9Xx]$/i.test(value)) { + callback(new Error('护照格式不正确')); + } + } + }; +}; + +export const getRules = (context) => { + console.log(context, '传递过来的context内容'); + return { + name: [ + { + required: true, + message: '请输入名称', + trigger: 'blur', + }, + ], + age: [ + { + required: true, + message: '请输入年龄', + trigger: 'blur', + }, + ], + idType: [ + { + required: true, + message: '请选择证件类型', + trigger: 'change', + }, + ], + // 这里演示证件号码校验,必须依赖证件类型的值,比如证件类型是身份证,校验一种格式,是护照,校验另一种格式,等等 + idNumber: [ + { + required: true, + message: '请输入证件号码', + trigger: 'blur', + }, + { + required: true, + validator: checkIdNumber(context), + trigger: 'blur', + }, + ], + }; +}; diff --git a/src/views/demo/computedRules/index.vue b/src/views/demo/computedRules/index.vue new file mode 100644 index 0000000..3f1fc06 --- /dev/null +++ b/src/views/demo/computedRules/index.vue @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 提交 + + + + + + + + + + + +