这三个问题,每个都能单独写一篇文章。每个团队的做法也不一样:有的手写一堆表单组件,有的用第三方表格库封装,有的权限控制写死在代码里——维护成本高,扩展性差,新人接手更是头疼。
vue3-antdv-admin 是一个基于 Vue3 + Ant Design Vue 的后台管理系统,它把这三个问题的解决方案都做好了,而且不是简单堆砌,是真正能用于生产级别的实现。
https://github.com/buqiyuan/vue3-antdv-admin
它是什么
vue3-antdv-admin 是一套基于 Vite5 + Vue3 + Ant Design Vue4 + TypeScript5 的后台管理前端解决方案。
它的定位很清晰:不做底层轮子,只做上层建筑。底层技术栈你说了算(Vue3、TypeScript 这些是固定的),但在业务层面,它提供了:
动态表格(配置化,JSON 驱动)
动态表单(配置化,JSON 驱动) 动态路由(权限驱动,菜单即路由) 按钮级权限控制 多标签页路由 国际化(i18n) 可视化配置面板
换句话说:它把后台管理系统里 80% 的重复工作做成了配置化,剩下的 20% 特殊逻辑你再自己写。
技术栈:Vue3 生态全家桶
这个项目的技术选型很有诚意,用的都是业界主流方案:
值得注意的是,它采用了 Monorepo 架构,主项目下有多个子包:
@admin-pkg/components— 业务组件库 @admin-pkg/vite-plugin-msw— Mock Service Worker 插件 @admin-pkg/vite-plugin-http2-proxy— HTTP2 代理插件 @admin-pkg/vite-plugin-tinymce-resource— 富文本编辑器资源插件
这种架构让项目扩展性很强,新增功能只需要加一个包。
核心亮点:动态表格与动态表单
这是 vue3-antdv-admin 最值得说的两个功能。
动态表格:配置即页面
传统做法:每个列表页都要写 a-table、写 columns、写 dataSource、写分页逻辑。二十个列表页,代码量惊人,维护困难。
vue3-antdv-admin 的做法是配置驱动:
constcolumns: DescType[] = [
{
title: '用户名',
dataIndex: 'username',
width: 120,
},
{
title: '邮箱',
dataIndex: 'email',
ellipsis: true,
},
{
title: '角色',
dataIndex: 'roles',
width: 150,
},
{
title: '状态',
dataIndex: 'status',
render({ record }) {
returnh(Switch, { checked: record.status === 1 });
},
},
];
你只需要定义 columns 的配置,表格的分页、排序、筛选、导出全部自动处理。列宽自适应、列设置工具栏(拖拽排序、显隐控制)、单元格编辑——这些功能都是内置的,不需要额外开发。
而且它支持行内编辑和批量操作:选中若干行,一键删除、导出、审批。常规后台系统需要的操作,都覆盖了。
动态表单:JSON 生成表单
表单和表格一样,大部分后台系统的表单都是重复劳动:表单字段、校验规则、布局方式,这些每次都差不多。
vue3-antdv-admin 的动态表单接受 JSON 配置,自动生成带校验的表单:
const formSchema = {
layout: 'vertical',
columns: [
{
label: '用户名',
field: 'username',
component: 'Input',
rules: [{ required: true, message: '请输入用户名' }],
},
{
label: '邮箱',
field: 'email',
component: 'Input',
rules: [
{ required: true, message: '请输入邮箱' },
{ type: 'email', message: '邮箱格式不正确' },
],
},
{
label: '角色',
field: 'roleId',
component: 'Select',
componentProps: {
options: roles,
},
},
],
};
配置好之后,表单的渲染、校验、提交全部自动处理。支持级联、动态联动、条件显隐等复杂场景。
权限体系:菜单即路由,路由即权限
很多后台系统的权限控制是"半吊子"的:只控制到菜单级别,菜单能看见就行,具体按钮能不能点,靠的是后端判断,前端只是"看起来"做了权限控制。
vue3-antdv-admin 的权限体系是从前端到后端贯穿的:
路由级别:菜单即路由,路由由后端返回,前端动态注册。用户能看到哪些菜单,完全由后端权限码控制。
按钮级别:每个操作按钮都有对应的权限码,用户有没有这个按钮的权限,前端直接控制显隐,后端也同步校验。两边都对上了,才是真正的安全。
数据级别:后端接口返回的数据已经过滤过了,用户只能看到自己有权限看到的数据。前端控制显隐是"遮羞布",后端过滤才是"真安全"。
这套权限体系,配合作者的后端项目 nest-admin 使用,才是完整方案。当然,前端部分是解耦的,你也可以接自己的后端。
多标签页路由:做加法容易,做减法难
后台系统的标签页(Tabs)是个看似简单、实则复杂的功能。
做加法容易:新页面就加一个 Tab。但做减法就难了:关掉一个 Tab 之后,其他 Tab 的状态要不要保留?刷新页面呢?返回呢?
vue3-antdv-admin 实现了完整的标签页生命周期管理:
打开新页面 → 加 Tab 关闭当前 Tab → 切到上一个 Tab,状态保留 刷新 → 当前 Tab 数据刷新,其他 Tab 状态保留 关闭其他 Tab → 可选保留当前或保留指定
这套逻辑在业界有很多实现方式,vue3-antdv-admin 的实现是基于 KeepAlive + Pinia 的,状态管理清晰,缓存策略可配置。
开发体验:TypeScript + ESLint + Mock
这个项目的开发体验也值得一说。
TypeScript 严格模式:项目使用了 TypeScript 5.x,并且开启了严格类型检查。这对代码质量有帮助,新人上手也能通过类型提示快速理解代码。
ESLint + UnoCSS ESLint 插件:代码风格统一,格式化自动化。
MSW(Mock Service Worker):前端 Mock API 的方案有很多,MSW 是其中最接近真实场景的——它拦截的是实际的网络请求,在浏览器里和在后端里行为完全一致。不需要改任何业务代码,直接切换到真实后端。
pnpm dev # 启动开发服务器,MSW 自动生效
OpenAPI 代码生成:项目自带 @umijs/openapi,可以基于 Swagger 文档自动生成 TypeScript 类型和 API 请求函数。后端接口改了,跑一下命令,前端类型同步更新。
配套后端:nest-admin
vue3-antdv-admin 的作者同时维护了一个 nest-admin 项目,基于 NestJS + TypeORM + MySQL/PostgreSQL。
这个后端是专门为前端项目设计的:
权限体系与前端一一对应 数据库设计直接映射前端表单和表格 提供完整的 CRUD 接口 支持代码生成
如果你想快速搭一个完整的后台管理系统,用 vue3-antdv-admin + nest-admin,从前端到后端都有,是目前开源社区里难得的完整方案。
结语
vue3-antdv-admin 不是一个"看起来能用但实际差很远"的练手项目。它是一个真正用于生产的后台管理前端方案。
动态表格、动态表单、权限体系、多标签页、Mock API、代码生成——这些功能每一个单拎出来都能写一篇文章,但它们在同一个项目里形成了一套完整体系。
对于需要快速搭建后台管理系统的团队,与其从零开始,不如先看看这套方案。它可能不是最简单的,但它是最完整的。