export function getRule(rule) { if ('required' in rule) { return { type: 'required', value: rule.required } } if ('max' in rule || 'min' in rule) { return { type: 'between', value: [rule.min, rule.max] } } if ('validator' in rule) { return { type: 'validator', value: rule.validator } } if ('pattern' in rule) { return { type: 'pattern', value: rule.pattern } } } export function filterRules(rules) { return rules.filter(rule => { const { type, value } = getRule(rule) return value }) } export function combineRule(rules) { return filterRules(rules).map(rule => { const { message = '' } = rule const { type, value } = getRule(rule) return { message, type, value } }) } function isVariableEmpty(variable) { // 判断变量是否为null或undefined if (variable == null) { return true } // 判断字符串是否为空 if (typeof variable === 'string' && variable.trim().length === 0) { return true } // 判断数组是否为空 if (Array.isArray(variable) && variable.length === 0) { return true } // 判断对象是否为空 if (typeof variable === 'object' && Object.keys(variable).length === 0) { return true } return false } const validationRules = { required(rule, value, model) { return !isVariableEmpty(value) }, pattern(rule, value, model) { return rule.test(value, model) }, between(rule, value, model) { const [min = null, max = null] = rule if (min !== null && max !== null) return (Number(value) >= min && Number(value) <= max) if (min !== null && max === null) return Number(value) >= min if (max !== null && min === null) return Number(value) <= max }, validator(rule, value, model) { // 自定义验证 return rule(value, model) } } export { validationRules }