模板 / 小部件输出的数据表:1px 外框、表头 surface-2 底 + 小号大写 + 2px 粗底线、悬停行、数字列右对齐等宽。编辑在正文里写的表格用 .wikitable(皮肤另有一套,支持竖排行头),不用它。
基本
Vue 版是 Naive UI n-data-table 的精简版 AkDataTable:columns 定义列(key 取 row[key],title 表头,num 数字列),data 是行,row-key 给行标识。striped 斑马纹;row-class-name 给行加类名,is-selected 是淡主色底(当前阶段 / 选中行)。
排序 · 自定义单元格
列写 sorter: true(按 row[key] 比较:数字比大小、文字按中文排序)或者给比较函数,表头就能点:升序 → 降序 → 原顺序。排序状态是 v-model({ key, order },order 取 aria-sort 的值 ascending / descending),当前排序列标 aria-sort,箭头由 CSS 画。
单元格要自定义时:SFC 里用 #cell-<列 key>="{ row, index, value }" 插槽;也可以给列写 render(row, index)(同 Naive)返回 vnode。插槽优先。
紧凑 · 空数据
compact 收紧格内边距(4 / 8)。没有数据时整行显示 #empty 插槽(默认「暂无数据」)。
可访问性
- 可排序列的表头里是一枚
<button>(WAI-ARIA Sortable Table):Tab 可达、Enter / 空格切换;长相就是表头文字本身。aria-sort只标在当前排序的列上。 - 页面上没有标题说明这张表时,用
label给表格一个可访问名。
Vue API
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
columns必填 | DataTableColumn<T>[] | — | 列定义:key 取值字段 · title 表头 · num 数字列 · sorter 可排序 · render 自定义单元格 · className |
data必填 | T[] | — | 行数据 |
rowKey | ((row: T) => string | number) | — | 行的唯一标识(同 Naive 的 row-key);不写用原始下标 |
rowClassName | string | ((row: T, index: number) => string | undefined) | — | 行的额外类名(同 Naive 的 row-class-name):给当前行 / 选中行加 is-selected(淡主色底) |
striped | boolean | false | 斑马纹 |
compact | boolean | false | 紧凑:格内边距 4 / 8 |
label | string | — | 表格的可访问名(aria-label);上方已有标题说明这张表时可以不写 |
modelValue | DataTableSort | null | null | 排序状态 { key, order: "ascending" | "descending" },null = 原顺序;点可排序的表头依次切换 升序 → 降序 → 原顺序 |
| 事件 | 参数 | 说明 |
|---|---|---|
update:modelValue | [value: DataTableSort | null] |
| 插槽 | 说明 |
|---|---|
empty | 没有数据时整行显示的内容(默认「暂无数据」) |
列定义 DataTableColumn<T>:
| 字段 | 类型 | 说明 |
|---|---|---|
key | string | 列标识,也是取值字段(row[key]);#cell-<key> 插槽按它找 |
title | string | 表头文字 |
num | boolean | 数字列:右对齐 + 等宽数字(.num) |
sorter | boolean | (a, b) => number | 可排序:true 按 row[key] 比较,或给升序时的比较函数 |
render | (row, index) => VNodeChild | 自定义单元格(同 Naive) |
className | string | 这一列 th / td 的额外类名 |
CSS 实现
不需要排序时直接写 <table class="ak-table"> 就行(Vue SFC 里也可以,不必用 AkDataTable):.ak-table--striped 斑马纹、.ak-table--compact 紧凑、th / td 加 .num 是数字列、行加 .is-selected 高亮。th[aria-sort="ascending|descending"] 画 ↑ / ↓——模板输出静态排好序的表时照样可以标。
| 块 | 元素 __ | 修饰 -- |
|---|
