跳转到内容

表格 Table

表格的基本用法,需要传递 columnsdata

可以通过特定插槽自定义表格元素的渲染。仅需要传入表格元素,内部属性会自动附加上去

通过 #columns 插槽和 <sd-table-column> 组件可以使用模板的方法自定义列渲染。 注意:在使用 #columns 插槽后,将会屏蔽 columns 属性

(实验性)开启锚点拖拽功能

(实验性)开启表格行可拖拽功能

可以在使用插槽获得的数据,修改 data 中的数据,达到可编辑表格的功能。 2.25.0 版本后可以直接修改插槽传出的 record 变量。这个 record 变量是传入的 data 中对应数据的引用,请保证 data 为 Reactive 类型。

开启 ellipsis 属性可以显示省略号,如果同时开启 tooltip 会在显示省略号时使用文本提示。注意:开启 tooltip 后会修改 table-cell 中的 DOM 结构。

通过设置 expandable 开启展开行功能。可以在 data 中添加 expand 属性,设置展开行显示内容。

通过插槽可以自定义筛选菜单内容。

分组表头使用固定列时,需要优先指定数据列为固定列。如果一个分组下的所有数据列都是固定列,此时可以设置分组列为固定列,宽度为子列宽度之和。

columns 中指定 fixed: 'left'fixed: 'right',可将列固定到左侧或右侧。设置了 fixed 的列必须设置 width 指定列的宽度。 注意:要配合 :scroll="{ x: number }" 使用。此外 columns 中至少需要有一列不设置宽度,自适应,不然会有样式问题。

columns 内可以设置 children,用于表头分组。

通过 load-more 属性可以开启子树懒加载功能。开启子树懒加载功能后,需要在无子树节点标注 isLeaf: true,没有标注且没有 children 属性的节点会认为需要子树懒加载处理。 load-more 属性有提供 done 函数进行回调,可以在回调中传入懒加载的子树。如果 done 函数没有传入数据会认为懒加载失败,此节点可以再次触发懒加载。

这里罗列了一些表格的属性,你可以方便的打开或关闭一些属性,查看它的效果。

通过设置 rowSelection.type='radio' 开启单选模式。

使用 column-resizable 属性开启列宽调整。建议初始设置除最后一列外其他列的默认列宽。

通过设置 row-selection 开启行选择器。

设置 scroll 属性可以开启表格滚动。x 指表格的实际宽度,一般设置的值会大于表格容器宽度;y 指表格的显示高度,表格实际高度超出后会显示滚动条。2.18.0 版本后 x, y 均可设置百分比。y 设置为 100% 可以让表格容器高度跟随外层容器,超出后自动显示滚动条。

通过设置 columns 中的 sortablefilterable 属性,可以配置排序和筛选功能。 通过 filter-icon-align-left 属性可以让筛选按钮左对齐。可以通过设置 sortable.sorter=true 来关闭内部排序,并通过 change 或者 sorterChange 事件来实现服务器端排序。

通过 span-method 属性进行单元格合并。可以设置 span-all 让列索引包含操作列,注意:目前如果合并多项选择器会导致全选状态判断错误。

通过 sticky-header 设置表头吸顶。表头吸顶的计算容器为最近滚动容器,设置数字时可指定距离滚动容器顶部的高度。

树形数据展示的例子,data 里有 children 字段时会展示为树形表格。

设置 summary 可以开启表尾总结行,并可以通过 summary-text 指定首列文字。如果想要自定义总结行展示,可以传入函数。函数的返回值为需要展示的数据,结构同 data 一样即可,支持多行数据。注意:控制列暂不可以自定义内容

设置 virtual-list-props 开启虚拟列表功能。目前虚拟滚动表格受限比较多,开启虚拟滚动后不能使用展开行、树形数据、固定列等功能

