vben
2021-01-05 31ff0559fe3b635fc2091aac0e2f5e340629134c
提交 | 用户 | age
2f6253 1 <template>
31ff05 2   <PageWrapper title="表单校验示例">
2f6253 3     <div class="mb-4">
4       <a-button @click="validateForm" class="mr-2">手动校验表单</a-button>
5       <a-button @click="resetValidate" class="mr-2">清空校验信息</a-button>
6       <a-button @click="getFormValues" class="mr-2">获取表单值</a-button>
7       <a-button @click="setFormValues" class="mr-2">设置表单值</a-button>
8     </div>
9     <CollapseContainer title="表单校验">
10       <BasicForm @register="register" @submit="handleSubmit" />
11     </CollapseContainer>
31ff05 12   </PageWrapper>
2f6253 13 </template>
14 <script lang="ts">
15   import { defineComponent } from 'vue';
16   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
17   import { CollapseContainer } from '/@/components/Container/index';
18   import { useMessage } from '/@/hooks/web/useMessage';
31ff05 19   import { PageWrapper } from '/@/components/Page';
V 20
2f6253 21   const schemas: FormSchema[] = [
22     {
23       field: 'field1',
24       component: 'Input',
25       label: '字段1',
26       colProps: {
27         span: 8,
28       },
285906 29       required: true,
2f6253 30     },
31     {
32       field: 'field2',
33       component: 'Input',
34       label: '字段2',
35       colProps: {
36         span: 8,
37       },
285906 38       required: true,
2f6253 39     },
40     {
41       field: 'field3',
42       component: 'DatePicker',
43       label: '字段3',
44       colProps: {
45         span: 8,
46       },
285906 47       required: true,
2f6253 48     },
49     {
50       field: 'field4',
51       component: 'Select',
52       label: '字段4',
53       colProps: {
54         span: 8,
55       },
56       componentProps: {
57         options: [
58           {
59             label: '选项1',
60             value: '1',
61             key: '1',
62           },
63           {
64             label: '选项2',
65             value: '2',
66             key: '2',
67           },
68         ],
69       },
1d4561 70       rules: [
V 71         {
72           required: true,
73           message: '请输入aa',
74         },
75       ],
76     },
77     {
78       field: 'field44',
79       component: 'Input',
80       label: '自定义校验',
81       colProps: {
82         span: 8,
83       },
84       rules: [
85         {
86           required: true,
87           // @ts-ignore
88           validator: async (rule, value) => {
4ff1c4 89             if (!value) {
V 90               return Promise.reject('值不能为空');
91             }
1d4561 92             if (value === '1') {
V 93               return Promise.reject('值不能为1');
94             }
95             return Promise.resolve();
96           },
4ff1c4 97           trigger: 'change',
1d4561 98         },
V 99       ],
2f6253 100     },
101     {
102       field: 'field5',
103       component: 'CheckboxGroup',
104       label: '字段5',
105       colProps: {
106         span: 8,
107       },
108       componentProps: {
109         options: [
110           {
111             label: '选项1',
112             value: '1',
113           },
114           {
115             label: '选项2',
116             value: '2',
117           },
118         ],
119       },
120       rules: [{ required: true }],
121     },
122     {
123       field: 'field7',
124       component: 'RadioGroup',
125       label: '字段7',
126       colProps: {
127         span: 8,
128       },
129       componentProps: {
130         options: [
131           {
132             label: '选项1',
133             value: '1',
134           },
135           {
136             label: '选项2',
137             value: '2',
138           },
139         ],
140       },
141       rules: [{ required: true, message: '覆盖默认生成的校验信息' }],
142     },
143   ];
144
145   export default defineComponent({
31ff05 146     components: { BasicForm, CollapseContainer, PageWrapper },
2f6253 147     setup() {
148       const { createMessage } = useMessage();
149       const [register, { validateFields, clearValidate, getFieldsValue, setFieldsValue }] = useForm(
150         {
151           labelWidth: 120,
152           schemas,
153           actionColOptions: {
154             span: 24,
155           },
156         }
157       );
158       async function validateForm() {
159         try {
160           const res = await validateFields();
161           console.log('passing', res);
162         } catch (error) {
163           console.log('not passing', error);
164         }
165       }
166       async function resetValidate() {
167         clearValidate();
168       }
169       function getFormValues() {
170         const values = getFieldsValue();
171         createMessage.success('values:' + JSON.stringify(values));
172       }
173       function setFormValues() {
174         setFieldsValue({
ac1a36 175           field1: 1111,
2f6253 176           field5: ['1'],
177           field7: '1',
178         });
179       }
180       return {
181         register,
182         schemas,
183         handleSubmit: (values: any) => {
184           createMessage.success('click search,values:' + JSON.stringify(values));
185         },
186         getFormValues,
187         setFormValues,
188         validateForm,
189         resetValidate,
190       };
191     },
192   });
193 </script>