Skip to content

Table 表格

介绍

用于展示多条结构类似的数据。

基础用法

通过 data 属性来设置表格数据,通过 columns 属性来设置表格列。

html
<vd-table :data="data" :columns="columns" />
ts
import { TableColumn } from 'vital-design';

const data = ref([
  { name: '张三', date: '2025-06-01', address: '测试地址' },
  { name: '李四', date: '2025-06-01', address: '测试地址' },
  { name: '王五', date: '2025-06-01', address: '测试地址' },
]);

const columns = ref<TableColumn[]>([
  { prop: 'name', label: '姓名' },
  { prop: 'date', label: '日期' },
  { prop: 'address', label: '地址' },
]);

展示边框

通过 border 属性来展示边框。

html
<vd-table :data="data" :columns="columns" :border="true" />

展示斑马纹

通过 striped 属性来展示斑马纹。

html
<vd-table :data="data" :columns="columns" :striped="true" />

展示加载中

通过 loading 属性来展示加载中状态。

html
<vd-table :data="data" :columns="columns" :loading="true" />

允许行点击

通过 row-clickable 属性来允许行点击。

html
<vd-table :data="data" :columns="columns" :row-clickable="true" />

固定列

配置表格列时,通过 fixed 属性来固定列,支持 leftright 固定列。

html
<vd-table :data="data" :columns="columns" />
ts
import { TableColumn } from 'vital-design';

const data = ref([
  { name: '张三', date: '2025-06-01', address: '测试地址' },
  { name: '李四', date: '2025-06-01', address: '测试地址' },
  { name: '王五', date: '2025-06-01', address: '测试地址' },
]);

const columns = ref<TableColumn[]>([
  { type: 'index', label: '序号', width: 70, fixed: 'left' },
  { prop: 'name', label: '姓名', width: 120 },
  { prop: 'date', label: '日期', width: 160 },
  { prop: 'address', label: '地址', width: 220 },
]);

使用单元格插槽

配置表格列时,可使用 thtd 插槽来自定义表头/表格单元格。

html
<vd-table :data="data" :columns="columns">
  <template #td="{ column, row, value }">
    <vd-button
      v-if="column.name === 'action'"
      :link="true"
      type="primary"
    >详情</vd-button>
    <template v-else>{{ value }}</template>
  </template>
</vd-table>
ts
import { TableColumn } from 'vital-design';

const data = ref([
  { name: '张三', date: '2025-06-01', address: '测试地址' },
  { name: '李四', date: '2025-06-01', address: '测试地址' },
  { name: '王五', date: '2025-06-01', address: '测试地址' },
]);

const columns = ref<TableColumn[]>([
  { type: 'index', label: '序号', width: 70, fixed: 'left' },
  { prop: 'name', label: '姓名', width: 120 },
  { prop: 'date', label: '日期', width: 160 },
  { prop: 'address', label: '地址', width: 220 },
  { name: 'action', label: '操作', width: 80, fixed: 'right' },
]);

列排序

配置表格列时,通过 sortable 属性来配置列排序,支持 sort-method 方法来定义自定义排序。

html
<vd-table :data="data" :columns="columns" />
ts
import { TableColumn } from 'vital-design';

const data = ref([
  { id: 3, name: '张三', date: '2025-06-01', address: '测试地址' },
  { id: 4, name: '李四', date: '2025-06-02', address: '测试地址' },
  { id: 5, name: '王五', date: '2025-06-03', address: '测试地址' },
]);

const columns = ref<TableColumn[]>([
  {
    type: 'index',
    label: '序号',
    width: 70,
    fixed: 'left',
    sortable: true,
  },
  {
    prop: 'name',
    label: '姓名',
    width: 120,
    sortable: true,
    sortOrder: 'asc',
    sortMethod: (type, a, b) => {
      const aName = a.row.name;
      const bName = b.row.name;

      // 根据中文拼音排序
      return type === 'desc' ? bName.localeCompare(aName, 'zh-CN') : aName.localeCompare(bName, 'zh-CN');
    }
  },
  {
    prop: 'date',
    label: '日期',
    width: 160,
    sortable: true,
    sortMethod: (type, a, b) => {
      const aVal = dayjs(a.value).valueOf();
      const bVal = dayjs(b.value).valueOf();

      // 根据时间戳排序
      return type === 'desc' ? bVal - aVal : aVal - bVal;
    }
  },
  { prop: 'address', label: '地址', width: 220 },
]);

API

Props

参数说明类型默认值
data表格数据any[]-
columns表格列配置TableColumn[]-
height表格高度string | number-
max-height表格最大高度string | number-
index序号的初始下标,0 -> 110 -> 11number0
loading是否展示加载中booleanfalse
loading-type加载中类型,同 loading 组件加载类型LoadingType'spinner'
border是否展示表格线booleanfalse
stripe是否展示斑马纹booleanfalse
shadow有固定列时,是否展示滚动阴影booleantrue
row-class表格行类名,支持函数TableColumnRowClass-
row-style表格行样式,支持函数TableColumnRowStyle-
row-clickable表格行是否开启点击反馈,支持函数TableColumnRowClickablefalse
before-sort-change排序切换前的回调函数,支持 PromiseTableBeforeSortChange-

TableColumn

参数说明类型默认值
type类型,可选值为 textindexTableColumnType'text'
name列标识名称string-
prop列数据对象string-
label列标题string-
width列宽度string | number-
fixed列固定位置,可选值为 leftrightTableColumnFixed-
align列对齐方式,可选值为 leftcenterrightTableColumnAlign'left'
sortable是否可排序booleanfalse
sort-order排序初始状态,可选值为 ascdescTableColumnSortOrder-
sort-method自定义排序方法TableColumnSortMethod-
th-class表头列类名ClassValue-
th-style表头列样式StyleValue-
td-class表格体列类名ClassValue-
td-style表格体列样式StyleValue-

代替原始 Props

参数说明类型默认值
custom-id根节点idstring-
custom-class根节点类名ClassValue-
custom-style根节点样式StyleValue-

Events

事件名说明回调参数
click点击时触发MouseEvent
click-row行点击时触发TableOnClickRowEvent

Slots

名称说明
th表头单元格
td表格单元格
loading加载中

赣ICP备2025061025号-1