Skip to content

FormView

文档中大写开头的表示类型 例如:PowerfulTableHeaderProps.type 表示 PowerfulTableHeaderProps 类型下的 type 属性

继承关系

表单配置可以和表格配置重合,可以说配置一个表格的 headers 再加上一两行数据即可配置一个表单

TIP

下面 index.vue 中演示了基础的继承关系, extend-table 传递 true 时,form-view 组件内部自动回去 powerful-table 获取 header 配置(请保证 powerful-table refPTable 。当然如果你 powerful-table ref 为其他值时,请保证 extend-tablepowerful-table ref 一致)

Details
ts
// powerful-table props columns
export const columns: PowerfulTableHeader<Lists>[] = [
  {
    label: '制造商',
    width: 200,
    overflowTooltip: true,
    isShowOrFilterColumn: 'filter',
    defaultFilter: true,
    headerAlign: 'left',
    props: [
      {
        type: 'href',
        prop: 'manufacturerHref',
        text: '厂商:',
        data: setData<'href', Lists>({
          text: (row: any) => row.manufacturer,
          property: {
            underline: true,
          },
        }),
      },
      {
        prop: 'icon',
        type: 'iconfont',
        text: '车标:',
        data: setData<'iconfont', Lists>({
          class: 'viteIcon',
          style: {
            height: '40px',
            lineHeight: '40px',
            fontSize: '40px',
          },
        }),
      },
    ],
  }
]
// powerful-table props columns
export const columns: PowerfulTableHeader<Lists>[] = [
  {
    label: '制造商',
    width: 200,
    overflowTooltip: true,
    isShowOrFilterColumn: 'filter',
    defaultFilter: true,
    headerAlign: 'left',
    props: [
      {
        type: 'href',
        prop: 'manufacturerHref',
        text: '厂商:',
        data: setData<'href', Lists>({
          text: (row: any) => row.manufacturer,
          property: {
            underline: true,
          },
        }),
      },
      {
        prop: 'icon',
        type: 'iconfont',
        text: '车标:',
        data: setData<'iconfont', Lists>({
          class: 'viteIcon',
          style: {
            height: '40px',
            lineHeight: '40px',
            fontSize: '40px',
          },
        }),
      },
    ],
  }
]
tsx
// form-view props formItems
export const formItems: FormViewPTHeaders[] = [
{
  label: '制作厂',
  props: {
    formItem: {
      type: FormTypeEnum.Select, // 默认 input
      data: formViewSetData<FormTypeEnum.Select>({
        options: [
          {
            label: 'a1',
            value: '1',
            options: [
              {
                label: 'a3',
                value: '3',
              },
              {
                label: 'a3',
                value: '3',
              },
            ],
          },
          {
            label: 'a2',
            value: '2',
            options: [
              {
                label: 'a3',
                value: '3',
              },
              {
                label: 'a3',
                value: '3',
              },
            ],
          },
        ],
        slots: {
          default: (h) => <C />,
        },
      }),
    },
  },
},
]
// form-view props formItems
export const formItems: FormViewPTHeaders[] = [
{
  label: '制作厂',
  props: {
    formItem: {
      type: FormTypeEnum.Select, // 默认 input
      data: formViewSetData<FormTypeEnum.Select>({
        options: [
          {
            label: 'a1',
            value: '1',
            options: [
              {
                label: 'a3',
                value: '3',
              },
              {
                label: 'a3',
                value: '3',
              },
            ],
          },
          {
            label: 'a2',
            value: '2',
            options: [
              {
                label: 'a3',
                value: '3',
              },
              {
                label: 'a3',
                value: '3',
              },
            ],
          },
        ],
        slots: {
          default: (h) => <C />,
        },
      }),
    },
  },
},
]
tsx
// columns And formItems
export const columns: FormViewPTHeaders[] = [
  {
    label: '制作厂', //显示的名称
    headerAlign: 'left',
    props: [
      {
        type: 'href',
        prop: 'manufacturerHref',
        text: '厂商:',
        data: setData<'href', Lists>({
          text: (row: any) => row.manufacturer,
          property: {
            underline: true,
          },
        }),
        formItem: {
          type: FormTypeEnum.Select,
          data: formViewSetData<FormTypeEnum.Select>({
            options: [
              {
                label: 'a1',
                value: '1',
                options: [
                  {
                    label: 'a3',
                    value: '3',
                  },
                  {
                    label: 'a3',
                    value: '3',
                  },
                ],
              },
              {
                label: 'a2',
                value: '2',
                options: [
                  {
                    label: 'a3',
                    value: '3',
                  },
                  {
                    label: 'a3',
                    value: '3',
                  },
                ],
              },
            ],
            slots: {
              default: (h) => <C />,
            },
          }),
        },
      },
      {
        prop: 'icon',
        type: 'iconfont',
        text: '车标:',
        data: setData<'iconfont', Lists>({
          class: 'viteIcon',
          style: {
            height: '40px',
            lineHeight: '40px',
            fontSize: '40px',
          },
        }),
        formItem: {},
      },
    ],
  }
]
// columns And formItems
export const columns: FormViewPTHeaders[] = [
  {
    label: '制作厂', //显示的名称
    headerAlign: 'left',
    props: [
      {
        type: 'href',
        prop: 'manufacturerHref',
        text: '厂商:',
        data: setData<'href', Lists>({
          text: (row: any) => row.manufacturer,
          property: {
            underline: true,
          },
        }),
        formItem: {
          type: FormTypeEnum.Select,
          data: formViewSetData<FormTypeEnum.Select>({
            options: [
              {
                label: 'a1',
                value: '1',
                options: [
                  {
                    label: 'a3',
                    value: '3',
                  },
                  {
                    label: 'a3',
                    value: '3',
                  },
                ],
              },
              {
                label: 'a2',
                value: '2',
                options: [
                  {
                    label: 'a3',
                    value: '3',
                  },
                  {
                    label: 'a3',
                    value: '3',
                  },
                ],
              },
            ],
            slots: {
              default: (h) => <C />,
            },
          }),
        },
      },
      {
        prop: 'icon',
        type: 'iconfont',
        text: '车标:',
        data: setData<'iconfont', Lists>({
          class: 'viteIcon',
          style: {
            height: '40px',
            lineHeight: '40px',
            fontSize: '40px',
          },
        }),
        formItem: {},
      },
    ],
  }
]
html
<template>
  <powerful-table
    ref="PTable"
    :list-request="{
      listApi,
    }"
    :header="header"
  />

  <FormView ref="FView" :extend-table="true"/>
