/**
 * SuperForm 超级表单组件类型定义
 */

import type { FormInstance, FormItemRule, FormRules } from 'element-plus'

/**
 * 表单项基础类型
 */
export interface BaseFormItem {
  /** 字段名 */
  field: string
  /** 标签文本 */
  label: string
  /** 组件类型 */
  type: FormItemType
  /** 是否必填 */
  required?: boolean
  /** 验证规则 */
  rules?: FormItemRule[]
  /** 栅格占位格数 */
  span?: number
  /** 栅格偏移 */
  offset?: number
  /** 响应式栅格 */
  xs?: number | string
  sm?: number | string
  md?: number | string
  lg?: number | string
  xl?: number | string
  /** 标签元素 */
  tag?: string
  /** 栅格向左移动 */
  pull?: number | string
  /** 栅格向右移动 */
  push?: number | string
  /** 默认值 */
  defaultValue?: any
  /** 字段 CSS 类名 */
  itemClass?: string
  /** 是否显示错误信息 */
  showMessage?: boolean
  /** 是否行内错误信息 */
  inlineMessage?: boolean
  /** 错误信息 */
  error?: string
}

/**
 * 输入框类型
 */
export interface InputFormItem extends BaseFormItem {
  type: 'input' | 'textarea' | 'password'
  /** 是否可清空 */
  clearable?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 是否只读 */
  readonly?: boolean
  /** 最大输入长度 */
  maxlength?: number
  /** 是否显示字数统计 */
  showWordLimit?: boolean
  /** 占位文本 */
  placeholder?: string
  /** 输入框前缀 */
  prefix?: string
  /** 输入框后缀 */
  suffix?: string
  /** 前置内容 */
  prepend?: string
  /** 后置内容 */
  append?: string
  /** 前置图标 */
  prefixIcon?: string
  /** 后置图标 */
  suffixIcon?: string
  /** 前置插槽名称 */
  prependSlot?: string
  /** 后置插槽名称 */
  appendSlot?: string
  /** 文本域行数 */
  rows?: number
  /** 自适应内容高度 */
  autosize?: boolean | { minRows?: number; maxRows?: number }
}

/**
 * 数字输入框类型
 */
export interface InputNumberFormItem extends BaseFormItem {
  type: 'inputNumber' | 'number'
  /** 最小值 */
  min?: number
  /** 最大值 */
  max?: number
  /** 步长 */
  step?: number
  /** 精度 */
  precision?: number
  /** 是否显示控制按钮 */
  controls?: boolean
  /** 按钮位置 */
  controlsPosition?: 'right' | ''
  /** 尺寸 */
  size?: 'large' | 'default' | 'small'
}

/**
 * 选择器类型
 */
export interface SelectFormItem extends BaseFormItem {
  type: 'select'
  /** 是否可清空 */
  clearable?: boolean
  /** 是否可搜索 */
  filterable?: boolean
  /** 是否多选 */
  multiple?: boolean
  /** 是否远程搜索 */
  remote?: boolean
  /** 远程搜索方法 */
  remoteMethod?: (query: string) => void
  /** 是否加载中 */
  loading?: boolean
  /** 无匹配文本 */
  noMatchText?: string
  /** 无数据文本 */
  noDataText?: string
  /** 占位文本 */
  placeholder?: string
  /** 选项数据源 */
  options?: SelectOption[] | ((item: SelectFormItem, formData: Record<string, any>) => SelectOption[])
  /** 选项值的字段名 */
  valueKey?: string
  /** 选项标签的字段名 */
  labelKey?: string
  /** 选项插槽名称 */
  optionSlot?: string
  /** 空数据插槽名称 */
  emptySlot?: string
  /** 前缀插槽名称 */
  prefix?: string
}

/**
 * 单选框组类型
 */
