【若依项目-RuoYi】掌握若依前端的基本流程

news2024/11/14 3:01:24
  • 搞毕设项目,使用前后端分离技术,后端springBoot,前端vue3+element plus。
  • 自己已经写好前端与后端代码,但想换一个前端界面所以使用到了若依,前前后后遇到许多坑,记录一下,方便之后能够快速回忆。【本文章主要讲解前端部分(vue3),请耐心跟着文章的流程走,后端使用的是自己的工程,需要看后端的小伙伴可以看看其他的文章】

                                                                                                                        记于2024-7-30

若依官网:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|SpringBoot|SrpingBoot2.0|SrpingCloud|Alibaba|MyBatis|Shiro|OAuth2.0|Thymeleaf|BootStrap|Vue|Element-UI||www.ruoyi.vip


1、环境准备

1.1、前端下载

        因为我原前端使用的技术栈是vue3+element plus,所以选择官网内项目扩展中的RuoYi-Vue3:  https://github.com/yangzongzhuan/RuoYi-Vue3

需要注意官网内分离版的技术栈:

  • Vue 2.6.x
  • Axios 0.21.x
  • Element 2.15.x

        当时没注意直接使用官网分离版中的项目,后面把原前端的代码拷贝过去出了问题,原因是版本过低需要升级,而且就算升级后代码语法的差异也需要大作更改,所以根据需求选择。

1.2、后端下载

后端可以直接下载官网中的项目:RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本

 里面包含了所需的后端工程以及(Vue 2.6.x)前端工程 ruoyi-ui。

需要多看官网文档,包含了前端与后端工程的目录结构说明,方便快速掌握。


2、从登录到首页的前端流程

  1. 将前端与后端工程分别运行起来。
  2. 了解前端工程目录基本作用
  3. 主要操作都在src文件夹中。

(1)修改 vite.config.js 文件中proxy的后端ip以及端口(使用反向代理实现跨域请求)

(2)在 src -> api 中定义好自己的请求js:

(3)登录页面:src -> views -> login.vue:

        import引入user文件中的userUserStore对象,该文件主要写执行请求方法的action。

(4)执行login.vue中的登录方法后调用 store -> modules -> user 中的后端登录接口,成功后使用cookie保存token

(5)执行login.vue的登录方法成功后进行路由跳转router.push(....),但会被 src -> permission.js 文件内的路由前置守卫拦截路由跳转,需要执行两个请求:

  • userUserStore对象中的获取用户信息接口(src/store/modules/user)
  • userPermissionStore对象中的获取路由菜单接口(src/store/modules/permission)

(5.1)获取用户信息 getInfo()

【需要注意获取用户信息后需要填写一些信息,因为每次加载完路由会 next({...to,replace: true}) 更新页面,发现有token,但是没用户信息,就会重复触发调用接口请求,出现循环执行两接口造成浏览器白屏问题】

可以根据需要写一些静态数据【具体的可以查看若依后端接口查看作用】

this.roles = ['admin']        // 菜单权限
this.permissions = ['*:*:*']        // 按钮权限

this.id = data.id        // 用户id
this.name = data.name        // 用户姓名
this.avatar = avatar        // 用户头像

(5.2)获取路由菜单表信息 generateRoutes()

该action方法会调用后端接口(src -> api -> menu.js)获取菜单表

路由表结构(可以参考,但具体以若依后端传递的菜单结构为准,可以在前端这文件使用控制台输出查看)【存在其他奇奇怪怪bug,需要根据自己项目去调试,最好是一次过】:

{
    "code": 200,
    "message": "操作成功",
    "data": [
        {
            "name": "system",
            "path": "/system",  // 需要注意父菜单path需要加/,否则会找不到组件报404
            "hidden": false,    // 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现
            "redirect": "noRedirect", // 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
            "component": "Layout",
            "alwaysShow": true, // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
            "meta": {
                "title": "系统管理",
                "icon": "system",
                "noCache": false, // 设置为true,则不会被 <keep-alive>缓存
                "link": null     // 内链地址(http(s)://开头)
            },
            "children": [
                {
                    "name": "Role",
                    "path": "Role",    // 子菜单path不需要加/
                    "hidden": false,
                    "component": "system/sysUser",
                    "meta": {
                        "title": "用户管理",
                        "icon": "user",
                        "noCache": false,
                        "link": null
                    }
                },
                {
                    "name": "User",
                    "path": "User",
                    "hidden": false,
                    "component": "system/sysRole",
                    "meta": {
                        "title": "角色管理",
                        "icon": "peoples",
                        "noCache": false,
                        "link": null
                    }
                }
            ]
        },
        {
            "name": "product",
            "path": "/product",
            "hidden": false,
            "redirect": "noRedirect",
            "component": "Layout",
            "alwaysShow": true,
            "meta": {
                "title": "商品管理",
                "icon": "shopping",
                "noCache": false,
                "link": null
            },
            "children": [
                {
                    "name": "category",
                    "path": "category",
                    "hidden": false,
                    "component": "product/category",
                    "meta": {
                        "title": "分类管理",
                        "icon": "404",
                        "noCache": false,
                        "link": null
                    }
                }
            ]
        }
    ]
}

