Skip to content

表格组件 - STable

不是 ATable 的封装,支持列拉伸/拖拽/属性配置,单元格合并/卡槽定义,Checkbox/Radio、内置分页等功能

演示

基本用法

基本用法

通过 columns 选项 + sources 数据源 + border 边框,实现一个带边框的简单表格

Name
Age
Like
Email
Alice36Cyclingalice@gmail.com
Mary22Swimmary@gmail.com
John27Musicjohn@gmail.com
复制代码
显示代码

带斑马纹表格

带斑马纹表格

要实现一个带斑马纹的表格,STable 可以通过 customBodyerCellRender 自定义表格 tbody <td> 的样式。

Name
Age
Like
Email
Alice36Cyclingalice@gmail.com
Mary22Swimmary@gmail.com
John27Musicjohn@gmail.com
David29Magicdavid@gmail.com
George29Badmintongeorge@gmail.com
Eric33Photographeric@gmail.com
复制代码
显示代码

带总结栏表格

带总结栏表格

通过 columns 选项 + sources 数据源 + summarys 总结栏,实现一个带总结栏的表格

复制代码
显示代码

表格事件自定义

表格事件自定义

STable 支持 customBodyerRowAttrs 定义表格行事件,也可以通过 customBodyerCellRender 定义单元格事件

Name
Age
Like
Email
Alice36Cyclingalice@gmail.com
Mary22Swimmary@gmail.com
John27Musicjohn@gmail.com
David29Magicdavid@gmail.com
George29Badmintongeorge@gmail.com
Eric33Photographeric@gmail.com
复制代码
显示代码

表格卡槽自定义

表格卡槽自定义

SlotsheaderCell 定义表格 thead 单元格内容

SlotsbodyerCell 定义表格 tbody 单元格内容

SlotsfooterCell 定义表格 tfoot 单元格内容

复制代码
显示代码

远程加载数据

远程加载数据

通过 loadData 动态加载数据 和 paginate 分页选项,实现异步请求数据并进行渲染的表格。

Name
Age
Like
Email

暂无数据

  • 第 0-0 条 (共 0 条)
  • 1
复制代码
显示代码

表格列排序(多列)

表格列排序(多列)

通过 column.sorter="true" 启用对表格某列的排序,点击排序后,会在 loadData 回调中的 options.sorter 获取排序情况,作为参数传递给后端,或前端执行排序处理。如果需要开启多列排序选项,可以设置 columnSorterMultiple="true"

多列排序
学生
语文
数学
英语
物理
地理

暂无数据

  • 第 0-0 条 (共 0 条)
  • 1
复制代码
显示代码

不同尺寸的表格

不同尺寸的表格

STable 表格的大小有 'default''middle''small' 这三种尺寸,可以通过 Size 进行指定

请选择
大 (default)
Name
Age
Like
Email

暂无数据

  • 第 0-0 条 (共 0 条)
  • 1
复制代码
显示代码

单元格自动省略

单元格自动省略

设置 columnPresetResizable 允许通过拉伸调整列宽度

设置 column.ellipsis 可以让单元格根据宽度自动省略

设置 column.tooltip 自动省略,并具有 Tooltip 提示

Name
Age
Email (ellipsis)
Info (tooltip)
Alice36
developer.alice-developer-going@gamil.com
Alice is an Internet developer. She likes cycling
Mary22
developer.is-swimming-number-1@gamil.com
Mary is a junior student who enjoys swimming
John27
developer.music.soul-libertarian@gamil.com
John loves music and often goes to bars to sing
复制代码
显示代码

表格分组表头

表格分组表头

表格表头 thead 分组可以通过 columnchidren 配置实现,如果当前列过多,则可以通过 :columnPresetSettings="true" 启用列筛选配置

Name
Other
Company
Gender
Address
Company Address
Company Name
Street
AliceBeiLunAddress-2019Name-2019F
MaryBaiFengAddress-1913Name-1913F
JackHaiShuAddress-0907Name-0907M
AstridJiangBeiAddress-1101Name-1101F
ZoraYinZhouAddress-1519Name-1519F
复制代码
显示代码

表格行/列合并

表格行/列合并

表格 tbody 的行/列合并,可以通过 customBodyerCellRender 来完成。因 cellMegreNormalize 默认值为 true, 它会帮助我们推导合并情况。所以我们只需设定某单元格合并多少列或行,无需关心相邻单元格是否需要设置 rowspan="0"colspan="0"