export interface RadioFormItem extends BaseFormItem {
  type: 'radio' | 'radioGroup'
  /** 是否禁用 */
  disabled?: boolean
  /** 是否显示边框 */
  border?: boolean
  /** 尺寸 */
  size?: 'large' | 'default' | 'small'
  /** 选项数据源 */
  options?: SelectOption[]
}

/**
 * 多选框组类型
 */
export interface CheckboxFormItem extends BaseFormItem {
  type: 'checkbox' | 'checkboxGroup'
  /** 是否禁用 */
  disabled?: boolean
  /** 是否显示边框 */
  border?: boolean
  /** 最小选中数 */
  min?: number
  /** 最大选中数 */
  max?: number
  /** 尺寸 */
  size?: 'large' | 'default' | 'small'
  /** 选项数据源 */
  options?: SelectOption[]
}

/**
 * 日期选择器类型
 */
export interface DatePickerFormItem extends BaseFormItem {
  type: 'date' | 'datetime' | 'dates' | 'week' | 'month' | 'year' | 'daterange' | 'datetimerange' | 'monthrange'
  /** 占位文本 */
  placeholder?: string
  /** 格式化显示值 */
  format?: string
  /** 绑定值格式 */
  valueFormat?: string
  /** 是否可清空 */
  clearable?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 是否只读 */
  readonly?: boolean
  /** 是否可编辑 */
  editable?: boolean
  /** 范围选择器开始日期占位符 */
  startPlaceholder?: string
  /** 范围选择器结束日期占位符 */
  endPlaceholder?: string
  /** 范围分隔符 */
  rangeSeparator?: string
  /** 禁用日期函数 */
  disabledDate?: (date: Date) => boolean
}

/**
 * 时间选择器类型
 */
export interface TimePickerFormItem extends BaseFormItem {
  type: 'timePicker' | 'time' | 'timeSelect'
  /** 占位文本 */
  placeholder?: string
  /** 格式化显示值 */
  format?: string
  /** 绑定值格式 */
  valueFormat?: string
  /** 是否可清空 */
  clearable?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 是否只读 */
  readonly?: boolean
}

/**
 * 开关类型
 */
export interface SwitchFormItem extends BaseFormItem {
  type: 'switch'
  /** 是否禁用 */
  disabled?: boolean
  /** 是否加载中 */
  loading?: boolean
  /** 尺寸 */
  size?: 'large' | 'default' | 'small'
  /** 打开时的文字 */
  activeText?: string | number
  /** 关闭时的文字 */
  inactiveText?: string | number
  /** 打开时的值 */
  activeValue?: boolean | string | number
  /** 关闭时的值 */
  inactiveValue?: boolean | string | number
}

/**
 * 滑块类型
 */
export interface SliderFormItem extends BaseFormItem {
  type: 'slider'
  /** 最小值 */
  min?: number
  /** 最大值 */
  max?: number
  /** 步长 */
  step?: number
  /** 是否显示间断点 */
  showStops?: boolean
  /** 是否显示提示框 */
  showTooltip?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 是否双滑块模式 */
  range?: boolean
  /** 是否垂直模式 */
  vertical?: boolean
  /** 高度，垂直模式下生效 */
  height?: string
  /** 标记 */
  marks?: Record<number, string>
}

/**
 * 评分类型
 */
export interface RateFormItem extends BaseFormItem {
  type: 'rate'
  /** 最大分值 */
  max?: number
  /** 是否禁用 */
  disabled?: boolean
  /** 是否允许半选 */
  allowHalf?: boolean
  /** 低分和中等分数的界限值 */
  lowThreshold?: number
  /** 高分和中等分数的界限值 */
  highThreshold?: number
  /** 颜色数组 */
  colors?: string | string[]
  /** 未选中颜色 */
  voidColor?: string
  /** 禁用时的未选中颜色 */
  disabledVoidColor?: string
  /** 图标数组 */
  iconClasses?: string | string[]
  /** 未选中图标类名 */
  voidIconClass?: string
  /** 禁用时的未选中图标类名 */
  disabledVoidIconClass?: string
  /** 是否显示辅助文字 */
  showText?: boolean
  /** 是否显示当前分数 */
  showScore?: boolean
  /** 辅助文字数组 */
  texts?: string[]
}

