Table 设计文档
表格:列定义驱动渲染,三态排序(升/降/无)、客户端分页、行选择(含半选 indeterminate);sortState / rowSelection.selectedRowKeys / pagination.currentPage 受控不回写,仅经 onSortChange / onChange 通知。复用 @chenzy-design/core 纯函数算法与 Pagination 组件。支持行展开:expandedRowRender / rowExpandable / expandedRowKeys / defaultExpandedRowKeys / onExpand / onExpandedRowsChange 均为顶层 prop(对齐 Semi Table.tsx 单一顶层架构,无 expandable/tree 嵌套状态对象)。固定列 fixed、列筛选 filters/onFilter、列宽拖拽 resizable(本地覆盖宽度不写回 columns)。树形数据 tree=true(行含 childrenRecordName 字段嵌套,第一列展开三角+缩进,排序/分页作用于顶层行,扁平化用 core flattenTreeRows 纯函数);与 expandedRowRender 共用同一份 expandedRowKeys 状态与展开图标机制,受控展开 keys 不回写,仅经 onExpand(单行)/onExpandedRowsChange(全量展开记录数组) 通知。树形行选择父子联动 rowSelection.checkStrictly(默认 false 勾父连带后代+半选,true 父子独立;联动用 core conductRows/toggleRowCheck 纯函数)。行虚拟滚动 virtualized:仅渲染视口内行切片(复用 core fixedRange),首尾 padding spacer tr 撑总高,保持原生 table 语义;thead sticky 固定顶部;与 pagination 互斥(虚拟时忽略分页)。
← API 文档使用建议
表格:列定义驱动渲染,三态排序(升/降/无)、客户端分页、行选择(含半选 indeterminate);sortState / rowSelection.selectedRowKeys / pagination.currentPage 受控不回写,仅经 onSortChange / onChange 通知。复用 @chenzy-design/core 纯函数算法与 Pagination 组件。支持行展开:expandedRowRender / rowExpandable / expandedRowKeys / defaultExpandedRowKeys / onExpand / onExpandedRowsChange 均为顶层 prop(对齐 Semi Table.tsx 单一顶层架构,无 expandable/tree 嵌套状态对象)。固定列 fixed、列筛选 filters/onFilter、列宽拖拽 resizable(本地覆盖宽度不写回 columns)。树形数据 tree=true(行含 childrenRecordName 字段嵌套,第一列展开三角+缩进,排序/分页作用于顶层行,扁平化用 core flattenTreeRows 纯函数);与 expandedRowRender 共用同一份 expandedRowKeys 状态与展开图标机制,受控展开 keys 不回写,仅经 onExpand(单行)/onExpandedRowsChange(全量展开记录数组) 通知。树形行选择父子联动 rowSelection.checkStrictly(默认 false 勾父连带后代+半选,true 父子独立;联动用 core conductRows/toggleRowCheck 纯函数)。行虚拟滚动 virtualized:仅渲染视口内行切片(复用 core fixedRange),首尾 padding spacer tr 撑总高,保持原生 table 语义;thead sticky 固定顶部;与 pagination 互斥(虚拟时忽略分页)。
Accessibility
- 对齐 Semi:role 静态标注为 grid 或 treegrid(分组 groupBy / 展开行 expandedRowRender / 树形 tree 任一存在时 treegrid,否则 grid),不因交互能力(排序/筛选/行选择等)与否切换。table 静态 aria-rowcount(顶层数据源行数)/aria-colcount(叶子列数);表头行 role=row + aria-rowindex,表头格 role=columnheader + aria-colindex;数据行 role=row + aria-rowindex,数据格 role=gridcell + aria-colindex(无 aria-level,树形层级仅体现为视觉缩进);展开按钮/分组标题行自带 aria-expanded。无方向键漫游、无 roving tabindex(Semi 无此实现,本库不再自造超集,浏览器默认 Tab 序逐格移动)。可排序列 aria-sort(ascending/descending/none);行选择原生 checkbox,全选 aria-label「全选」、行选「选择此行」,半选经 attachment 命令式设 input.indeterminate(只写属性、不读几何、无响应式循环);焦点环 --cd-focus-ring;reduced-motion 关闭 spinner 与图标过渡。
设计变量
变量 | 默认值 | 用法 |
|---|---|---|
| --cd-color-table-bg-default | var(--cd-color-bg-1) | 表格固定列及吸顶表头背景颜色 |
| --cd-color-table-body-bg-default | var(--cd-color-bg-1) | 表格行背景颜色 - 默认态 |
| --cd-color-table-body-bg-hover | var(--cd-color-fill-0) | 表格行背景颜色 - 悬浮态 |
| --cd-color-table-border-default | var(--cd-color-border) | 表格描边颜色 |
| --cd-color-table-cell-bg-hover | var(--cd-color-bg-0) | 让表格在 hover 时正确显示 body-bg-hover 颜色,如无必要不要修改 |
| --cd-color-table-disabled-bg-default | var(--cd-color-disabled-bg) | 表格禁用态背景颜色 |
| --cd-color-table-expanded-bg-default | transparent | 表格展开行图标容器背景颜色 - 默认 |
| --cd-color-table-expanded-icon-default | var(--cd-color-text-2) | 表格展开行图标颜色 - 默认 |
| --cd-color-table-filter-on-text-default | var(--cd-color-primary) | 表格过滤按钮颜色 - 激活态 |
| --cd-color-table-filter-text-default | var(--cd-color-text-2) | 表格过滤按钮颜色 - 默认态 |
- 1
- 2
- 3