3、修改若依框架图标与文字

若依RuoYi框架log图标与文字怎么改?_若依的图标文字-CSDN博客

3.1、修改菜单栏上方图标

图片路径: /src/assets/logo/logo.png

3.2、修改菜单栏上方文字

文件路径:/src/layout/components/Sidebar/Logo.vue

3.3、修改窗口标签图标

图标路径:/public/favicon.ico         # 推荐尺寸64*64

3.4、修改窗口标签文字

文件目录:
/.env.development
/.env.production
/.env.staging
推荐全部修改,因为根据环境不同

3.5、免费图片转换网站 ​

在线转换图像文件


4、出现的bug

4.1、RuoYi点击菜单出现空白页面,无报错

解决:RuoYi点击菜单出现空白页面,无报错_页面在菜单点击空白-CSDN博客

若依(vue3版本),进入首页后选择左侧菜单栏会出现切换菜单或者tab 页面空白的情况,

刷新页面后又恢复正常。

        vue3版本的若依框架存在一些bug,在src\layout\components\AppMain.vue中transition加跳转动画,keep-alive用作缓存,因为同时使用了transition和keep-alive,并在组件内又使用了transition导致的。

解决方案:

1、在keep-alive外包裹上div(推荐)

<router-view v-slot="{ Component, route }">
	      <transition
	        :duration="{ enter: 800, leave: 100 }"
	        mode="out-in"
	        name="el-fade-in-linear"
	      >
	        <div :key="route.path">
	          <keep-alive :include="cachedViews">
	            <component :is="Component" :key="route.path" />
	          </keep-alive>
	        </div>
	      </transition>
	</router-view>

2、直接注释掉transition,但这样就没有菜单切换动画了

<router-view v-else v-slot="{ Component, route }">
      <keep-alive :include="cachedViews">
         <component :is="Component" :key="route.path" />
      </keep-alive>
</router-view>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创意指南丨VR游览沉浸式空间体验

欢迎来到我们制作的VR幻想世界。玩家的起点是一条蓝色水晶大道&#xff0c;让我们一起探索这个如梦似幻的境地。 在这条大道的两侧&#xff0c;漂浮着半透明的大水晶水母。它们轻盈地在空中飘动&#xff0c;仿佛在欢迎我们的到来。这条道路上方&#xff0c;一个个半圆环不停地…

人脸身份证比对接口如何用Java对接?(二)

一、什么是人脸身份证比对&#xff1f; 人脸身份证比对又称人证比对&#xff0c;实人比对&#xff0c;人像比对&#xff0c;输入姓名、身份证号码和头像照片&#xff0c;与公安库身份证头像进行权威比对&#xff0c;返回分值作为判断依据。 二、人脸身份证比对接口适用哪些场…

iMovie Tutorial【iMovie 剪辑教程】

文章目录 项目字幕视频截取范围 显示进度条大小播放速度视频图层降噪转场设置转场时间 声音录制声音 分享导出文件 项目 字幕 视频 截取范围 i、o、e 显示进度条大小 播放速度 视频图层 例如&#xff1a;视频衔接、插入表情视频、头像对话 降噪 户外录制视频需要降噪。…

计算机学习

不要只盯着计算机语言学习&#xff0c;你现在已经学习了C语言和Java&#xff0c;暑假又规划学习Python&#xff0c;最后你掌握的就是计算机语言包而已。 2. 建议你找一门想要深挖的语言&#xff0c;沿着这个方向继续往后学习知识就行。计算机语言是学不完的&#xff0c;而未来就…

在ccs theia上用jlink下载烧录调试msp芯片配置

转载自ti官网的文章结合我自己的经历 将 Segger 编程器与 MSPM0 配合使用 1. 引言 本指南说明了如何将 Segger 编程器与 MSPM0 配合使用。 本文档不用于详细说明如何使用 Segger 工具。有关详细文档&#xff0c;请参阅相应的 IDE 或 Segger 文档。 2. 先决条件 用户应已下…

某个国外的真实XSS漏洞利用探寻

Background 在一次测试中&#xff0c;在git中找到部分的源码&#xff0c;发现可能存在xss问题&#xff0c;但是经过了一点处理&#xff0c;于是经过探寻思考&#xff0c;找到了bypass的方法&#xff0c;写下本篇文章 Part.1 从git到混淆 server头看见这个配置 基本是flask了,…

普中51单片机:DS18B20温度传感器操作指南(十三)

文章目录 引言电路图引脚讲解初始化时序写时序读时序温度变换温度读取完整代码 引言 DS18B20是一款单总线接口的数字温度传感器&#xff0c;仅需一个IO口即可实现数据通信。这里只对如何简单操作开发板的DS1802进行讲解&#xff0c;关于DS18B20温度传感器的详细操作原理&#…

