Skip to content

TablePlus 高级表格 ​

在 Table 基础上集成筛选、排序、多选、行展开、分页、加载状态等功能的高级表格组件,采用卡片式圆角设计。

基础用法 ​

传入 data 和 columns 即可渲染表格,默认带边框、斑马纹和悬停高亮。

姓名
年龄
城市
邮箱
张三28北京zhangsan@example.com
李四32上海lisi@example.com
王五25广州wangwu@example.com
赵六30深圳zhaoliu@example.com
孙七27杭州sunqi@example.com
周八35成都zhouba@example.com
vue
<my-table-plus :data="data" :columns="columns" />

const columns = [
  { key: 'name', title: '姓名', sortable: true },
  { key: 'age', title: '年龄', sortable: true },
  { key: 'city', title: '城市' },
]
const data = [
  { name: '张三', age: 28, city: '北京' },
  { name: '李四', age: 32, city: '上海' },
]

可筛选 ​

filterable 在工具栏显示搜索框,实时过滤所有列的数据。

员工列表
ID
姓名
部门
职位
状态
1张三技术部前端开发在职
2李四技术部后端开发在职
3王五设计部UI设计师试用
4赵六产品部产品经理离职
5孙七质量部测试工程师在职
6周八技术部前端开发试用
7吴九技术部架构师在职
8郑十运维部运维工程师离职
vue
<my-table-plus :data="data" :columns="columns" filterable title="员工列表" />

排序与多选 ​

selection 开启多选,结合列的 sortable: true 实现排序。

商品名称
价格
销量
评分
无线蓝牙耳机29915234.8
机械键盘4598924.6
USB-C 扩展坞19923414.5
4K 显示器24994564.9
无线鼠标12931204.3
笔记本电脑支架8956784.2

提示:点击表头排序,勾选行进行批量操作

vue
<my-table-plus :data="data" :columns="columns" selection stripe hover />

const columns = [
  { key: 'name', title: '商品名称', sortable: true },
  { key: 'price', title: '价格', sortable: true },
  { key: 'sales', title: '销量', sortable: true },
]

行展开 ​

expandable 开启行展开,通过 #expand 插槽自定义展开内容。

订单号
客户
金额
日期
ORD-20260728-001张三¥1,299.002026-07-28
ORD-20260727-002李四¥2,499.002026-07-27
ORD-20260726-003王五¥588.002026-07-26
vue
<my-table-plus :data="data" :columns="columns" expandable>
  <template #expand="{ row }">
    <div v-for="item in row.items" :key="item.name">
      {{ item.name }} × {{ item.qty }}
    </div>
  </template>
</my-table-plus>

分页 ​

pagination 配置分页参数:total、currentPage、pageSize。

#
标题
作者
发布日期
1关于前端性能优化的第 1 条建议张三2026-01-01
2关于前端性能优化的第 2 条建议李四2026-02-02
3关于前端性能优化的第 3 条建议王五2026-03-03
4关于前端性能优化的第 4 条建议赵六2026-04-04
5关于前端性能优化的第 5 条建议张三2026-05-05
6关于前端性能优化的第 6 条建议李四2026-06-06
7关于前端性能优化的第 7 条建议王五2026-07-07
8关于前端性能优化的第 8 条建议赵六2026-08-08
共 35 条
vue
<my-table-plus :data="data" :columns="columns"
  :pagination="{ total: 35, currentPage: 1, pageSize: 8 }" />

加载状态 ​

loading 为 true 时显示加载遮罩层。

数据加载中...
姓名
年龄
城市
邮箱

加载状态:加载中...

vue
<my-table-plus :data="data" :columns="columns" :loading="loading" loading-text="数据加载中..." />

自定义列 ​

通过具名插槽自定义列内容,插槽名为列的 key。

团队成员
成员
职位
状态
操作
张张三
前端开发在职编辑删除
李李四
后端开发在职编辑删除
王王五
UI设计师试用编辑删除
赵赵六
产品经理离职编辑删除
vue
<my-table-plus :data="data" :columns="columns">
  <template #name="{ row }">
    <span>{{ row.name }}</span>
  </template>
  <template #status="{ value }">
    <my-tag :type="value === 'active' ? 'success' : 'danger'">
      {{ value === 'active' ? '在职' : '离职' }}
    </my-tag>
  </template>
  <template #action>
    <a href="#">编辑</a>
    <a href="#">删除</a>
  </template>
</my-table-plus>

组件结构 ​

根元素 .my-table-plus 包含可选的工具栏(标题、搜索框、操作区)和表格区域(内嵌 my-table 组件,通过插槽透传列、空内容、展开行等)。

CSS 类名 ​

类名说明
.my-table-plus根元素
.my-table-plus__toolbar工具栏
.my-table-plus__toolbar-left工具栏左侧区域
.my-table-plus__toolbar-right工具栏右侧区域
.my-table-plus__title表格标题
.my-table-plus__filter搜索过滤栏
.my-table-plus__filter-icon搜索图标
.my-table-plus__filter-input搜索输入框
.my-table-plus__filter-clear清除搜索按钮
.my-table-plus__table-area表格容器
.my-table-plus__table-area.has-toolbar有工具栏时启用

API ​

TablePlus Props ​

属性说明类型默认值
data表格数据Record<string, any>[][]
columns列配置TableColumn[][]
title表格标题,显示在工具栏左侧string—
filterable显示搜索筛选框booleanfalse
filterPlaceholder搜索框占位文字string'请输入关键词'
border是否显示边框booleantrue
stripe斑马纹booleantrue
hover行悬停高亮booleantrue
size尺寸'large' | 'default' | 'small''default'
loading加载状态booleanfalse
loadingText加载文字string'加载中...'
emptyText空数据文字string'暂无数据'
rowKey行唯一标识字段或函数string | ((row) => string)—
selection开启多选booleanfalse
selectionModel已选行数据 (v-model)Record<string, any>[][]
selectable行是否可选(row, index) => boolean—
expandable开启行展开booleanfalse
expandedRows已展开行 key 数组(string | number)[][]
defaultExpandAll默认展开全部booleanfalse
accordion手风琴模式(仅展开一行)booleanfalse
defaultSort默认排序{ key, order }—
pagination分页配置TablePaginationConfig | false—
virtualScroll虚拟滚动booleanfalse
rowHeight虚拟滚动行高number48
bodyHeight表格体高度number | string—

TablePlus Events ​

事件说明回调
sort-change排序变更(sort: SortState)
selection-change选中行变更(rows: Record<string, any>[])
update:selectionModel选中行 v-model(rows: Record<string, any>[])
row-click行点击(row, index)
cell-click单元格点击(row, column)
expand-change展开变更(row, expanded)
update:expandedRows展开行 v-model(keys)
page-change页码变更(page: number)
page-size-change每页条数变更(size: number)
column-resize列宽变更(column, width)

TablePlus Slots ​

名称说明作用域
toolbar自定义工具栏内容—
actions工具栏右侧操作区—
[col.key]自定义列内容{ row, value, index }
empty空数据内容—
expand展开行内容{ row, expanded }

TableColumn ​

ts
interface TableColumn {
  key: string
  title: string
  width?: string | number
  minWidth?: string | number
  align?: 'left' | 'center' | 'right'
  sortable?: boolean | 'custom'
  fixed?: 'left' | 'right'
  resizable?: boolean
}

TablePaginationConfig ​

ts
interface TablePaginationConfig {
  total: number
  currentPage: number
  pageSize: number
  pageSizes?: number[]
  layout?: string
}