Skip to content
On this page

表格组件

表格组件是对 Element Plus 的表格组件进行二次封装成 JSON 配置模式,除了支持 Element Plus 的 table 基本功能之外还扩展了其他功能:表格内置组件

功能

功能说明状态
表格单元内置组件通过配置表格 defaultSlot 配置,可以在表格内配置自定义组件done
表格列操作自定义通过配置表格操作列按钮可以自定义表格操作列todo
自定义分页默认支持表格分页,如果不使用分页,则 pagination 设置为 falsedone
高级搜索支持表格的高级搜索联动,传入 seach 配置,则自动显示高级搜索,配置项可参考高级搜索组件
高级搜索-显示列过滤通过配置字段即可默认 显示/关闭 表格列显示过滤done
高级搜索-固定列过滤通过配置字段即可默认 显示/关闭 表格列固定过滤todo
高级搜索联动通过配置项进行高级搜索联动done
其他功能参考 Element Plus 表格组件 功能done

文件说明

组件文件:/element-plus/components/Table/src/BasicTable.vue

组件类型文件: /element-plus/components/Table/types.ts

组件类型定义
export interface TableType {
  data: PaginationParamsType | Array<any>;   // 表格显示的数据
  attr?: Recordable;  // 参考 element-plus el-table 的属性以及HTML元素属性
  event?: Recordable; // 参考 element-plus el-table 的事件以及HTML事件属性
  ref?: Ref<T>;       //  el-table组件的实例对象
  loading?: Ref<boolean>;
  columns: Array<TableColumnType>; // 所要渲染的表格列的数组
  appendSlot?: string | CompType; // 尾部插槽名称 或配置对象
  emptySlot?: string | CompType; // 表格数据为空时插槽名称或配置对象
  pagination?: PaginationType; // 表格分页的配置对象
  seach?: FormType;  // 高级搜索配置
  [x: string]: any;
}

export interface TableColumnType {
  headerSlot?: string; // 表头插槽名称 或 配置
  defaultSlot?: string | CompType | Array<CompType>; // 默认插槽名称 或配置
  attr?: Recordable; // 参考 element-plus el-table-column 的属性以及HTML元素属性
}

// 分页参数类型
export interface PaginationParamsType {
  currentPage: number, // 当前页数的默认初始值,不设置时默认为 1
  data: Array<any>, // 表格数据
  pageSize: number, //每页数量
  total: number, // 总数量
}

export interface PaginationType {
  show: boolean, // 是否显示分页
  className?: string, // 组件类名称
  key?: string; // 组件 key 
  attr?: Recordable; // 组件属性
  event?: Recordable; // 组件事件
  children?: Array<CompType> | []; //组件子节点 dom 
  ref?: Ref<T>; // 组件 ref 引用
}

特性

  1. JSON 配置:传递指定格式的 json 对象给组件 BasicTable,组件会以此渲染对应的表格

  2. 自定义插槽:

    • 通过设置每一列的渲染属性对象中的 headerSlot、defaultSlot,可以指定每一列各自的表头插槽和内容插槽,再由父组件传递指定插槽内容就可以单独为每一列实现表头、内容,且每一个内容插槽都会返回给父组件当前行数据对象CurrentRowData,也可以传入对象将插槽 JSON 配置化。
  3. 自动绑定表格数据:当表格列的内容为一系列输入框时,会依据当前列的属性对象attr中的prop绑定当前行响应式数据对象scope.row中对应的属性值。

参数 JSON 格式

<options> = {
  data: [],   // 表格显示的数据
  attr: {},   // 参考 element-plus el-table 的属性以及HTML元素属性
  event: {},  // 参考 element-plus el-table 的事件以及HTML事件属性
  ref: ref(), // el-table组件的实例对象
  loading: false, // 表格 loading
  appendSlot: string | CompType; // 尾部插槽名称 或配置对象
  emptySlot: string | CompType; // 表格数据为空时插槽名称或配置对象
  type: "Table", // 只为Dialog组件服务,用来辨别Dialog内容区所渲染的组件
  seachOptions:  // 高级搜索配置
  columns: [	// 所要渲染的表格列的数组
    {
      headerSlot: string; // 表头插槽名称 或 配置
  	  defaultSlot: string | CompType | Array<CompType>; // 默认插槽名称 或配置
      attr: {	// 参考 element-plus el-table-column 的属性以及HTML元素属性

      }
    },
  ]
}

