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

@aspire-ui/element-component-pro

v1.0.5

Published

Element UI 二次封装组件库,基于 Vue 2.7 + TypeScript + setup 语法糖,实现 VbenAdmin 风格的 Pro 组件

Downloads

432

Readme

Element Component Pro

基于 Element UI 的二次封装组件库,参考 VbenAdmin 的 Ant Design 版本,提供 Pro 系列增强组件。

技术栈

  • Vue 2.7 - 支持 Composition API 和 <script setup> 语法糖
  • TypeScript - 完整类型支持
  • Element UI - 基础 UI 组件

组件列表

| 组件 | 说明 | |------|------| | ProTable | 增强表格,集成搜索、工具栏、分页 | | ProForm | Schema 驱动的表单,支持栅格布局 | | ProCard | 卡片容器 | | ProDescriptions | 详情描述列表 |

安装

npm install element-component-pro element-ui vue

使用

全局注册

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import ElementComponentPro from 'element-component-pro'

Vue.use(ElementUI)
Vue.use(ElementComponentPro)

按需引入

<script setup lang="ts">
import { ProTable, ProForm } from 'element-component-pro'
</script>

<template>
  <ProTable :columns="columns" :request="fetchData" />
</template>

ProTable

<template>
  <ProTable
    :columns="columns"
    :api="fetchTableData"
    row-key="id"
    :pagination="{ pageSize: 10 }"
  />
</template>

<script setup lang="ts">
import { ref } from 'vue'
import { ProTable } from 'element-component-pro'
import type { ProColumn } from 'element-component-pro'

const columns: ProColumn[] = [
  { title: 'ID', dataIndex: 'id', width: 80, valueType: 'index' },
  { title: '姓名', dataIndex: 'name', width: 120 },
  {
    title: '状态',
    dataIndex: 'status',
    valueType: 'select',
    valueEnum: { 1: { text: '启用' }, 0: { text: '禁用' } },
  },
]

const fetchTableData = async (params) => {
  const res = await api.getList(params)
  // ProTable 约定返回 { list, total },与 VbenAdmin 一致
  return { list: res.list, total: res.total }
}
</script>

ProTable + useProTable(tableAction)

参考 VbenAdmin 的 useTable,ProTable 提供 useProTable Hook,对外暴露 tableAction 方法。可选传入 propsuseProTable(props) 支持传入 ProTablePropsRef<ProTableProps>,会在表格 @register 时通过 setProps 应用,且 props 为响应式时变更会自动同步到表格(类型 UseProTablePropsReactive)。

<template>
  <ProTable
    @register="registerTable"
    title="用户列表"
    :columns="columns"
    :api="fetchTableData"
    row-key="id"
    :row-selection="{ type: 'checkbox' }"
  />
</template>

<script setup lang="ts">
import { ProTable, useProTable } from 'element-component-pro'
import type { ProColumn, TableActionType } from 'element-component-pro'

const columns: ProColumn[] = [
  { title: 'ID', dataIndex: 'id', width: 80 },
  { title: '姓名', dataIndex: 'name', width: 120 },
  { title: '年龄', dataIndex: 'age', width: 80 },
]

const [registerTable, tableAction] = useProTable()

const reload = () => {
  // 支持传入 page / pageSize / searchInfo,与 VbenAdmin 对齐
  tableAction.reload({ page: 1 })
}
</script>

TableActionType 常用方法(与 VbenAdmin BasicTable 对齐):

| 方法 | 说明 | |------|------| | setProps | 动态更新 ProTable Props,例如列配置、分页配置等 | | reload(opt?: FetchParams) | 重新请求数据,支持指定页码、每页条数、搜索参数 | | setLoading(loading: boolean) | 手动切换表格 loading 状态 | | getDataSource() / setTableData(data) | 获取 / 设置当前表格数据 | | getRawDataSource() | 获取接口原始返回数据(未经过 afterFetch) | | getColumns() / setColumns(cols) | 获取 / 设置列配置,支持传 ProColumn[] 或列 key 数组 | | setPagination(info) | 设置分页信息(page、pageSize、total) | | getSelectRowKeys() / getSelectRows() | 获取当前选中行的 keys / 行数据 | | getRowSelection() | 获取当前行选择配置(rowSelection) | | setSelectedRowKeys(keys) / clearSelectedRowKeys() | 设置 / 清空选中行 | | deleteSelectRowByKey(key) | 取消勾选指定 key 的行 | | updateTableDataRecord(rowKey, record) | 按 rowKey 更新某一行(局部刷新,不重新请求接口) | | deleteTableDataRecord(rowKey) | 按 rowKey 删除行(支持单个或数组) | | insertTableDataRecord(record, index?) | 在指定位置插入一行数据 | | getPaginationRef() | 获取当前分页信息 { page, pageSize, total } | | getShowPagination() / setShowPagination(show) | 获取 / 设置是否显示分页 | | expandAll() / collapseAll() | 展开 / 折叠树形表格所有行 |

ProTable 操作列 + TableAction 组件