注: 必须设置 persistSourceRanges="true"

Name
Age
Home Telephone
Address
Alice360574-8608186918212951391NingBo
Mary220580-86083878ZhouShan
John0580-86081257ZhouShan
复制代码
显示代码

表格数据源变更

表格数据源变更

为了提升表格性能, 表格数据源在渲染之初进行了缓存,后续进行新增或删除,可能并不会按新数据源渲染。我们需要 STable update API 通知表格更新数据源,并进行渲染

序号
姓名
年龄
爱好
操作
1Alice36骑车
2Mary22游泳
3John27音乐
复制代码
显示代码

固定表头和某列

固定表头和某列

通过 sticky 可以配置表格 theadsummarys(tfoot) 置顶/置底吸附固定,同时通过设置 column.fixed 来固定某列或者某些列。

第一种 (表格 Footer 横向滚动)
第二种 (表格 Footer 横向固定)
复制代码
显示代码

随页面滚动固定表头

随页面滚动固定表头

sticky topHeader 设置 Table thead 页面置顶吸附

sticky bottomFooter 设置 Table tfoot 页面置底吸附

注: STable 借助于一个原生 Table + CSS (position: sticky) 只能对一个滚动区域进行吸附固定

复制代码
显示代码

表格单元格编辑

表格单元格编辑

表格单元格编辑,主要借助 SEditCell 实现,了解更多 -> SEditCell

输入框
选择框
文本框
操作
输入值
Alva
输入文本
复制代码
显示代码

表格单选/多选

表格单选/多选

表格单选和多选 可以通过 selectedRowMode 设置为 CheckboxRadio 来启用,同时在进行切换分页时可以使用 preserveSelectedRowKeys 来保持之前的选中项,如果有禁用 Checkbox / Radio 的需求,则可以使用 customBodyerRowStates 来实现

preserve
模式
Checkbox
手动选择
Name
Age
Like
Email

暂无数据

  • 第 0-0 条 (共 0 条)
  • 1
复制代码
显示代码

表格树形数据

表格树形数据

STable 支持树形数据的展示, 当数据中有 children 字段时会自动展示为树形表格。

rowSelectedStrictly="true" (默认 true), 说明父子数据 CheckBox 状态不再关联
treeKey="list" (默认 children), 使用树形数据 list 字段作为渲染子节点依据

rowSelectedStrictly
Name
Age
Email
Alice
36alice@gmail.com
Mary
22mary@gmail.com
Mary-1
22mary@gmail.com
Mary-2
22mary@gmail.com
Mary-2-1
22mary@gmail.com
Mary-2-2
22mary@gmail.com
Mary-2-3
22mary@gmail.com
Mary-3
22mary@gmail.com
John
27john@gmail.com
Tim
19tim@gmail.com
David
24david@gmail.com
复制代码
显示代码

表格行展开项

表格行展开项

当表格内容不能完全展示时,STable 支持通过 expander 卡槽,定义表格行展开项的内容。如果有禁用行展开项的需求,则可以使用在 customBodyerRowStates 中实现。

Name
Age
Email
Alice
36alice@gmail.com
这里显示 Alice 用户信息: 年龄 36, 邮箱 alice@gmail.com。
Mary
22mary@gmail.com
John
27john@gmail.com
Tim
19tim@gmail.com
David
24david@gmail.com
复制代码
显示代码

API

Props

STable Props

