Skip to content

Table 表格

用于以行列表格形式展示结构化数据,支持排序、行选中、多选与加载态,可与分页组件联动。

columns / data 支持 attribute 声明式通道:直接写 JSON 字符串即可渲染表头与数据行(非法 JSON 回退空态),同时保留 property 通道(赋值数组对象,property 优先),可被 SSR 快照序列化。

基础用法(含排序)

可排序列

点击可排列表头在升序 / 降序 / 取消之间循环。

密度档位

size:small / medium(默认)/ large

档位只改单元格 padding 与字号的默认值,全部走 CSS 变量:宿主可直接用 --oas-table-cell-padding-block / --oas-table-cell-padding-inline / --oas-table-font-size 覆盖(优先级高于档位)。非法值回落 medium 并告警。row-height 与档位正交:虚拟滚动等定高场景的行高由 row-height 决定,不受档位影响。

列对齐与宽度

对齐与宽度

受控排序与行选中

初始排序与选中

sort-key / sort-order 控制排序,selected 高亮选中行(点击行可切换选中)。

多选

行多选(checkable)

表头复选框一键全选/取消,行复选框单独勾选;选中变化派发 oas-check

与分页联动

表格 + 分页

表格数据按每页 5 条切片,翻页时通过 oas-change 事件更新 data 属性重新渲染。

固定列

左侧固定列

左右固定列 + 表头吸顶

列配置中 fixed: 'left' | 'right' 将该列表头与单元格设为 position: stickyleft / right 偏移按列宽自动累加),其余列可横向滚动;表头始终吸顶。

行内编辑

双击单元格编辑(含操作列)

最近编辑:

设置 editable 开启行内编辑,列配置 editable: true 标记可编辑列(editor: 'input' 文本输入 / editor: 'select' 下拉选择 + editOptions),actions: true 渲染操作列(编辑/保存/取消按钮)。双击单元格或聚焦后按 Enter / F2 进入编辑:Enter 或失焦提交、Esc 取消;提交派发 oas-editdetail: { rowIndex, key, column, value }),取消派发 oas-edit-cancel。空值提交默认还原旧值(非破坏)。

受控编辑

受控编辑(edit-controlled)

该表格为受控模式:组件提交时不自动回写 data,由宿主监听 oas-edit 后自行更新。

edit-controlled 为受控编辑:提交时不自动回写 data,仅派发 oas-edit;宿主监听后自行更新 data(示例见下方脚本)。

吸顶行

表头 + 前 N 行吸顶

sticky-rows="N" 指定前 N 行吸顶于表头下方(配合滚动容器:设置 height 后表体可滚动);与固定列(fixed: 'left' | 'right')共存互不冲突。

大数据量(虚拟滚动)

万级数据虚拟滚动

设置 height 开启虚拟滚动(搭配 row-height 定高),表格只渲染可见窗口内的行,配合固定列与排序/多选使用;滚动派发 oas-scroll

斑马纹与边框

斑马纹(stripe)

完整边框(bordered)

设置 stripe 交替奇数/偶数行底色,设置 bordered 为单元格绘制完整网格边框。

合计行

合计行(summary)

summary 属性为 JSON 数组 [{ key, type: 'sum' | 'avg' | 'count', label? }],表尾渲染合计行:label 显示在首个未聚合列,各聚合值显示在对应列;也支持在列配置上直接写 summary: 'sum' | 'avg' | 'count'

可展开行

可展开行(expand 字段)

行数据存在非空 expand 字段时,表尾出现展开列,点击行尾按钮展开一整行展示自定义内容;展开状态保存在 expanded 属性(逗号分隔的 key 集合),切换时派发 oas-expand

受控展开(expanded 属性)

expanded 为受控属性(逗号分隔的 key 集合):预置展开行在首次渲染即展开,宿主可随时增删 key 驱动展开状态(树形父行与可展开行共用)。

树形数据

树形数据(children)

行数据存在 children 数组时按树形渲染:父行首列出现展开按钮,子行按层级缩进;展开状态同样保存在 expanded 属性,切换时派发 oas-expand

加载态

加载态

模拟加载 2 秒

设置 loading 属性后表头保留、数据区显示加载占位行;移除属性即恢复数据。

空态

空数据

自定义空态文案

事件

排序与点击事件

排序: · 点击行:

API

属性

属性说明类型默认值
bordered完整边框:单元格网格描边(外框由组件自带)
checkable复选框多选开关boolean
columns列配置 [{ key, title, sortable?, width?, align?, fixed?, render?, summary?, editable?, editor?, editOptions?, actions? }],JSON 字符串(attribute 声明式通道;property 赋值优先)TableColumn[] | string[]
data行数据 [{ [key]: value, children?, expand? }],JSON 字符串(attribute 声明式通道;property 赋值优先)Array<Record<string, unknown>> | string[]
edit-controlled受控编辑:提交时不自动回写 data,仅派发 oas-edit,由宿主监听后自行更新 databoolean
editable行内编辑开关(需配合列配置 editable: true;操作列 actions: true 同理)boolean
empty-text空态文案
expanded已展开行 key 集合(逗号分隔;树形父行/可展开行共用)string
height虚拟滚动视口高度(px);设置后仅渲染可见窗口行 + 首尾占位行string320
loading加载态:数据区显示加载占位行(表头保留)boolean
row-height虚拟滚动每行固定高度(px)string40
row-key行唯一键字段stringkey
selected选中行 key 集合(逗号分隔)string
size密度档位:small / medium(默认)/ large——只改单元格 padding 与字号默认值(全走 CSS 变量,可用 --oas-table-cell-padding-block / --oas-table-cell-padding-inline / --oas-table-font-size 覆盖,优先级高于档位);非法值回落 medium 并告警;与 row-height 正交stringmedium
sort-key受控排序;sort-orderasc / desc / 空string
sort-order受控排序;sort-orderasc / desc / 空SortOrder
sticky-rows吸顶行数(数字 N):前 N 行吸顶于表头下方(配合滚动容器与固定列共存)string
stripe斑马纹:奇数/偶数行交替浅底色boolean
summary合计配置 [{ key, type: 'sum'|'avg'|'count', label? }],JSON 字符串string

事件

事件说明
oas-check复选框选中变化,detail: { keys: string[] }
oas-edit行内编辑提交(Enter/失焦/操作列保存),detail: { rowIndex, key, column, value };受控模式组件不回写 data
oas-edit-cancel行内编辑取消(Esc/操作列取消/空值提交还原),detail: { rowIndex, key, column, value }(value 为原值)
oas-expand行展开/收起(树形子行或可展开内容行),detail: { key, expanded }
oas-row-click点击行(非 checkable 时同时切换选中),detail: { row, key }
oas-scroll虚拟滚动滚动事件(rAF 节流),detail: { scrollTop, start, end }
oas-sort-change排序变化,detail: { key, order: 'asc' | 'desc' | '' }

说明:columns.render 为函数类型,仅支持在 JS 侧构造后通过属性整体赋值,无法用 JSON 字符串表达;fixed 列建议显式声明 width(未声明时按 100px 兜底计算 sticky 偏移)。合计也可在列上直接写 summary: 'sum' | 'avg' | 'count'children(树形子行)与 expand(可展开行内容)均为行数据字段。

加载占位行部件为 ::part(loading-row),合计行 ::part(summary-row)、展开内容行 ::part(expand-row),均可单独定制样式。

基于 MIT OR Apache-2.0 双许可发布