基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件

888 阅读3分钟

VTable 多功能表格组件

基于 ant-design-vue 和 Vue 3 的功能强大的表格组件,支持列自定义、排序、本地化存储、行选择等特性。

当前组件继承了Ant-Design-Vue Table组件的所有列属性和方法,并在此基础上进行扩展。

演示地址:table.nicen.cn

Github:github.com/friend-nice…

原文:nicen.cn/8010.html

特性

  • 🚀 基于 ant-design-vue 3.x 和 Vue 3
  • 📦 开箱即用的高性能表格组件
  • 🎨 支持列自定义配置与本地存储
  • 📊 灵活的排序和过滤功能

快速开始


<template>
  <v-table :init="'api/data'"/>
</template>

<script setup>
  import {initTable} from 'v-table';

  const columns = [
    {
      title: 'ID',
      width: 60
    },
    {
      title: '名称',
      dataIndex: 'name',
      width: 120,
      sortable: 'number'
    }
  ];

  const table = initTable({
    unique: 'my-table',
    column: columns,
    localize: true
  });
</script>

API

VTable Props

v-table组件支持的属性,如下:

参数说明类型默认值
init数据初始化接口地址string-
dataSource静态数据源Record<string, any>[]-
pagination分页配置TablePagination{}
sticky表头吸顶配置{ offsetHeader: number }{ offsetHeader: 60 }
rowsKey行唯一标识字段string'id'
scroll表格滚动配置{ x: stringnumber }{ x: 'max-content' }
size表格大小'small''middle''large''large'
rowSelection行选择配置booleanRecord<string, any>false

TableColumn

表格列支持的属性,如下:

参数说明类型默认值
title列标题string-
dataIndex列数据字段名string-
width列宽度number100
fixed列固定位置boolean'left''right'false
resizable是否可调整列宽booleantrue
display是否显示列booleantrue
editable是否可编辑booleanfalse
empty是否允许为空booleanfalse
sortable排序类型'number''dayjs'-
timestamp时间戳格式string-

TableConfig

initTable调用时,支持传递的参数对象:

参数说明类型默认值
unique唯一标识字段string-
column列配置TableColumn[]-
condition查询条件Record<string, any>-
callback数据加载成功回调(data: any, pagination: TablePagination) => void-
error数据加载失败回调(error: any, pagination: TablePagination) => void-
filter数据过滤器(data: any[]) => any[]-
immediate是否立即加载数据booleantrue
watch是否监听条件变化booleantrue
localize是否本地化保存列配置booleanfalse
defaultExpandAllRows是否默认展开所有行booleantrue

TableInstance

表格对象的相关属性和方法,表格初始化之后,会调用 provide(table) ,任意子组件可通过inject获取表格对象:

参数说明类型
loadData加载数据方法(paginate?: TablePagination, filters?: Record<string, any>, sorter?: Record<string, any>) => Promise
selectRows选中行数据{ keys: any[], rows: any[] }
condition查询条件{ data: Record<string, any> }
editable单元格是否可编辑boolean[][]
dataSource当前表格的数据对象boolean[][]

插槽

名称说明参数
expandedRowRender展开行渲染{ record }
headerCell自定义表头单元格{ column }
bodyCell自定义表格内容{ text, record, index, column }
summary表格汇总行{ data }

示例

基础表格


<template>
  <v-table :init="'api/data'"/>
</template>

<script setup>
  import {initTable} from 'v-table';

  const columns = [
    {
      title: 'ID',
      width: 60
    },
    {
      title: '名称',
      dataIndex: 'name',
      width: 120
    }
  ];

  const table = initTable({
    unique: 'basic-table',
    column: columns
  });
</script>

可选择表格


<template>
  <v-table
      :init="'api/data'"
      :row-selection="true"
  />
</template>

<script setup>
  import {initTable} from 'v-table';

  const columns = [
    {
      title: 'ID',
      width: 60
    },
    {
      title: '名称',
      dataIndex: 'name',
      width: 120
    }
  ];

  const table = initTable({
    unique: 'selection-table',
    column: columns
  });

  // 获取选中行
  console.log(table.selectRows);
</script>

自定义列渲染


<template>
  <v-table :init="'api/data'">
    <template #bodyCell="{ text, record, column }">
      <template v-if="column.dataIndex === 'action'">
        <a-button @click="handleEdit(record)">编辑</a-button>
      </template>
    </template>
  </v-table>
</template>

<script setup>
  import {initTable} from 'v-table';

  const columns = [
    {
      title: 'ID',
      width: 60
    },
    {
      title: '名称',
      dataIndex: 'name',
      width: 120
    },
    {
      title: '操作',
      dataIndex: 'action',
      width: 120,
      fixed: 'right'
    }
  ];

  const table = initTable({
    unique: 'custom-table',
    column: columns
  });

  const handleEdit = (record) => {
    console.log('编辑行:', record);
  };
</script>

许可证

MIT