×

vue3-antdv-admin:可能是 Vue3 后台管理系统最完整的开源方案

独孤求败 独孤求败 发表于2026-05-30 12:34:50 浏览7 评论0

抢沙发发表评论

做后台管理系统,前端绕不开三个问题:表单怎么管表格怎么管权限怎么做

这三个问题,每个都能单独写一篇文章。每个团队的做法也不一样:有的手写一堆表单组件,有的用第三方表格库封装,有的权限控制写死在代码里——维护成本高,扩展性差,新人接手更是头疼。

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 生态全家桶

这个项目的技术选型很有诚意,用的都是业界主流方案:

分类
技术
说明
构建工具
Vite 5.x
快速冷启动,HMR 优秀
框架
Vue 3.x
Composition API,灵活组合
UI 库
Ant Design Vue 4.x
企业级 UI 组件库
语言
TypeScript 5.x
类型安全
状态管理
Pinia
轻量级,比 Vuex 更现代
路由
Vue Router 4.x
多标签页支持
图表
ECharts + vue-echarts
数据可视化
样式
UnoCSS
原子化 CSS,比 Tailwind 更快
构建
NX
Monorepo 架构管理

值得注意的是,它采用了 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 的做法是配置驱动

constcolumnsDescType[] = [
  {
title'用户名',
dataIndex'username',
width120,
  },
  {
title'邮箱',
dataIndex'email',
ellipsistrue,
  },
  {
title'角色',
dataIndex'roles',
width150,
  },
  {
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: [{ requiredtruemessage'请输入用户名' }],
    },
    {
label'邮箱',
field'email',
component'Input',
rules: [
        { requiredtruemessage'请输入邮箱' },
        { 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、代码生成——这些功能每一个单拎出来都能写一篇文章,但它们在同一个项目里形成了一套完整体系。

对于需要快速搭建后台管理系统的团队,与其从零开始,不如先看看这套方案。它可能不是最简单的,但它是最完整的。


群贤毕至

访客