参数说明

TableType

属性名说明类型默认值
pagination分页配置项:默认使用表格分页,如果不使用表格分页,传入 false;
PaginationType{currentPage: 1,data:[], pageSize: 10,total: 外部传入}
data表格显示的数据,根据是否使用分页传入不同的data格式:
当使用分页时候,传入 PaginationParamsType 类型参数(类型见下面说明);
当不使用分页时候,传入数据对象
PaginationParamsType或Array-
attrel-table的属性对象,值为element-plus中 el-table 的属性以及 HTML 元素属性Record<String, any>-
eventel-table的事件对象,值为element-plus中 el-table 的事件以及 HTML 事件属性Record<String, any>-
refel-table组件的实例对象Ref<T>-
loading表格 loadingbooleanfalse
columns渲染的表格列的数组Array<TableColumnType>-
appendSlot尾部插槽名称或配置对象
当传入插槽名称时候,可以在模板中使用对应具名插槽,插入内容到表格尾部;
当使用 JSON 对象时,则通过 basicComponent 组件渲染插槽内容
string或CompType-
emptySlot表格数据为空时插槽名称或配置对象
当传入插槽名称时候,可以在模板中使用对应具名插槽,插入内容到表格数据为空时内容;
当使用 JSON 对象时,则通过 basicComponent 组件渲染插槽内容
string或CompType-
pagination表格分页的配置对象CompType-
seach高级搜索配置FormType-
PaginationType类型
//当使用分页时候,传入的数据格式
export interface PaginationParamsType {
  currentPage: number, // 当前页数的默认初始值,不设置时默认为 1
  data: Array<any>, // 表格数据
  pageSize: number, //每页数量
  total: number, // 总数量
}

//当使用分页时候,传入的数据格式示例如下
const data = {
  currentPage: 1,
  data: tableData,
  pageSize: 20,
  total: 25,
};

TableColumnType

属性名说明类型默认值
headerSlot表格列的表头插槽名 或 配置对象
当传入插槽名称时候,可以在模板中使用对应具名插槽,插入内容到表格头部;
当使用 JSON 对象时,则通过 basicComponent 组件渲染插槽内容
String或CompType-
defaultSlot表格列的内容插槽名 或 配置对象
当为一列单元格的内容设置defalutSlotConfig配置时,defaultSlot的事件对象是在BaiscTable进行绑定,而不是在BasicComponent,且为defaultSlot的事件对象中的所有事件传递了当前单元格所在行和列的数据对象作为事件的第一个参数,则在配置对象中便可使用单元格所在行和列的数据对象currentCellData,若事件为组件事件,则组件事件的回调参数将会排在currentCellData后面,所以当无需使用currentCellData但要使用组件事件的回调参数时,都必须在事件的参数列表的第一个参数写上一个变量来接收currentCellData。
当一列的内容单元格为多个元素时,可以将defaultSlot定义成一个对象
String 或 CompType 或 Array<CompType>-
attr参考 element-plus el-table-column 的属性以及 HTML 元素属性Record<String, any>-

方法

Table 方法