参数说明类型默认值
size表格大小STableSize-
rowKey表格行 key 的字段STableRowKey-
treeKey表格 树形结构 的字段STableTreeKey'children'
border设置边框。分组表头时 border="true"booleanfalse
sticky设置表格粘性头部和滚动条,详见下方 STable StickySTableStickyType-
scroll表格是否可滚动,也可以指定滚动区域的宽高,详见 STable ScrollSTableScrollType-
columns (v-model)表格列的配置描述, 详见 STable ColumnSTableColumnType[]-
sources (v-model)表格数据源STableRecordType[]-
summarys (v-model)表格总结栏数据源 (tfoot)STableRecordType[]-
paginate (v-model)表格分页配置,详见 STable PaginateSTablePartPaginate-
loadData表格数据远程加载,响应数据预处理,详见 ResponserSTableLoadSource-
tableLayout表格 CSS table-layout 样式'auto' | 'fixed'-
persistSourceRanges保持数据渲染,即使不在可视区域内。Array<number[]> | booleanfalse
customHeaderRowAttrs设置表格 thead 行属性 (HTMLAttributes)STableCustom
HeaderRowAttrs
-
customBodyerRowAttrs设置表格 tbody 行属性 (HTMLAttributes)STableCustom
BodyerRowAttrs
-
customFooterRowAttrs设置表格 tfoot 行属性 (HTMLAttributes)STableCustom
FooterRowAttrs
-
customBodyerRowStates设置表格 tbody 行 State (例如,禁用行展开、禁用选项)STableCustom
BodyerRowStates
-
customHeaderCellRender自定义 thead 单元格渲染STableHeader
CellRender
-
customBodyerCellRender自定义 tbody 单元格渲染STableBodyer
CellRender
-
customFooterCellRender自定义 tfoot 单元格渲染STableFooter
CellRender
-
defaultColumnSorters设置默认的列排序STableSorterType[][]
defaultSelectAllRows默认选择所有表格行 key (Checkbox)booleanfalse
defaultExpandAllRows默认展开所有表格行 key (Expanded)booleanfalse
preserveSelectedRowKeys分页渲染数据,是否记录之前选择的 Checkbox/Radio,以便后续恢复booleanfalse
preserveExpandedRowKeys分页渲染数据,是否记录之前展开的行,以便后续恢复booleanfalse
columnPresetResizable是否允许表格列拉伸调整宽度booleanfalse
columnPresetDraggable是否允许表格列拖拽,调整表格列顺序booleanfalse
columnSorterMultiple是否允许表格多列排序booleanfalse
columnPresetSettings是否启用表格列筛选配置booleanfalse
rowSelectedStrictly表格树形数据,父子数据 CheckBox 状态是否不关联 (默认不关联)booleantrue
rowExpandedByClick当表格存在展开行时,是否允许点击行展开其展开行booleanfalse
cellMegreNormalize当表格存在合并单元格时,可以帮助我们自动适配相邻的单元格情况booleantrue
expandIndentSize因展开行图标,每一层的缩紧样式number-
selectIndentSize因选择项图标,每一层的缩紧样式number-
selectedRowMode是否启用选择框 (Checkbox / Radio)'Radio' | 'Checkbox' | 'None''None '
selectedRowKeys
(v-model)
记录表格已选择的行 keySTableKey[][]
expandedRowKeys
(v-model)
记录表格已展开的行 keySTableKey[][]
tHeaderThStyle设置表格 thead th 样式Record<string, any>{}
tBodyerTdStyle设置表格 tbody td 样式Record<string, any>{}
tFooterTdStyle设置表格 tfoot td 样式Record<string, any>{}
expandTdStyle设置表格展开行 expand td 样式Record<string, any>{}
paginateStyle设置表格分页容器样式Record<string, any>{}
loadOnScroll仅在 paginate.mode="local" 启用,滚动加载分页数据booleanfalse
bodyMinRows表格最小行数,值为 true 时,与分页 pageSize 保持一致boolean | numberfalse
showHeader显示表格 head 部分 (thead)booleantrue
showBodyer显示表格 body 部分 (tbody)booleantrue
showFooter显示表格 foot 部分 (tfoot)booleantrue
immediate是否立刻调用 loadData, 加载远程数据booleantrue
loadinger是否在 UI 上隐藏 loading, 即使 loading 值为 truebooleantrue
loading (v-model)表格是否正在加载数据中booleanfalse
virtual表格启用虚拟列表,提升性能 (目前尚未启用)booleantrue

STable Sticky

参数说明类型默认值
topHeader启用表格 thead 置顶吸附boolean | numbertrue
leftFooter当表格某些列左侧固定时,滚动时 tfoot 是否也随之固定boolean | numbertrue
rightFooter当表格某些列右侧固定时,滚动时 tfoot 是否也随之固定boolean | numbertrue
bottomFooter启用表格 tfoot 置底吸附boolean | numbertrue
bottomScrollbar当表格底部超出可视区域时,是否显示横向滚动条booleanfalse

STable Scroll

