From e11032712b0102b9bfb96c1dc50f28ed60054503 Mon Sep 17 00:00:00 2001 From: AlanLee <1445654576@qq.com> Date: Sat, 12 Mar 2022 20:47:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=90=E5=8F=96=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=88=B0use-validate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devui-vue/devui/form/src/use-validate.ts | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 packages/devui-vue/devui/form/src/use-validate.ts diff --git a/packages/devui-vue/devui/form/src/use-validate.ts b/packages/devui-vue/devui/form/src/use-validate.ts new file mode 100644 index 0000000000..62c01d5bda --- /dev/null +++ b/packages/devui-vue/devui/form/src/use-validate.ts @@ -0,0 +1,119 @@ +import AsyncValidator from 'async-validator'; + +export default function useValidate() { + + // 校验函数 + const validate = (descriptor, validateObject) => { + const validator = new AsyncValidator(descriptor); + return validator.validate(validateObject); + } + + // 创建内置校验器 + const createDevUIBuiltinValidator = (rule) => { + let res = {...rule}; + if(res.min !== undefined) { + res = { + ...res, + message: res.message ?? `最小值为${res.min}`, + asyncValidator: (r, val) => { + return new Promise((resolve, reject) => { + if(val < res.min) { + reject('最小值为' + res.min); + }else { + resolve('校验通过'); + } + }) + } + } + } + + if(res.max !== undefined) { + res = { + ...res, + message: res.message ?? `最大值为${res.max}`, + asyncValidator: (r, val) => { + return new Promise((resolve, reject) => { + if(val > res.max) { + reject('最大值为' + res.max); + }else { + resolve('校验通过'); + } + }) + } + } + } + + if(res.maxlength !== undefined) { + res = { + ...res, + max: res.maxlength, + message: res.message ?? `最大长度为${res.maxlength}` + } + delete res.maxlength; + delete res.asyncValidator; + } + + if(res.minlength !== undefined) { + res = { + ...res, + min: res.minlength, + message: res.message ?? `最小长度为${res.minlength}` + } + delete res.minlength; + delete res.asyncValidator; + } + + + if(res.requiredTrue !== undefined) { + res = { + ...res, + message: res.message ?? `必须为true值`, + asyncValidator: (r, val) => { + return new Promise((resolve, reject) => { + if(!val) { + reject('必须为true值'); + }else { + resolve('校验通过'); + } + }) + } + } + } + if(res.email !== undefined){ + res = { + ...res, + type: 'email', + message: res.message ?? '邮箱格式不正确' + } + delete res.asyncValidator; + } + if(res.pattern !== undefined){ + res = { + ...res, + type: 'pattern', + message: res.message ?? '正则不匹配' + } + delete res.asyncValidator; + } + if(res.whitespace === true){ + res = { + ...res, + type: 'string', + message: res.message ?? '不能全为空格', + asyncValidator: (r, val) => { + return new Promise((resolve, reject) => { + if(val.trim() === '') { + reject('不能全为空格'); + }else { + resolve('校验通过'); + } + }) + } + } + } + + return res; + } + + return {validate, createDevUIBuiltinValidator}; +}