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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 提交 + + + + + + + + + + + +