/**
 * 颜色选择器类型
 */
export interface ColorPickerFormItem extends BaseFormItem {
  type: 'colorPicker'
  /** 是否禁用 */
  disabled?: boolean
  /** 尺寸 */
  size?: 'large' | 'default' | 'small'
  /** 是否支持透明度 */
  showAlpha?: boolean
  /** 颜色格式 */
  colorFormat?: 'hex' | 'rgb' | 'hsl' | 'hsv'
  /** 预定义颜色 */
  predefine?: string[]
}

/**
 * 级联选择器类型
 */
export interface CascaderFormItem extends BaseFormItem {
  type: 'cascader'
  /** 是否可清空 */
  clearable?: boolean
  /** 是否可搜索 */
  filterable?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 占位文本 */
  placeholder?: string
  /** 选项数据源 */
  options?: CascaderOption[]
  /** 配置选项 */
  props?: CascaderProps
  /** 是否多选 */
  props?: {
    expandTrigger?: 'click' | 'hover'
    multiple?: boolean
    checkStrictly?: boolean
    emitPath?: boolean
    lazy?: boolean
    lazyLoad?: (node: any, resolve: (data: any[]) => void) => void
    value?: string
    label?: string
    children?: string
    leaf?: string
    [key: string]: any
  }
}

/**
 * 树形选择器类型
 */
export interface TreeSelectFormItem extends BaseFormItem {
  type: 'treeSelect'
  /** 是否可清空 */
  clearable?: boolean
  /** 是否可搜索 */
  filterable?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 占位文本 */
  placeholder?: string
  /** 树形数据 */
  data?: TreeNode[]
  /** 配置选项 */
  props?: {
    label?: string
    value?: string
    children?: string
    disabled?: string
    isLeaf?: string
    [key: string]: any
  }
  /** 是否多选 */
  multiple?: boolean
  /** 是否展示复选框 */
  showCheckbox?: boolean
  /** 是否严格的遵循父子不互相关联的做法 */
  checkStrictly?: boolean
  /** 是否展开子节点 */
  defaultExpandAll?: boolean
  /** 默认展开的节点的 key 的数组 */
  defaultExpandedKeys?: any[]
  /** 节点唯一标识 */
  nodeKey?: string
}

/**
 * 穿梭框类型
 */
export interface TransferFormItem extends BaseFormItem {
  type: 'transfer'
  /** 数据源 */
  data?: TransferDataItem[]
  /** 是否禁用 */
  disabled?: boolean
  /** 是否可过滤 */
  filterable?: boolean
  /** 过滤占位符 */
  filterPlaceholder?: string
  /** 是否可筛选 */
  filterMethod?: (query: string, item: TransferDataItem) => boolean
  /** 每次列表渲染的数量 */
  targetOrder?: 'original' | 'push' | 'unshift'
  /** 标题 */
  titles?: string[]
  /** 按钮文案 */
  buttonTexts?: string[]
  /** 列表底部文案 */
  renderContent?: (h: any, option: TransferDataItem) => any
}

/**
 * 上传类型
 */