参数名描述类型默认值版本
columns表格的列描述信息TableColumnData[][]
data表格的数据TableData[][]
bordered是否显示边框boolean | TableBordertrue
hoverable是否显示选中效果booleantrue
stripe是否开启斑马纹效果booleanfalse
size表格的大小'mini' | 'small' | 'medium' | 'large''large'
table-layout-fixed表格的 table-layout 属性设置为 fixed,设置为 fixed 后,表格的宽度不会被内容撑开超出 100%。booleanfalse
loading是否为加载中状态boolean|objectfalse
row-selection表格的行选择器配置TableRowSelection-
expandable表格的展开行配置TableExpandable-
scroll表格的滚动属性配置。2.13.0 版本增加字符型值的支持。2.20.0 版本增加 minWidth,maxHeight 的支持。{ x?: number | string; y?: number | string; minWidth?: number | string; maxHeight?: number | string;}-
pagination分页的属性配置boolean | PaginationPropstrue
page-position分页选择器的位置'tl' | 'top' | tr' | 'bl' | 'bottom' | 'br''br'
indent-size树形表格的缩进距离number16
row-key表格行 key 的取值字段string'key'
show-header是否显示表头booleantrue
virtual-list-props传递虚拟列表属性,传入此参数以开启虚拟滚动 VirtualListPropsVirtualListProps-
span-method单元格合并方法(索引从数据项开始计数)(data: { record: TableData; column: TableColumnData | TableOperationColumn; rowIndex: number; columnIndex: number;}) => { rowspan?: number; colspan?: number } | void-2.10.0
span-all是否让合并方法的索引包含所有booleanfalse2.18.0
load-more数据懒加载函数,传入时开启懒加载功能(record: TableData, done: (children?: TableData[]) => void) => void-2.13.0
filter-icon-align-left筛选图标是否左对齐booleanfalse2.13.0
hide-expand-button-on-empty是否在子树为空时隐藏展开按钮booleanfalse2.14.0
row-class表格行元素的类名。2.34.0 版本增加函数值支持string| any[]| Record<string, any>| ((record: TableData, rowIndex: number) => any)-2.16.0
draggable表格拖拽排序的配置TableDraggable-2.16.0
column-resizable是否允许调整列宽booleanfalse2.16.0
summary显示表尾总结行boolean| ((params: { columns: TableColumnData[]; data: TableData[]; }) => TableData[])-2.21.0
summary-text总结行的首列文字string'Summary'2.21.0
summary-span-method总结行的单元格合并方法(data: { record: TableData; column: TableColumnData | TableOperationColumn; rowIndex: number; columnIndex: number;}) => { rowspan?: number; colspan?: number } | void-2.21.0
selected-keys已选择的行(受控模式)优先于 rowSelection(string | number)[]-2.25.0
default-selected-keys默认已选择的行(非受控模式)优先于 rowSelection(string | number)[]-2.25.0
expanded-keys显示的展开行、子树(受控模式)优先于 expandable(string | number)[]-2.25.0
default-expanded-keys默认显示的展开行、子树(非受控模式)优先于 expandable(string | number)[]-2.25.0
default-expand-all-rows是否默认展开所有的行booleanfalse2.25.0
sticky-header是否开启表头吸顶boolean|numberfalse2.30.0
scrollbar是否开启虚拟滚动条boolean | ScrollbarPropstrue2.38.0
show-empty-tree是否展示空子树booleanfalse2.51.0
事件名描述参数版本
expand点击展开行时触发rowKey: string | number
record: TableData
expanded-change已展开的数据行发生改变时触发rowKeys: (string | number)[]
select点击行选择器时触发rowKeys: string | number[]
rowKey: string | number
record: TableData
select-all点击全选选择器时触发checked: boolean
selection-change已选择的数据行发生改变时触发rowKeys: (string | number)[]
sorter-change排序规则发生改变时触发dataIndex: string
direction: string
filter-change过滤选项发生改变时触发dataIndex: string
filteredValues: string[]
page-change表格分页发生改变时触发page: number
page-size-change表格每页数据数量发生改变时触发pageSize: number
change表格数据发生变化时触发data: TableData[]
extra: TableChangeExtra
currentData: TableData[]
2.40.0 增加 currentData
cell-mouse-enter单元格 hover 进入时触发record: TableData
column: TableColumnData
ev: Event
cell-mouse-leave单元格 hover 退出时触发record: TableData
column: TableColumnData
ev: Event
cell-click点击单元格时触发record: TableData
column: TableColumnData
ev: Event
row-click点击行数据时触发record: TableData
ev: Event
header-click点击表头数据时触发column: TableColumnData
ev: Event
column-resize调整列宽时触发dataIndex: string
width: number
2.28.0
row-dblclick双击行数据时触发record: TableData
ev: Event
cell-dblclick双击单元格时触发record: TableData
column: TableColumnData
ev: Event
row-contextmenu右击行数据时触发record: TableData
ev: Event
cell-contextmenu右击单元格时触发record: TableData
column: TableColumnData
ev: Event
方法名描述参数返回值版本
selectAll设置全选状态checked: boolean-2.22.0
select设置行选择器状态rowKey: string | number | (string | number)[]
checked: boolean
-2.31.0
expandAll设置全部展开状态checked: boolean-2.31.0
expand设置展开状态rowKey: string | number | (string | number)[]
checked: boolean
-2.31.0
resetFilters重置列的筛选器dataIndex: string | string[]-2.31.0
clearFilters清空列的筛选器dataIndex: string | string[]-2.31.0
resetSorters重置列的排序--2.31.0
clearSorters清空列的排序--2.31.0
插槽名描述参数版本
th自定义 th 元素column: TableColumnData2.26.0
thead自定义 thead 元素-2.26.0
empty空白展示-
summary-cell总结行column: TableColumnData
record: TableData
rowIndex: number
2.23.0
pagination-right分页器右侧内容-2.18.0
pagination-left分页器左侧内容-2.18.0
td自定义 td 元素column: TableColumnData
record: TableData
rowIndex: number
2.16.0
tr自定义 tr 元素record: TableData
rowIndex: number
2.16.0
tbody自定义 tbody 元素-2.16.0
drag-handle-icon拖拽锚点图标-2.16.0
footer表格底部-
expand-row展开行内容record: TableData
expand-icon展开行图标expanded: boolean
record: TableData
columns表格列定义。启用时会屏蔽 columns 属性-
参数名描述类型默认值版本
data-index列信息的标识,对应TableData中的数据string-
title列标题string-
width列宽度number-
min-width最小列宽number-
align对齐方向TableColumnData['align']-
fixed固定位置TableColumnData['fixed']-
ellipsis是否显示为省略booleanfalse
sortable排序相关选项TableSortable-
filterable过滤相关选项TableFilterable-
cell-class自定义单元格类名ClassName-2.36.0
header-cell-class自定义表头单元格类名ClassName-2.36.0
body-cell-class自定义内容单元格类名ClassName | ((record: TableData) => ClassName)-2.36.0
summary-cell-class自定义总结栏单元格类名ClassName | ((record: TableData) => ClassName)-2.36.0
cell-style自定义单元格样式CSSProperties-2.11.0
header-cell-style自定义表头单元格样式CSSProperties-2.29.0
body-cell-style自定义内容单元格样式CSSProperties | ((record: TableData) => CSSProperties)-2.29.0
summary-cell-style自定义总结栏单元格样式CSSProperties | ((record: TableData) => CSSProperties)-2.30.0
index用于手动指定选项的 index。2.26.0 版本后不再需要手动指定number-2.20.2
tooltip在省略时是否显示文字提示boolean|objectfalse2.26.0
插槽名描述参数版本
filter-icon筛选按钮图标-2.23.0
filter-content自定义筛选弹出框内容filterValue: string[]
setFilterValue: (filterValue: string[]) => void
handleFilterConfirm: (event: Event) => void
handleFilterReset: (event: Event) => void
2.23.0
title标题-
cell单元格record: TableData
column: TableColumnData
rowIndex: number
type Filters = Record<string, string[]>;
type Sorter = { filed: string; direction: 'ascend' | 'descend' } | Record<string, never>;
参数名描述类型默认值版本
key数据行的keystring-
expand扩展行内容string | RenderFunction-
children子数据TableData[]-
disabled是否禁用行选择器booleanfalse
isLeaf是否是叶子节点booleanfalse2.13.0
参数名描述类型默认值
sortDirections支持的排序方向('ascend' | 'descend')[]-
sorter排序函数。设置为 true 可关闭内部排序。2.19.0 版本修改传出数据。(( a: TableData, b: TableData, extra: { dataIndex: string; direction: 'ascend' | 'descend' } ) => number) | boolean-
sortOrder排序方向'ascend' | 'descend' | ''-
defaultSortOrder默认排序方向(非受控模式)'ascend' | 'descend' | ''-
参数名描述类型默认值
text筛选数据选项的内容string | RenderFunction-
value筛选数据选项的值string-
参数名描述类型默认值版本
filters筛选数据TableFilterData[]-
filter筛选函数(filteredValue: string[], record: TableData) => boolean-
multiple是否支持多选booleanfalse
filteredValue筛选项string[]-
defaultFilteredValue默认筛选项string[]-
renderContent筛选框的内容(data: { filterValue: string[]; setFilterValue: (filterValue: string[]) => void; handleFilterConfirm: (event: Event) => void; handleFilterReset: (event: Event) => void; }) => VNodeChild-
icon筛选按钮的图标RenderFunction-
triggerProps筛选框的弹出框配置TriggerProps-
alignLeft筛选图标是否左对齐booleanfalse2.13.0
参数名描述类型默认值版本
dataIndex列信息的标识,对应 TableData 中的数据string-
title列标题string | RenderFunction-
width列宽度number-
minWidth最小列宽number-
align对齐方向'left' | 'center' | 'right'-
fixed固定位置'left' | 'right'-
ellipsis是否显示省略号booleanfalse
tooltip是否在显示省略号时显示文本提示。可填入 tooltip 组件属性boolean | Record<string, any>-2.26.0
sortable排序相关选项TableSortable-
filterable过滤相关选项TableFilterable-
children表头子数据,用于表头分组TableColumnData[]-
cellClass自定义单元格类名ClassName-2.36.0
headerCellClass自定义表头单元格类名ClassName-2.36.0
bodyCellClass自定义内容单元格类名ClassName | ((record: TableData) => ClassName)-2.36.0
summaryCellClass自定义总结栏单元格类名ClassName | ((record: TableData) => ClassName)-2.36.0
cellStyle自定义单元格样式CSSProperties-2.11.0
headerCellStyle自定义表头单元格样式CSSProperties-2.29.0
bodyCellStyle自定义内容单元格样式CSSProperties | ((record: TableData) => CSSProperties)-2.29.0
summaryCellStyle自定义总结栏单元格样式CSSProperties | ((record: TableData) => CSSProperties)-2.30.0
render自定义列单元格的渲染(data: { record: TableData; column: TableColumnData; rowIndex: number; }) => VNodeChild-
slotName设置当前列的渲染插槽的名字。插槽参数同 #cellstring-2.18.0
titleSlotName设置当前列的标题的渲染插槽的名字string-2.23.0
参数名描述类型默认值
wrapper是否展示外边框booleanfalse
cell是否展示单元格边框(表头+主体)booleanfalse
headerCell是否展示表头单元格边框booleanfalse
bodyCell是否展示主体单元格边框booleanfalse
参数名描述类型默认值版本
type行选择器的类型'checkbox' | 'radio'-
selectedRowKeys已选择的行(受控模式)BaseType[]-
defaultSelectedRowKeys默认已选择的行(非受控模式)BaseType[]-
showCheckedAll是否显示全选选择器booleanfalse
title列标题string-
width列宽度number-
fixed是否固定booleanfalse
checkStrictly是否开启严格选择模式booleantrue2.29.0
onlyCurrent是否仅展示当前页的 keys(切换分页时清空 keys)booleanfalse2.32.0
参数名描述类型默认值
expandedRowKeys显示的展开行(受控模式)BaseType[]-
defaultExpandedRowKeys默认显示的展开行(非受控模式)BaseType[]-
defaultExpandAllRows是否默认展开所有的行booleanfalse
expandedRowRender自定义展开行内容(record: TableData) => VNodeChild-
icon展开图标(expanded: boolean, record: TableData) => VNodeChild-
title列标题string-
width列宽度number-
fixed是否固定booleanfalse
参数名描述类型默认值
type拖拽类型'row' | 'handle'-
title列标题string-
width列宽度number-
fixed是否固定booleanfalse
参数名描述类型默认值
type触发类型'pagination' | 'sorter' | 'filter' | 'drag'-
page页码number-
pageSize每页数据数number-
sorter排序信息Sorter-
filters筛选信息Filters-
dragTarget拖拽信息TableData-
参数名描述类型默认值版本
height可视区域高度number | string-
threshold开启虚拟滚动的元素数量阈值,当数据数量小于阈值时不会开启虚拟滚动。number-
isStaticItemHeight(已废除)元素高度是否是固定的。2.34.1 版本废除,请使用 fixedSizebooleanfalse
fixedSize元素高度是否是固定的。booleanfalse2.34.1
estimatedSize元素高度不固定时的预估高度。number-2.34.1
buffer视口边界外提前挂载的元素数量。number102.34.1

table 组件提供了内部元素的自定义插槽,这些插槽不同于普通插槽,对用户传入的内容有一定限制。因为 vue 的插槽没有提供传出 children 并在 slot 中渲染的方式,我们针对 table 中的元素插槽,做了一些特殊处理,会在用户传入的内容中,附加上原有的 children,保证子元素的正常渲染。此时需要用户注意,在元素插槽中自定义渲染时,需要传入单一空元素使用,不能在传入的元素中添加内容(参考例 1)。如果用户需要传入复合元素,可以自定义组件,并指定 default 插槽,然后传入 table 的元素插槽中(参考例 2)。

例 1:

<template>
<sd-table>
<template #td>
<td @click="onClick"></td>
</template>
</sd-table>
</template>

例 2:

<template>
<sd-table>
<template #td>
<MyTd></MyTd>
</template>
</sd-table>
</template>
<template>
<td>
<div>my td content</div>
<div>
<slot />
</div>
</td>
</template>

表格默认会通过数据中设置的 key 字段来唯一定位行数据,在提供数据时请确保行数据中都设置了 key 字段。这个字段在开启选择器等功能时为必要字段,如果想要更换默认的字段名,可以修改 row-key 进行设置。