Skip to content

Table 表格 ​

声明式数据表格,支持排序、分页、固定列、行选择与自定义单元格渲染。

基础用法 ​

vue
<script setup lang="ts">
const data = [
  { name: '张三', age: 18, city: '北京' },
  { name: '李四', age: 20, city: '上海' },
]
const columns = [
  { prop: 'name', label: '姓名' },
  { prop: 'age', label: '年龄' },
  { prop: 'city', label: '城市' },
]
</script>

<template>
  <KbTable :data="data" :columns="columns" stripe border />
</template>
姓名年龄城市
张三18北京
李四20上海
王五22广州

排序与分页 ​

列上声明 sortable: true 打开内置排序(升 → 降 → 取消三态);pageSize 大于 0 时启用分页。

姓名评分(可排序)城市
用户 10北京
用户 237上海
用户 374广州
用户 411成都
用户 548杭州
用户 685北京
用户 722上海
用户 859广州
用户 996成都
用户 1033杭州

当前第 1 页

服务端排序场景用 sortable: 'custom',组件只派发 sort-change,不干预数据顺序。

服务端分页则再传一个 total(接口返回的总条数):此时 data 就是当前页数据,组件不再做切片, 分页器按 total / pageSize 计算页数。配合 sortable: 'custom' 即可完成「翻页/排序都回后端取数」:

vue
<KbTable
  :data="rows"
  :columns="columns"
  :total="total"
  :page-size="20"
  :current-page="page"
  row-key="id"
  @sort-change="onSort"
  @update:current-page="onPageChange"
/>
vue
<template>
  <KbTable :data="rows" :columns="columns" @sort-change="fetchList" />
</template>

固定列 ​

给列声明 fixed: 'left' 或 fixed: 'right',并务必指定 width——固定偏移量由列宽累加得出。列宽总和超出容器时自动出现横向滚动。

ID姓名公司邮箱城市角色
1用户 1星尘科技user1@example.com北京管理员
2用户 2云图数据user2@example.com上海编辑
3用户 3南栀软件user3@example.com广州访客
4用户 4澜川网络user4@example.com成都管理员
5用户 5星尘科技user5@example.com杭州编辑
6用户 6云图数据user6@example.com北京访客

行选择 ​

打开 selection 并指定 row-key(行唯一键字段)。表头复选框支持全选与半选态,全选作用于当前页。

姓名年龄城市
张三18北京
李四20上海
王五22广州

已选:(无)

自定义单元格 ​

姓名年龄城市
张三18北京
李四20上海
王五22广州

空状态 ​

姓名年龄城市
暂无数据,请先创建

API ​

属性类型默认值说明
dataRecord<string, unknown>[]—表格数据
columnsTableColumn[]—列配置
stripebooleanfalse条纹行
borderbooleanfalse外边框与列线
size'small' | 'default' | 'large''default'尺寸
rowKeystring—行唯一键字段名,不传则用行索引
pageSizenumber0每页条数,0 表示不分页
currentPagenumber1当前页(1-based),配合 v-model:current-page
totalnumber—总条数;传入即视为服务端分页,data 只放当前页,组件不再切片
selectionbooleanfalse是否显示行选择列
selectedKeys(string | number)[][]已选行的 key,配合 v-model:selected-keys
emptyTextstring'暂无数据'数据为空时的文案

TableColumn ​

属性类型默认值说明
propstring—数据字段名
labelstring—表头文字
widthstring | number—列宽,固定列必须指定
sortableboolean | 'custom'—是否可排序;'custom' 表示仅派发事件
fixed'left' | 'right'—固定列方向
align'left' | 'center' | 'right''left'单元格对齐方式

事件 ​

名称参数说明
update:current-page(page: number)页码变化
sort-change(prop: string, order: 'asc' | 'desc' | null)排序变化
update:selected-keys(keys: (string | number)[])选中行变化
selection-change(keys: (string | number)[])选中行变化(与上者同时派发)

插槽 ​

名称作用域参数说明
cell{ row, column, index }自定义单元格内容