Skip to content

Table 表格

用于展示结构化数据的桌面级数据表格,支持排序、斑马纹、自定义列渲染。

基本用法

通过 columns 定义列,data 传入数据。

姓名年龄城市
张三28北京
李四32上海
王五24广州
赵六35深圳
vue
<script setup>
const columns = [
  { label: '姓名', key: 'name', sortable: true },
  { label: '年龄', key: 'age', align: 'right' },
  { label: '城市', key: 'city' }
]

const data = [
  { id: 1, name: '张三', age: 28, city: '北京' },
  { id: 2, name: '李四', age: 32, city: '上海' },
  { id: 3, name: '王五', age: 24, city: '广州' },
  { id: 4, name: '赵六', age: 35, city: '深圳' }
]
</script>

<ATable :columns="columns" :data="data" />

斑马纹

设置 stripe 启用交替行背景色。

姓名年龄城市
张三28北京
李四32上海
王五24广州
赵六35深圳
vue
<ATable :columns="columns" :data="data" stripe />

紧凑模式

设置 size="sm" 启用紧凑模式,行高更小,适合桌面端高密度展示。

姓名年龄城市
张三28北京
李四32上海
王五24广州
赵六35深圳
vue
<ATable :columns="columns" :data="data" size="sm" />

边框模式

设置 bordered 显示列边框。

姓名年龄城市
张三28北京
李四32上海
王五24广州
赵六35深圳
vue
<ATable :columns="columns" :data="data" bordered />

自定义单元格

使用具名插槽自定义列渲染。

姓名年龄城市
张三28 岁北京
李四32 岁上海
王五24 岁广州
赵六35 岁深圳
vue
<ATable :columns="columns" :data="data">
  <template #name="{ row }">
    <strong>{{ row.name }}</strong>
  </template>
  <template #age="{ value }">
    <span style="color: var(--color-accent);">{{ value }} 岁</span>
  </template>
</ATable>

加载中

设置 loading 显示加载遮罩。

姓名年龄城市
张三28北京
李四32上海
王五24广州
赵六35深圳
vue
<ATable :columns="columns" :data="data" loading />

API

Props

名称类型默认值说明
columnsTableColumn[]列定义
dataRecord<string, any>[]数据源
stripebooleanfalse斑马纹
borderedbooleanfalse显示边框
size'sm' | 'md''md'尺寸
loadingbooleanfalse加载状态
rowKeystring'id'行唯一键字段

Column 定义

属性类型说明
labelstring列标题
keystring字段名,也用于具名插槽
sortableboolean是否可排序
widthstring列宽
align'left' | 'center' | 'right'对齐方式

Slots

column.key 为名的具名插槽,接收 { row, value } 作用域。

Events

名称参数说明
sortChange{ key, order }排序变化时触发

交互特性

  • 点击表头排序,三态循环(asc → desc → 无)
  • 排序指示器图标随状态变色
  • 行 hover 高亮
  • 加载状态显示旋转遮罩
  • 空数据友好提示
  • 紧凑模式适合高密度桌面场景

MIT License