Skip to content
通用组件

数据表Table

模板 / 小部件用的数据表(不是正文 wikitable):斑马纹、紧凑、数字列、可排序表头。

Vue
实验import { AkDataTable } from "@mooncellwiki/prts-design-vue"Storybook ↗源码 ↗

模板 / 小部件输出的数据表: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);不写用原始下标
rowClassNamestring | ((row: T, index: number) => string | undefined)—行的额外类名(同 Naive 的 row-class-name):给当前行 / 选中行加 is-selected(淡主色底)
stripedbooleanfalse斑马纹
compactbooleanfalse紧凑:格内边距 4 / 8
labelstring—表格的可访问名(aria-label);上方已有标题说明这张表时可以不写
modelValueDataTableSort | nullnull排序状态 { key, order: "ascending" | "descending" },null = 原顺序;点可排序的表头依次切换 升序 → 降序 → 原顺序
事件参数说明
update:modelValue[value: DataTableSort | null]
插槽说明
empty没有数据时整行显示的内容(默认「暂无数据」)

列定义 DataTableColumn<T>:

字段类型说明
keystring列标识,也是取值字段(row[key]);#cell-<key> 插槽按它找
titlestring表头文字
numboolean数字列:右对齐 + 等宽数字(.num)
sorterboolean | (a, b) => number可排序:true 按 row[key] 比较,或给升序时的比较函数
render(row, index) => VNodeChild自定义单元格(同 Naive)
classNamestring这一列 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"] 画 ↑ / ↓——模板输出静态排好序的表时照样可以标。

块元素 __修饰 --

文本 CC BY-NC-SA 4.0 · 游戏素材版权归鹰角网络所有