npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@yetuzi/vue3-query-components

v1.5.0

Published

Vue3查询页面组件库,基于Element Plus封装的表格查询组件 - 开箱即用

Readme

@yetuzi/vue3-query-components

企业级查询页面组件库

专为 Vue3 设计的高效查询组件,提升开发效率

License: MIT Vue TypeScript Element Plus npm version

✨ 特性

  • 🚀 一体化查询 - CommonQueryTable 集成表单、表格、分页,一个组件即可构建完整的查询页面,支持灵活的布局配置
  • 📋 类型安全 - 完整的 TypeScript 泛型支持,列类型、表单项类型自动推导,提供精准的类型提示和校验
  • 🎨 高度可定制 - 响应式全局配置系统,支持自定义组件、插槽和样式扩展,满足各种业务场景需求
  • 🧩 丰富组件 - 提供 CommonTable(多种列类型)、CommonForm(7种表单项)及完整的基础组件体系
  • ⚡️ 开箱即用 - 基于 Element Plus 封装,API 设计一致,学习成本低,大幅提升开发效率
  • 🛠️ 实用工具 - 内置 useResettable 等实用 hooks,提供可重置的响应式数据管理能力

📦 安装

npm install @yetuzi/vue3-query-components
# 或
yarn add @yetuzi/vue3-query-components
# 或
pnpm add @yetuzi/vue3-query-components

🚀 快速开始

安装依赖

npm install @yetuzi/vue3-query-components

::: tip 注意 本组件库依赖 Element Plus,但不需要手动安装 Element Plus,它作为 peer dependency 会在你的项目中自动解析。 :::

导入样式

// 导入组件库样式(已包含所需的 Element Plus 样式)
import '@yetuzi/vue3-query-components/dist/index.css'

按需引入组件

import {
  CommonQueryTable,
  CommonTable,
  CommonForm,
  CommonConfigProvider,
} from '@yetuzi/vue3-query-components'

4. 基础使用

完整查询表格组件(推荐)

CommonQueryTable 是一个高度集成的组件,包含表单查询、表格展示、分页功能。

<template>
  <CommonQueryTable :fetch="fetchData" :form="formConfig" :columns="tableColumns" />
</template>

<script setup>
import { CommonQueryTable } from '@yetuzi/vue3-query-components'

// 数据请求函数
const fetchData = async (params) => {
  const { pageNo, pageSize, ...searchParams } = params
  const response = await api.getList({
    page: pageNo,
    size: pageSize,
    ...searchParams,
  })
  return {
    list: response.data.list,
    total: response.data.total,
  }
}

// 表单配置
const formConfig = [
  {
    is: 'input', // 组件类型
    prop: 'name', // 字段名
    formItem: {
      label: '姓名', // 表单标签
    },
    initialValue: '', // 初始值
    props: {
      placeholder: '请输入姓名',
    },
  },
  {
    is: 'select',
    prop: 'status',
    formItem: {
      label: '状态',
    },
    initialValue: 'all',
    props: {
      options: [
        { value: 'all', label: '全部' },
        { value: 'active', label: '激活' },
        { value: 'inactive', label: '未激活' },
      ],
    },
  },
  {
    is: 'date-picker',
    prop: 'createTime',
    formItem: {
      label: '创建时间',
    },
  },
]

// 表格列配置
const tableColumns = [
  { prop: 'name', label: '姓名' },
  { prop: 'email', label: '邮箱' },
  { prop: 'status', label: '状态' },
  {
    prop: 'createTime',
    label: '创建时间',
    type: 'dateTime', // 自动格式化日期时间
  },
]
</script>

高级配置示例

<template>
  <CommonConfigProvider
    :component="{
      form: {
        submitText: '查询',
        resetText: '重置',
        formItem: {
          components: {
            width: '240px',
          },
        },
      },
      pagination: {
        defaultPageSize: 20,
        defaultPageCount: 1,
      },
      table: {
        headerCellStyle: {
          backgroundColor: '#f5f7fa',
          color: '#303133',
        },
      },
    }"
  >
    <CommonQueryTable
      v-bind="queryTableConfig"
      :layouts="['form', 'toolbar', 'table', 'pagination']"
    >
      <!-- 自定义工具栏 -->
      <template #toolbar>
        <el-button type="primary" @click="handleAdd">新增</el-button>
        <el-button @click="handleExport">导出</el-button>
      </template>

      <!-- 自定义表格列 -->
      <template #table-action="{ row }">
        <el-button link @click="handleEdit(row)">编辑</el-button>
        <el-button link type="danger" @click="handleDelete(row)">删除</el-button>
      </template>
    </CommonQueryTable>
  </CommonConfigProvider>
</template>

<script setup>
import { CommonConfigProvider, CommonQueryTable } from '@yetuzi/vue3-query-components'

const queryTableConfig = {
  fetch: fetchData,
  form: formConfig,
  columns: [
    { prop: 'name', label: '姓名' },
    { prop: 'status', label: '状态' },
    { label: '操作', prop: 'action', fixed: 'right', width: 150 },
  ],
}
</script>

📚 组件列表

核心组件

| 组件名 | 说明 | |--------|------| | CommonQueryTable | 一体化查询表格,集成表单、表格、分页 | | CommonTable | 增强型表格组件,支持多种列类型 | | CommonForm | 动态表单组件,支持 7 种表单项 | | CommonConfigProvider | 全局配置组件,提供统一的组件配置 |

基础组件

