资讯动态

RuoYi-Vue3全栈实战:从环境搭建到AI智能应用接入指南

发布时间:2026/9/8 20:02:53 来源:尧图企业网站定制
简介本资源是一套基于RuoYi-Vue3的全栈开发实战项目面向中高级Java与Vue开发者聚焦前后端分离架构落地与AI能力集成实践。项目覆盖从前端Vue3Composition API、Pinia、Vue Router、后端Spring BootMyBatis-Plus、Spring Security到AI智能化模块NLP/图像识别接口接入、模型服务调用的完整技术链解决企业级应用中技术选型、模块解耦、智能功能嵌入等典型问题。压缩包共2001个文件含872个Java后端逻辑与配置类、451个JS工具与业务脚本、328个Vue组件及页面、101个CSS样式文件、100个XML映射与配置、96个HTML模板以及SQL建表语句、YAML配置、MD文档等总大小159.65MB。已有90人学习下载提供可直接运行的工程结构、清晰分层的目录组织如ai-service模块独立封装、详尽注释与RESTful接口设计范例助开发者快速掌握现代全栈开发范式与AI融合落地路径。 拿到的项目叫“基于RuoYi-Vue3前后端分离版本从前端到后端再到AI智能化应用全通关”光看这个名字就知道是一条挺长的链路。作为常年用Java后端写业务、偶尔还得客串Vue前端的开发这套若依框架在圈子里出现的频率太高了可以说凡是接触过“快速搭建管理系统”这类需求的人基本都绕不开它。但多数人拿到项目后的真实状态是前端启动了后端起不来后端起来了页面又白屏终于联调通了想加点AI能力又不知道从哪下手。这篇文章我打算把这条“通关路线”完整走一遍——基于RuoYi-Vue3这套前后端分离脚手架从项目结构、环境搭建到后端权限链路、前端工程化再到如何接入AI智能化应用每一步都给出我实际操作中的方案和踩坑记录。适合打算拿若依做毕业设计、外包项目、企业内部管理系统或者单纯想系统学习Spring Boot Vue3前后端分离开发的人。文章里会有不少JVM报错、前端依赖冲突、权限配置失误这类“真实事故”的复盘应该能帮你省下不少查资料的功夫。1. 项目亮个相RuoYi-Vue3到底替你解决了什么很多第一次接触若依的人会误以为它“只是个后台管理模板”。这么理解也没错但格局小了。RuoYi-Vue3本质上是一套可以直接落地的前后端分离开发基座后端基于Spring Boot 2.5/3.x系列前端采用Vue3 Element Plus Vite Pinia内置了用户管理、角色管理、菜单管理、部门管理、字典管理、操作日志、登录认证、代码生成器等企业级系统里几乎必用的功能模块。换句话说你拿到这套代码相当于省掉了项目立项之初最枯燥的“搭架子”阶段可以直接把精力放在自己的业务上。这套脚手架最核心的价值在四个地方权限模型完整RBAC基于角色的访问控制已经从表设计做到前端按钮级别菜单、按钮、接口三层权限全部打通。代码生成器可直接用建好数据库表之后后端通过代码生成器一键生成Java代码前端生成Vue页面再手动补齐业务逻辑就能交付。前端工程化规范Vite构建、路由懒加载、Pinia状态管理、axios二次封装这些都是正规前端项目的标配学一遍能直接迁移到其他项目里。前后端分离且部署友好前端打出的dist包可以丢到Nginx或对象存储上后端是标准Spring Boot fat jar部署路径非常清晰。从我个人的使用体验来说学习RuoYi-Vue3的最佳方式不是从头到尾读源码而是把它当成一个“有答案的练习题”。你先跑起来再尝试改一处业务然后顺着改动的路径去读相关源码。这个过程比任何教学视频都有效。1.1 拿到项目后的第一步环境清单先别急着敲代码环境不对后面全是坑。我整理了一份经过验证的版本组合照着装基本不会出问题组件版本建议备注JDK1.8或17RuoYi-Vue3官方基于JDK 8开发但用17也能跑注意spring-boot版本Maven3.6后端依赖管理Node.js16.20.x或18.x前端Vite构建Node版本太新可能报OpenSSL错误MySQL5.7或8.0记得用UTF-8字符集8.0要设置时区Redis5.0登录验证码、会话缓存都会用到IDEIntelliJ IDEA VSCode前后端分两个窗口开Node版本这里我要重点提醒如果你用Vite 2.x版本构建Node 17以上很可能会报digital envelope routines::unsupported这个错。原因很简单OpenSSL升级后不再支持旧版哈希算法。我当时图省事装了Node 20结果前端死活起不来最后改成Node 16才消停。如果你只能装新版本Node那就在package.json的scripts里加上dev: set NODE_OPTIONS--openssl-legacy-provider vite或者用export NODE_OPTIONS--openssl-legacy-providerLinux/Mac可以绕过这个问题。前端依赖安装推荐使用npm i --registryhttps://registry.npmmirror.com指定国内镜像源否则拉取依赖能让你等到怀疑人生。这一步属于“你早晚会遇到不如一开始就避免”的典型操作。1.2 启动顺序先后端再前端后端启动其实不复杂先把ruoyi-admin/src/main/resources/application-druid.yml里的数据源、Redis连接改成本地配置执行ry_2024.sql或对应版本初始化数据库然后启动RuoYiApplication主类。看到Spring Boot的banner一个大的ASCII艺术字出现后再确认一下日志里有Started RuoYiApplication说明后端起来了。前端进入ruoyi-ui目录执行npm install然后npm run dev默认端口是80浏览器访问http://localhost就能看到登录页。默认账号是admin密码admin123。验证码如果刷不出来八成是Redis没连上回到druid配置里检查Redis地址。前端起来之后第一件该干的事是打开浏览器开发者工具F12看Network面板。你会发现登录接口走的是http://localhost/dev-api这其实是Vite的代理转发实际请求会被转发到http://localhost:8080后端端口。这个代理配置在vite.config.js里后面联调时如果遇到跨域问题改这一处就行。2. 后端源码应该这么啃从启动类到权限校验的完整链路若依的后端不算难但如果你直接从Controller开始读源码很容易迷失在大量封装里。正确路线是顺着“启动 → 登录 → 鉴权”这条链路往下读抓到主线程之后其他模块的套路自然就通了。2.1 启动流程里的“隐藏约定”RuoYi的入口是RuoYiApplication这是标准的Spring Boot启动类但它和普通项目有个差别SpringBootApplication注解里扫描到了com.ruoyi包下所有的组件同时MapperScan(com.ruoyi.**.mapper)会扫描所有Mapper接口。这在多模块项目里尤其重要因为每个业务模块都有独立的Mapper包你要新增模块时只要建包结构com.ruoyi.xxx.mapper就能被自动扫描到不用到处加配置。配置文件我喜欢从application.yml开始读。它定义了应用名称、端口、Spring profile激活默认druid、MyBatis驼峰映射、日志级别等。再看application-druid.yml这里是数据源配置主库master用的是Druid连接池还预留了slave从库配置只是默认被注释掉了。如果你有读写分离需求把从库连接信息填进去再在Service上写DataSource(DataSourceType.SLAVE)注解就能切换数据源这个设计在中小型项目里相当实用。2.2 登录校验流程验证码、令牌、用户信息看登录流程入口是SysLoginController的login方法。整体逻辑是先校验验证码Redis里存了一份再调用SysLoginService的login方法内部通过AuthenticationManager完成用户认证认证通过后生成Token令牌最后把用户信息和权限集合一起封装成LoginUser对象返回前端。这里最值得学的是权限部分的封装。用户登录成功后后端会把该用户拥有的所有权限字符串例如system:user:list、system:user:add一次性查出存到LoginUser里再序列化进Redis。后续每次接口请求框架从请求头Authorization里拿到Token解析出登录用户ID然后从Redis取回权限集合做校验。这个“空间换时间”的思路在管理系统中非常常见理解它对后面做AI接口鉴权帮助很大。2.3 接口权限是怎么“一刀切”的RuoYi-Vue3用的是Sa-Token框架如果你用的是经典版本那是Spring Security这一点和很多老教程不一样。Sa-Token的API更简单核心就两个注解SaCheckLogin要求必须登录才能访问。SaCheckPermission(system:user:list)要求当前用户必须拥有指定权限标识才能访问。判断逻辑其实不复杂方法执行前框架拦截请求从Token定位到登录用户再去Redis里查权限集合查到了就放行查不到就抛NotPermissionException由全局异常处理器转为403返回给前端。实际开发中我建议养成一个习惯每个Controller方法上都写上明确的权限注解不要图省事只加SaCheckLogin。因为按钮权限是前端控制的但前端控制只是“视觉隐藏”真正的安全边界必须是后端接口。你永远不知道哪个用户会直接拿接口地址去调用。2.4 二次开发的基础姿势从建表到生成代码若依最强的生产力工具是“代码生成器”。我把自己常用的开发流程写在下面在MySQL里建好业务表字段注释写清楚因为生成器会直接把注释变成代码注释。在系统菜单的“代码生成”里导入这张表。编辑字段配置选择列表显示、查询条件、表单类型文本框/下拉框/日期选择器、必填校验等。配置生成选项生成的包名如com.ruoyi.system、模块名如order、业务名如orderInfo生成方式选“压缩包下载”。解压后把Java文件放到后端对应目录把Vue文件放到前端src/views下。重新编译后端然后在菜单管理里添加菜单必须配置路由路径和组件路径再给角色授权。刷新前端页面新菜单和页面就出现了。这套流程我第一次跑通只花了不到半小时。虽然生成出来的代码比较简单但作为业务起点已经足够剩下的就是往Service层添加具体逻辑。这里有个小技巧生成器生成的代码默认逻辑删除字段del_flag所以表结构里一定要预留这个字段否则生成的代码在删除时会报SQL错误。3. 前端工程化解剖Vue3 Element Plus侧的核心机制如果你主要做后端看到Vue3项目往往头大。但RuoYi-Vue3的前端结构其实非常有规律只要读懂几个核心文件二次开发会轻松很多。3.1 目录结构每个文件夹都有它的使命前端根目录下最核心的几个文件夹src/api按业务模块拆分的接口定义文件比如system/user.js。每个接口都封装成一个方法内部通过request.js调用后端。src/views页面组件目录结构通常和后端菜单树保持一致比如system/user/index.vue就是用户管理页面。src/router路由配置这里包含静态路由和动态路由。动态路由的部分直接决定菜单能否按角色显示。src/storePinia状态管理其中user.js里存了用户的Token、昵称、权限集合。src/utils/request.jsaxios实例的二次封装统一处理请求头Token注入、响应码拦截、401跳转登录。只看目录你就能发现这是一个严格分层、约定优于配置的前端项目。所有接口请求都是api目录下定义好再引用不会出现页面里直接写axios.get的情况。3.2 动态路由和按钮权限的实现原理动态路由是RuoYi前端最值得研究的机制。用户在登录后前端会调用getRouters接口拿到属于这个角色的菜单树然后通过addRouters方法把菜单对应的Vue组件动态注册到Vue Router里。这就是为什么不同账号登录后左侧菜单不一样的原因——菜单不是前端写死的而是后端根据用户角色动态返回的。按钮权限依赖的是自定义指令v-hasPermi。比如有“删除”按钮HTML里写v-hasPermi[system:user:remove]如果当前用户的权限集合里不包含这个标识指令会把对应的DOM元素移除。这套操作比v-if判断更优雅因为它把权限判断逻辑统一封装了而且权限标识和后端SaCheckPermission用的是同一套字符串前后端配合非常严密。3.3 联调与跨域问题Vite代理的正确用法前后端分离开发的时候前端请求后端接口会碰到跨域。RuoYi-Vue3的解法在vite.config.js里server: { host: localhost, port: 80, proxy: { /dev-api: { target: http://localhost:8080, changeOrigin: true, pathRewrite: { ^/dev-api: } } } }这个配置的意思是前端所有以/dev-api开头的请求都会被Vite启动的代理服务转发到http://localhost:8080并且把前缀去掉。所以你在src/api/system/user.js里看到的请求地址可能是/dev-api/system/user/list实际到达后端时变成/system/user/list。这个模式理解透彻后部署阶段的问题就好办了。生产环境没有Vite代理你需要让Nginx做同样的转发工作后面部署章节会专门讲。4. 从“能用”到“智能”在若依体系里加入AI智能化应用项目标题最吸引人的部分在这里——AI智能化应用。坦白说AI能力和传统权限系统结合玩法很多但落地时路线选错了容易把自己绕进去。我给两种最务实的接入方式一种是把AI作为“开发生产力工具”融入若依的二次开发流程一种是把AI能力封装成若依里的业务模块。两条路我都跑过下面把关键细节展开。4.1 AI辅助开发让大模型帮你写若依代码很多人以为“AI智能化应用”一定是在系统里嵌一个聊天机器人其实对于用若依开发的实际项目最直接的收益来自“AI辅助开发”。我在用若依开发一个新模块的时候会把若依的代码风格、权限模型、代码生成器配置作为上下文发给大模型让它生成符合项目规范的代码。具体做法是先让AI学习若依的典型代码结构再每次需求明确后让它输出Controller、Service、Mapper三层代码。关键是提示词里必须写清楚“使用若依风格”“依赖系统默认的BaseEntity、TableDataInfo、AjaxResult类”“方法上标注SaCheckPermission权限标识”等约束。这样生成的代码能直接粘进项目里改动量很小。这一招对RuoYi这种约定比较强的框架尤其好用因为大模型可以从开源仓库学到大量风格一致的代码样本。不过要提醒一点AI生成的SQL和复杂业务逻辑别直接用尤其是涉及多表关联、事务控制、血缘关系的部分。AI擅长处理“标准场景”但业务系统里总有各种“非标逻辑”这些还是得靠人肉改。我自己的比例是简单的增删改查80%交给AI复杂的核心逻辑80%自己手写。4.2 在若依后端集成大模型API流式对话模块如果确实要在若依系统内做一个AI对话助手、智能问答、文档辅助等模块技术路线也不复杂。后端封装一个大模型API调用服务前端做一个会话页面通过SSEServer-Sent Events接收流式返回这就是最基本的AI业务模块。后端核心思路是这样的// AI对话Service核心方法简化版 public void chat(String prompt, SseEmitter emitter) { // 1. 查询配置的大模型API Key、模型名称 String apiKey aiConfig.getApiKey(); // 2. 构造请求走OpenAI兼容接口或国内大模型标准接口 HttpClient client HttpClient.newHttpClient(); HttpRequest request HttpRequest.newBuilder() .uri(URI.create(aiConfig.getApiUrl() /v1/chat/completions)) .header(Authorization, Bearer apiKey) .header(Content-Type, application/json) .POST(BodyPublishers.ofString(buildRequestBody(prompt))) .build(); // 3. 发起请求时设置streamtrue响应也是SSE流 HttpResponseStreaming String response client.send(request, BodyHandlers.ofLines()); // 4. 逐行解析流式响应data: {choices:[{delta:{content:...}}]} response.body().forEach(line - { if (line.startsWith(data:)) { String json line.substring(5).trim(); if (![DONE].equals(json)) { String delta parseDeltaContent(json); if (StringUtils.isNotBlank(delta)) { try { emitter.send(delta); // 把增量内容实时推给前端 } catch (IOException e) { emitter.completeWithError(e); } } } } }); emitter.complete(); }这里最核心的技术点是SSE。HTTP响应不再是完整的JSON一次返回而是服务器持续地将内容片段推送给前端前端拿到一个片段就渲染一个片段。实现方式是用Spring MVC的SseEmitter每解析到一段AI返回的增量内容就emitter.send()一次所有内容结束再emitter.complete()。前端用EventSource或axios的onDownloadProgress都可以接收流式数据。前端的关键代码是这样// 使用fetch读取SSE流 export function chatWithAI(prompt, onMessage) { fetch(/dev-api/ai/chat, { method: POST, headers: { Authorization: Bearer getToken(), Content-Type: application/json }, body: JSON.stringify({ prompt: prompt }) }).then(async (response) { const reader response.body.getReader() const decoder new TextDecoder(utf-8) while (true) { const { value, done } await reader.read() if (done) break const chunk decoder.decode(value, { stream: true }) onMessage(chunk) // 每收到一段内容就更新页面显示 } }) }注意这里fetch请求必须带Authorization头因为若依的所有接口都有登录校验AI接口也不例外。流式接口如果直接返回401前端根本读不到流内容所以Token注入这部分一定要处理好。4.3 把AI能力挂到若依的权限树上很多人在若依里做AI模块时犯的最大的错误是没有把AI能力纳入菜单权限体系。结果就是只要登录系统任何人都能调用AI接口挤爆API额度。正确的做法是在菜单管理里新建“AI助手”目录下面挂“智能问答”“文档总结”“内容生成”等子菜单每个菜单对应的按钮比如“对话发送”“历史记录删除”都配置好权限标识。后端Controller方法上加对应的SaCheckPermission注解确保只有授权用户才能调用AI资源。另外AI对话内容涉及数据安全我建议在项目里加一个“对话内容过滤”环节对用户输入和AI输出都做关键词检测。这个可以用简单的敏感词库实现也可以接入第三方内容安全服务。别嫌这一步多余AI接口容易产生不可控的输出上线前这是必须做的合规工作。4.4 向量化和知识库让AI“懂”你的业务如果只是接大模型APIAI回答的都是通用知识对企业内部系统价值有限。要让AI真正智能化和若依结合更深入的方式是“私有知识库”。思路是把企业的产品手册、规章制度、FAQ等文档拆成小块做向量化embedding存入向量数据库如Milvus、Qdrant、或传统数据库的pgvector插件。用户提问时先把问题向量化在知识库里做相似度检索把相关片段拼到提示词里再一起发给大模型。这样AI的回复就能基于你提供的业务资料而不是“泛泛而谈”。RuoYi里做这个功能架构上不需要改太多东西新增一个知识库管理模块管理文档上传、切片、向量化任务一个问答模块处理检索生成底层数据表可以直接复用若依的表设计习惯。技术栈可以用Spring AI或LangChain4j这种Java生态的框架它们对向量化、Prompt模板、输出解析都有现成封装配合若依的权限体系能省不少事。5. 部署那点事Nginx静态托管 Docker编排 环境变量开发环境跑通了AI模块也接了接下来最大的坑就是“部署”。前后端分离项目的部署本质上就两件事前端静态文件的托管和动态请求的反向代理后端Java进程的启动和依赖服务的编排。5.1 前端构建与Nginx配置前端部署前先执行构建命令npm run build:prod构建产物在dist目录。把dist目录里的文件拷贝到服务器的/usr/share/nginx/html下然后配置Nginx。有一点必须注意Vue Router如果用的是history模式若依默认刷新页面时Nginx必须把不存在的路径重定向回index.html否则刷新就404。核心配置如下server { listen 80; server_name your-domain.com; # 前端静态资源 location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; # history路由回退 } # 后端接口转发 location /prod-api/ { proxy_pass http://127.0.0.1:8080/; # 注意末尾斜杠 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }location /prod-api/这里的proxy_pass如果配置的地址末尾带/表示把/prod-api前缀去掉再转发给后端。如果配置成了http://127.0.0.1:8080末尾没斜杠则会把原始URI完整传递后端收到的路径就是/prod-api/system/user/list然后基本就是404。这个问题排查起来很隐蔽我第一次部署时调了小半天才发现是斜杠的锅。如果前端配置了/prod-api的baseURL但后端接口路径里没有这个前缀那么Nginx配置里去掉前缀是对的。但如果你后端也做了context-path配置记得两边统一别出现双重前缀。5.2 Docker编排MySQL、Redis、后端、前端一体启动现在企业里用Docker Compose部署若依很常见。我常用的编排文件结构如下version: 3.8 services: mysql: image: mysql:8.0 container_name: ruoyi-mysql environment: MYSQL_ROOT_PASSWORD: root123456 MYSQL_DATABASE: ruoyi-vue3 ports: - 3306:3306 command: --default-authentication-pluginmysql_native_password volumes: - ./mysql-data:/var/lib/mysql redis: image: redis:7-alpine container_name: ruoyi-redis ports: - 6379:6379 backend: build: ./ruoyi-admin container_name: ruoyi-backend depends_on: - mysql - redis environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/ruoyi-vue3?useUnicodetruecharacterEncodingutf8 SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: root123456 SPRING_REDIS_HOST: redis ports: - 8080:8080 nginx: image: nginx:1.25-alpine container_name: ruoyi-nginx ports: - 80:80 volumes: - ./dist:/usr/share/nginx/html - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - backend核心逻辑是后端容器里MySQL和Redis的主机名不要写成localhost或127.0.0.1而要写成服务名mysql和redis这样Docker内部DNS才能正确解析到对应容器。SPRING_DATASOURCE_URL这些环境变量会覆盖application-druid.yml里的默认配置所以即使你打包时没改数据库地址也依然可以通过环境变量注入。这里有一个很大的坑如果后端Dockerfile里执行打包Maven会重新拉依赖打包会非常慢。我的建议是先用本机Maven打一个jar包再写一个精简的DockerfileFROM openjdk:8-jre-alpine COPY ruoyi-admin.jar /app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, /app.jar]这个镜像构建速度极快部署起来很舒服。5.3 部署中的环境隔离不同环境不同配置我建议从开发到部署把配置差异全部收敛到application-{profile}.yml里。RuoYi提供了application-druid.yml你可以再建一个application-prod.yml把生产环境的数据库地址、Redis地址、日志级别都放进去。启动时通过--spring.profiles.activeprod指定环境或者用Docker的环境变量SPRING_PROFILES_ACTIVEprod。这样开发环境用一个配置生产环境用另一个配置不会因为误改本地配置导致线上连错库。另外生产环境的登录验证码和会话超时时间建议在后台管理页面里调一下。若依默认支持在系统参数里配置验证码开关、登录超时时间等部署后第一时间把这些参数按实际需求改掉避免安全问题。6. 实战中的高频报错和排查思路这部分是我最想分享的因为很多坑都是重复的任何一个踩过一次的人都能帮你省几小时。下面按“报错现象、排查链路、最终原因”的结构写几个典型案例。6.1 前端页面白屏控制台报“Cannot read properties of undefined (reading xxx)”这个报错常出现在动态路由加载时。出现这个问题的原因是后端返回的菜单组件路径和前端实际文件路径不匹配。若依的菜单表里有component字段它指向Vue组件的位置比如system/user/index。如果菜单配置的组件路径在src/views下不存在前端在做动态导入时就会拿不到组件路由加载失败页面就白屏了。排查方法分两步第一步打开浏览器控制台看具体报错是哪个组件找不到第二步去后端菜单管理里检查对应菜单的“组件路径”是否真实存在。注意大小写也要完全一致Linux的Vite构建对大小写敏感。6.2 登录接口报“认证失败无法访问系统资源”这个报错的原因很多最常见的是Redis没连上。若依登录时需要把验证码存入Redis校验时要从Redis读取。Redis挂了验证码校验直接异常然后被全局异常处理器翻译成“认证失败”。另外一个隐藏原因是服务器时间问题。JWT若依的Token默认是JWT格式有签发时间和过期时间如果服务器时间和客户端时间差太多Token校验也会失败。排查时用date命令看一下服务器时间最好同步一下NTP。6.3 导出功能报“java.io.IOException: Stream closed”如果你在RuoYi里做Excel导出这个报错很经典。根本原因是前端用axios请求导出的二进制流时遇到过期的拦截器或错误的响应类型处理。如果你在request.js里给导出接口统一加了JSON解析就会出现“流已关闭”的错误。正确的做法是对导出接口做特殊处理响应类型要设为responseType: blobexport function exportOrder(params) { return request({ url: /system/order/export, method: get, params, responseType: blob // 关键 }) }后端导出功能原理倒是简单用EasyExcel或POI把数据写入HttpServletResponse的输出流设置好响应头Content-Disposition让浏览器触发下载。这个功能在很多管理系统里都是必有的建议把这段代码保存成自己的“通用工具包”。6.4 代码生成后新增菜单前端一直不显示新增菜单后前端不显示99%的情况是角色没有关联权限。若依的菜单是“角色-菜单”多对多关系你新建了菜单如果不给角色授权用户登录后调getRouters接口时根本不会返回这个菜单。解决办法用admin登录在“系统管理→角色管理”里找到对应角色点击“数据权限”或“菜单权限”勾选新菜单的权限。剩下的1%情况是缓存问题。浏览器缓存或者前端登录时存到Pinia里的旧权限数据没刷新退出重新登录基本就能解决。7. 学习路径建议如果今天你才刚认识RuoYi最后这段写给刚接触这套框架的读者。如果你想系统地掌握RuoYi-Vue3我推荐的学习顺序不是“从第一章源码读到最后一章”而是“按项目进度学”。第一阶段跑通并改造基础模块。拿到项目先别贪多把源码跑起来然后把用户管理这个页面从头到尾改一遍新增一个导出按钮、修改一个字段校验规则、加一个查询条件。这个过程能让你同时理解前端页面、后端接口、数据库表结构三者的联动关系。第二阶段新增一个完整业务模块。用代码生成器生成一个“客户管理”或“订单管理”然后手动补上生成器无法覆盖的业务逻辑比如状态流转、定时任务、复杂查询SQL。这一步是查漏补缺的关键你会发现很多“看似会其实不会”的地方。第三阶段扩展框架能力。尝试改登录逻辑比如对接企业微信扫码登录、增加数据权限比如部门数据隔离、接入消息推送WebSocket或第三方短信。这些属于“加分项”做完这些基本就能熟练驾驭若依做定制开发了。第四阶段AI能力接入。先做一个统一的AI接口模块实现对主流大模型API的调用封装再按需扩展为知识库问答、智能分析等具体业务。有了前面三个阶段打底第四阶段实际加的代码量并不多主要是架构设计和安全边界的思考。我个人强烈建议你不要把RuoYi当成“一个框架”来学而是当成“一份企业级项目的参考答案”来研究。里面很多东西——RBAC权限设计、操作日志、数据字典、参数配置、异常处理——都是实际项目中反复出现的设计模式。把这些抽出来刻在脑子里比“会写增删改查”值钱得多。这篇文章算是我对这一整套打法的完整复盘。你在实操时如果碰到奇怪的问题可以顺着文章里的排查思路走一遍大概率能找到答案。RuoYi这套体系成熟度高、社区资料多只要肯花一周时间扎进去从“跑不起来”到“熟练改造”其实没想象的那么难。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价