import type { BaseFormComponentType, VbenFormSchema as FormSchema, VbenFormProps, } from '@vben/common-ui'; import { h } from 'vue'; import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui'; import { $t } from '@vben/locales'; import { AutoComplete, Button, Checkbox, CheckboxGroup, DatePicker, Divider, Input, InputNumber, InputPassword, Mentions, Radio, RadioGroup, RangePicker, Rate, Select, Space, Switch, TimePicker, TreeSelect, Upload, } from 'ant-design-vue'; // 业务表单组件适配 export type FormComponentType = | 'AutoComplete' | 'Checkbox' | 'CheckboxGroup' | 'DatePicker' | 'Divider' | 'Input' | 'InputNumber' | 'InputPassword' | 'Mentions' | 'Radio' | 'RadioGroup' | 'RangePicker' | 'Rate' | 'Select' | 'Space' | 'Switch' | 'TimePicker' | 'TreeSelect' | 'Upload' | BaseFormComponentType; // 初始化表单组件,并注册到form组件内部 setupVbenForm({ components: { AutoComplete, Checkbox, CheckboxGroup, DatePicker, // 自定义默认的重置按钮 DefaultResetActionButton: (props, { attrs, slots }) => { return h(Button, { ...props, attrs, type: 'default' }, slots); }, // 自定义默认的提交按钮 DefaultSubmitActionButton: (props, { attrs, slots }) => { return h(Button, { ...props, attrs, type: 'primary' }, slots); }, Divider, Input, InputNumber, InputPassword, Mentions, Radio, RadioGroup, RangePicker, Rate, Select, Space, Switch, TimePicker, TreeSelect, Upload, }, config: { baseModelPropName: 'value', modelPropNameMap: { Checkbox: 'checked', Radio: 'checked', Switch: 'checked', Upload: 'fileList', }, }, defineRules: { required: (value, _params, ctx) => { if ((!value && value !== 0) || value.length === 0) { return $t('formRules.required', [ctx.label]); } return true; }, selectRequired: (value, _params, ctx) => { if (value === undefined || value === null) { return $t('formRules.selectRequired', [ctx.label]); } return true; }, }, }); const useVbenForm = useForm; export { useVbenForm, z }; export type VbenFormSchema = FormSchema; export type { VbenFormProps };