- 前端
- 企业应用
【免费下载链接】RuoYi-Vue3
:tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
RuoYi(若依)是 Java 领域知名度极高的快速开发框架,本仓库即其官方 Vue3 前端版本 RuoYi v3.9.2,采用 Vue 3 + Element Plus + Vite 构建。本文以仓库 README.md 为主线,完整覆盖版本选型、环境搭建、多环境构建、接口代理与内置功能清单,并深入权限路由、请求封装、全局配置等关键源码,帮助你从“能跑起来”进阶到“看得懂、改得动”。
平台简介:若依 Vue3 前端是什么
仓库 README 明确说明:本仓库为前端技术栈 Vue 3 + Element Plus + Vite 版本,定位是“基于 SpringBoot + Vue3 前后端分离的 Java 快速开发框架”的官方前端部分。与之配套的后端代码仓库为 RuoYi-Vue 或 RuoYi-Vue-fast,二者共同构成一套完整的管理系统解决方案:后端负责认证、权限、数据接口,前端负责页面渲染、路由控制与交互。
从前端仓库自身的目录结构看,其能力分布非常清晰:
- src/api:按模块划分的接口请求封装,覆盖 system(用户、部门、岗位、菜单、角色、字典、参数、公告)、monitor(缓存、定时任务、日志、在线用户、服务监控)、tool(代码生成)等;
- src/views:与 README“内置功能”一一对应的页面组件;
- src/router、src/permission.js、src/store/modules/permission.js:路由与权限控制核心;
- src/utils/request.js:基于 axios 的统一请求封装;
- src/settings.js:布局与主题等全局配置;
- vite:Vite 构建期插件(自动导入、SVG 图标、压缩等)。
当前仓库版本号 v3.9.2,可以从 package.json 的version字段以及 README 标题确认。
三个前端版本横向对比:如何选择
README 提供了一张“版本对比”表,列出若依前端并行维护的三个主要演进版本,是选型时最直接的参考依据:
| 项目名称 | RuoYi-Vue | RuoYi-Vue3 | RuoYi-Vue3-TypeScript |
|---|---|---|---|
| 前端框架 | Vue 2 | Vue 3 | Vue 3 |
| 脚本语言 | JavaScript | JavaScript | TypeScript |
| 构建工具 | Vue CLI | Vite | Vite |
| UI 组件库 | Element UI | Element Plus | Element Plus |
| 状态管理 | Vuex | Pinia | Pinia |
| 路由管理 | Vue Router 3 | Vue Router 4 | Vue Router 4 |
| 核心特点 | 1. 技术栈经典稳定 2. 社区资料丰富 3. 当前维护重心已转移 | 1. 现代前端技术栈 2. 开发体验与性能更优 3. 官方主推的活跃版本 | 1. 类型加持,减少沟通成本 2. 开发时有提示,效率更高 3. 多人协作企业级开发项目 |
选型建议(基于 README 描述):追求稳定与既有资料复用可选 Vue 2 版;需要现代开发体验、性能更优,选择本仓库的 Vue3(JavaScript)版;企业级多人协作、追求类型安全则选 TypeScript 分支。本仓库的依赖清单也印证了“现代技术栈”的定位,例如 package.json 中直接依赖了vue@3.5.26、element-plus@2.13.1、pinia@3.0.4、vue-router@4.6.4、vite@6.4.1、axios@1.13.2、echarts@5.6.0等。
前端环境搭建与启动:从克隆到跑通
README 给出了完整的运行步骤,结合仓库实际脚本,完整的启动流程如下:
# 克隆项目 git clone https://gitcode.com/yangzongzhuan/RuoYi-Vue3.git # 进入项目目录 cd RuoYi-Vue3 # 安装依赖(使用 npm 镜像源加速) yarn --registry=https://registry.npmmirror.com # 启动开发服务 yarn dev # 构建测试环境 yarn build:stage # 构建生产环境 yarn build:prod启动后前端默认访问地址为http://localhost:80(见 README)。这一地址并非随意设定——在 vite.config.js 中,开发服务器的port: 80、host: true、open: true三项配置分别指定了端口、监听所有网卡地址与启动后自动打开浏览器。如果你的机器上 80 端口已被占用,可修改此处端口后重启。
package.json 的scripts与 README 命令一一对应,且多出preview(vite preview,用于本地预览构建产物):
| 命令 | 对应脚本 | 作用 |
|---|---|---|
yarn dev | vite | 启动开发服务器 |
yarn build:stage | vite build --mode staging | 以 staging 模式构建测试环境产物 |
yarn build:prod | vite build | 构建生产环境产物 |
yarn preview | vite preview | 本地预览构建产物 |
多环境配置体系:.env 文件与构建模式
若依 Vue3 前端通过 Vite 的多环境机制管理配置,仓库中提供了三个环境文件,内容如下(与仓库一致):
.env.development(开发环境)
# 页面标题 VITE_APP_TITLE = 若依管理系统 # 开发环境配置 VITE_APP_ENV = 'development' # 若依管理系统/开发环境 VITE_APP_BASE_API = '/dev-api'.env.production(生产环境)
# 页面标题 VITE_APP_TITLE = 若依管理系统 # 生产环境配置 VITE_APP_ENV = 'production' # 若依管理系统/生产环境 VITE_APP_BASE_API = '/prod-api' # 是否在打包时开启压缩,支持 gzip 和 brotli VITE_BUILD_COMPRESS = gzip.env.staging(测试环境)
# 页面标题 VITE_APP_TITLE = 若依管理系统 # 生产环境配置 VITE_APP_ENV = 'staging' # 若依管理系统/生产环境 VITE_APP_BASE_API = '/stage-api' # 是否在打包时开启压缩,支持 gzip 和 brotli VITE_BUILD_COMPRESS = gzip这些变量的消费路径可以从源码逐一印证:
- VITE_APP_TITLE:被 src/settings.js 通过
import.meta.env.VITE_APP_TITLE读取,作为网页标题使用; - VITE_APP_BASE_API:被 src/utils/request.js 中创建的 axios 实例作为
baseURL,即所有接口请求的统一前缀; - VITE_APP_ENV:在 vite.config.js 中通过
loadEnv(mode, process.cwd())读取,用于决定base路径; - VITE_BUILD_COMPRESS:由 vite/plugins/compression.js 对应的构建插件消费,决定是否在打包时开启 gzip/brotli 压缩(该插件仅在
command === 'build'时由 vite/plugins/index.js 注入)。
开发服务器与接口代理:前后端联调的关键
src/utils/request.js 中 axios 实例的baseURL取VITE_APP_BASE_API,开发环境为/dev-api,因此请求形如/dev-api/system/user/list。这些带前缀的请求需要被 Vite 开发服务器代理到真实后端,配置位于 vite.config.js 的server.proxy:
server: { port: 80, host: true, open: true, proxy: { '/dev-api': { target: baseUrl, // 后端接口地址 changeOrigin: true, rewrite: (p) => p.replace(/^\/dev-api/, '') // 去掉 /dev-api 前缀再转发 }, // springdoc proxy '^/v3/api-docs/(.*)': { target: baseUrl, changeOrigin: true, } } }其中baseUrl定义在配置文件顶部:const baseUrl = 'http://localhost:8080' // 后端接口。这意味着:
- 后端默认运行在
http://localhost:8080; - 前端所有
/dev-api/**请求会去掉前缀后转发到后端对应路径; ^/v3/api-docs/(.*)的正则代理用于转发 SpringDoc(OpenAPI)文档接口,支撑“系统接口”功能的调试。
联调要点:如果后端地址不是 8080,或后端部署在远程服务器,只需修改vite.config.js中的baseUrl即可,无需改动任何业务代码;同理,生产环境若使用/prod-api前缀,需在 Nginx 中配置对应的反向代理。
构建配置与产物优化
src/utils/request.js 之外,构建相关配置同样集中在 vite.config.js 的build段:
build: { sourcemap: command === 'build' ? false : 'inline', outDir: 'dist', assetsDir: 'assets', chunkSizeWarningLimit: 2000, rollupOptions: { output: { chunkFileNames: 'static/js/[name]-[hash].js', entryFileNames: 'static/js/[name]-[hash].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]' } } }几点实践含义:
- outDir 为
dist:生产构建产物输出到dist目录,部署时直接将该目录作为站点根目录; - 产物按类型归置:JS 统一输出到
static/js/、其他静态资源按扩展名输出到static/[ext]/,并带内容哈希便于长效缓存; - chunkSizeWarningLimit 为 2000:将 chunk 体积告警阈值提高到 2000KB,避免后台管理系统常见的“单个 chunk 偏大”误报;
- 生产环境不生成 sourcemap、开发环境内联:兼顾线上体积与本地调试;
- base 路径:
base: VITE_APP_ENV === 'production' ? '/' : '/',默认部署在域名根路径;若需部署在子路径(如/admin/),README 及配置注释提示可在此调整。
构建期插件在 vite/plugins/index.js 中统一组装:基础@vitejs/plugin-vue之外,还包括 unplugin-auto-import(auto-import.js)、setup-extend、vite-plugin-svg-icons(svg-icon.js)以及仅在构建时启用的压缩插件 compression.js。
内置功能清单:十八项开箱即用的模块
README 详细罗列了 18 项内置功能。将清单与仓库源码对照,可以确认每个功能都有对应的页面与 API 模块:
- 用户管理:系统操作者配置。页面见 src/views/system/user/index.vue,接口见 src/api/system/user.js;
- 部门管理:组织机构树形配置,支持数据权限。见 src/views/system/dept/index.vue 与 src/api/system/dept.js;
- 岗位管理:配置用户所属职务。见 src/views/system/post/index.vue 与 src/api/system/post.js;
- 菜单管理:配置菜单、操作权限与按钮权限标识。见 src/views/system/menu/index.vue 与 src/api/system/menu.js;
- 角色管理:角色菜单权限分配、按机构划分数据范围。见 src/views/system/role 与 src/api/system/role.js;
- 字典管理:维护系统中较固定的数据。见 src/views/system/dict 与 src/api/system/dict;
- 参数管理:系统动态配置常用参数。见 src/views/system/config/index.vue 与 src/api/system/config.js;
- 通知公告:通知公告发布维护。见 src/views/system/notice 与 src/api/system/notice.js;
- 操作日志:正常操作与异常信息的日志记录查询。见 src/views/monitor/operlog 与 src/api/monitor/operlog.js;
- 登录日志:登录日志查询(含登录异常)。见 src/views/monitor/logininfor 与 src/api/monitor/logininfor.js;
- 在线用户:当前活跃用户状态监控。见 src/views/monitor/online 与 src/api/monitor/online.js;
- 定时任务:在线增删改任务调度,含执行结果日志。见 src/views/monitor/job、src/api/monitor/job.js 与 jobLog.js;
- 代码生成:前后端代码(java、html、xml、sql)生成与 CRUD 下载。见 src/views/tool/gen 与 src/api/tool/gen.js;
- 系统接口:根据业务代码自动生成 API 接口文档。见 src/views/tool/swagger/index.vue,联调依赖 vite 配置中的 springdoc 代理;
- 服务监控:监视 CPU、内存、磁盘、堆栈等信息。见 src/views/monitor/server 与 src/api/monitor/server.js;
- 缓存监控:缓存信息查询与命令统计。见 src/api/monitor/cache.js;
- 在线构建器:拖动表单元素生成 HTML 代码。从源码结构看,其核心工具集位于 src/utils/generator(含 render.js、drawingDefault.js、icon.json 等);
- 连接池监视:监视数据库连接池状态、分析 SQL 定位性能瓶颈。见 src/views/monitor/druid。
权限与路由纵深:动态路由是怎么“长”出来的
若依的核心卖点是“前后端分离 + 按钮级权限”。从源码看,这一能力的落地分为三层。
第一层:全局前置守卫。入口在 src/permission.js,router.beforeEach中依次处理:未登录跳转/login?redirect=...;已登录访问/login则回到首页;处理锁屏(src/views/lock.vue 对应的/lock路由)状态;最关键的是——当用户角色为空时,先调用useUserStore().getInfo()拉取用户信息,再调用usePermissionStore().generateRoutes()生成可访问路由并逐一router.addRoute(route),随后replace重新导航,确保动态路由注册完成后再进入目标页。
第二层:后端返回菜单,前端映射组件。src/store/modules/permission.js 的generateRoutes调用getRouters()向后端请求菜单路由数据,再通过filterAsyncRouter递归处理:当route.component为字符串'Layout'、'ParentView'、'InnerLink'时映射为对应布局组件,否则调用loadView借助import.meta.glob('./../../views/**/*.vue')按路径匹配到真实页面组件。这就是“后端配置菜单字符串、前端动态加载组件”的实现方式。
第三层:本地动态路由的权限过滤。仓库在 src/router/index.js 中预置了dynamicRoutes(如分配角色、分配用户、字典数据、调度日志、代码生成编辑等“隐藏页”),每个路由声明了permissions数组;src/store/modules/permission.js 的filterDynamicRoutes结合 src/plugins/auth.js 的hasPermiOr/hasRoleOr判断当前用户是否具备权限,只有通过校验的路由才会被注册。
请求封装与通用能力:request、插件与全局配置
axios 统一封装。所有接口请求都经过 src/utils/request.js 的实例:timeout: 10000设置 10 秒超时;请求拦截器自动为已登录用户附加Authorization: Bearer <token>(token 存储见 src/utils/auth.js,Cookie 键名为Admin-Token),并将 GET 请求参数序列化拼接;同时内置“防重复提交”机制——POST/PUT 请求在 1 秒内(interval,默认 1000ms)发送相同 url+data 会被拦截,数据超过 5MB 时跳过该校验。响应拦截器则统一处理业务状态码:401 弹窗提示重新登录、500 错误提示、601 警告、其他非 200 走 Notification,并兼容 blob/arraybuffer 下载响应。
通用下载方法。download(url, params, filename, config)以application/x-www-form-urlencoded发起 POST,responseType: 'blob',借助 file-saver 保存文件,并兼容后端返回 JSON 错误的情况(src/utils/request.js)。
全局插件与组件。应用入口 src/main.js 统一完成了能力注册:Element Plus 使用中文 locale,尺寸默认取 Cookie 中size(支持 large/default/small);$tab、$auth、$cache、$modal、$download五个全局对象由 src/plugins/index.js 挂载;DictTag、Pagination、FileUpload、ImageUpload、ImagePreview、RightToolbar、Editor、SvgIcon等通用组件全局注册;useDict、download、parseTime、resetForm、handleTree、addDateRange、getConfigKey、selectDictLabel(s)等通用方法挂载到globalProperties(实现见 src/utils/ruoyi.js)。
布局与主题配置。全局布局开关集中在 src/settings.js,字段及含义如下:
| 配置项 | 默认值 | 说明 |
|---|---|---|
title | VITE_APP_TITLE | 网页标题 |
sideTheme | theme-dark | 侧边栏主题(深色/浅色) |
showSettings | true | 是否显示系统布局配置 |
navType | 1 | 菜单导航模式:1 纯左侧、2 混合、3 纯顶部 |
tagsView | true | 是否显示 tagsView 多页签 |
tagsViewPersist | false | 是否持久化标签页 |
tagsIcon | false | 是否显示页签图标 |
tagsViewStyle | card | 标签页样式(card/chrome) |
fixedHeader | true | 是否固定头部 |
sidebarLogo | true | 是否显示侧边栏 Logo |
dynamicTitle | false | 是否显示动态标题 |
footerVisible | false | 是否显示底部版权 |
footerContent | Copyright © 2018-2026 RuoYi. All Rights Reserved. | 底部版权文本 |
在线体验与进一步学习
README 提供了在线演示入口:演示账号为 admin/admin123。仓库 README.md 中还提供了在线演示地址、官方文档地址以及若干演示截图(截图以外部图床方式托管,仓库内未附带对应本地文件),需要查看可直接翻阅仓库 README 原文。
对于希望深入二次开发的读者,建议按以下路径阅读源码:先看 src/router/index.js 与 src/permission.js 理解路由骨架与守卫逻辑,再读 src/store/modules/permission.js 掌握动态路由机制,随后以 src/views/system/user/index.vue 为模板对照 src/api/system/user.js 学习“页面—接口—后端”的标准调用模式,最后结合 src/utils/request.js 与 vite.config.js 理解请求链路与代理配置,即可快速具备在该框架上新增业务模块的能力。
- 前端
- 企业应用
【免费下载链接】RuoYi-Vue3
:tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
相关推荐
RuoYi-Vue3快速上手终极指南:基于Vue3的前后端分离权限管理系统
RuoYi Vue3快速上手终极指南:基于Vue3的前后端分离权限管理系统 RuoYi Vue3是一款基于SpringBoot、Spring Security、
前端企业应用【热门开源项目下载】RuoYi-Vue:基于SpringBoot+Vue的前后端分离权限管理系统
【热门开源项目下载】RuoYi Vue:基于SpringBoot+Vue的前后端分离权限管理系统 还在为快速搭建企业级管理系统而烦恼吗?RuoYi Vue(若依
后端认证鉴权代码生成任务调度最完整TileLang入门指南:用Python轻松编写高性能GPU内核
最完整TileLang入门指南:用Python轻松编写高性能GPU内核 还在为编写复杂GPU内核而头疼吗?TileLang让你用简洁的Python语法就能实现媲
编译器编程语言高性能计算人工智能深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考