1
YM
2024-07-26 c423765d8a5ff0c58d23bb0a31af7df6c1fad95c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 }