123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- <template>
- <PageWrapper title="表单校验示例">
- <div class="mb-4">
- <a-button @click="validateForm" class="mr-2"> 手动校验表单 </a-button>
- <a-button @click="resetValidate" class="mr-2"> 清空校验信息 </a-button>
- <a-button @click="getFormValues" class="mr-2"> 获取表单值 </a-button>
- <a-button @click="setFormValues" class="mr-2"> 设置表单值 </a-button>
- <a-button @click="resetFields" class="mr-2"> 重置 </a-button>
- </div>
- <CollapseContainer title="表单校验">
- <BasicForm @register="register" @submit="handleSubmit" />
- </CollapseContainer>
- </PageWrapper>
- </template>
- <script lang="ts">
- import { defineComponent } from 'vue';
- import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
- import { CollapseContainer } from '/@/components/Container/index';
- import { useMessage } from '/@/hooks/web/useMessage';
- import { PageWrapper } from '/@/components/Page';
- const schemas: FormSchema[] = [
- {
- field: 'field1',
- component: 'Input',
- label: '字段1',
- colProps: {
- span: 8,
- },
- required: true,
- },
- {
- field: 'field2',
- component: 'Input',
- label: '字段2',
- colProps: {
- span: 8,
- },
- required: true,
- },
- {
- field: 'id',
- label: 'id',
- required: true,
- defaultValue: 0,
- component: 'InputNumber',
- show: false,
- },
- {
- field: 'field3',
- component: 'DatePicker',
- label: '字段3',
- colProps: {
- span: 8,
- },
- required: true,
- },
- {
- field: 'field44',
- component: 'InputCountDown',
- label: '验证码',
- colProps: {
- span: 8,
- },
- required: true,
- },
- {
- field: 'field4',
- component: 'Select',
- label: '字段4',
- colProps: {
- span: 8,
- },
- componentProps: {
- mode: 'multiple',
- options: [
- {
- label: '选项1',
- value: '1',
- key: '1',
- },
- {
- label: '选项2',
- value: '2',
- key: '2',
- },
- ],
- },
- rules: [
- {
- required: true,
- message: '请输入aa',
- type: 'array',
- },
- ],
- },
- {
- field: 'field44',
- component: 'Input',
- label: '自定义校验',
- colProps: {
- span: 8,
- },
- rules: [
- {
- required: true,
- // @ts-ignore
- validator: async (rule, value) => {
- if (!value) {
- /* eslint-disable-next-line */
- return Promise.reject('值不能为空');
- }
- if (value === '1') {
- /* eslint-disable-next-line */
- return Promise.reject('值不能为1');
- }
- return Promise.resolve();
- },
- trigger: 'change',
- },
- ],
- },
- {
- field: 'field5',
- component: 'CheckboxGroup',
- label: '字段5',
- colProps: {
- span: 8,
- },
- componentProps: {
- options: [
- {
- label: '选项1',
- value: '1',
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- },
- rules: [{ required: true }],
- },
- {
- field: 'field7',
- component: 'RadioGroup',
- label: '字段7',
- colProps: {
- span: 8,
- },
- componentProps: {
- options: [
- {
- label: '选项1',
- value: '1',
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- },
- rules: [{ required: true, message: '覆盖默认生成的校验信息' }],
- },
- ];
- export default defineComponent({
- components: { BasicForm, CollapseContainer, PageWrapper },
- setup() {
- const { createMessage } = useMessage();
- const [
- register,
- { validateFields, clearValidate, getFieldsValue, resetFields, setFieldsValue },
- ] = useForm({
- labelWidth: 120,
- schemas,
- actionColOptions: {
- span: 24,
- },
- });
- async function validateForm() {
- try {
- const res = await validateFields();
- console.log('passing', res);
- } catch (error) {
- console.log('not passing', error);
- }
- }
- async function resetValidate() {
- clearValidate();
- }
- function getFormValues() {
- const values = getFieldsValue();
- createMessage.success('values:' + JSON.stringify(values));
- }
- function setFormValues() {
- setFieldsValue({
- field1: 1111,
- field5: ['1'],
- field7: '1',
- });
- }
- return {
- register,
- schemas,
- handleSubmit: (values: any) => {
- createMessage.success('click search,values:' + JSON.stringify(values));
- },
- getFormValues,
- setFormValues,
- validateForm,
- resetValidate,
- resetFields,
- };
- },
- });
- </script>
|