方法名说明参数
clearSelection用于多选表格,清空用户的选择—
getSelectionRows返回当前选中的行
toggleRowSelection用于多选表格,切换某一行的选中状态,
如果使用了第二个参数,则可直接设置这一行选中与否
row, selected
toggleAllSelection用于多选表格,切换全选和全不选—
toggleRowExpansion用于可扩展的表格或树表格,
如果某行被扩展,则切换。 使用第二个参数,您可以直接设置该行应该被扩展或折叠。
row, expanded
setCurrentRow用于单选表格,设定某一行为选中行,
如果调用时不加参数,则会取消目前高亮行的选中状态。
row
clearSort用于清空排序条件,数据会恢复成未排序的状态—
clearFilter传入由columnKey 组成的数组以清除指定列的过滤条件。 如果没有参数,清除所有过滤器columnKeys
doLayout对 Table 进行重新布局。
当表格可见性变化时,您可能需要调用此方法以获得正确的布局
—
sort手动排序表格。
参数 prop 属性指定排序列,order 指定排序顺序。
prop: String, order: String
scrollTo滚动到一组特定坐标`(options: ScrollToOptions
setScrollTop设置垂直滚动位置top
setScrollLeft设置水平滚动位置left

pagination 方法

方法名说明参数
size-change改变时触发
对应 ElmentPlus Pagination 同名方法
(value: number) => void
current-change改变时触发,
对应 ElmentPlus Pagination 同名方法
(value: number) => void
page-changecurrent-page 或 page-size 更改时触发(currentPage: number, pageSize: number) => void
prev-click用户点击上一页按钮改变当前页时触发(value: number) => void
next-click用户点击下一页按钮改变当前页时触发(value: number) => void

插槽

Table

插槽名说明
tableAppend插入至表格最后一行之后的内容, 如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。 若表格有合计行,该 slot 会位于合计行之上。
tableEmpty当数据为空时自定义的内容

table-column

插槽名说明
<headerSlot>自定义表头的内容, 作用域参数为 { column, $index }
<defaultSlot>自定义列的内容 作用域参数为 { row, column, $index }

方法

方法名说明参数
handleOpen打开下拉菜单—
handleClose关闭下拉菜单—

接口格式

分页表格

默认情况下表格为分页模式,分页模式下,需要返回分页相关数据和表格数据。

分页表格接口格式示例
//  分页配置
const data = {
  currentPage: 1, // 当前页码
  pageSize: 20, // 每页数量
  total: 25, // 所有数据总数
  data: [ // 当前页面数据
      {
        date: "2016-05-02",
        name: "王小虎",
        address: "上海市普陀区金沙江路 1518 弄",
        select: "送货上门",
      },
      {
        date: "2016-05-04",
        name: "王小虎",
        address: "上海市普陀区金沙江路 1517 弄",
        select: "自取",
      },
      {
        date: "2016-05-01",
        name: "王小虎",
        address: "上海市普陀区金沙江路 1519 弄",
        select: "自取",
      },
      {
        date: "2016-05-03",
        name: "王小虎",
        address: "上海市普陀区金沙江路 1516 弄",
        select: "自取",
      },
  ],
};

不分页表格

不分页的表格接口,默认返回的 data 为数组,数组内为表格每一列数据组成的对象。

不分页表格接口格式示例
const tableData = [
  {
    date: "2016-05-02",
    name: "王小虎",
    address: "上海市普陀区金沙江路 1518 弄",
    select: "送货上门",
  },
  {
    date: "2016-05-04",
    name: "王小虎",
    address: "上海市普陀区金沙江路 1517 弄",
    select: "自取",
  },
  {
    date: "2016-05-01",
    name: "王小虎",
    address: "上海市普陀区金沙江路 1519 弄",
    select: "自取",
  },
  {
    date: "2016-05-03",
    name: "王小虎",
    address: "上海市普陀区金沙江路 1516 弄",
    select: "自取",
  },
];

示例

</>


分页示例

</>


插槽示例

</>


高级搜索示例

</>


高级搜索-表格列筛选示例

默认在表格的高级搜索框中显示表格列筛选按钮,如果不需要显示,则配置 options.seach.buttons.colFilter 为 false 即可

</>


表格操作列

通过配置 options.operations 给表格添加默认操作,操作列默认整合在更多操作按钮组中,并固定在表格右侧,默认使用下拉操作

operations 字段参数:

[ // 默认传入操作数组
    {
        text: "查看",  // 操作名称
        icon: null, // 操作按钮图标
        disabled: false, // 是否禁用按钮
        divided: false, //是否显示分隔符
        notGroup:false, // 是否单独显示,不整合到按钮组中
        //... 其余属性可以参数 element plus buttton 组件属性
        command: { // 操作列自定义参数, 通过事件回调返回
          name: "查看name参数", // 自定义参数
        },
	}
]

点击操作列按钮时,表格使用 operate 事件监听点击的按钮,并在回调中接收操作类型、行参数、操作列自定义参数等。operate 事件回调参数:

{
    operation: "查看", // 操作类型
    params:  value.command,  // 操作列自定义参数 command, 通过事件回调参数params返回
    data: props.slotScope.row, // 操作的表格行数据
    colum: props.slotScope.column, // 操作的表格列
    row: props.slotScope.$index, // 操作的表格行
}

</>

如果不希望把按钮整合到按钮组中,则需要配置 notGroup 为 true, 表示不把操作整合到按钮组中

</>

sewen-ui design by Sewen