Skip to content

DataTablePlus 数据表格增强

功能描述

DataTablePlus 是一个功能强大的数据表格增强组件,提供了完整的数据管理能力,包括远程数据请求、搜索、分页、排序、筛选、行点击事件等特性。它基于 Naive UI 的 DataTable 组件和 VueHooks Plus 的 useRequest 实现,为 Vue 应用提供了高效的数据表格解决方案。

安装

bash
# 使用 pnpm
pnpm add @oiij/naive-ui

# 使用 npm
npm install @oiij/naive-ui

# 使用 yarn
yarn add @oiij/naive-ui

依赖

  • vue: ^3.0.0
  • naive-ui: ^2.0.0
  • vue-hooks-plus: ^2.0.0

基本使用

loading

API

<DataTablePlus />

增强数据表格组件。

Props

属性类型说明
api(params: P) => Promise<D>异步接口方法
defaultParamsobject默认参数
manualboolean是否手动触发请求
titlestring标题
columnsDataTableColumns数据表格的列
fieldsDataTablePlusFields内置参数的字段
searchSearchInputProps | boolean搜索框配置
paginationPaginationProps | boolean分页配置
dataTablePropsDataTableProps数据表格配置
requestOptionsUseRequestOptions请求配置
requestPluginsUseRequestPlugin[]请求插件配置

Events

事件参数说明
before(params: P[])数据加载前
success(data: D, params: P[])数据加载完成
error(error: Error, params: P[])数据加载失败
finally(params: P[], data?: D, err?: Error)数据加载完成或失败
clickRow(row: R, index: number, event: MouseEvent, currentData: R[])行点击事件
contextMenuRow(row: R, index: number, event: MouseEvent, currentData: R[])右键菜单事件

类型定义

ts
export type DataTablePlusFields = DataRequestFields & {
  filter?: string
  sorter?: string
  rowKey?: string
  search?: string
  children?: string
}

export type DataTablePlusProps<P, D, R> = {
  api?: (params: P) => Promise<D>
  defaultParams?: P
  manual?: boolean
  title?: string
  columns?: DataTableColumns<R>
  fields?: DataTablePlusFields
  search?: SearchInputProps | boolean
  pagination?: PaginationProps | boolean
  dataTableProps?: DataTableProps
}

使用示例

基础用法

vue
<script setup>
import { DataTablePlus } from '@oiij/naive-ui'

const columns = [
  { title: '姓名', key: 'name' },
  { title: '年龄', key: 'age' },
  { title: '地址', key: 'address' }
]

async function fetchData(params) {
  const res = await fetch('/api/users', { body: JSON.stringify(params) })
  return res.json()
}
</script>

<template>
  <DataTablePlus
    :api="fetchData"
    :columns="columns"
    :search="true"
    :pagination="true"
  />
</template>

带搜索和分页

vue
<script setup>
import { DataTablePlus } from '@oiij/naive-ui'

const columns = [
  { title: '姓名', key: 'name' },
  { title: '邮箱', key: 'email' }
]

async function fetchData(params) {
  return await api.getUsers(params)
}
</script>

<template>
  <DataTablePlus
    :api="fetchData"
    :columns="columns"
    :search="{ placeholder: '搜索用户' }"
    :pagination="{ pageSize: 10 }"
  />
</template>