jinlin
2023-11-03 35435e8b1995e6775c82b86652381e07e3faff54
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<template>
    <el-form-item :label="label" :prop="prop"  :rules="itemRules">
        <slot></slot>
    </el-form-item>
</template>
<script>
 
  export default {
    name: 'ZtFormItem',
    props: {
      label: String,
      prop: {
        type: String,
        required: true
      },
      rules: String
    },
    data() {
      return {
        itemRules: []
      }
    },
    mounted() {
      let itemRules = this.itemRules
      if (!this.rules) {
        return
      }
      let rules = this.rules.split('|')
      rules.forEach(rule => {
        let arr = rule.split(':')
        let ruleName = arr[0]
        if (ruleName === 'required') {
          itemRules.push({required: true, message: this.$t('validate.required2', {label: this.label}), trigger: 'blur'})
        } else if (ruleName === 'min') {
          itemRules.push({min: parseInt(arr[1]), message: this.$t('validate.min', {min: arr[1]}), trigger: 'blur'})
        } else if (ruleName === 'max') {
          itemRules.push({max: parseInt(arr[1]), message: this.$t('validate.max', {max: arr[1]}), trigger: 'blur'})
        } else if (ruleName === 'minmax' && arr[1].indexOf(',') > 0) {
          let param = arr[1].split(',')
          itemRules.push({min: parseInt(param[0]), max: parseInt(param[1]), message: this.$t('validate.minmax', {min: param[0], max: param[1]}), trigger: 'blur'})
        } else if (ruleName === 'email') {
          itemRules.push({type: 'email', message: this.$t('validate.format', {attr: 'email'}), trigger: 'blur'})
        } else if (ruleName === 'url') {
          itemRules.push({type: 'url', message: this.$t('validate.format', {attr: 'url'}), trigger: 'blur'})
        } else {
          /* eslint-disable */
          itemRules.push({validator: (rule, value, callback) => {
                            let pattern = ''
                            let message = ''
                            if (ruleName === 'integer') {
                              pattern = /^[+]?[1-9]+\d*$/i
                              message = '请输入整数'
                            } else if (ruleName === 'double') {
                              pattern = /^[0-9]+\.{0,1}[0-9]+$/i
                              message = '请输入小数'
                            } else if (ruleName === 'phone') {
                              pattern = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i
                              message = '格式不正确,请使用下面格式:010-88888888'
                            } else if (ruleName === 'mobile') {
                              pattern = /^1[\d]{10}/i
                              message = '手机号码格式不正确'
                            } else if (ruleName === 'chinese') {
                              pattern = /^[\u0391-\uFFE5]+$/i
                              message = '请输入中文'
                            } else if (ruleName === 'english') {
                              pattern = /^[A-Za-z]+$/i
                              message = '请输入英文'
                            } else if (ruleName === 'username') {
                              pattern = /^[a-zA-Z][a-zA-Z0-9_]{5,15}$/i
                              message = '用户名不合法(字母开头,允许6-16字节,允许字母数字下划线)'
                            } else if (ruleName === 'name') {
                              pattern = /^[\u4e00-\u9fa5a-zA-Z]+[\u4e00-\u9fa5a-zA-Z0-9_]+$/
                              message = (this.label + '格式不正确')
                            } else if (ruleName === 'email') {
                              pattern = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
                              message = '请输入有效的电子邮件账号(例:abc@163.com)'
                            } else if (ruleName === 'version') {
                              pattern = /^\d+(\.\d+){0,2}$/
                              message = '请输入有效的版本号(例:1.3.2)'
                            } else if (ruleName === 'version') {
                              pattern = /^([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$/
                              message = '请输入有效的ip地址'
                            } else if (ruleName === 'reg') {
                              pattern = arr[1]
                              message = this.$t('validate.format')
                            }
                            if (ruleName === 'reg' && arr.length > 2) {
                              message = arr[2]
                            } else if (arr.length > 1) {
                              message = arr[1]
                            }
                            if (!pattern.test(value)) {
                              callback(new Error(message))
                            } else {
                              callback()
                            }
                          },
                          trigger: 'blur'})
          /* eslint-disable */
        }
      })
    },
    methods: {
    }
  }
</script>