矢量文件坐标转换:2000坐标系转换为wgs84坐标系,具体代码实现

最近在处理矢量样本的时候&#xff0c;遇到一些shp文件的坐标系为2000坐标&#xff0c;需要统一地把非WGS84坐标系的矢量转换为WGS84坐标系。 本文记录一下如何进行2000坐标系转化为wgs84坐标系的过程。 在处理矢量数据转换的过程中&#xff0c;有几个关键步骤确保了数据的有效…

ComfyUI LoRA应用和三级放大

ComfyUI LoRA应用和三级放大 LoRA加载器LoRA应用三级放大 LoRA加载器 新建节点–>加载器–>LoRA加载器 LoRA应用 如下图串起来 三级放大

ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现

一.环境配置 腾讯云的ubuntu操作系统&#xff0c;已经安装有docker 和 vulhub 直接来到 启动环境docker-compose&#xff0c;要在root权限下运行。 docker-compose up -d 若出现等待时间过长的情况&#xff0c;请参考这篇文章http://t.csdnimg.cn/SYhbE 访问http://公网ip:8…

Vivado启用modelsim报错boost::filesystem::remove

问题描述 在vivado中以配置好仿真工具为modelsim&#xff0c;但是启动仿真时报错如下&#xff1a; boost::filesystem::remove: 另一个程序正在使用此文件&#xff0c;进程无法访问。 "C:/Users/ZYP_PC/Desktop/verilog_test/simulation_project/project_1/project_1.si…

VTK8.2.0编译(Qt 5.14.2+VS2017)

VTK8.2.0编译(Qt 5.14.2+VS2017) 关于Qt和MSVC的安装,可以参考文章(Qt+MSVC2017)。 本篇VTK在Qt+MSVC的配置下的编译。VTK 以8.2.0为例。 一、环境变量的配置 我们打开电脑的环境变量,可以看到没有Qt相关的路径的配置: 我们把Qt相关的变量增加一下(主要以64位为主,…

day02-员工管理、Swapper测试、JWT、ThreadLocal、全局时间转换

苍穹外卖-day02 课程内容 新增员工员工分页查询启用禁用员工账号编辑员工导入分类模块功能代码 **功能实现&#xff1a;**员工管理、菜品分类管理。 员工管理效果&#xff1a; 菜品分类管理效果&#xff1a; 1. 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需求…

LNMP环境搭建论坛

注意&#xff1a;这里用的是Rocky Linux自带的Nginx 1.1 环境准备 1.1.1 安装部署Nginx、MySQL和PHP相关组件 [rootRocky8-node1 ~]# yum install nginx php-mysqlnd php php-gd php-fpm php-xml mysql-server -y 1.1.2 启动服务 [rootRocky8-node1 ~]# systemctl enable …

【C++】C++入门基础【类与对象】

目录 1.类 1.1类的定义 1.2struct 与 class对比 2.访问限定符 3. 类域 4.实例化 5.存储大小----内存对齐 6.this指针 1.类 1.1类的定义 class作为类的关键字&#xff0c;后面跟的是类的名字&#xff0c;如Stack&#xff0c;{}中的为类的主体&#xff0c;类定义结束时…

cpp笔记07:STL

STL 基本概念 STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09; STL从广义上分为&#xff1a;容器&#xff08;container&#xff09;算法&#xff08;algorithm&#xff09;迭代器&#xff08;iterator&#xff09; 容器和算法之间通过迭代器…

8.7 Day15 匿名用户访问FTP与日志查看

查看配置文件 vsftpd是一个认证文件&#xff0c;意味着ftp是通过vsftpd这个认证文件来对我们输入的用户名和密码进行认证的&#xff0c;那么这个认证文件在哪里呢&#xff1f; 所在位置如下&#xff1a; 查看文件配置内容 默认通过系统来验证&#xff0c;但现在我们欲做一个类…

web自动化7-pytest④实践测试用例-回归用例web自动化部分代码

文档说明: 本文档包括web自动化目录结构代码元素定位 : 父级, 同级后面, 同级div, 包含, 不包含, 鼠标右键, 悬停, 句柄切换(浏览器切换,关闭), 不可见元素查找, 滑动到不可见元素出现, 悬停后点击, 页面有值判断, 页面数据量判断web自动化: 前置, 后置事件 结合上篇文章, 基本…

Django—模板继承和包含

模块的继承意义&#xff1a;将需要多次用到的内容&#xff08;盒子&#xff09;进行引用&#xff0c;减少代码的重复使用 如我们经常在网上看见的导航栏&#xff0c;页脚等 第一步&#xff1a;我们将继承模块写在一个html文件里面 第二步&#xff1a;创建一个html文件&#x…

【归并排序/快排/堆排序】912. 排序数组

力扣连接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 归并排序 对左右子集合分别排序&#xff0c;然后合并两个有序数组 class Solution {int[] nums;public int[] sortArray(int[] nums) {this.nums nums;return sort(0, nums.length-1);}int[] sort(int st, i…