Skip to content
On this page

table组件

https://element-plus.org/zh-CN/component/table.html

Hidden Title

基础用法:<s-table :columns="columns" :data="data" :loading="loading"></s-table>

属性事件插槽简介

all

基础用法

成华主题

chenghua主题示例

石景山主题

shijingshan主题示例

other

单选

多选

多级表头

隐藏按钮或列 isShow

通常用法

编辑

reConfirm再确认

表格里嵌套表格

render函数

改变操作按钮的属性

对比

属性

属性名说明类型默认值
data表格数据源array[]
columns列配置array[]
showPage是否显示分页booleantrue
showIndex是否显示序号列booleantrue
size表格和分页尺寸,支持 small / default / largestring''
theme主题样式,支持 default / chenghua / shijingshanstringdefault
pageSize每页条数number30
pageNumber当前页码number1
pageSizes分页器可选每页条数array[10, 30, 50]
total总条数,不传时默认取 data.lengthnumber-
columnEmptyText单元格空值占位文案string-
loading表格加载状态booleanfalse
indexAttrs序号列透传给 el-table-column 的配置object{}
modelValue选中值;单选时为当前行,多选时为选中行数组any-
selectionType内置选中模式,支持 single / multiplestring''
selectionAttrs内置单选列/多选列透传配置object{}
asyncUpdate是否由外部异步控制分页状态booleanfalse
pageAttrs分页组件透传配置object{}

pageAttrs 内部属性

pageAttrs 会透传给内部 el-paginations-table 默认会先设置 current-pagepage-sizepage-sizeslayouttotalsize 等分页属性,再合并 pageAttrs;所以 pageAttrs 中同名属性会覆盖默认值。分页事件仍统一由 s-table 处理并触发 page-change

字段名说明类型默认值
pageSize每页条数;覆盖内部根据 pageSize prop 维护的值numberpageSize prop,默认 30
defaultPageSize非受控模式下的默认每页条数number-
total总条数;覆盖内部根据 total / data.length 计算的值numbertotal ?? data.length
pageCount总页数;设置后 el-pagination 可不依赖 totalnumber-
pagerCount页码按钮数量,需要大于 4 小于 22 的奇数number7
currentPage当前页码;覆盖内部根据 pageNumber prop 维护的值numberpageNumber prop,默认 1
defaultCurrentPage非受控模式下的默认当前页码number-
layout分页布局,可包含 prevpagernextjumpersizestotal->stringprev, pager, next, jumper, sizes
pageSizes每页条数选项;覆盖 pageSizes propnumber[]pageSizes prop,默认 [10, 30, 50]
popperClass每页条数下拉框的 classstring''
popperStyle每页条数下拉框样式string / object-
prevText替代上一页图标的文字string''
prevIcon上一页图标string / ComponentElement Plus 默认图标
nextText替代下一页图标的文字string''
nextIcon下一页图标string / ComponentElement Plus 默认图标
teleported下拉框是否挂载到 bodybooleantrue
small是否使用小尺寸,Element Plus 已推荐改用 sizebooleanfalse
size分页尺寸,支持 small / default / largestringsize prop 或 Element Plus 全局尺寸
background是否为分页按钮添加背景色booleantrue
disabled是否禁用分页booleanfalse
hideOnSinglePage只有一页时是否隐藏分页booleanfalse
appendSizeTo每页条数下拉框挂载目标string-

事件

事件名说明回调参数
page-change页码或每页条数变化时触发({ pageNumber, pageSize })
update:modelValue内置单选/多选值变化时触发(selectedRow | selectedRows)

columns 内部属性

columns 每一项都会生成一个 el-table-columns-table 会额外处理 useSlotrenderfilterhandlerisShowcolumnEmptyTextbtnsmaxBtns 等字段;其它 el-table-column 属性会继续透传。

TypeScript 项目中建议从 sybz-components/types/table 引入列配置类型,并给 computed 或列数组显式标注行数据类型,这样 filter: ({ row }) => ...render: ({ row }) => ... 里的 row 才能被推导:

ts
import type { TableColumnList } from 'sybz-components/types/table'

type TemplateRow = {
  rank: number
  templateName: string
}

const templateTableColumns = computed<TableColumnList<TemplateRow>>(() => [
  { prop: 'rank', label: '序号', width: 64, align: 'center', useSlot: 'rank' },
  { prop: 'templateName', label: '热门文案模版', minWidth: 420, filter: ({ row }) => getTemplateName(row) },
])
import type { TableColumnList } from 'sybz-components/types/table'

type TemplateRow = {
  rank: number
  templateName: string
}