参数说明类型默认值
x设置横向滚动,指定滚动区域的宽number | string | falsefalse
y设置纵向滚动,指定滚动区域的高number | string | falsefalse
overflow设置滚动区域 overflow 属性'hidden' | 'visible' | 'auto'-
scrollToFirstOffsetX表格滚动 x轴 横向方向偏移量number-
scrollToFirstOffsetY表格滚动 y轴 纵向方向偏移量number-
scrollToFirstTargetX指定表格滚动 x轴 初始位置number0
scrollToFirstTargetY指定表格滚动 y轴 初始位置number0
scrollToFirstXOnChange分页/排序/筛选,是否滚动到初始位置booleantrue
scrollToFirstYOnChange分页/排序/筛选,是否滚动到初始位置booleantrue
getScrollResizeContainer指定滚动区域 (祖先节点), 一般无需指定,自动获取() => HTMLElement-

STable Column

参数说明类型默认值
key表格列 key,如果已经设置了唯一的 dataIndex,可以忽略这个属性string-
title表格列 title 标题string-
dataIndex列数据在数据项中对应的路径string | string[]-
children表格嵌套的列选项STablePartColumnType[]-
align设置表格列的对齐方式'left' | 'center' | 'right'-
fixed设置表格列是否固定及其方式'left' | 'right' | false-
width表格列宽度number-
minWidth表格列最小宽度, 影响列 resizing (最小限制)number-
maxWidth表格列最大宽度, 影响列 resizing (最大限制)number-
settings表格列筛选配置项中该列的预设值{ checkbox?: boolean;
disabled?: boolean; }
-
resizable配置表格该列 resizable?,覆盖 props.columnPresetResizableboolean-
ellipsis表格单元格内容过长,自动省略booleanfalse
tooltip表格单元格内容过长,自动省略,且 tooltip 提示booleanfalse
colSpan表格单元格多列合并number-
rowSpan表格单元格多行合并number-
sorter表格该列是否启用排序booleanfalse
sorterField表格该列排序时使用的字段,默认从 dataIndex 获取string-
expandIcon如果有树形数据或展开行内容,是否在表格该列显示 Expand Iconboolean-
customHeaderCellRender自定义 thead 单元格渲染,覆盖 props.customHeaderCellRenderSTableHeaderCellRender-
customBodyerCellRender自定义 tbody 单元格渲染,覆盖 props.customBodyerCellRenderSTableBodyerCellRender-
customFooterCellRender自定义 tfoot 单元格渲染,覆盖 props.customFooterCellRenderSTableFooterCellRender-

STable Paginate

参数说明类型默认值
hideOnSinglePage只有一页时是否隐藏分页器booleanfalse
defaultPageSize默认的每页条数number20
pageSizeOptions指定每页可以显示多少条string[]-
showSizeChanger是否展示 pageSize 切换器boolean-
showQuickJumper是否可以快速跳转至某页booleanfalse
showLessItems是否显示较少页面内容booleanfalse
loadTotalSize分段加载数据的总条目 (仅 mode="local")number-
loadTotalPage分段加载数据的总页数 (仅 mode="local")number-
loadPageSize分段加载数据的每页条目 (仅 mode="local")number-
loadPageNo分段加载的当前最新页 (仅 mode="local")number-
showTotal用于显示数据总量和当前数据顺序boolean | (total, range) => void-
totalSize分页数据总条目number-
totalPage分页数据总页数number-
pageSize分页数据每页条目number-
pageNo分页数据当前页number-
disabled是否禁用表格分页booleanfalse
visible是否显示表格分页booleanfalse
simple是否显示为简单分页booleanfalse
fixed表格分页在纵轴方向于底部吸附固定。boolean-
mode分页模式,默认远程数据。(local 尚未启用)'local' | 'remote''remote'

Emits

事件说明类型
pageSizeChangepageSize 变化的回调(pageNo: number, pageSize: number) => true
pageChange页码或 pageSize 改变的回调(pageNo: number, pageSize: number) => true
expand表格行展开时触发(keys: Array<STableKey>, records: Array<STableRecordType | null>) => true
select表格行 Checkbox 或 Radio 选项变换时触发(keys: Array<STableKey>, records: Array<STableRecordType | null>) => true
sorter表格列排序变化时(values: Array<STableSorterType>) => true

Slots

