RuoYi-Vue 框架学习

Java EE 企业级快速开发平台
官方文档:https://doc.ruoyi.vip/ruoyi-vue/
基于经典技术组合:Spring Boot、Spring Security、MyBatis、Jwt、Vue
内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、通知公告、代码生成等。
在线定时任务配置,支持集群,支持多数据源,支持分布式事务等。

将项目部署在本地

运行环境:
JDK >= 1.8 (推荐1.8版本) - 使用21
Mysql >= 5.7.0 (推荐5.7版本) - 使用8.0.21
Redis >= 3.0 - 使用6.2.6
Maven >= 3.0 - 使用3.8.1
Node >= 12 - 使用16.13.1

  1. 项目地址下载:https://gitee.com/y_project/RuoYi-Vue
  2. 使用idea 自动加载Maven
  3. 创建数据库ry-vue
  4. 运行sql文件夹的sql文件
  5. 前端运行:
1
2
3
4
5
6
7
8
9
10
11
# 进入项目目录
cd ruoyi-ui

# 安装依赖
npm install

# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
npm install --registry=https://registry.npmmirror.com

# 本地开发 启动项目
npm run dev

必要配置

  • 修改ruoyi-admin/src/main/resources/application.yml
  1. 数据库配置
  2. 服务器配置

部署

后端

  1. 打包
    在bin目录下执行package.bat打包Web工程,生成war/jar包文件。
  2. 部署到服务器
    jar:使用命令行执行:java –jar ruoyi.jar 或者执行脚本:ruoyi/bin/run.bat
    war: ruoyi/pom.xml中的packaging修改为war,放入tomcat服务器webapps<packaging>war</packaging>

前端

1
2
3
4
5
# 打包正式环境
npm run build:prod

# 打包预发布环境
npm run build:stage

环境变量

所有测试环境或者正式环境变量的配置都在 .env.development (opens new window)等 .env.xxxx文件中。
它们都会通过 webpack.DefinePlugin 插件注入到全局。
环境变量必须以VUE_APP_为开头。如:VUE_APP_API、VUE_APP_TITLE
获取环境变量:console.log(process.env.VUE_APP_xxxx)

Tomcat配置

修改server.xml,Host节点下添加
<Context docBase="" path="/" reloadable="true" source=""/>

dist目录的文件夹下新建WEB-INF文件夹,并在里面添加web.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="true">
<display-name>Router for Tomcat</display-name>
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
</web-app>

Nginx配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
worker_processes  1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name localhost;
charset utf-8;

location / {
root /home/ruoyi/projects/ruoyi-ui;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}

location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}

# springdoc proxy
location ~ ^/v3/api-docs/(.*) {
proxy_pass http://localhost:8080/v3/api-docs/$1;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

文件结构

后端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
com.ruoyi     
├── common // 工具类
│ └── annotation // 自定义注解
│ └── config // 全局配置
│ └── constant // 通用常量
│ └── core // 核心控制
│ └── enums // 通用枚举
│ └── exception // 通用异常
│ └── filter // 过滤器处理
│ └── utils // 通用类处理
├── framework // 框架核心
│ └── aspectj // 注解实现
│ └── config // 系统配置
│ └── datasource // 数据权限
│ └── interceptor // 拦截器
│ └── manager // 异步处理
│ └── security // 权限控制
│ └── web // 前端控制
├── ruoyi-generator // 代码生成(可移除)
├── ruoyi-quartz // 定时任务(可移除)
├── ruoyi-system // 系统代码
├── ruoyi-admin // 后台服务
├── ruoyi-xxxxxx // 其他模块

前端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
├── build                      // 构建相关  
├── bin // 执行脚本
├── public // 公共文件
│ ├── favicon.ico // favicon图标
│ └── index.html // html模板
│ └── robots.txt // 反爬虫
├── src // 源代码
│ ├── api // 所有请求
│ ├── assets // 主题 字体等静态资源
│ ├── components // 全局公用组件
│ ├── directive // 全局指令
│ ├── layout // 布局
│ ├── plugins // 通用方法
│ ├── router // 路由
│ ├── store // 全局 store管理
│ ├── utils // 全局公用方法
│ ├── views // view
│ ├── App.vue // 入口页面
│ ├── main.js // 入口 加载组件 初始化等
│ ├── permission.js // 权限管理
│ └── settings.js // 系统配置
├── .editorconfig // 编码格式
├── .env.development // 开发环境配置
├── .env.production // 生产环境配置
├── .env.staging // 测试环境配置
├── .eslintignore // 忽略语法检查
├── .eslintrc.js // eslint 配置项
├── .gitignore // git 忽略项
├── babel.config.js // babel.config.js
├── package.json // package.json
└── vue.config.js // vue.config.js

教程总结

15分钟 视频教程

https://www.bilibili.com/video/BV16D4y1f7iv/?spm_id_from=333.337.search-card.all.click&vd_source=387214638226dee6df2932949d566e5e

  1. 创建菜单列
  2. 创建数据库表
  3. 系统工具 -> 代码生成 -> 导入表 -> 生成代码
  4. 下载生成的代码,放入项目中对应位置

2024 黑马教程

https://www.bilibili.com/video/BV1pf421B71v/?spm_id_from=333.337.search-card.all.click&vd_source=387214638226dee6df2932949d566e5e

入门案例

  1. 导入数据库表
  2. 配置代码生成信息
  3. 动态菜单 -> .sql文件 系统菜单表可以查看是否操作成功(sys_menu)

系统管理

权限控制

RABC 角色权限控制(粗粒度)

sys_menu 菜单权限表
sys_role 角色信息表
sys_role_menu 角色和菜单关联表(中间表-多对多)
sys_user 用户信息表
sys_user_role 用户和角色关联表(中间表-多对多)

数据字典

若依内置的功能用于维护系统中常见的静态数据
功能包括:字典类型管理,字典数据管理

  1. 添加字典类型和字典数据
  2. 修改代码生成信息
  3. 导入前端代码

其他功能

  1. 参数管理
  2. 通知公告
  3. 日志管理

系统监控

监控相关

数据监控(德鲁伊 druid)
application-druid.yml

定时任务

  1. 创建任务类(ruoyi-quartz// 定时任务)
  2. 创建定时任务信息
  3. 启动任务

系统工具

表单构建

  1. 制作表单导出
  2. 复制到前端页面
  3. 创建动态表单(菜单管理)

代码生成

  1. 树表(文件夹)
  2. 主子表(大表套小表)

接口文档

Swagger
相关注解:
@ApiModelProperty(value = “用户名称”)
@ApiModel(value = “用户对象”, description = “用户信息”)
@Api(value = “用户接口”, tags = “用户管理”)
@ApiOperation(value = “用户列表”)
@ApiImplicitParams({})
@ApiImplicitParam(name = “username”, value = “用户名称”, required = true, dataType = “String”, paramType = “query”),
@ApiResponses({@ApiResponse(code = 400, message = “请求参数有误”), @ApiResponse(code = 401, message = “未授权”),})