|
1
2
3
4
5
|
<template>
<PageWrapper title="表单增删示例">
<CollapseContainer title="表单增删">
<BasicForm @register="register" @submit="handleSubmit">
<template #add="{ field }">
|
|
6
|
<Button v-if="Number(field) === 0" @click="add">+</Button>
|
|
7
8
9
|
<Button class="ml-2" v-if="Number(field) === 0" @click="batchAdd">
批量添加表单配置
</Button>
|
|
10
|
<Button v-if="field > 0" @click="del(field)">-</Button>
|
|
11
12
13
14
15
16
17
18
|
</template>
</BasicForm>
</CollapseContainer>
</PageWrapper>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
import { BasicForm, useForm } from '/@/components/Form/index';
|
|
19
|
import { CollapseContainer } from '/@/components/Container';
|
|
20
21
22
23
24
25
26
|
import { Input } from 'ant-design-vue';
import { PageWrapper } from '/@/components/Page';
import { Button } from '/@/components/Button';
export default defineComponent({
components: { BasicForm, CollapseContainer, PageWrapper, [Input.name]: Input, Button },
setup() {
|
|
27
|
const [register, { appendSchemaByField, removeSchemaByField, validate }] = useForm({
|
|
28
29
|
schemas: [
{
|
|
30
|
field: 'field0a',
|
|
31
|
component: 'Input',
|
|
32
|
label: '字段0',
|
|
33
34
35
|
required: true,
},
{
|
|
36
|
field: 'field0b',
|
|
37
|
component: 'Input',
|
|
38
|
label: '字段0',
|
|
39
40
41
|
required: true,
},
{
|
|
42
|
field: '0',
|
|
43
44
45
46
47
48
49
|
component: 'Input',
label: ' ',
slot: 'add',
},
],
labelWidth: 100,
actionColOptions: { span: 24 },
|
|
50
|
baseColProps: { span: 8 },
|
|
51
52
53
54
55
56
57
58
59
60
61
|
});
async function handleSubmit() {
try {
const data = await validate();
console.log(data);
} catch (e) {
console.log(e);
}
}
|
|
62
|
const n = ref(1);
|
|
63
64
65
66
|
function add() {
appendSchemaByField(
{
|
|
67
|
field: `field${n.value}a`,
|
|
68
|
component: 'Input',
|
|
69
|
label: '字段' + n.value,
|
|
70
71
|
required: true,
},
|
vben
authored
|
72
|
'',
|
|
73
74
75
|
);
appendSchemaByField(
{
|
|
76
|
field: `field${n.value}b`,
|
|
77
|
component: 'Input',
|
|
78
|
label: '字段' + n.value,
|
|
79
80
|
required: true,
},
|
vben
authored
|
81
|
'',
|
|
82
|
);
|
|
83
|
|
|
84
85
86
87
88
89
90
|
appendSchemaByField(
{
field: `${n.value}`,
component: 'Input',
label: ' ',
slot: 'add',
},
|
vben
authored
|
91
|
'',
|
|
92
93
94
|
);
n.value++;
}
|
|
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
|
/**
* @description: 批量添加
*/
function batchAdd() {
appendSchemaByField(
[
{
field: `field${n.value}a`,
component: 'Input',
label: '字段' + n.value,
required: true,
},
{
field: `field${n.value}b`,
component: 'Input',
label: '字段' + n.value,
required: true,
},
{
field: `${n.value}`,
component: 'Input',
label: ' ',
slot: 'add',
},
],
'',
);
n.value++;
}
|
|
124
125
|
function del(field) {
|
|
126
|
removeSchemaByField([`field${field}a`, `field${field}b`, `${field}`]);
|
|
127
|
n.value--;
|
|
128
129
|
}
|
|
130
|
return { register, handleSubmit, add, del, batchAdd };
|
|
131
132
133
|
},
});
</script>
|