【管理后台】动态表单创建
动态表单(基于 Ant Design Vue 1.x)
- 1.实现以下效果
- 2.示例代码如下:
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
124
125
126
127
128
129
130
131
132<a-button
type="primary"
class="page-work-create-btn"
@click="addDomain"
>
创建
</a-button>
<a-form-model
v-for="(f, index) in dynamicValidateForms"
:key="f.key"
:ref="`dynamicValidateForms${index}`"
:model="f"
v-bind="formItemLayout"
>
<!-- 删除按键 -->
<a-icon
class="dynamic-delete-button"
type="minus-circle-o"
@click="removeDomain(f)"
/>
<!-- 任务名称 -->
<a-form-model-item
:label="'姓名'"
:prop="'name'"
:rules="[
{
required: true,
message: '请输入姓名',
trigger: 'blur'
}
]"
>
<a-input v-model="f.name" placeholder="请输入姓名" />
</a-form-model-item>
<!-- 日期选择 -->
<a-form-model-item
:label="'睡觉时间'"
:prop="'signTime'"
:rules="[
{
required: true,
message: '请选择' + TimeName
},
{
// 自定义校验规则
validator: (rule, value, callback) => {
if (value.length === 2) {
if (!value[0] || !value[1]) {
callback('请选择' + TimeName)
} else {
// callback不传参数表示校验通过
callback()
}
} else {
callback('请选择' + TimeName)
}
}
}
]"
>
<a-range-picker v-model="f.signTime" format="YYYY-MM-DD">
<a-icon slot="suffixIcon" type="smile" />
</a-range-picker>
</a-form-model-item>
<!-- 累计个数 -->
<a-form-model-item
v-if="tabsSelect_index === 3 || tabsSelect_index === 4"
:label="'水果'"
:prop="'threshold'"
:rules="[
{
required: true,
message: '请输入个数',
trigger: 'blur'
}
]"
>
<a-input
v-model="f.threshold"
placeholder="请输入个数"
suffix="个"
@input="
e =>
(name = validForbid(
e,
dynamicValidateForms[index],
'threshold'
))
"
/>
</a-form-model-item>
<!-- 维生素-->
<a-form-model-item
:label="'可获得'"
:prop="'lucky_value'"
:rules="[
{
required: true,
message: '请输入维生素',
trigger: 'blur'
}
]"
>
<a-input
v-model="f.lucky_value"
placeholder="请输入维生素"
suffix="维生素"
@input="
e =>
(name = validForbid(
e,
dynamicValidateForms[index],
'lucky_value'
))
"
/>
</a-form-model-item>
<!-- 说明文案 -->
<a-form-model-item
:label="'说明文案'"
:prop="'body'"
:rules="{
required: true,
message: '请输入说明文案',
trigger: 'blur'
}"
>
<a-input v-model="f.body" placeholder="请输入说明文案" />
</a-form-model-item>
<a-divider />
</a-form-model>
</div>
注意:因为是直接创建一个动态表单,所以ref需要是唯一的,可用循环出来的index进行拼接达到,如果需要初始化有一个默认表单,则需要在初始化的时候初始一个对象push到dynamicValidateForms这个数组里面。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不吃草的羊!
评论