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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<template>
<div>
<el-form-item label="占位内容">
<el-input
v-model="data.placeholder"
clearable
placeholder="占位内容"
></el-input>
</el-form-item>
<el-form-item label="默认值">
<el-input v-model="data.value" clearable placeholder="默认值"></el-input>
</el-form-item>
<el-form-item label="前缀">
<el-input v-model="data.prepend" clearable placeholder="前缀"></el-input>
</el-form-item>
<el-form-item label="后缀">
<el-input v-model="data.append" clearable placeholder="后缀"></el-input>
</el-form-item>
<el-form-item label="是否为牙位">
<el-switch v-model="data.toothBit"></el-switch>
</el-form-item>
<el-form-item label="最大长度">
<el-input-number
v-model="data.maxlength"
controls-position="right"
placeholder="最大长度"
></el-input-number>
</el-form-item>
<el-form-item label="显示计数" v-if="data.type != 'password'">
<el-switch v-model="data.showWordLimit"></el-switch>
</el-form-item>
<el-form-item label="显示密码" v-if="data.type == 'password'">
<el-switch v-model="data.showPassword"></el-switch>
</el-form-item>
<el-form-item label="是否只读">
<el-switch v-model="data.readonly"></el-switch>
</el-form-item>
<el-form-item label="是否禁用">
<el-switch v-model="data.disabled"></el-switch>
</el-form-item>
<el-form-item label="是否可见">
<el-switch v-model="data.display"></el-switch>
</el-form-item>
<el-form-item label="是否必填">
<el-switch v-model="data.required"></el-switch>
<el-input
v-if="data.required"
v-model.lazy="data.pattern"
placeholder="正则表达式"
></el-input>
</el-form-item>
</div>
</template>
<script>
let checkTel = (rule, value, callback) => {
if (!value) {
return callback(new Error("请输入手机号"))
}
const reg = /^1[3,4,5,6,7,8,9][0-9]{9}$/
reg.test(value)
if (!reg.test(value)) {
callback(new Error("请输入正确的手机号"))
} else {
callback()
}
}
export default {
name: "config-input",
props: ["data"],
data() {
return {
validator: {
type: null,
required: null,
pattern: null,
length: null,
},
}
},
methods: {
generateRule() {
const rules = []
Object.keys(this.validator).forEach((key) => {
if (this.validator[key]) rules.push(this.validator[key])
})
this.data.rules = rules
},
telRule() {
this.data.rules[1] = { validator: checkTel, trigger: "blur" }
},
},
watch: {
"data.required": function (val) {
if (val)
this.validator.required = {
required: true,
message: `${this.data.label}必须填写`,
}
else this.validator.required = null
this.generateRule()
},
"data.pattern": function (val) {
if (val) {
if (val == "checkTel") {
this.telRule()
} else {
this.validator.pattern = {
pattern: new RegExp(val),
message: `${this.data.label}格式不匹配`,
}
this.generateRule()
}
} else {
this.validator.pattern = null
this.generateRule()
}
// delete this.data.pattern
},
},
}
</script>