Ant Design Vue3 Admin 是什么?怎么用它快速搭后台?
很多做后台开发的同学,一提到“从头搭管理系统框架”就头大——路由、权限、布局、UI 组件全要自己拼,这时候「Ant Design Vue3 Admin」这类后台模板就成了救星,但它到底是什么?怎么用?适合哪些场景?今天用问答形式把这些讲透。
Ant Design Vue3 Admin 到底是什么?
简单说,它是基于 Vue3 + Ant Design Vue 3.x 打造的后台管理系统“脚手架 + 模板”,把后台开发里重复的“基建活”(比如布局框架、权限控制、路由管理、UI 组件库整合)预先做好,让开发者直接往里面塞业务逻辑。
技术栈上,它通常绑定这些工具:
- 框架核心:Vue3(Composition API 写法更灵活) + Vite(打包编译速度比 Webpack 快一大截);
- 状态管理:Pinia(Vuex 的轻量化替代,语法更简洁);
- UI 层:Ant Design Vue 3.x(阿里系开源 UI 库,组件丰富、设计风格统一);
- 其他:路由用 Vue Router 4.x,请求用 Axios 封装,还可能集成代码格式化、提交规范等工程化工具。
场景上,它适合中小项目快速落地后台功能(比如公司内部 CRM、数据看板、权限管理系统),或者用来做“原型验证”(几天内快速做出可演示的后台 Demo),如果团队没精力从头造轮子,选它能省 60% 以上的基础开发时间。
用它做后台开发,核心优势有哪些?
很多人纠结“自己搭还是用模板”,先看它能解决哪些痛点:
UI 组件“开箱即用”,颜值和体验双在线
Ant Design Vue 本身就是大厂级 UI 库,表格、表单、弹窗、树组件这些高频后台组件,不仅样式美观,还自带响应式适配(PC/平板自动调整布局),比如做“用户列表页”,直接用 <a-table> 组件,配置列、数据源、分页,几行代码就能搞定复杂表格,不用自己调样式到崩溃。
基础功能“预封装”,开发效率起飞
后台开发逃不开的「权限控制、路由管理、布局框架」,模板里全给包好了:
- 权限:不同角色(管理员/普通用户)能看哪些页面、点哪些按钮,模板里通常有“角色权限 + 按钮级权限”的示例;
- 路由:动态路由加载、嵌套路由配置、404 页面,直接复用配置逻辑;
- 布局:侧边栏、顶栏、内容区的嵌套结构,甚至标签页缓存(比如用 Keep-Alive 保留表单填写状态)都预先做好。
举个例子:要加个“订单管理”页面,只需在路由文件里配好路径、组件、权限标识,侧边栏自动就会渲染出菜单,完全不用手动写布局嵌套。
生态适配友好,工具链无缝衔接
Vue3 生态里的热门工具,它基本都能无缝整合:
- 用 Vite 做打包,开发时热更新秒级响应,生产打包速度比 Webpack 快 2 - 3 倍;
- Pinia 替代 Vuex 后,状态管理代码量少一半,定义 Store 像写普通 JS 对象;
- 想加代码检查?ESLint + Prettier 配置现成;想做提交规范?Husky + Commitlint 也给备好示例。
文档和社区兜底,不怕踩坑
Ant Design Vue 官方文档本身就很详细(每个组件的 Props、事件、插槽都有示例),而「Ant Design Vue3 Admin」类模板,不管是 GitHub 上的开源项目,还是社区里的二次开发案例,都能找到大量参考,遇到“权限控制不生效”“表格自定义列报错”这类问题,搜一圈基本能找到解法。
从零开始,怎么用它搭建第一个后台?
很多同学下了模板却不知从哪下手,这里拆成「初始化 → 改页面 → 配权限」三步走:
步骤 1:环境准备 + 项目初始化
首先确保本地有 Node.js 16+(Vite 对 Node 版本有要求),然后选包管理器(pnpm、yarn、npm 都行,推荐 pnpm 更省空间)。
初始化项目有两种方式:
- 用官方脚手架(如果有的话):比如执行
pnpm create ant-design-vue-admin@latest my-admin,跟着命令行提示选模板(基础版/带示例版); - 克隆开源仓库:直接去 GitHub 搜热门的 Ant Design Vue3 Admin 仓库(比如某些高星项目),
git clone下来后,执行pnpm install装依赖。
装完后,运行 pnpm dev 启动开发服务,浏览器打开 http://localhost:5173(Vite 默认端口),能看到登录页、首页这些默认页面,说明初始化成功。
步骤 2:项目结构解析,找到“修改入口”
打开项目里的 src 文件夹,核心目录作用要搞懂:
api:放接口请求函数(user.js里写登录、获取用户信息的接口);components:通用组件(比如自定义的搜索框、图表组件);router:路由配置(分静态路由、动态路由,权限控制在这配);store(或stores):Pinia 的 Store 文件(比如用户信息、权限的状态管理);views:页面级组件(每个文件夹对应一个页面,Dashboard是首页,User是用户管理页);layout:整体布局组件(侧边栏、顶栏、页脚的嵌套结构)。
想改登录页?直接去 views/Login 文件夹,改表单逻辑、样式;想加新页面?在 views 里新建文件夹,写好组件后,去 router 里配路由。
步骤 3:改造基础页面,塞进自己的业务
以“改登录逻辑”为例:
- 找到
api/user.js里的登录接口函数,把示例的 Mock 接口换成真实后端接口(export function login(data) { return request.post('/auth/login', data) }); - 打开
views/Login/index.vue,找到表单提交的逻辑,把原来的 Mock 数据验证,换成调用上面的login函数,成功后存 Token 到 Pinia/ localStorage; - 样式不满意?直接在
<style>标签里写自定义样式(用深度选择器:v-deep覆盖 Ant Design 组件的默认样式)。
再比如“加用户列表页”:
- 在
views新建User/UserList.vue,用<a-table>组件写表格结构,配置列、数据源; - 在
router/index.js里加路由:{ path: '/user/list', name: 'UserList', component: () => import('@/views/User/UserList.vue'), meta: { title: '用户列表', requiresAuth: true } // requiresAuth 表示需要登录权限 } - 侧边栏会自动根据路由的
meta.title渲染菜单,不用手动写菜单组件。
步骤 4:权限系统配置,控制“谁能看什么”
后台最核心的权限,模板里一般有两种控制方式:
- 页面级权限:在路由的
meta里加roles(roles: ['admin', 'editor']),然后在路由守卫(router/guard.js)里判断用户角色是否匹配,不匹配就跳 403 页面; - 按钮级权限:用自定义指令
v-permission,比如在按钮上加v-permission="'user:delete'",然后在指令逻辑里判断用户权限列表有没有这个标识,没有就隐藏按钮。
具体实现时,先在 Pinia 的 userStore 里存用户的角色和权限码,然后在路由守卫和自定义指令里读这些数据做判断。
业务开发时,怎么给它扩展功能?
模板只解决基础问题,实际业务要加图表、做国际化、适配移动端,得自己扩展:
自定义业务组件,复用逻辑
后台里经常有“带搜索的下拉框”“弹窗表单”这类重复组件,把它们封装到 components 里:
- 新建
components/SearchSelect/index.vue,写好下拉框 + 搜索逻辑; - 在需要的页面用
import SearchSelect from '@/components/SearchSelect'引入,传 Props 控制数据源、占位符。
这样下次其他页面要用,直接复用,不用重复写逻辑。
接口统一管理,拦截器处理 Token
后台接口都要带 Token,在 utils/request.js(Axios 封装文件)里加请求拦截器:
request.interceptors.request.use(config => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
响应拦截器处理错误(Token 过期跳登录):
request.interceptors.response.use(
res => res.data,
err => {
if (err.response.status === 401) {
// 跳登录页,清空 Token
localStorage.removeItem('token')
router.push('/login')
}
return Promise.reject(err)
}
)
然后所有接口都通过这个封装的 request 发请求,统一管理更省心。
集成图表(以 ECharts 为例)
后台少不了数据看板,集成 ECharts 步骤:
- 装依赖:
pnpm add echarts; - 封装图表组件
components/Chart/LineChart.vue:<template> <div ref="chartRef" class="chart" /> </template> <script setup> import { onMounted, ref } from 'vue' import * as echarts from 'echarts' const chartRef = ref(null) onMounted(() => { const chart = echarts.init(chartRef.value) chart.setOption({ xAxis: { type: 'category', data: ['Mon', 'Tue'] }, yAxis: { type: 'value' }, series: [{ data: [120, 200], type: 'line' }] }) }) </script> <style scoped>.chart { height: 300px; }</style> - 在页面里引入:
<LineChart />,传 Props 动态改数据。
移动端适配,让后台也能“小屏用”
Ant Design Vue 组件本身支持响应式,但布局可能要调整:
- 用 CSS 媒体查询:在
styles/responsive.less里写@media (max-width: 768px) { ... },调整侧边栏折叠、字体大小; - 用
rem方案:在index.html里加动态设置根字体大小的脚本,根据设备宽度计算font-size,然后所有样式用rem单位。
国际化(多语言切换)
后台面向不同地区用户时,要做多语言:
- 装
vue-i18n:pnpm add vue-i18n; - 在
locales文件夹建en-US.js、zh-CN.js,写语言包:// zh-CN.js export default { login: '登录', logout: '退出' } - 在 Pinia 里存当前语言,写切换语言的方法;
- 在组件里用
$t('login')渲染文案,配合下拉框切换语言。
用它开发,容易踩哪些坑?怎么避?
模板不是银弹,这些“天坑”得提前防:
依赖版本冲突:Ant Design Vue 和 Vue3 版本不兼容
现象:装完依赖启动报错,Vue.use is not a function”。
原因:Ant Design Vue 3.x 必须和 Vue3 配套,若 package.json 里 Vue 是 2.x,或者 Ant Design Vue 是 2.x,就会冲突。
解决:检查 package.json,确保 vue 版本是 ^3.2.0,ant-design-vue 是 ^3.0.0,然后删 node_modules 重新装依赖。
路由嵌套 + 布局冲突:子路由页面不显示或重复渲染
现象:配置嵌套路由后,子页面要么不显示,要么顶栏/侧边栏重复出现。
原因:布局组件(layout 里的 MainLayout.vue)的 <router-view> 位置不对,或者子路由没配对父路由的 component。
解决:父路由的 component 要指向布局组件,子路由的 component 指向页面组件。
{
path: '/admin',
component: MainLayout, // 布局组件,包含侧边栏、顶栏
children: [
{ path: 'dashboard', component: Dashboard } // 子页面,渲染到 MainLayout 的 <router-view> 里
]
}
权限控制颗粒度过粗:按钮权限没做细
现象:普通用户能看到“删除”按钮,但点了没权限。
原因:只做了页面级权限,没控制按钮。
解决:写自定义指令 v-permission,在指令里判断用户权限列表:
// directive/permission.js
export default {
mounted(el, binding) {
const { value } = binding
const permissions = useUserStore().permissions // 从 Pinia 取权限列表
if (value && !permissions.includes(value)) {
el.parentNode && el.parentNode.removeChild(el) // 没权限就删除按钮
}
}
}
然后在按钮上加 v-permission="'user:delete'"。
打包体积过大:生产环境加载慢
现象:pnpm build 后包体积几百 KB 甚至更大,首屏加载慢。
原因:没做 Tree-Shaking(摇树优化),或第三方库没按需引入。
解决:
- 用 Vite 的
build.rollupOptions分析包体积:// vite.config.js export default defineConfig({ build: { rollupOptions: { output: { manualChunks(id) { if (id.includes('node_modules')) { return id.split('node_modules/')[1].split('/')[0] } } } } } }) - 配置 Ant Design Vue 按需引入:用
unplugin-vue-components插件,自动按需加载组件,减少打包体积。
样式覆盖失效:改不了 Ant Design 组件的默认样式
现象:在组件里写 style 改 <a-button> 颜色,没效果。
原因:Ant Design Vue 用 Less 写样式,且组件样式是作用域隔离的。
解决:
- 用深度选择器
:v-deep:<style scoped> ::v-deep .ant-button { background: red; } </style> - 全局覆盖:在
styles/override.less里写 Less 变量(@primary-color: #1890ff;改主题色),然后在vite.config.js里配置 Ant Design Vue 的 Less 变量覆盖。
哪些场景适合选它?哪些不适合?
最后得搞清楚“边界”,别为了用模板而硬套:
适合的场景
- 中小团队快速迭代后台:需求变化快,需要省基建时间,把精力放业务逻辑;
- 内部工具系统:比如公司的权限管理、数据报表、工单系统,对 UI 一致性要求高;
- 原型验证/ Demo 开发:几天内做出可交互的后台 Demo,给客户或领导演示;
- 对前端工程化不太熟的团队:模板里的 ESLint、提交规范、分支管理这些现成,能倒逼团队规范。
不适合的场景
- 纯展示型前端项目:比如官网、博客,后台模板的布局和组件库侧重“管理”,展示型需求要更灵活的页面结构;
- 超大型后台项目:如果团队有百人,需求极复杂(比如淘宝后台),模板的架构可能撑不住,得自己深度定制;
- 特殊交互需求项目:比如需要 3D 可视化、复杂动效的后台,Ant Design Vue 的组件风格和交互逻辑可能限制发挥,不如自己搭技术栈。
Ant Design Vue3 Admin 是后台开发的“加速器”,但得先搞懂它的原理、优势和坑点,才能用得顺手,如果是中小项目、想省基建时间,选它准没错;但要是项目复杂度上天,就得权衡利弊,下次再有人问“后台开发怎么选模板”,把这篇甩给他~
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网