const templateTableColumns = computed<TableColumnList<TemplateRow>>(() => [
  { prop: 'rank', label: '序号', width: 64, align: 'center', useSlot: 'rank' },
  { prop: 'templateName', label: '热门文案模版', minWidth: 420, filter: ({ row }) => getTemplateName(row) },
])
字段名说明类型默认值
label列标题string / number-
prop对应字段名,也是 useSlot: true 时的默认插槽名string-
propertyprop 的别名,透传给 el-table-columnstring-
type特殊列类型,支持 selection / index / expand 等 Element Plus 类型string-
className当前列单元格 classstring-
labelClassName当前列表头 classstring-
width列宽string / number-
minWidth最小列宽;未设置 width 时,s-table 会根据标题自动补一个最小宽度string / number-
fixed固定列,true 表示固定在左侧,也可传 left / rightstring / boolean-
align单元格对齐方式,支持 left / center / rightstring-
headerAlign表头对齐方式,未设置时跟随 alignstring-
sortable是否可排序;远程排序传 customboolean / stringfalse
sortMethod自定义排序方法,sortabletrue 时生效function-
sortBy指定排序字段或排序取值函数string / string[] / function-
sortOrders点击表头时排序顺序array['ascending', 'descending', null]
resizable是否可拖拽调整列宽,表格 bordertrue 时生效booleantrue
columnKey列 key,使用筛选事件时用于标识列string-
renderHeaderElement Plus 表头渲染函数function-
showOverflowTooltip内容溢出时是否显示 tooltipboolean / objecttrue
tooltipFormatter溢出 tooltip 内容格式化函数function-
formatterElement Plus 单元格格式化函数function-
selectabletype="selection" 时判断某行是否可选function-
reserveSelectiontype="selection" 时是否保留选中状态,需要配合 row-keybooleanfalse
filterMethodElement Plus 筛选方法function-
filteredValue已选中的筛选值array-
filters筛选选项,每项通常包含 textvaluearray-
filterPlacement筛选下拉框位置string-
filterMultiple筛选是否支持多选booleantrue
filterClassName筛选下拉框 classstring-
indextype="index" 时自定义序号number / function-
useSlot使用插槽渲染;传 true 时插槽名为 prop,传字符串时插槽名为该字符串boolean / stringfalse
renders-table 自定义渲染函数,接收对象参数function-
filters-table 自定义文本处理,支持方法名字符串或对象参数函数string / function-
handler单元格点击事件;存在时单元格内容会带点击样式function-
isShow控制列是否显示,支持布尔值或函数boolean / functiontrue
columnEmptyText当前列的空值占位文案,会覆盖全局 columnEmptyTextstring-
btns操作栏按钮配置,存在且不为空时该列作为操作列渲染array[]
maxBtns操作栏最多显示的总数量,包含“更多”入口number / string4

columns.btns 内部属性

btns 用于配置操作栏按钮。按钮数量超过 maxBtns 时,会展示 maxBtns - 1 个按钮,其余按钮放入“更多”下拉中。

字段名说明类型默认值
prop操作按钮关联字段,回调参数中的 value 会读取 row[prop]string-
content按钮文案,支持函数string / number / function-
titlereConfirm 开启时的确认提示文案,支持函数string / number / function确定删除吗?
dangerouslyUseHTMLString是否把确认提示里的字符串按 HTML 渲染,可用于解析 <mark> 高亮文本booleantrue
handler点击按钮或确认后执行的方法function-
isShow控制按钮是否显示,支持布尔值或函数boolean / functiontrue
disabled控制按钮是否禁用,支持布尔值或函数boolean / functionfalse
reConfirm是否点击后先弹出二次确认,支持布尔值或函数boolean / functionfalse
render自定义按钮渲染函数,接收对象参数function-
useSlot使用插槽渲染;传 true 时插槽名为 prop,传字符串时插槽名为该字符串boolean / stringfalse
comp自定义按钮组件,传组件名或组件对象string / Component-
attrs使用 comp 时透传给自定义组件的属性object-
width操作栏宽度计算时使用的按钮宽度number / string-
其它字段未在上表列出的字段会继续透传给内部 el-buttonany-

render 参数

render 统一接收一个对象参数:

ts
render({ row, scope, value, column, action, index })
render({ row, scope, value, column, action, index })
参数名说明
row当前行数据
scopeel-table-column 默认插槽作用域
value当前列 prop 对应的值;操作按钮未配置 prop 时可能为 undefined
column当前列配置对象
action当前操作按钮配置对象,仅操作栏下存在
index当前行索引,对应 scope.$index

回调参数

filter 支持字符串或函数。传字符串时,会优先读取当前组件实例上的同名方法并用当前单元格 value 调用;没有同名方法时读取当前行的同名字段。传函数时只接收一个对象参数,和 disabled 用法保持一致。

filterhandlerisShowdisabledreConfirm,以及按钮的 content / title 函数,推荐统一使用对象参数:

ts
const callback = ({ row, scope, value, column, action, index, event }) => {}
const callback = ({ row, scope, value, column, action, index, event }) => {}
  • value 是当前列或当前按钮 prop 对应的值。
  • event 仅点击相关回调下存在。
  • filter 不再使用旧的位置参数写法;函数形式固定为一个对象参数,和 render 保持一致。

说明

  • 组件底层基于 el-tableel-pagination 封装,未在上表列出的表格属性可继续通过 attrs 透传。
  • asyncUpdatetrue 时,分页切换只触发 page-change 事件,由外部维护 pageNumberpageSize
  • 操作栏 maxBtns 默认值为 4,表示总共最多显示 4 个槽位;当按钮数量超出时,会显示 maxBtns - 1 个按钮加一个“更多”入口。
  • 单选推荐直接用 v-model + selection-type="single";多选推荐直接用 v-model + selection-type="multiple",如果要跨页保留选中项,记得传 row-key

思云博智私有前端组件库