Skip to content

Table 表格

重型数据表格,支持列配置、表头、横向滚动、状态展示、边框/斑马纹/尺寸、插槽、行/单元格点击、排序、选择、展开行、树形数据、分页联动、吸顶表头、固定列、虚拟行、虚拟列及高级组合。

平台差异说明

App(vue)App(nvue)H5小程序

基本使用

  • 通过 columns 定义列配置。
  • 通过 data 传入表格数据。
  • 通过 rowKey 指定行唯一标识字段。
html
<see-table :columns="columns" :data="data" rowKey="id" />

<script lang="ts" setup>
const columns = [
  { key: 'name', title: '姓名' },
  { key: 'age', title: '年龄' },
  { key: 'address', title: '地址' }
]

const data = [
  { id: 1, name: '张三', age: 25, address: '北京市' },
  { id: 2, name: '李四', age: 30, address: '上海市' },
  { id: 3, name: '王五', age: 28, address: '广州市' }
]
</script>

列配置

  • key:列唯一标识。
  • title:列标题。
  • dataIndex:数据字段名,默认等于 key
  • width:列宽度(px 或 rpx)。
  • minWidth:最小列宽度。
  • align:文本对齐方式,支持 leftcenterright
  • ellipsis:文本溢出时是否省略。
  • formatter:自定义单元格格式化函数。
html
<script lang="ts" setup>
const columns = [
  { key: 'name', title: '姓名', width: 120, fixed: 'left' },
  { key: 'age', title: '年龄', align: 'center', width: 80 },
  {
    key: 'score',
    title: '分数',
    formatter: (row) => `${row.score}分`
  },
  { key: 'address', title: '地址', ellipsis: true }
]
</script>

边框与斑马纹

  • 设置 bordertrue 显示边框。
  • 设置 stripetrue 显示斑马纹。
html
<see-table :columns="columns" :data="data" rowKey="id" border />
<see-table :columns="columns" :data="data" rowKey="id" stripe />

表格尺寸

  • 通过 size 设置表格尺寸,支持 smallmediumlarge
html
<see-table :columns="columns" :data="data" rowKey="id" size="small" />
<see-table :columns="columns" :data="data" rowKey="id" size="medium" />
<see-table :columns="columns" :data="data" rowKey="id" size="large" />

固定高度与滚动

  • 通过 height 设置固定高度,启用纵向滚动。
  • 通过 maxHeight 设置最大高度。
html
<see-table :columns="columns" :data="data" rowKey="id" height="300px" />
<see-table :columns="columns" :data="data" rowKey="id" maxHeight="400px" />

吸顶表头

  • 设置 stickyHeadertrue 开启吸顶表头。
html
<see-table :columns="columns" :data="data" rowKey="id" stickyHeader height="300px" />

排序

  • 设置 sortabletrue 开启全局排序。
  • 或在列配置中设置 sortable 开启单列排序。
  • 通过 sortKeysortOrder 控制受控排序。
  • 排序变更时触发 onSortChange 事件。
html
<see-table
  :columns="columns"
  :data="data"
  rowKey="id"
  sortable
  :sortKey="sortKey"
  :sortOrder="sortOrder"
  @onSortChange="handleSortChange"
/>

<script lang="ts" setup>
const columns = [
  { key: 'name', title: '姓名' },
  { key: 'age', title: '年龄', sortable: true }
]
</script>

行选择

  • 设置 selectabletrue 开启行选择。
  • 通过 selectedKeys 控制选中行。
  • 或在列配置中设置 type: 'selection' 自定义选择列位置。
  • 选择变更时触发 onSelectionChange 事件。
html
<see-table
  :columns="columns"
  :data="data"
  rowKey="id"
  selectable
  :selectedKeys="selectedKeys"
  @onSelectionChange="handleSelectionChange"
/>

展开行

  • 在列配置中设置 type: 'expand' 添加展开列。
  • 设置 expandabletrue 开启展开行功能。
  • 通过 expandedKeys 控制展开行。
  • 使用 expand 插槽自定义展开内容。
html
<see-table
  :columns="columns"
  :data="data"
  rowKey="id"
  expandable
  :expandedKeys="expandedKeys"
>
  <template #expand="{ row }">
    <view style="padding: 16rpx;">{{ row.detail }}</view>
  </template>
</see-table>

<script lang="ts" setup>
const columns = [
  { key: 'expand', type: 'expand', title: '' },
  { key: 'name', title: '姓名' }
]
</script>

序号列

  • 在列配置中设置 type: 'index' 添加序号列。
html
<script lang="ts" setup>
const columns = [
  { key: 'index', type: 'index', title: '#', width: 60 },
  { key: 'name', title: '姓名' }
]
</script>

树形数据

  • 设置 treetrue 开启树形数据展示。
  • 通过 childrenField 指定子节点字段名,默认为 children
  • 通过 indent 设置缩进量,默认为 24
  • 设置 defaultExpandAlltrue 默认展开所有节点。
html
<see-table
  :columns="columns"
  :data="treeData"
  rowKey="id"
  tree
  childrenField="children"
  :defaultExpandAll="true"
/>

<script lang="ts" setup>
const treeData = [
  {
    id: 1, name: '部门A',
    children: [
      { id: 11, name: '小组A-1' },
      { id: 12, name: '小组A-2' }
    ]
  },
  { id: 2, name: '部门B' }
]
</script>

分页

  • 设置 pagination 为分页配置对象开启分页。
  • 配置项:current(当前页)、pageSize(每页条数)、total(总条数)、showTotal(显示总数)、simple(简单分页)。
html
<see-table
  :columns="columns"
  :data="data"
  rowKey="id"
  :pagination="{ current: 1, pageSize: 10, total: 100, showTotal: true }"
  @onPageChange="handlePageChange"
