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