参考 VbenAdmin 的 TableAction,ProTable 提供了独立的 TableAction 组件,用于快速渲染「编辑 / 删除 / 更多」等操作按钮。

<template>
  <ProTable
    title="操作列示例"
    :columns="columns"
    :data-source="data"
    :action-column="{ title: 'Action', dataIndex: 'action', width: 220, fixed: 'right' }"
  >
    <template #bodyCell="{ column, record }">
      <!-- 只处理 action 列,其它列仍按默认方式渲染(与 Vben bodyCell 行为一致) -->
      <template v-if="column.dataIndex === 'action'">
        <TableAction
          :actions="[
            {
              label: '编辑',
              onClick: () => handleEdit(record),
            },
          ]"
          :drop-down-actions="[
            {
              label: '删除',
              color: 'error',
              popConfirm: {
                title: '确认删除该行?',
                confirm: () => handleDelete(record),
              },
            },
          ]"
        />
      </template>
    </template>
  </ProTable>
</template>

<script setup lang="ts">
import { ProTable, TableAction } from 'element-component-pro'
import type { ProColumn } from 'element-component-pro'

const columns: ProColumn[] = [
  { title: '姓名', dataIndex: 'name', width: 120 },
  { title: '年龄', dataIndex: 'age', width: 80 },
  { title: '地址', dataIndex: 'address', minWidth: 200 },
]

const data = [
  { id: 1, name: '张三', age: 28, address: '北京市朝阳区' },
  { id: 2, name: '李四', age: 32, address: '上海市浦东新区' },
]

const handleEdit = (record: Record<string, unknown>) => {
  console.log('编辑', record)
}
const handleDelete = (record: Record<string, unknown>) => {
  console.log('删除', record)
}
</script>

TableActionItem 支持的字段(与 VbenAdmin ActionItem 对齐):

  • label:按钮文本
  • icon:图标 class(可传 Element UI 图标或自定义 iconfont)
  • colorsuccess / error / warning,内部映射为对应按钮类型
  • type:直接透传给 el-buttontype
  • props:额外的按钮 props
  • disabled:是否禁用
  • divider:是否在该操作后显示分隔线
  • ifShow:是否显示当前操作项(支持函数)
  • tooltip:字符串或 Tooltip 配置对象
  • popConfirm:气泡确认配置 { title, okText, cancelText, confirm, cancel }
  • onClick:点击回调

ProForm

参考 Vben Admin Form,支持 Schema 驱动、useForm、render/slot、动态显示等。

基础用法

<template>
  <ProForm
    :schemas="schemas"
    :initial-values="{ name: '' }"
    :base-col-props="{ span: 8 }"
    @submit="handleSubmit"
  />
</template>

<script setup lang="ts">
import { ProForm } from 'element-component-pro'
import type { ProFormSchema } from 'element-component-pro'

const schemas: ProFormSchema[] = [
  { field: 'name', label: '姓名', component: 'input', required: true, colProps: { span: 8 } },
  {
    field: 'status',
    label: '状态',
    component: 'select',
    componentProps: {
      options: [
        { label: '启用', value: 1 },
        { label: '禁用', value: 0 },
      ],
    },
    colProps: { span: 8 },
  },
]

const handleSubmit = (values) => {
  console.log(values)
}
</script>

useForm 方式(参考 Vben Admin)

<template>
  <ProForm @register="register" @submit="handleSubmit" />
</template>

<script setup lang="ts">
import { ProForm, useForm } from 'element-component-pro'

const [register, formActions] = useForm({
  schemas: [...],
  labelWidth: '120px',
  actionColOptions: { span: 24 },
})

// 支持 ref/computed 响应式 props
const formProps = ref({ schemas: [...] })
const [register2] = useForm(formProps)

const handleSubmit = (values) => {
  console.log(values)
}
</script>

useForm 方法(与 Vben Admin 对齐):

| 方法 | 说明 | |------|------| | getFieldsValue | 获取表单值 | | setFieldsValue | 设置表单字段值 | | resetFields | 重置表单 | | validate | 校验整个表单 | | validateFields | 校验指定表单项 | | submit | 提交表单 | | scrollToField | 滚动到对应字段 | | clearValidate | 清空校验 | | updateSchema | 更新 schema | | appendSchemaByField | 插入 schema | | removeSchemaByField | 删除 schema | | setProps | 设置表单 Props |

Schema 高级特性

  • render: 自定义渲染
  • slot: 使用具名插槽自定义
  • ifShow / show: 动态显示(ifShow 不渲染 DOM)
  • dynamicDisabled: 动态禁用
  • dynamicRules: 动态校验规则
  • labelWidth: 支持字段级标签宽度,覆盖表单级 labelWidth
  • v-model: 支持 modelValue 双向绑定,initialValues 仅补齐缺失字段
  • useForm + v-model: 编程式 setFieldsValue/resetFields 与受控 modelValue 保持同步
  • componentProps: 支持函数,可获取 formModel、formActionType

示例与文档

开发

# 安装依赖
npm install

# 开发预览
npm run dev

# 构建
npm run build

License

MIT