export interface UploadFormItem extends BaseFormItem {
  type: 'upload'
  /** 上传地址 */
  action?: string
  /** 请求头 */
  headers?: Record<string, string>
  /** 请求方法 */
  method?: 'post' | 'put' | 'patch'
  /** 是否支持多选 */
  multiple?: boolean
  /** 上传时附带的额外参数 */
  data?: Record<string, any>
  /** 上传的文件字段名 */
  name?: string
  /** 是否携带 cookie */
  withCredentials?: boolean
  /** 是否显示文件列表 */
  showFileList?: boolean
  /** 是否拖拽上传 */
  drag?: boolean
  /** 接受上传的文件类型 */
  accept?: string
  /** 是否自动上传 */
  autoUpload?: boolean
  /** 上传数量限制 */
  limit?: number
  /** 按钮文本 */
  buttonText?: string
  /** 按钮类型 */
  buttonType?: string
  /** 按钮图标 */
  uploadIcon?: string
  /** 提示文本 */
  tip?: string
  /** 触发插槽名称 */
  triggerSlot?: string
  /** 提示插槽名称 */
  tipSlot?: string
  /** 上传成功回调 */
  onSuccess?: (response: any, file: any, fileList: any[], formData: Record<string, any>) => void
  /** 上传失败回调 */
  onError?: (error: any, file: any, fileList: any[]) => void
  /** 上传进度回调 */
  onProgress?: (event: any, file: any, fileList: any[]) => void
  /** 文件状态改变回调 */
  onChange?: (file: any, fileList: any[], formData: Record<string, any>) => void
  /** 移除文件回调 */
  onRemove?: (file: any, fileList: any[], formData: Record<string, any>) => void
  /** 点击文件列表回调 */
  onPreview?: (file: any) => void
  /** 上传前回调 */
  beforeUpload?: (file: any, formData: Record<string, any>) => boolean | Promise<any>
  /** 删除前回调 */
  beforeRemove?: (file: any, fileList: any[], formData: Record<string, any>) => boolean | Promise<any>
  /** 覆盖默认上传行为 */
  httpRequest?: (options: any, formData: Record<string, any>) => Promise<any>
}

/**
 * 自动完成类型
 */
export interface AutocompleteFormItem extends BaseFormItem {
  type: 'autocomplete'
  /** 是否禁用 */
  disabled?: boolean
  /** 占位文本 */
  placeholder?: string
  /** 是否可清空 */
  clearable?: boolean
  /** 输入建议数据源 */
  fetchSuggestions?: (queryString: string, callback: (data: any[]) => void) => void
  /** 输入建议数组的对象别名 */
  valueKey?: string
  /** 输入建议数组的标签别名 */
  labelKey?: string
  /** 前置内容 */
  prepend?: string
  /** 后置内容 */
  append?: string
  /** 前缀 */
  prefix?: string
  /** 后缀 */
  suffix?: string
}

/**
 * 文本展示类型
 */
export interface TextFormItem extends BaseFormItem {
  type: 'text' | 'display'
  /** 自定义格式化函数 */
  formatter?: (value: any, item: TextFormItem, formData: Record<string, any>) => string
  /** 文本属性 */
  textAttrs?: Record<string, any>
}

/**
 * HTML 内容类型
 */
export interface HtmlFormItem extends BaseFormItem {
  type: 'html'
  /** HTML 内容 */
  htmlContent?: string
  /** HTML 容器属性 */
  htmlAttrs?: Record<string, any>
}

/**
 * 分割线类型
 */
export interface DividerFormItem extends BaseFormItem {
  type: 'divider'
  /** 分割线文字 */
  dividerText?: string
  /** 分割线属性 */
  dividerAttrs?: {
    direction?: 'horizontal' | 'vertical'
    borderStyle?: 'solid' | 'dashed' | 'dotted' | 'double'
    contentPosition?: 'left' | 'center' | 'right'
    [key: string]: any
  }
}

/**
 * 警告类型
 */
export interface AlertFormItem extends BaseFormItem {
  type: 'alert'
  /** 警告类型 */
  alertType?: 'success' | 'warning' | 'info' | 'error'
  /** 警告属性 */
  alertAttrs?: {
    title?: string
    description?: string
    type?: 'success' | 'warning' | 'info' | 'error'
    closable?: boolean
    closeText?: string
    center?: boolean
    showIcon?: boolean
    effect?: 'light' | 'dark'
    [key: string]: any
  }
  /** 标题插槽名称 */
  alertTitleSlot?: string
}