<template>

<script>
  // ...
</script>
<template>
  <powerful-table
    ref="PTable"
    :list-request="{
      listApi,
    }"
    :header="header"
  />

  <FormView ref="FView" :extend-table="true"/>
<template>

<script>
  // ...
</script>

Attributes

属性名说明TS类型默认值
showType显示类型string-
extendTable是否继承表格。如果是 true 的话自动查找 table 组件 ref 名称为 PTable 的,也可以传递 tableRef 名称boolean | stringfalse
formItems表单配置array-
formDataDefault表单默认值object-
disabled表单是否禁用boolean-
propertyel-form 组件 propsobject-
apisapis 接口合集function | object-

Apis

TIP

支持对象格式,也支持函数形式。
formView 暴露了 submitForm 函数。调用 submitForm 函数时在校验通过后会自动调用 apisapis 时函数时直接触发,当 apis 时对象的时候会调用 apis 属性为 showType 的值。也就是 apis[showType] )。submitForm 函数返回一个 promise

html
<FormView ... :apis="() => Promise.resolve({ data: [] })" />
<FormView ... showType="update" :apis="{
 'added': () => Promise.resolve({ data: [] })
 'update': () => Promise.resolve({ data: [] })
}" />

<!-- 请保证您的 apis 中的函数有一个形参,这样的话,组件内部会将 formData 数据传递进去 -->
<FormView ... :apis="requestAdd" />

<script setup>
const requestAdd = (params) => {
  console.log(params) // 这里的 params 为 formData
  return Promise.resolve({ data: [] })
}
// ...
</script>
<FormView ... :apis="() => Promise.resolve({ data: [] })" />
<FormView ... showType="update" :apis="{
 'added': () => Promise.resolve({ data: [] })
 'update': () => Promise.resolve({ data: [] })
}" />

<!-- 请保证您的 apis 中的函数有一个形参,这样的话,组件内部会将 formData 数据传递进去 -->
<FormView ... :apis="requestAdd" />

<script setup>
const requestAdd = (params) => {
  console.log(params) // 这里的 params 为 formData
  return Promise.resolve({ data: [] })
}
// ...
</script>

FormItems

属性名说明TS类型默认值
prop el-form-item prop 属性。
配合表格组件时,默认读取 PowerfulTableHeaderProps.prop
string-
textel-form-item label 属性。
配合表格组件时,默认读取 PowerfulTableHeader.label
string
slotName插槽名称。
配合表格组件时,默认读取 PowerfulTableHeaderProps.slotName
string
render渲染函数function-
basisCSSflex-basis 属性,其元素宽度占比,当两个相邻的对象 basis48% 时,则这个两个元素在一行string'100%'
type默认 input 类型enumFormTypeEnum.input
dataPowerfulTableHeaderProps.type === FormItem.type 则继承 PowerfulTableHeaderProps.data。不同的 type data 值不一样FormType['xxx']
showType显示类型,部分数据只在新增表单显示,部分只在修改表单显示。默认全部显示。如果传递此值将和表单组件 props 中的属性showType 进行比较,相等则显示string | string[]-
defaultData表单数据数据默认值,默认寻找 表单组件 props 中的属性formDataDefault 相应的 propany-
rule规则校验,可以传递完整的 rule 规则,也可以传递部分规则例如:rule = true 开启必填校验;rule = [1, 10] 开启长度校验;rule = 'phone' 开启手机号校验;string | boolean | array-
propertyformItem props 请参见 Element Plus 文档Partial<FormItemProps>-

