基于 Vue 3 + Element Plus 的企业级中后台 CRUD 组件库 — 配置化驱动表单、表格、弹窗全链路联动
在线文档 · Playground · 更新日志
- 配置化开发 — JSON 配置生成复杂表单与表格,替代大量模板代码
- 表单↔表格↔弹窗联动 — 查询/重置/分页全自动,零事件代码
- 编程式弹窗 —
useDialogHook 命令式调用,支持 JSX 渲染、嵌套弹窗 - 自适应高度 —
ResizeObserver自动重算表格高度 - 跨页选择 —
rowkey+cachePageSelection解决分页选择丢失 - 任意后端适配 —
configTableOut+qrcb配置化适配不同后端响应格式 - TypeScript — 完整类型定义
npm install es-plus-ui element-plus @element-plus/icons-vueimport { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import ESPlus from 'es-plus-ui'
import 'es-plus-ui/dist/style.css'
import App from './App.vue'
const app = createApp(App)
app.use(ElementPlus)
app.use(ESPlus)
app.mount('#app')<template>
<es-table
:columns="columns"
:options="options"
v-model:data-source="tableData"
v-model:pagination="pagination"
>
<es-form :model="form" :form-item-list="formItems" :config-btn="btns" />
</es-table>
</template>
<script setup>
import { reactive, ref } from 'vue'
const form = reactive({ keyword: '' })
const tableData = ref([])
const pagination = ref({ current: 1, pageSize: 10, total: 0 })
const formItems = [
{ prop: 'keyword', label: '关键词', formtype: 'Input', span: 6 }
]
const btns = [
{ name: '查询', type: 'primary', key: 'query', triggerEvent: true },
{ name: '重置', key: 'reset', triggerEvent: true }
]
const columns = [
{ prop: 'name', label: '姓名' },
{ prop: 'status', label: '状态' }
]
const options = {
border: true,
httpRequest: async (params) => { /* 调用后端 API */ }
}
</script>表单嵌套在表格内,查询/重置/分页全自动联动,无需手动编写事件处理。
| 组件 | 说明 |
|---|---|
| EsForm | 配置化表单 — 13 种输入类型,动态显隐,异步数据加载,折叠展开 |
| EsTable | 配置化表格 — 远程数据,跨页选择,自适应高度,多级表头 |
| useDialog | 编程式弹窗 — JSX 渲染,表单集成,嵌套弹窗 |
| EsDialog | 增强弹窗 — 拖拽,全屏切换,自定义渲染 |
| SvgIcon | SVG 图标组件 |
完整 API 文档见 packages/es-plus/README.md
es-plus/
├── packages/es-plus/ # 组件库源码(npm: es-plus-ui)
├── es-plus-docs/ # 文档站点(Vite + Vue 3)
└── es-eui/ # Vue 2 + Element UI 版本
# 组件库构建
cd packages/es-plus && npm install && npm run build
# 文档站点开发
cd es-plus-docs && npm install && npm run dev- es-eui — Vue 2 + Element UI 版本
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建功能分支:
git checkout -b feature/your-feature - 提交更改:
git commit -m 'feat: add your feature' - 推送分支:
git push origin feature/your-feature - 提交 Pull Request