Skip to content

ProTable

ProTable 的诞生是为了解决项目中需要写很多 table 的样板代码的问题,所以在其中封装了很多常用的逻辑。这些封装可以简单的分类为预设行为与预设逻辑。

Template图片来源 Antd ProTable

基础用法

API

ProTable 在 el-form 和 el-table 上进行了一层封装,支持了一些预设。这里只列出与 el-table 不同的 API。

ProTable Attributes

参数说明类型默认值
search搜索表单,传入对象时为搜索表单的配置boolean | SearchConfigtrue
classNameel-table 类名string
dataSource表格数据DefaultRow[]
loading加载状态boolean
total总条数number
tablePropsel-table 属性TableProps
tableEventsel-table 事件TableEmits
columns列定义ColumnsConfig[]
paginationPropsel-pagination 属性PaginationProps
paginationMapping分页字段映射{ pageKey?: string; sizeKey?: string }pageNum / pageSize
initialValues表单默认值Record<string, any>
defaultSize默认组件尺寸'' | 'large' | 'default' | 'small'
manualRequest是否需要手动触发首次请求。配置为 true 时不可隐藏搜索表单booleanfalse
columnSettings列设置boolean | ColumnSettingstrue
ts
type DefaultRow = Record<string | number | symbol, any>

ProTable Events

事件名说明类型
onParams查询、重置、分页、排序时触发(params: Record<string, any>) => void
onSubmit点击查询时触发(params: Record<string, any>) => void
onReset点击重置时触发() => void
onCollapse搜索表单展开/收起(collapsed: boolean) => void

ProTable Methods

方法名说明类型
setFieldsValue批量设置搜索字段(data: Record<string, any>) => void
setFieldValue设置单个搜索字段(key: string, value: any) => void
reload刷新,接收一个参数:是否重置页码,resetPageIndex 默认 true(resetPageIndex?: boolean) => void
getTableRef获取 el-table ref() => Ref<TableInstance | undefined>

默认插槽

名称描述
default高级筛选栏与表格之间的区域

searchConfig

参数说明类型默认值
searchText查询按钮文本string查询
resetText重置按钮文本string重置
labelWidth标签宽度string | number
labelPosition标签位置'left' | 'right'
rowPropsel-row 属性RowProps{ gutter: 8 }
colPropsel-col 属性ColPropsdefaultColConfig
className搜索区 el-form 类名string
defaultCollapsed默认是否收起booleantrue
collapsed受控收起状态boolean
defaultExpandedRows默认展开行数number2

defaultColConfig

ts
const defaultColConfig = {
  xs: 24, // <768px
  sm: 24, // >=768px
  md: 12, // >=992px
  lg: 8,  // ≥1200px
  xl: 6,  // ≥1920px
}

defaultPaginationProps

json
{
  "page-sizes": [10, 20, 30, 50],
  layout: "total, sizes, prev, pager, next, jumper",
  "hide-on-single-page": true,
}

paginationMapping

参数说明类型默认值
pageKey页码字段名stringpageNum
sizeKey每页条数字段名stringpageSize

通过 extends,可以全局配置这两个字段,参考下方示例代码。

ts
// pro-table.ts
import { defineComponent } from 'vue'
import { ProTable as ElProTable } from '@rasmusxiong/element-plus-pro-components'

export const ProTable = defineComponent({
  name: 'ProTable',
  extends: ElProTable,
  props: {
    paginationMapping: {
      type: Object,
      default: () => ({
        pageKey: 'page',
        sizeKey: 'size',
      }),
    },
  },
})

columnSettingsConfig

参数说明类型默认值
columnSetting列设置按钮文本string列设置
columnDisplay列展示标题string列展示
resetText重置按钮文本string重置
draggable是否可拖拽排序booleantrue
checkable是否可显示/隐藏列booleantrue

列设置标题取 columns.label;显示/隐藏取 columns.prop || columns.key;排除 columns.type 列。

columnsConfig

继承 el-table-column 属性,并扩展(详见 Schema 说明):

参数说明类型默认值
formItemProps搜索区 el-form-item 配置FormItemProps
renderLabel搜索区自定义 label() => VNode
valueType搜索表单元素类型valueType
renderField自定义搜索表单项({ form, formItem }: { form: any, formItem: ProFormItemProps }) => VNode
fieldProps搜索表单元素 propsRecord<string, any>
fieldEvents搜索表单元素 eventsRecord<string, any>
valueEnum表格单元格枚举展示Record<string | number, string> | Map<...>
optionLoader异步加载搜索选项() => Promise<Record<string, any>[]>
initialValue搜索项默认值any
order搜索项排序权重number
hideInSearch在搜索表单隐藏boolean
hideInTable在表格隐藏boolean
renderCellHeader自定义表头(scope: { column: TableColumnCtx<DefaultRow>, $index: number }) => VNode
disabled列设置中禁用boolean
key列 keystring

如果表格和表单的 prop 是同一个,则只需要配置表格的 prop 字段。同理 label 字段。

renderField 自定义渲染是值的传递。如果 prop 存在,则默认进行了初始化;反之则需要在 initialValues 添加默认值。

配置 valueEnum 在表格中会自动回显 label 值,注意 Map 类型取值需要匹配类型。

el-table 的 formatter 替换了 renderCell