Skip to content

Table 表格

表格组件用于数据展示,支持列排序、筛选、行选择、分页、展开行等丰富功能,输出原生 <table> DOM,完全兼容 Tabler CSS。

基础用法

通过 datacolumns 属性声明式渲染表格。

vue
<TTable :data="data" :columns="columns" />

斑马纹与悬停

设置 striped 启用斑马纹,hover 启用行悬停高亮。

vue
<TTable :data="data" :columns="columns" striped hover />

展开行

通过 expandable 配置展开行内容。

vue
<TTable :data="data" :columns="columns" :expandable="{ expandedRowRender: (record) => record.email }" />

带边框

设置 bordered 启用完整表格边框。

vue
<TTable :data="data" :columns="columns" bordered />

固定表头

通过 scroll.y 设置固定高度,表头在纵向滚动时固定。

vue
<TTable :data="data" :columns="columns" :scroll="{ y: 200 }" />

列排序

为列配置 sortablesorter 函数启用排序,支持 v-model:sort-by / v-model:sort-order 受控。

vue
<TTable
    :data="data"
    :columns="columns"
    v-model:sort-by="sortBy"
    v-model:sort-order="sortOrder"
/>

列筛选

为列配置 filtersonFilter 启用列头筛选下拉。

vue
const columns = [
  { key: 'name', title: 'Name' },
  { key: 'age', title: 'Age' },
  { key: 'status', title: 'Status', filters: [
    { text: 'Active', value: 'Active' },
    { text: 'Inactive', value: 'Inactive' },
  ], onFilter: (val: string, record: any) => record.status === val },
]

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

行选择

通过 row-selection 配置启用手动行选择,支持多选(checkbox)和单选(radio)。

多选

vue
<TTable :data="data" :columns="columns" :row-selection="{ type: 'checkbox' }" />

单选

vue
<TTable :data="data" :columns="columns" :row-selection="{ type: 'radio' }" />

自定义单元格

通过 bodyCell 插槽自定义单元格内容,可渲染操作按钮、头像等复杂内容。

vue
<TTable :data="data" :columns="columns">
  <template #bodyCell="{ text, record, column }">
    <template v-if="column.key === 'name'">
      <strong>{{ text }}</strong>
    </template>
    <a v-else-if="column.key === 'email'" :href="`mailto:${text}`" class="text-reset">{{ text }}</a>
    <span v-else-if="column.key === 'role'" class="badge bg-azure-lt">{{ text }}</span>
    <template v-else>{{ text }}</template>
  </template>
</TTable>

内置分页

设置 pagination 启用内置分页,自动对数据进行切片。

vue
<TTable :data="pageData" :columns="columns" pagination striped hover />

设置 size="small" 启用紧凑模式,borderless 去除边框。

vue
<TTable :data="data" :columns="columns" size="small" borderless />

响应式表格

设置 responsive 在窄屏时启用横向滚动容器。

vue
<TTable :data="data" :columns="columns" responsive />

行事件

监听行点击、双击等事件。

vue
<TTable :data="data" :columns="columns" @row-click="(record) => handleClick(record)" />

树形数据

通过 treeProps 开启树形模式,数据含 children 字段时自动渲染树形结构。

vue
<TTable :data="treeData" :columns="[{ key: 'name', title: '部门/姓名' }]" :tree-props="{ children: 'children', indentSize: 24 }" />

固定列

列配置 fixed: 'left' | 'right' 固定列,配合 responsive 横向滚动时左侧/右侧列固定。

vue
<TTable :data="data" :columns="[{ key: 'name', title: 'Name', fixed: 'left' }, ...]}" responsive />

行禁用

通过 rowSelection.getCheckboxProps 返回 { disabled: true } 禁用指定行的选择。

vue
<TTable :data="data" :columns="columns" :row-selection="{ type: 'checkbox', getCheckboxProps: (r) => ({ disabled: r._disabled }) }" />

选择项下拉

rowSelection.selections 启用了选择项下拉菜单(全选/反选/清空),点击选择列旁的 ··· 按钮。

vue
<TTable :data="data" :columns="columns" :row-selection="{ type: 'checkbox', selections: true }" />

默认展开行

通过 expandable.defaultExpandedRowKeys 指定默认展开的行。

vue
<TTable :data="data" :columns="columns" :expandable="{ expandedRowRender: (r) => r.desc, defaultExpandedRowKeys: [1] }" />

列宽拖拽

列配置 resizable: true 启用列宽拖拽调整,鼠标悬停在列边框上显示拖拽手柄。

vue
<TTable :data="data" :columns="[{ key: 'name', title: 'Name', width: 150, resizable: true }, ...]" />

API

Props

Prop说明类型默认值
data表格数据any[][]
columns列配置TableColumn[][]
row-key行唯一标识字段名或函数string | ((record) => any)'id'
row-selection行选择配置TableRowSelection
v-model:sort-by当前排序列 keystring | nullnull
v-model:sort-order排序方向'asc' | 'desc' | nullnull
v-model:filters筛选状态Record<string, any[]>{}
pagination分页配置boolean | TablePaginationConfigfalse
scroll滚动配置TableScroll
expandable展开行配置TableExpandable
size表格尺寸'large' | 'middle' | 'small'
bordered显示完整边框booleanfalse
striped斑马纹booleanfalse
hover行悬停高亮booleanfalse
borderless无边框booleanfalse
responsive响应式滚动boolean | 'sm'|'md'|'lg'|'xl'false
mobile-responsive移动端布局断点false | 'sm'|'md'|'lg'|'xl'false
empty-text空数据提示string'暂无数据'
row-class-name行自定义 class 函数(record, index) => string
tree-props树形数据配置TreeProps

TableColumn 列配置

属性说明类型默认值
key字段名(必填)string
title表头文案string
width列宽string | number
fixed固定列'left' | 'right'
align对齐方式'left' | 'center' | 'right'
nowrap不换行booleanfalse
ellipsis溢出省略号booleanfalse
sortable启用排序booleanfalse
sorter排序比较函数(a, b) => number
default-sort-order默认排序方向'asc' | 'desc'
filters筛选项TableFilterItem[]
on-filter筛选过滤函数(value, record) => boolean
filter-multiple多选筛选booleantrue
render自定义渲染函数(text, record, index) => VNode
resizable启用列宽拖拽booleanfalse

Slots

插槽作用域说明
bodyCell{ text, record, index, column }自定义单元格渲染
headerCell{ column }自定义表头渲染
empty空数据状态
summary合计行
expandRow{ record, index }展开行内容
toolbarLeft分页模式左侧工具栏
toolbarRight分页模式右侧工具栏
bodyPrepend表体前插入行
bodyAppend表体后插入行

Emits

事件参数说明
change(pagination, filters, sorter)分页/排序/筛选变化
rowClick(record, index, event)行点击
rowDblclick(record, index, event)行双击
cellMouseEnter(text, record, index, column, event)单元格悬停