Type is Input(default) or Textarea

属性名说明TS类型默认值
symbol插槽的内容string-
style样式object-
slot如果只需要一个插槽的话可以使用 slot 参数,配合 symbol 实现'prepend' | 'append' | 'prefix' | 'suffix'-
on事件对象,接收下面 Event 相应方法名称object-
slotsel-input 组件 插槽object-
property属性扩展字段 (支持 el-input 组件所有属性名)object | function-

slots 说明

插槽名类型
prefixSlotFun
suffixSlotFun
prependSlotFun
appendSlotFun

Event

方法名说明类型
blur失焦function
change数据更改function
input输入function
focus聚焦function
clear清除function

Interface

ts
type SlotFun = (
  h: typeof createElement,
  row: FormViewData['formData'],
  index: number
) => string | number | VNode | JSX.Element

type InputEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Input>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  blur?: (params: T, ...arg: any) => void
  change?: (params: T, ...arg: any) => void
  input?: (params: T, ...arg: any) => void
  focus?: (params: T, ...arg: any) => void
  clear?: (params: T, ...arg: any) => void
}
type SlotFun = (
  h: typeof createElement,
  row: FormViewData['formData'],
  index: number
) => string | number | VNode | JSX.Element

type InputEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Input>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  blur?: (params: T, ...arg: any) => void
  change?: (params: T, ...arg: any) => void
  input?: (params: T, ...arg: any) => void
  focus?: (params: T, ...arg: any) => void
  clear?: (params: T, ...arg: any) => void
}

Type is Switch

属性名说明TS类型默认值
style样式object-
on事件对象,接收下面 Event 相应方法名称object-
property属性扩展字段 (支持 el-switch 组件所有属性名)object | function-

Event

方法名说明类型
change数据更改function

Interface

ts
type SwitchEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Switch>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: (params: T, ...arg: any) => void
}
type SwitchEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Switch>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: (params: T, ...arg: any) => void
}

Type is Select

属性名说明TS类型默认值
style样式object-
options选项的数据源 optionsarray-
on事件对象,接收下面 Event 相应方法名称object-
slotsel-selectV2 组件 插槽object-
property属性扩展字段 (支持 el-selectV2 组件所有属性名)object | function-

Event

方法名说明类型
change数据变化function
focus聚焦事件function
blur失焦事件function
clear清除事件function
remove-tag删除标签事件,多选情况下存在function
visible-change显示隐藏事件function

Interface

ts
type SwitchEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Select>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: (params: T, ...arg: any) => void
  focus?: (params: T, ...arg: any) => void
  blur?: (params: T, ...arg: any) => void
  clear?: (params: T, ...arg: any) => void
  'remove-tag'?: (params: T, ...arg: any) => void
  'visible-change'?: (params: T, ...arg: any) => void
}
type SwitchEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Select>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: (params: T, ...arg: any) => void
  focus?: (params: T, ...arg: any) => void
  blur?: (params: T, ...arg: any) => void
  clear?: (params: T, ...arg: any) => void
  'remove-tag'?: (params: T, ...arg: any) => void
  'visible-change'?: (params: T, ...arg: any) => void
}

Type is Rate

属性名说明TS类型默认值
style样式object-
on事件对象,接收下面 Event 相应方法名称object-
options单选按钮数据 参考 radio propsarray-
property属性扩展字段 (支持 el-radio-group 组件所有属性名)object | function-

Event

方法名说明类型
change数据更改function

Interface

ts
interface RadioOptions {
  /**
   * Radio 自定义内容,没有则显示 label
   */
  text?: string
  /**
   * Radio label
   */
  label: string
  /**
   * 是否禁用复选框形式的表单
   */
  disabled?: FunBol<FormTypeEnum.Checkbox>
  /**
   * 是否显示边框
   */
  border?: boolean
  /**
   * 表单的名称
   */
  name?: string
}

type RateEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Rate>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: (params: T, ...arg: any) => void
}
interface RadioOptions {
  /**
   * Radio 自定义内容,没有则显示 label
   */
  text?: string
  /**
   * Radio label
   */
  label: string
  /**
   * 是否禁用复选框形式的表单
   */
  disabled?: FunBol<FormTypeEnum.Checkbox>
  /**
   * 是否显示边框
   */
  border?: boolean
  /**
   * 表单的名称
   */
  name?: string
}

type RateEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.Rate>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: (params: T, ...arg: any) => void
}

Type is Checkbox

属性名说明TS类型默认值
style样式object-
options单选按钮数据 参考 radio propsarray-
on事件对象,接收下面 Event 相应方法名称object-
property属性扩展字段 (支持 el-check-group 组件所有属性名)object | function-

Event

方法名说明类型
change数据变化function

Interface

ts
type CheckboxDataEmit = RadioDataEmit<{
  /**
   * 表单配置项数据
   */
  formItem: FormItem<FormTypeEnum.Checkbox>
  /**
   * 索引
   */
  index: number
  /**
   * 表单数据
   */
  formData: FormViewData['formData']
}>
type CheckboxDataEmit = RadioDataEmit<{
  /**
   * 表单配置项数据
   */
  formItem: FormItem<FormTypeEnum.Checkbox>
  /**
   * 索引
   */
  index: number
  /**
   * 表单数据
   */
  formData: FormViewData['formData']
}>

Type is DatePicker

属性名说明TS类型默认值
style样式object-
on事件对象,接收下面 Event 相应方法名称object-
slotsel-date-picker 组件 插槽object-
property属性扩展字段 (支持 el-date-picker 组件所有属性名)object | function-

slots 说明

插槽名类型
defaultSlotFun
'range-separator'SlotFun

Event

方法名说明类型
change用户确认选定的值时触发function
blur在组件 Input 失去焦点时触发function
focus在组件 Input 获得焦点时触发function
calendar-change在日历所选日期更改时触发function
panel-change当日期面板改变时触发。function
visible-change当 DatePicker 的下拉列表出现/消失时触发function

Interface

ts
type DatePickerEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.DatePicker>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: ((parameter: T, ...arg: any) => void) | undefined
  blur?: ((parameter: T, ...arg: any) => void) | undefined
  focus?: ((parameter: T, ...arg: any) => void) | undefined
  'calendar-change'?: ((parameter: T, ...arg: any) => void) | undefined
  'panel-change'?: (parameter: T, ...arg: any) => void
  'visible-change'?: (parameter: T, ...arg: any) => void
}
type DatePickerEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.DatePicker>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  change?: ((parameter: T, ...arg: any) => void) | undefined
  blur?: ((parameter: T, ...arg: any) => void) | undefined
  focus?: ((parameter: T, ...arg: any) => void) | undefined
  'calendar-change'?: ((parameter: T, ...arg: any) => void) | undefined
  'panel-change'?: (parameter: T, ...arg: any) => void
  'visible-change'?: (parameter: T, ...arg: any) => void
}

Type is Slot

属性名说明TS类型默认值
----

Type is UploadFile

属性名说明TS类型默认值
style样式object-
on事件对象,接收下面 Event 相应方法名称object-
property属性扩展字段 (支持 UploadFile 组件所有属性名)object | function-

Event

方法名说明类型
upload-file-success文件上传成功回调function
upload-file-delete文件删除回调function

Interface

ts
type UploadFileEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.UploadFile>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  'upload-file-success'?: (parameter: T, ...arg: any) => void
  'upload-file-delete'?: (parameter: T, ...arg: any) => void
}
type UploadFileEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.UploadFile>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  'upload-file-success'?: (parameter: T, ...arg: any) => void
  'upload-file-delete'?: (parameter: T, ...arg: any) => void
}

Type is UploadMedia

属性名说明TS类型默认值
style样式object-
on事件对象,接收下面 Event 相应方法名称object-
property属性扩展字段 (支持 UploadMedia 组件所有属性名)object | function-

Event

方法名说明类型
files-change上传事件function

Interface

ts
type UploadMediaEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.UploadMedia>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  'files-change'?: (parameter: T, ...arg: any) => void
}
type UploadMediaEmit<T = {
    /**
     * 表单配置项数据
     */
    formItem: FormItem<FormTypeEnum.UploadMedia>
    /**
     * 索引
     */
    index: number
    /**
     * 表单数据
     */
    formData: FormViewData['formData']
  }> = {
  'files-change'?: (parameter: T, ...arg: any) => void
}

Expose

属性名说明类型
$slots所传递的插槽名称object
$attrs所传递的属性并且非 props 定义的属性名. 文档object
$refs表单 Ref 实例object
props组件 propsobject
formViewData表单数据object
formItemsformItems 更具 props.showType 过滤后的数据array
submitForm提交校验函数function

Released under the MIT License.