/**
 * 自定义插槽类型
 */
export interface SlotFormItem extends BaseFormItem {
  type: 'slot' | 'custom'
  /** 插槽名称 */
  slotName?: string
}

/**
 * 自定义组件类型
 */
export interface ComponentFormItem extends BaseFormItem {
  type: 'component'
  /** 组件 */
  component: any
  /** 组件属性 */
  componentProps?: Record<string, any>
}

/**
 * 表单项类型联合
 */
export type FormItem =
  | InputFormItem
  | InputNumberFormItem
  | SelectFormItem
  | RadioFormItem
  | CheckboxFormItem
  | DatePickerFormItem
  | TimePickerFormItem
  | SwitchFormItem
  | SliderFormItem
  | RateFormItem
  | ColorPickerFormItem
  | CascaderFormItem
  | TreeSelectFormItem
  | TransferFormItem
  | UploadFormItem
  | AutocompleteFormItem
  | TextFormItem
  | HtmlFormItem
  | DividerFormItem
  | AlertFormItem
  | SlotFormItem
  | ComponentFormItem

/**
 * 表单项组件类型
 */
export type FormItemType =
  | 'input'
  | 'textarea'
  | 'password'
  | 'inputNumber'
  | 'number'
  | 'select'
  | 'radio'
  | 'radioGroup'
  | 'checkbox'
  | 'checkboxGroup'
  | 'date'
  | 'datetime'
  | 'dates'
  | 'week'
  | 'month'
  | 'year'
  | 'daterange'
  | 'datetimerange'
  | 'monthrange'
  | 'timePicker'
  | 'time'
  | 'timeSelect'
  | 'switch'
  | 'slider'
  | 'rate'
  | 'colorPicker'
  | 'cascader'
  | 'treeSelect'
  | 'transfer'
  | 'upload'
  | 'autocomplete'
  | 'text'
  | 'display'
  | 'html'
  | 'divider'
  | 'alert'
  | 'slot'
  | 'custom'
  | 'component'

/**
 * 选择器选项
 */
export interface SelectOption {
  label: string
  value: any
  disabled?: boolean
  icon?: string
  [key: string]: any
}

/**
 * 级联选择器选项
 */
export interface CascaderOption {
  label: string
  value: any
  children?: CascaderOption[]
  disabled?: boolean
  [key: string]: any
}

/**
 * 树节点
 */
export interface TreeNode {
  id: string | number
  label: string
  children?: TreeNode[]
  disabled?: boolean
  isLeaf?: boolean
  [key: string]: any
}

/**
 * 穿梭框数据项
 */
export interface TransferDataItem {
  key: string | number
  label: string
  disabled?: boolean
  [key: string]: any
}

/**
 * 自定义按钮配置
 */
export interface ButtonConfig {
  /** 按钮唯一标识 */
  key: string
  /** 按钮文本 */
  text: string
  /** 按钮类型 */
  type?: 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text' | 'default'
  /** 按钮尺寸 */
  size?: 'large' | 'default' | 'small'
  /** 是否加载中 */
  loading?: boolean
  /** 按钮图标 */
  icon?: string
  /** 是否朴素按钮 */
  plain?: boolean
  /** 是否圆角 */
  round?: boolean
  /** 是否圆形 */
  circle?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 点击事件处理函数 */
  handler: () => void | Promise<void>
}

/**
 * 表单配置
 */