插槽名插槽说明插槽参数
expander表格展开行内容 卡槽record, rowIndex, groupIndex, groupLevel, groupIndexs, globalIndex
headerCell表格 thead 单元格 卡槽title, column, rowIndex, colIndex, paginater
bodyerCell表格 tbody 单元格 卡槽value, record, rowIndex, groupIndex, groupLevel, groupIndexs,
globalIndex, column, colIndex, paginater
footerCell表格 tfoot 单元格 卡槽value, record, rowIndex, column, colIndex, sources, paginater

Expose

属性/方法名说明描述类型
reload表格重新加载当前数据(delay?: Promise<void> | boolean | number, force?: boolean) => Promise<void>
refresh表格刷新加载第一页数据(delay?: Promise<void> | boolean | number, force?: boolean) => Promise<void>
select表格手动选择指定选项 (Checkbox / Radio)(keys: STableKey[]) => void
expand表格手动展开某些行 (仅对有展开内容或树形数据有效)(keys: STableKey[]) => void
update手动更新并重新渲染表格(clean?: boolean) => void

Definer

定义说明
tableSorterDefiner定义 Props.defaultColumnSorters 时的 TypeScript 提示和校验
tableScrollDefiner定义 Props.scroll 时的 TypeScript 提示和校验
tableStickyDefiner定义 Props.sticky 时的 TypeScript 提示和校验
tableSourcesDefiner定义 Props.sources 时的 TypeScript 提示和校验
tableSummarysDefiner定义 Props.summarys 时的 TypeScript 提示和校验
tableColumnsDefiner定义 Props.columns 时的 TypeScript 提示和校验
tablePaginateDefiner定义 Props.paginate 时的 TypeScript 提示和校验
tableLoadDataDefiner定义 Props.loadData 时的 TypeScript 提示和校验
tableResponserDefiner定义 Props.loadData 数据源的预处理,详见 Responser
tableCustomHeaderRowAttrsDefiner定义 Props.customHeaderRowAttrs 时的 TypeScript 提示和校
tableCustomBodyerRowAttrsDefiner定义 Props.customBodyerRowAttrs 时的 TypeScript 提示和校
tableCustomFooterRowAttrsDefiner定义 Props.customFooterRowAttrs 时的 TypeScript 提示和校
tableCustomBodyerRowStatesDefiner定义 Props.customBodyerRowStates 时的 TypeScript 提示和校
tableCustomHeaderCellRenderDefiner定义 Props.customHeaderCellRender 时的 TypeScript 提示和校
tableCustomBodyerCellRenderDefiner定义 Props.customBodyerCellRender 时的 TypeScript 提示和校验
tableCustomFooterCellRenderDefiner定义 Props.customFooterCellRender 时的 TypeScript 提示和校验
tableEmitSorterDefiner定义 Emits.sorter 时的 TypeScript 提示和校验
tableEmitSelectDefiner定义 Emits.select 时的 TypeScript 提示和校验
tableEmitExpandDefiner定义 Emits.expand 时的 TypeScript 提示和校验
tableEmitPageChangeDefiner定义 Emits.pageChange 时的 TypeScript 提示和校验
tableEmitPageSizeChangeDefiner定义 Emits.pageSizeChange 时的 TypeScript 提示和校验

Responser

typescript
/**
 * STable 默认支持如下响应数据
 *
 *    1. response: {
 *         result: {
 *           data: [], //数据源
 *           pageNo: 1, // 当前页数
 *           totalSize: 0, // 数据总条目
 *         }
 *       }
 *
 *
 *    2. response: {
 *         result: [] //数据源,没有分页
 *       }
 *
 *
 *    3. response: [] //数据源,没有分页
 *
 */
typescript
/**
 * 假设基于业务需求,STable 需要加载如下数据,则我们可以在 main.ts 全局自定义
 *
 *    response: {
 *      success: 'ok', // 'ok' 业务成功状态
 *      result: {
 *        pageSource: [...], //数据源
 *        pageCurrentNum: 1, // 当前页数
 *        pageTotalSize: 10, // 数据总条目
 *      }
 *    }
 */

tableResponserDefiner.interceptor = (response: any) => {
  if (response.success !== "ok") {
    return Promise.reject(response);
  }

  return {
    data: response.result.pageSource, // 数据源 -> 'data' 字段
    pageNo: response.result.pageCurrentNum, // 当前页数 -> 'pageNo' 字段
    totalSize: response.result.pageTotalSize, // 数据总条目 -> 'totalSize' 字段
  };
};

基于 MIT 许可发布