# RuoYi-Vue
**Repository Path**: zwwcy/RuoYi-Vue
## Basic Information
- **Project Name**: RuoYi-Vue
- **Description**: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: http://ruoyi.vip
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 32390
- **Created**: 2025-08-15
- **Last Updated**: 2025-11-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
RuoYi v3.9.0
基于SpringBoot+Vue前后端分离的Java快速开发框架
## 平台简介
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
* 前端采用Vue、Element UI。
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
* 权限认证使用Jwt,支持多终端认证系统。
* 支持加载动态权限菜单,多方式轻松权限控制。
* 高效率开发,使用代码生成器可以一键生成前后端代码。
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://gitcode.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。
* 提供了单应用版本[RuoYi-Vue-fast](https://gitcode.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
14. 系统接口:根据业务代码自动生成相关的api接口文档。
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存信息查询,命令统计等。
17. 在线构建器:拖动表单元素生成相应的HTML代码。
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
## 在线体验
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址:http://vue.ruoyi.vip
文档地址:http://doc.ruoyi.vip
## 演示图
## 若依前后端分离交流群
QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [](https://jq.qq.com/?_wv=1027&k=SpyH2875) [](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=F58bgRa-Dp-rsQJThiJqIYv8t4-lWfXh&authKey=UmUs4CVG5OPA1whvsa4uSespOvyd8%2FAr9olEGaWAfdLmfKQk%2FVBp2YU3u2xXXt76&noverify=0&group_code=224622315) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Nxb2EQ5qozWa218Wbs7zgBnjLSNk_tVT&authKey=obBKXj6SBKgrFTJZx0AqQnIYbNOvBB2kmgwWvGhzxR67RoRr84%2Bus5OadzMcdJl5&noverify=0&group_code=287842588) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=numtK1M_I4eVd2Gvg8qtbuL8JgX42qNh&authKey=giV9XWMaFZTY%2FqPlmWbkB9g3fi0Ev5CwEtT9Tgei0oUlFFCQLDp4ozWRiVIzubIm&noverify=0&group_code=187944233) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=GsOo-OLz53J8y_9TPoO6XXSGNRTgbFxA&authKey=R7Uy%2Feq%2BZsoKNqHvRKhiXpypW7DAogoWapOawUGHokJSBIBIre2%2FoiAZeZBSLuBc&noverify=0&group_code=191164766) 点击按钮入群。
# 若依管理系统 (RuoYi-Vue)
## 项目简介
若依管理系统是一个基于SpringBoot + Vue.js的前后端分离管理系统,提供完整的权限管理、用户管理、角色管理等功能。
## 技术架构
- **后端**: Spring Boot 2.5.15 + MyBatis + Spring Security
- **前端**: Vue.js + Element UI
- **数据库**: MySQL
- **缓存**: Redis
- **权限**: Spring Security + JWT
## 模块结构
```
ruoyi/
├── ruoyi-admin # 后台服务入口
├── ruoyi-common # 通用工具模块
├── ruoyi-framework # 核心框架模块
├── ruoyi-system # 系统管理模块
├── ruoyi-quartz # 定时任务模块
├── ruoyi-generator # 代码生成模块
└── ruoyi-wms # WMS仓储管理模块 (已升级为MyBatis-Plus)
├── 故障抢修管理 # 故障抢修工单管理
├── 账号变更申请 # 账号变更申请管理
└── 商品类别管理 # 商品类别设置
```
## MyBatis-Plus 升级说明
### 升级背景
为了提升开发效率和代码质量,我们将WMS模块从传统的MyBatis升级为MyBatis-Plus。
### 升级内容
#### 1. 依赖配置
- 在父pom.xml中添加了MyBatis-Plus依赖管理
- 在ruoyi-wms模块中添加了MyBatis-Plus启动器依赖
#### 2. 实体类改造 (WmsCategory.java)
```java
@Data // Lombok注解,自动生成getter/setter/toString等方法
@EqualsAndHashCode(callSuper = true) // Lombok注解,生成equals和hashCode方法
@TableName("wms_category") // 指定表名
public class WmsCategory extends BaseEntity {
@TableId(value = "category_id", type = IdType.AUTO) // 主键配置
private Long categoryId;
// 以下字段无需@TableField注解,MyBatis-Plus自动进行驼峰命名转换
// categoryName -> category_name, parentId -> parent_id 等
private Long parentId;
private String categoryName;
private String categoryCode;
private Integer orderNum;
private String status;
@TableLogic // 逻辑删除
private String delFlag;
@Version // 乐观锁版本号
private Long version;
}
```
#### 3. Mapper接口改造 (WmsCategoryMapper.java)
```java
// 继承BaseMapper,自动获得基础的CRUD方法
public interface WmsCategoryMapper extends BaseMapper {
// 无需手动定义基础的增删改查方法
// 如需自定义复杂查询,可在此添加
}
```
#### 4. Service接口改造 (IWmsCategoryService.java)
```java
// 继承IService,自动获得基础的业务方法
public interface IWmsCategoryService extends IService {
// 无需手动定义基础的业务方法
// 如需自定义业务逻辑,可在此添加
}
```
#### 5. Service实现类改造 (WmsCategoryServiceImpl.java)
```java
// 继承ServiceImpl,自动实现基础的业务方法
@Service
public class WmsCategoryServiceImpl extends ServiceImpl
implements IWmsCategoryService {
// 无需手动实现基础的CRUD业务逻辑
// 如需自定义业务逻辑,可在此重写或添加方法
}
```
#### 6. Controller改造 (WmsCategoryController.java)
```java
@RestController
@RequestMapping("/wms/category")
public class WmsCategoryController extends BaseController {
@GetMapping("/list")
public TableDataInfo list(WmsCategory wmsCategory) {
startPage();
// 使用MyBatis-Plus的QueryWrapper构建查询条件
QueryWrapper queryWrapper = new QueryWrapper<>();
if (wmsCategory.getCategoryName() != null) {
queryWrapper.like("category_name", wmsCategory.getCategoryName());
}
// 使用MyBatis-Plus的list方法查询
List list = wmsCategoryService.list(queryWrapper);
return getDataTable(list);
}
@GetMapping("/{categoryId}")
public AjaxResult getInfo(@PathVariable Long categoryId) {
// 使用MyBatis-Plus的getById方法
WmsCategory wmsCategory = wmsCategoryService.getById(categoryId);
return success(wmsCategory);
}
@PostMapping
public AjaxResult add(@RequestBody WmsCategory wmsCategory) {
// 使用MyBatis-Plus的save方法
boolean result = wmsCategoryService.save(wmsCategory);
return toAjax(result ? 1 : 0);
}
@PutMapping
public AjaxResult edit(@RequestBody WmsCategory wmsCategory) {
// 使用MyBatis-Plus的updateById方法
boolean result = wmsCategoryService.updateById(wmsCategory);
return toAjax(result ? 1 : 0);
}
@DeleteMapping("/{categoryIds}")
public AjaxResult remove(@PathVariable Long[] categoryIds) {
// 使用MyBatis-Plus的removeByIds方法
boolean result = wmsCategoryService.removeByIds(Arrays.asList(categoryIds));
return toAjax(result ? 1 : 0);
}
}
```
### 升级优势
#### 1. 开发效率提升
- **自动CRUD**: 无需编写基础的增删改查SQL
- **条件构造器**: 使用QueryWrapper构建复杂查询条件
- **分页插件**: 内置分页功能,无需手动实现
- **Lombok支持**: 自动生成getter/setter/toString等方法,减少样板代码
- **驼峰命名**: 自动进行数据库字段名与Java属性名的驼峰转换
#### 2. 代码质量提升
- **类型安全**: 编译时类型检查,减少运行时错误
- **代码简洁**: 减少重复代码,提高可维护性
- **性能优化**: 内置性能优化,如批量操作
#### 3. 功能增强
- **逻辑删除**: 支持软删除,数据不丢失
- **乐观锁**: 内置版本号控制,防止并发冲突
- **自动填充**: 支持创建时间、更新时间等字段自动填充
### 使用说明
#### 1. 基础查询
```java
// 根据ID查询
WmsCategory category = wmsCategoryService.getById(1L);
// 查询所有
List allCategories = wmsCategoryService.list();
// 条件查询
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", "0").like("category_name", "商品");
List categories = wmsCategoryService.list(queryWrapper);
```
#### 2. 分页查询
```java
// 分页查询
Page page = new Page<>(1, 10);
Page result = wmsCategoryService.page(page, queryWrapper);
```
#### 3. 批量操作
```java
// 批量插入
List categories = Arrays.asList(category1, category2);
wmsCategoryService.saveBatch(categories);
// 批量更新
wmsCategoryService.updateBatchById(categories);
// 批量删除
wmsCategoryService.removeByIds(Arrays.asList(1L, 2L, 3L));
```
### 注意事项
1. **版本兼容性**: 确保MyBatis-Plus版本与Spring Boot版本兼容
2. **数据库字段**: 实体类字段名应与数据库字段名保持一致(支持驼峰自动转换)
3. **事务管理**: 复杂业务逻辑仍需手动管理事务
4. **性能考虑**: 大数据量查询时注意分页和索引优化
5. **Lombok使用**: 确保IDE安装了Lombok插件,否则编译时可能报错
6. **驼峰转换**: 默认启用驼峰命名转换,如categoryName自动映射到category_name
## 故障抢修管理模块
### 功能概述
故障抢修管理模块是WMS系统的重要组成部分,用于管理电力系统的故障抢修工单。该模块提供了完整的故障抢修流程管理,包括工单创建、任务分配、处理跟踪和记录管理。
### 数据库设计
#### 1. 故障抢修主表 (wms_fault_repair)
存储故障抢修的基本信息,包括:
- **工单编号**: 唯一标识每个故障抢修工单
- **任务名称**: 故障抢修任务的名称
- **时间管理**: 开始时间、结束时间、发起时间
- **风险等级**: 五级、六级、七级风险分类
- **专业信息**: 所属专业(默认主网)
- **停电信息**: 是否停电、停电范围
- **位置信息**: 工作地点
- **人员信息**: 故障专责、发起人
- **内容信息**: 抢修内容、附件
- **状态管理**: 工单状态(待处理、处理中、已完成、已取消)
#### 2. 故障抢修处理记录表 (wms_fault_repair_record)
记录故障抢修的处理过程,包括:
- **关联关系**: 通过外键关联主表
- **处理人员**: 处理人信息
- **处理类型**: 接单、开始处理、处理完成、取消处理
- **处理状态**: 处理中、处理成功、处理失败
- **处理意见**: 处理过程中的意见和说明
- **时间记录**: 处理时间
### 字典数据
系统自动初始化以下字典数据:
- **故障抢修状态**: 工单状态管理
- **风险等级**: 五级、六级、七级风险分类
- **处理类型**: 处理操作类型
- **处理状态**: 处理结果状态
### 索引优化
- **主键索引**: 自动创建主键索引
- **唯一索引**: 工单编号唯一索引,防止重复
- **外键索引**: 处理记录表的外键索引
- **查询索引**: 处理人、处理时间等常用查询字段索引
### 数据完整性
- **外键约束**: 处理记录表与主表的级联关系
- **非空约束**: 关键字段的非空验证
- **默认值**: 合理的默认值设置
- **字符集**: UTF8MB4字符集支持
## 账号变更申请管理模块
### 功能概述
账号变更申请管理模块是WMS系统的重要组成部分,用于管理企业内部账号的变更申请流程。该模块提供了完整的申请流程管理,包括申请提交、审核审批、处理跟踪和详细的操作记录管理。
### 数据库设计
#### 1. 账号变更申请抬头表 (wms_account_change_apply)
存储账号变更申请的基本信息,包括:
- **申请单编号**: 唯一标识每个申请单
- **申请类型**: 新增、修改、删除、停用、启用等类型
- **申请信息**: 申请标题、申请原因、申请人信息
- **时间管理**: 申请时间、期望完成时间、完成时间
- **优先级**: 高、中、低优先级分类
- **状态管理**: 申请状态(待审核、审核中、已通过、已拒绝、已完成、已取消)
- **处理信息**: 当前处理人、处理部门、审批结果
- **统计信息**: 明细记录总数
#### 2. 账号变更申请明细表 (wms_account_change_detail)
存储具体的账号变更明细信息,包括:
- **账号信息**: 账号类型、账号名称、账号描述、账号状态
- **账号属性**: 账号所有者、所属部门、账号角色、账号权限
- **时间信息**: 账号过期时间、最后登录时间、最后密码修改时间
- **变更信息**: 变更类型、变更原因、变更详情、变更前后值
- **处理信息**: 处理状态、处理结果、处理时间、处理人
- **行号管理**: 明细行号,支持排序和显示
#### 3. 账号变更申请操作记录表 (wms_account_change_record)
详细记录每一步操作过程,包括:
- **操作信息**: 操作类型、操作名称、操作人、操作时间
- **关联关系**: 与申请单和明细记录的关联
- **状态变更**: 操作前后状态、处理人变更
- **数据变更**: 操作前后数据(JSON格式)、变更字段列表
- **操作详情**: 操作意见、操作详情、操作结果
- **附件关联**: 相关附件信息
#### 4. 账号变更申请附件表 (wms_account_change_attachment)
管理申请相关的附件文件,包括:
- **文件信息**: 文件名、文件路径、文件大小、文件类型
- **上传信息**: 上传人、上传时间
- **关联关系**: 与申请单、明细记录和操作记录的关联
- **附件类型**: 申请附件、审核附件、处理附件
### 操作记录详细设计
#### 操作类型覆盖
系统支持以下操作类型的详细记录:
1. **提交申请**: 记录申请提交的详细信息
2. **审核**: 记录审核过程和结果
3. **审批**: 记录审批决策和意见
4. **处理**: 记录具体处理过程
5. **完成**: 记录完成状态和结果
6. **拒绝**: 记录拒绝原因和意见
7. **取消**: 记录取消原因
8. **转派**: 记录转派给其他处理人
9. **退回**: 记录退回原因和要求
#### 数据变更追踪
- **JSON格式存储**: 使用JSON格式存储操作前后的完整数据
- **字段级变更**: 记录具体变更的字段列表
- **状态流转**: 详细记录状态变更过程
- **处理人变更**: 记录处理人的变更历史
### 主子表设计优势
#### 1. **数据结构清晰**
- **抬头表**: 存储申请单的基本信息和流程状态
- **明细表**: 存储具体的账号变更明细,支持多行数据
- **操作记录表**: 记录每个操作的历史轨迹
- **附件表**: 管理相关的附件文件
#### 2. **业务逻辑完整**
- **一对多关系**: 一个申请单可以包含多个账号变更明细
- **明细级操作**: 可以对每个明细行进行独立的操作记录
- **状态管理**: 抬头和明细都有独立的状态管理
- **数据完整性**: 通过外键约束保证数据一致性
#### 3. **操作记录详细**
- **抬头级操作**: 记录申请单级别的操作(提交、审核、审批等)
- **明细级操作**: 记录具体账号变更的操作(处理、完成等)
- **数据变更追踪**: 使用JSON格式记录操作前后的完整数据
- **字段级变更**: 记录具体变更的字段列表
### 字典数据
系统自动初始化以下字典数据:
- **申请类型**: 新增、修改、删除、停用、启用
- **申请状态**: 待审核、审核中、已通过、已拒绝、已完成、已取消
- **优先级**: 高、中、低优先级
- **账号类型**: 系统账号、邮箱账号、应用账号、数据库账号
- **账号状态**: 正常、停用、锁定
- **变更类型**: 新增、修改、删除、停用、启用、重置密码
- **处理状态**: 待处理、处理中、已完成、处理失败
- **操作类型**: 各种操作类型的详细分类
- **操作结果**: 成功、失败状态
- **附件类型**: 申请附件、审核附件、处理附件
### 索引优化
- **主键索引**: 自动创建主键索引
- **唯一索引**: 申请单编号唯一索引,防止重复
- **外键索引**: 明细表、操作记录表和附件表的外键索引
- **查询索引**: 申请类型、状态、时间、处理人等常用查询字段索引
- **明细索引**: 明细行号、账号类型、账号名称、处理状态等索引
- **复合索引**: 支持多条件组合查询的复合索引
### 数据完整性
- **外键约束**: 明细表、操作记录表和附件表与抬头表的级联关系
- **非空约束**: 关键字段的非空验证
- **默认值**: 合理的默认值设置
- **字符集**: UTF8MB4字符集支持
- **JSON支持**: 支持JSON格式数据存储和查询
- **行号管理**: 明细表支持行号排序和显示
### 使用示例
#### 主子表关联查询
```sql
-- 查询申请单及其明细
SELECT
a.APPLY_NO, a.APPLY_TITLE, a.STATUS,
d.DETAIL_NO, d.ACCOUNT_NAME, d.ACCOUNT_TYPE, d.CHANGE_TYPE, d.HANDLE_STATUS
FROM wms_account_change_apply a
LEFT JOIN wms_account_change_detail d ON a.ID = d.APPLY_ID
WHERE a.APPLY_NO = 'APP202401001'
ORDER BY d.DETAIL_NO;
-- 查询操作记录
SELECT
r.OPERATION_NAME, r.OPERATOR, r.OPERATION_TIME, r.OPERATION_OPINION,
d.ACCOUNT_NAME, d.CHANGE_TYPE
FROM wms_account_change_record r
LEFT JOIN wms_account_change_detail d ON r.DETAIL_ID = d.ID
WHERE r.APPLY_ID = 1
ORDER BY r.OPERATION_TIME;
```
#### 明细级操作记录
```sql
-- 记录明细处理操作
INSERT INTO wms_account_change_record (
APPLY_ID, DETAIL_ID, OPERATION_TYPE, OPERATION_NAME, OPERATOR,
OPERATION_TIME, OPERATION_RESULT, OPERATION_OPINION,
BEFORE_STATUS, AFTER_STATUS, BEFORE_DATA, AFTER_DATA
) VALUES (
1, 1, '4', '处理账号变更', 'admin',
NOW(), '1', '账号变更处理完成',
'0', '2', '{"handleStatus":"0"}', '{"handleStatus":"2","handleResult":"处理成功"}'
);
```
## 运行说明
### 环境要求
- JDK 1.8+
- Maven 3.6+
- MySQL 5.7+
- Redis 3.0+
### 启动步骤
1. 导入数据库脚本 `sql/ry_20250522.sql`
2. 修改 `ruoyi-admin/src/main/resources/application-druid.yml` 数据库连接配置
3. 修改 `ruoyi-admin/src/main/resources/application.yml` Redis配置
4. 运行 `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java`
### 前端启动
```bash
cd ruoyi-ui
npm install
npm run dev
```
## 许可证
本项目采用MIT许可证,详见 [LICENSE](LICENSE) 文件。
## 联系方式
- 官方网站: http://www.ruoyi.vip
- 技术交流: 欢迎提交Issue和Pull Request