Skip to content

AcroDynamicForm ( Acro 动态表单 )

基于 Arco Design Vue 封装的动态表单组件

注意

该组件仅支持 Vue 3

基础用法

组件插槽&表单项插槽

API

<acro-dynamic-form /> Props

参数名描述类型默认值
fields字段配置列表DynamicFormField[]-
model表单数据Record<string, any>-
showActionButtonArea是否显示操作按钮区域 (提交/重置)booleantrue
showSubmitButton是否显示提交按钮booleantrue
submitButtonText提交按钮文本string'提交'
showResetButton是否显示重置按钮booleantrue
resetButtonText重置按钮文本string'重置'

<acro-dynamic-form /> Methods

鼠标悬停查看方法类型定义

ts
validate
; // 校验全部表单数据
validateField
; // 校验部分表单数据
resetFields
; // 重置表单数据
clearValidate
; // 清除校验状态
setFields
; // 设置表单项的值和状态
scrollToField
; // 滚动到指定表单项
reset
; // 重置表单数据, 是 `resetFields` 方法的别名

<acro-dynamic-form /> Data

参数名描述类型
data表单数据Record<string, any>

<acro-dynamic-form /> Events

事件名描述回调参数
submit点击了提交按钮的事件model: Record<string, any>
reset点击了重置按钮的事件-

对外导出工具方法

方法名描述参数返回值
defineAcroDynamicFormField定义单个字段配置field: DynamicFormFieldDynamicFormField
defineAcroDynamicFormFields定义字段配置列表fields: DynamicFormField[]DynamicFormField[]

类型定义

ts
/** 字段配置 */
type AcroDynamicFormField = AcroDynamicFormComponentField | AcroDynamicFormFieldBase;

/** 字段通用配置 */
interface AcroDynamicFormFieldBase {
  /** 字段名 */
  field: string;
  /** 标签 */
  label?: string;
  /** 默认值 */
  defaultValue?: any;
  /** 校验规则 */
  rules?: FieldRule | FieldRule[];
  /**
   * 触发校验的事件
   * @default ['change', 'blur']
   */
  validateTrigger?: FormItemInstance['validateTrigger'];
  /** 传递给 FormItem 组件的参数 */
  formItemProps?: Omit<FormItemInstance['$props'], 'field' | 'label' | 'rules' | 'validateTrigger'>;
  /** 传递给 FormItem 组件的插槽 */
  formItemSlots?: Record<string, (...args: any[]) => VNodeChild>;
  /** 字段类型 */
  type?: string;
  /** 传递给组件的参数 */
  componentProps?: Record<string, any>;
  /** 传递给组件的插槽 */
  componentSlots?: Record<string, (...args: any[]) => VNodeChild>;
}

/** 组件字段配置 */
type AcroDynamicFormComponentField = {
  [T in AcroDynamicFormFieldType]: Omit<AcroDynamicFormFieldBase, 'type' | 'componentProps'> & {
    /** 字段类型 */
    type: T;
    /** 传递给组件的参数 */
    componentProps?: Omit<AcroDynamicFormFieldComponentPropsMap[T], 'modelValue'>;
  };
}[AcroDynamicFormFieldType];

/** 字段类型 */
type AcroDynamicFormFieldType = keyof AcroDynamicFormFieldComponentPropsMap;

/** 字段配置组件参数映射 */
interface AcroDynamicFormFieldComponentPropsMap {
  'input': InputInstance['$props'];
  'input-group': InputGroupInstance['$props'];
  'input-number': InputNumberInstance['$props'];
  'input-password': InputPasswordInstance['$props'];
  'input-search': InputSearchInstance['$props'];
  'input-tag': InputTagInstance['$props'];
  'textarea': TextareaInstance['$props'];
  'select': SelectInstance['$props'];
  'cascader': CascaderInstance['$props'];
  'cascader-panel': CascaderPanelInstance['$props'];
  'tree-select': TreeSelectInstance['$props'];
  'date-picker': DatePickerInstance['$props'];
  'time-picker': TimePickerInstance['$props'];
  'year-picker': YearPickerInstance['$props'];
  'month-picker': MonthPickerInstance['$props'];
  'quarter-picker': QuarterPickerInstance['$props'];
  'week-picker': WeekPickerInstance['$props'];
  'range-picker': RangePickerInstance['$props'];
  'checkbox': CheckboxInstance['$props'];
  'checkbox-group': CheckboxGroupInstance['$props'];
  'radio': RadioInstance['$props'];
  'radio-group': RadioGroupInstance['$props'];
  'switch': SwitchInstance['$props'];
  'upload': UploadInstance['$props'];
  'transfer': TransferInstance['$props'];
  'slider': SliderInstance['$props'];
  'rate': RateInstance['$props'];
  'auto-complete': AutoCompleteInstance['$props'];
  'mention': MentionInstance['$props'];
  'verification-code': VerificationCodeInstance['$props'];
  'color-picker': ColorPickerInstance['$props'];
}

Released under the MIT License.