export interface FormConfig {
  /** 表单标签宽度 */
  labelWidth?: string
  /** 表单标签位置 */
  labelPosition?: 'left' | 'right' | 'top'
  /** 是否行内表单 */
  inline?: boolean
  /** 是否禁用 */
  disabled?: boolean
  /** 表单尺寸 */
  size?: 'large' | 'default' | 'small'
  /** 栅格间隔 */
  gutter?: number
  /** 是否显示操作按钮 */
  showButtons?: boolean
  /** 是否显示提交按钮 */
  showSubmit?: boolean
  /** 是否显示重置按钮 */
  showReset?: boolean
  /** 提交按钮文本 */
  submitText?: string
  /** 重置按钮文本 */
  resetText?: string
  /** 提交按钮类型 */
  submitType?: 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default'
  /** 提交按钮图标 */
  submitIcon?: string
  /** 重置按钮图标 */
  resetIcon?: string
  /** 按钮容器占位 */
  buttonSpan?: number
  /** 按钮容器偏移 */
  buttonOffset?: number
  /** 按钮响应式配置 */
  buttonXs?: number | string
  buttonSm?: number | string
  buttonMd?: number | string
  buttonLg?: number | string
  buttonXl?: number | string
  /** 按钮容器 CSS 类名 */
  buttonClass?: string
  /** 按钮尺寸 */
  buttonSize?: 'large' | 'default' | 'small'
  /** 自定义按钮配置 */
  customButtons?: ButtonConfig[]
  /** 是否显示验证图标 */
  statusIcon?: boolean
  /** 是否以行内形式展示验证信息 */
  inlineMessage?: boolean
  /** 是否在 rules 属性改变后立即触发一次验证 */
  validateOnRuleChange?: boolean
  /** 是否隐藏必填星号 */
  hideRequiredAsterisk?: boolean
  /** 是否显示验证信息 */
  showMessage?: boolean
  /** 标签后缀 */
  labelSuffix?: string
  /** 是否在验证失败时滚动到第一个错误表单 */
  scrollToError?: boolean
  /** 滚动行为配置 */
  scrollIntoViewOptions?: boolean | ScrollIntoViewOptions
  /** 提交按钮是否禁用 */
  submitDisabled?: boolean
  /** 重置按钮是否禁用 */
  resetDisabled?: boolean
  /** 提交按钮是否朴素 */
  submitPlain?: boolean
  /** 重置按钮是否朴素 */
  resetPlain?: boolean
  /** 提交按钮是否圆角 */
  submitRound?: boolean
  /** 重置按钮是否圆角 */
  resetRound?: boolean
  /** 提交按钮是否圆形 */
  submitCircle?: boolean
  /** 重置按钮是否圆形 */
  resetCircle?: boolean
  [key: string]: any
}

/**
 * SuperForm 组件 Props
 */
export interface SuperFormProps {
  /** 表单配置 */
  config: FormConfig
  /** 表单项配置 */
  items: FormItem[]
  /** 表单数据 */
  modelValue: Record<string, any>
  /** 表单验证规则 */
  rules?: FormRules
  /** 保存接口配置 */
  saveApi?: string | ((isEdit: boolean) => string) | null
  /** 更新接口配置 */
  updateApi?: string | ((isEdit: boolean) => string) | null
  /** 获取详情接口配置 */
  fetchApi?: string | ((id: any) => string) | null
  /** 主键字段名 */
  idKey?: string
  /** 是否在提交前验证 */
  validateBeforeSubmit?: boolean
  /** 提交前的钩子 */
  beforeSubmit?: (data: Record<string, any>, isEdit: boolean) => boolean | Promise<boolean> | null
  /** 提交后的钩子 */
  afterSubmit?: (response: any, data: Record<string, any>, isEdit: boolean) => void | null
  /** 自定义提交方法 */
  customSubmit?: (data: Record<string, any>, options: { isEdit: boolean }) => void | null
  /** 数据转换函数 */
  dataTransform?: (data: Record<string, any>) => Record<string, any> | null
  /** 响应数据转换函数 */
  responseTransform?: (data: any) => Record<string, any> | null
}

/**
 * SuperForm 组件实例方法
 */