/>

虚拟滚动

  • 设置 virtualtrue 开启虚拟行滚动(纵向)。
  • 设置 virtualXtrue 开启虚拟列滚动(横向)。
  • rowHeight:行高,虚拟滚动时建议设置。
  • estimatedRowHeight:预估行高,用于动态高度。
  • buffer:缓冲行数,默认为 5
html
<see-table
  :columns="columns"
  :data="largeData"
  rowKey="id"
  virtual
  :rowHeight="48"
  height="400px"
/>

固定列

  • 在列配置中设置 fixed'left''right' 实现固定列。
html
<script lang="ts" setup>
const columns = [
  { key: 'name', title: '姓名', width: 120, fixed: 'left' },
  { key: 'age', title: '年龄' },
  { key: 'address', title: '地址' },
  { key: 'action', title: '操作', width: 100, fixed: 'right' }
]
</script>

自定义单元格

  • 通过 cell-{key} 插槽自定义指定列的单元格内容。
html
<see-table :columns="columns" :data="data" rowKey="id">
  <template #cell-name="{ row, value }">
    <text style="color: #2979ff;">{{ value }}</text>
  </template>
  <template #cell-action="{ row }">
    <button size="mini" @tap="handleEdit(row)">编辑</button>
  </template>
</see-table>

自定义表头

  • 通过 header-{key} 插槽自定义指定列的表头内容。
html
<see-table :columns="columns" :data="data" rowKey="id">
  <template #header-name="{ column }">
    <text style="color: red;">{{ column.title }} *</text>
  </template>
</see-table>

加载与空状态

  • 设置 loadingtrue 显示加载状态。
  • 设置 errortrue 显示错误状态。
  • 通过 emptyText 自定义空状态文字。
html
<see-table :columns="columns" :data="[]" loading />
<see-table :columns="columns" :data="[]" error />
<see-table :columns="columns" :data="[]" emptyText="暂无记录" />

API

Props

参数名说明类型默认值可选值平台差异
data表格数据Array[]任意数组-
columns列配置SeeTableColumn[][]见列配置说明-
rowKey行唯一标识字段名或函数String / Function''字符串或 (row, index) => string-
loading是否加载中Booleanfalsetruefalse-
error是否加载出错Booleanfalsetruefalse-
emptyText空状态文字String''任意字符串-
border是否显示边框Booleanfalsetruefalse-
stripe是否显示斑马纹Booleanfalsetruefalse-
size表格尺寸'small' | 'medium' | 'large''medium'smallmediumlarge-
height表格固定高度String / Number''任意 CSS 长度值-
maxHeight表格最大高度String / Number''任意 CSS 长度值-
showHeader是否显示表头Booleantruetruefalse-
stickyHeader吸顶表头Booleanfalsetruefalse-
selectable是否可选择行Booleanfalsetruefalse-
selectedKeys选中行的 key 列表Array<string | number>[]任意数组-
defaultSelectedKeys默认选中行的 key 列表Array<string | number>[]任意数组-
sortable是否可排序Booleanfalsetruefalse-
sortKey排序字段String''任意字符串-
sortOrder排序方向'asc' | 'desc' | ''''ascdesc''-
expandable是否可展开行Booleanfalsetruefalse-
expandedKeys展开行的 key 列表Array<string | number>[]任意数组-
tree是否为树形数据Booleanfalsetruefalse-
childrenField子节点字段名String'children'任意字符串-
indent树形缩进量Number24任意正数-
defaultExpandAll是否默认展开所有节点Booleanfalsetruefalse-
pagination分页配置false | SeeTablePaginationfalsefalse 或分页配置对象-
virtual是否开启虚拟行Booleanfalsetruefalse-
virtualX是否开启虚拟列Booleanfalsetruefalse-
rowHeight行高,虚拟滚动时建议设置Number0任意正数-
estimatedRowHeight预估行高,动态高度使用Number0任意正数-
buffer虚拟滚动缓冲行数Number5任意正数-

列配置 (SeeTableColumn)

参数名说明类型默认值
key列唯一标识String-
title列标题String-
dataIndex数据字段名,默认等于 keyStringkey
width列宽度String / Number-
minWidth最小列宽度String / Number-
align文本对齐方式'left' | 'center' | 'right''left'
fixed固定列方向'left' | 'right'-
sortable是否可排序Boolean / 'custom'-
ellipsis文本溢出时是否省略Booleanfalse
type列类型'normal' | 'selection' | 'index' | 'expand''normal'
children子列(分组表头)SeeTableColumn[]-
formatter自定义单元格格式化(row, column, rowIndex) => string | number-

Events

事件名说明回调参数平台差异
onRowClick点击行时触发row: unknown, rowIndex: number-
onCellClick点击单元格时触发row: unknown, column: SeeTableColumn, rowIndex: number-
onSortChange排序变更时触发{ key: string, order: string, column: SeeTableColumn }-
onSelectionChange选择变更时触发selectedKeys: Array<string | number>, selectedRows: unknown[]-
onExpandChange展开变更时触发expandedKeys: Array<string | number>, row: unknown-
onPageChange分页变更时触发{ current: number, pageSize: number }-
onScroll滚动时触发event: unknown-
onRangeChange虚拟滚动范围变更时触发{ rowStart, rowEnd, colStart, colEnd }-

Slots

插槽名说明作用域数据
cell-自定义单元格{ row, column, rowIndex, value }
header-自定义表头{ column, columnIndex }
expand展开行内容{ row, rowIndex }
loading自定义加载状态
empty自定义空状态
error自定义错误状态
footer表格底部

辽 ICP 备 2025070134 号