| 组件名 | 说明 | |--------|------| | CommonInput | 输入框组件 | | CommonSelect | 下拉选择组件 | | CommonDatePicker | 日期选择器组件 | | CommonRadio | 单选框组件 | | CommonCheckbox | 复选框组件 | | CommonSwitch | 开关组件 | | CommonButton | 按钮组件 | | CommonPagination | 分页组件 |

Hooks

| Hook 名 | 说明 | |---------|------| | useResettableRef | 创建可重置的 ref | | useResettableReactive | 创建可重置的 reactive | | useGetComponentsChildrenSlots | 获取组件子插槽 |

📚 API 文档

CommonQueryTable Props

| 参数 | 说明 | 类型 | 默认值 | | ------- | ------------ | ------------------------------------------------------------------------ | --------------------------------- | | fetch | 数据请求函数 | (params: ListParam) => Promise<{ list: T[], total: string \| number }> | - | | form | 表单配置数组 | CommonFormPropForm[] | [] | | columns | 表格列配置 | CommonTableColumn[] | - | | layouts | 布局顺序 | Array<'header'\|'form'\|'toolbar'\|'table'\|'pagination'\|'footer'> | ['form', 'table', 'pagination'] |

表单组件类型支持

CommonForm 支持以下 7 种内置表单项类型:

| 组件类型 | 说明 | 用途 | |---------|------|------| | input | 输入框 | 文本、数字等简单输入 | | select | 下拉选择 | 单选下拉选项 | | date-picker | 日期选择器 | 日期、日期时间范围选择 | | radio | 单选框组 | 互斥选项选择 | | check-box | 复选框组 | 多选选项 | | switch | 开关 | 二元状态切换 | | 自定义组件 | 任意 Vue 组件 | 扩展自定义表单项 |

表格列类型支持

CommonTable 支持多种特殊列类型:

| 列类型 | 说明 | 使用场景 | |--------|------|----------| | index | 索引列 | 自动显示行号 | | selection | 选择列 | 多选功能 | | expand | 展开列 | 行内容展开 | | date | 日期列 | 自动格式化日期显示 | | dateTime | 日期时间列 | 自动格式化日期时间显示 | | 普通列 | 数据列 | 绑定字段数据 |

表单配置项类型

interface FormItemConfig {
  is: string // 组件类型
  prop: string // 字段名
  formItem: {
    // ElFormItem 配置
    label: string
    [key: string]: any
  }
  initialValue?: any // 初始值
  props?: {
    // 组件属性
    [key: string]: any
  }
}

表格列配置类型

interface TableColumn {
  prop: string                  // 列属性名
  label: string                 // 列标题
  type?: 'dateTime'            // 特殊类型:自动格式化日期时间
  width?: string \| number      // 列宽度
  fixed?: boolean \| 'left' \| 'right'  // 固定列
  [key: string]: any           // 其他 ElTableColumn 属性
}

🎨 全局配置

使用 CommonConfigProvider 可以全局配置组件样式和行为:

<template>
  <CommonConfigProvider
    :component="{
      placeholder: '暂无数据', // 空值占位
      pagination: {
        defaultPageCount: 1, // 默认起始页
        defaultPageSize: 10, // 默认每页条数
      },
      table: {
        headerCellStyle: {
          // 表头样式
          backgroundColor: '#f1f6ff',
          color: '#000000',
          height: '48px',
        },
      },
      form: {
        submitText: '搜索', // 提交按钮文本
        resetText: '重置', // 重置按钮文本
        formItem: {
          components: {
            width: '200px', // 表单组件宽度
          },
        },
      },
    }"
  >
    <YourApp />
  </CommonConfigProvider>
</template>

🛠️ 开发

环境要求

  • Node.js >= 16.0.0
  • Vue 3.5+
  • Element Plus 2.11+
  • TypeScript 5.9+

依赖说明

Peer Dependencies(需要宿主项目安装)

{
  "peerDependencies": {
    "vue": "^3.5.0",
    "element-plus": "^2.11.5"
  }
}

::: tip 关于 Element Plus 组件库的 CSS 文件已包含所需的 Element Plus 组件样式,你只需要确保项目中安装了 Element Plus 即可,不需要单独导入 Element Plus 的样式。 :::

Dependencies(随组件库一起安装)

{
  "dependencies": {
    "dayjs": "^1.11.18",
    "lodash-es": "^4.17.21",
    "vue-hooks-plus": "^2.4.1"
  }
}

构建产物

组件库构建后生成以下文件:

dist/
├── index.js       # ES Module 格式的组件代码
├── index.d.ts     # TypeScript 类型声明文件
├── index.css      # 组件库样式(包含 Element Plus 组件样式)
└── index.js.map   # Source Map 文件

重要说明

  • 组件库采用 ES Module 格式输出
  • CSS 文件已包含所有所需的 Element Plus 组件样式(约 129KB,gzip 后约 17KB)
  • Vue 和 Element Plus JS 模块被外部化,不会打包进组件库(减小体积)

🎯 使用场景

本组件库特别适用于:

  • 企业后台管理系统 - 大量数据查询、展示、分页场景
  • 数据报表页面 - 需要复杂查询条件的数据展示
  • CRUD 操作页面 - 增删改查的标准业务页面
  • 列表展示页面 - 各种数据列表的展示和筛选

📄 许可证

MIT

📞 支持与反馈

如有问题或建议,请提交 Issue:

🗺️ 更新日志

查看详细的更新日志:CHANGELOG.md


Made with ❤️ by yetuzi