export interface SuperFormInstance {
  /** 表单引用 */
  formRef: FormInstance
  /** 表单响应式数据 */
  formData: Record<string, any>
  /** 是否编辑模式 */
  isEdit: boolean
  /** 验证表单 */
  validate: () => Promise<boolean>
  /** 验证指定字段 */
  validateField: (prop: string) => Promise<boolean>
  /** 清除验证 */
  clearValidate: (fields?: string | string[]) => void
  /** 重置表单 */
  resetFields: () => void
  /** 设置表单数据 */
  setFormData: (data: Record<string, any>) => void
  /** 获取表单数据 */
  getFormData: () => Record<string, any>
  /** 设置字段值 */
  setFieldValue: (field: string, value: any) => void
  /** 获取字段值 */
  getFieldValue: (field: string) => any
  /** 获取详情数据 */
  fetchDetail: (id: any) => Promise<void>
  /** 提交表单 */
  handleSubmit: () => Promise<void>
}

/**
 * SuperForm 组件事件
 */
export interface SuperFormEmits {
  /** 更新表单数据 */
  (event: 'update:modelValue', value: Record<string, any>): void
  /** 表单提交 */
  (event: 'submit', data: Record<string, any>, isEdit: boolean): void
  /** 提交成功 */
  (event: 'success', response: any, data: Record<string, any>, isEdit: boolean): void
  /** 提交失败 */
  (event: 'error', error: any, data: Record<string, any>, isEdit: boolean): void
  /** 表单数据变化 */
  (event: 'change', data: Record<string, any>): void
  /** 验证触发 */
  (event: 'validate', prop: string | undefined, isValid: boolean, message: string): void
  /** 表单重置 */
  (event: 'reset'): void
  /** 字段值变化 */
  (event: 'field-change', field: string, value: any, formData: Record<string, any>): void
  /** 字段失焦 */
  (event: 'field-blur', field: string, event: Event): void
  /** 字段聚焦 */
  (event: 'field-focus', field: string, event: Event): void
  /** 字段可见性变化 */
  (event: 'field-visible-change', field: string, visible: boolean): void
  /** 字段清除 */
  (event: 'field-clear', field: string): void
  /** 字段移除标签 */
  (event: 'field-remove-tag', field: string, tag: any): void
  /** 颜色激活变化 */
  (event: 'color-active-change', field: string, color: string): void
  /** 级联展开变化 */
  (event: 'cascader-expand-change', field: string, value: any): void
  /** 树节点点击 */
  (event: 'tree-node-click', field: string, data: any): void
  /** 树选中变化 */
  (event: 'tree-check', field: string, data: any): void
  /** 树节点展开 */
  (event: 'tree-node-expand', field: string, data: any): void
  /** 树节点折叠 */
  (event: 'tree-node-collapse', field: string, data: any): void
  /** 穿梭框左侧选中变化 */
  (event: 'transfer-left-check-change', field: string, value: any): void
  /** 穿梭框右侧选中变化 */
  (event: 'transfer-right-check-change', field: string, value: any): void
  /** 自动完成选择 */
  (event: 'autocomplete-select', field: string, value: any): void
  /** 上传成功 */
  (event: 'upload-success', field: string, response: any, file: any, fileList: any[]): void
  /** 上传失败 */
  (event: 'upload-error', field: string, error: any, file: any, fileList: any[]): void
  /** 上传进度 */
  (event: 'upload-progress', field: string, event: any, file: any, fileList: any[]): void
  /** 上传文件变化 */
  (event: 'upload-change', field: string, file: any, fileList: any[]): void
  /** 移除上传文件 */
  (event: 'upload-remove', field: string, file: any, fileList: any[]): void
  /** 预览上传文件 */
  (event: 'upload-preview', field: string, file: any): void
  /** 上传前 */
  (event: 'before-upload', field: string, file: any): void
  /** 移除前 */
  (event: 'before-remove', field: string, file: any, fileList: any[]): void
  /** 自定义上传请求 */
  (event: 'http-request', field: string, options: any): void
  /** 日历变化 */
  (event: 'calendar-change', field: string, value: any): void
  /** 面板变化 */
  (event: 'panel-change', field: string, value: any): void
}
