# adu_sys **Repository Path**: adu23dsa/adu_sys ## Basic Information - **Project Name**: adu_sys - **Description**: 使用springboot3+vue(js版)开发的中后台管理系统,可用于中小企业项目快速集成,后端开发者也能快速上手。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2026-04-23 - **Last Updated**: 2026-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: 中后台, Java, SpringBoot, Vue, MySQL ## README # 企业级中后台管理系统 > 基于 Spring Boot 3 + Vue 3(js) 的全栈企业级中后台管理解决方案,提供完整的权限管理、组织架构、系统配置等核心功能模块。 ## 📖 项目简介 这是一个前后端分离的企业级中后台管理系统模板,采用当前主流的技术栈构建,具备完善的用户权限管理体系、动态路由生成机制和丰富的系统管理功能。项目代码规范、架构清晰,可作为企业项目开发的基础框架或学习参考。 ### ✨ 核心特性 - 🔐 **完善的权限体系**:基于 Sa-Token 实现细粒度的权限控制,支持菜单、按钮级别的权限管理 - 🔄 **动态路由生成**:根据用户角色权限自动渲染侧边栏菜单和路由,无需手动配置 - 📊 **丰富的管理模块**:用户管理、角色管理、菜单管理、组织机构、字典管理、参数配置等 - 🚀 **高性能架构**:Redis 缓存、Druid 连接池、MyBatis Plus 高效 ORM - 🛡️ **安全防护**:XSS 防护、接口限流、防重复提交、验证码登录 - 📱 **响应式设计**:Element Plus UI 组件库,适配多种屏幕尺寸 - 🎯 **开发友好**:Flyway 数据库版本管理、Knife4j API 文档、代码自动生成器 --- ## 🏗️ 技术架构 ### 后端技术栈 | 分类 | 技术 | 版本 | |------|------|------| | **核心框架** | Spring Boot | 3.2.3 | | **开发语言** | Java | 17 | | **ORM 框架** | MyBatis Plus | 3.5.7 | | **数据库** | MySQL | 8.0+ | | **缓存** | Redis / Redisson | 5.0+ / 4.0.0 | | **权限认证** | Sa-Token | 1.41.0 | | **API 文档** | Knife4j | 4.5.0 | | **连接池** | Druid | 1.2.20 | | **工具库** | Hutool | 5.8.26 | | **JSON 处理** | FastJSON2 | 2.0.47 | | **Excel 处理** | EasyExcel | 4.0.3 | | **系统监控** | OSHI | 6.6.0 | | **XSS 防护** | Mica-XSS | 2.5.8 | | **日志框架** | Log4j2 | - | | **数据库迁移** | Flyway | - | | **代码生成** | MyBatis Plus Generator | 3.5.7 | ### 前端技术栈 | 分类 | 技术 | 版本 | |------|------|------| | **核心框架** | Vue | 3.5.30 | | **构建工具** | Vite | 8.0.1 | | **UI 组件库** | Element Plus | 2.13.6 | | **路由管理** | Vue Router | 5.0.4 | | **状态管理** | Pinia | 3.0.4 | | **持久化插件** | pinia-plugin-persistedstate | 4.7.1 | | **HTTP 客户端** | Axios | 1.13.6 | | **富文本编辑器** | wangEditor | 5.1.12 | | **CSS 预处理器** | SCSS/Sass | 1.98.0 | | **图标库** | @element-plus/icons-vue | 2.3.2 | | **自动导入** | unplugin-auto-import | 21.0.0 | | **组件注册** | unplugin-vue-components | 32.0.0 | --- ## 📁 项目结构 ### 后端项目 (sys_java) ``` sys_java/ ├── src/main/java/com/adu/ │ ├── config/ # 配置类 │ │ ├── CaptchaConfig.java # 验证码配置 │ │ ├── FileUploadProperties.java # 文件上传配置 │ │ ├── InterceptorConfig.java # 拦截器配置 │ │ ├── Knife4jConfig.java # API 文档配置 │ │ ├── MybatisPlusConfig.java # MyBatis Plus 配置 │ │ ├── RedisConfig.java # Redis 配置 │ │ └── SaTokenConfig.java # Sa-Token 配置 │ ├── controller/ # 控制器层 │ │ ├── ConfigController.java # 参数配置接口 │ │ ├── DictController.java # 字典管理接口 │ │ ├── OrganizationController.java # 组织机构接口 │ │ ├── OthersController.java # 其他功能接口 │ │ ├── PermissionController.java # 权限管理接口 │ │ ├── RoleController.java # 角色管理接口 │ │ ├── UploadController.java # 文件上传接口 │ │ └── UserController.java # 用户管理接口 │ ├── entity/ # 实体类 │ │ ├── Config/ # 参数配置实体 │ │ ├── Dict/ # 字典实体 │ │ ├── Organization/ # 组织机构实体 │ │ ├── Other/ # 其他实体 │ │ ├── Permission/ # 权限实体 │ │ ├── Role/ # 角色实体 │ │ ├── User/ # 用户实体 │ │ ├── RolePermission.java # 角色权限关联 │ │ └── UserRole.java # 用户角色关联 │ ├── exception/ # 异常处理 │ │ ├── ExceptionHandle.java # 全局异常处理器 │ │ ├── MyException.java # 自定义异常 │ │ ├── Result.java # 统一返回结果 │ │ ├── ResultEnum.java # 返回结果枚举 │ │ └── ResultUtil.java # 返回结果工具类 │ ├── limit/ # 限流与防重提交 │ │ ├── LimitType.java # 限流类型 │ │ ├── NoRepeatSubmit.java # 防重提交注解 │ │ ├── NoRepeatSubmitAspect.java # 防重提交切面 │ │ ├── RateLimit.java # 限流注解 │ │ └── RateLimitAspect.java # 限流切面 │ ├── mapper/ # Mapper 接口 │ ├── service/ # 业务逻辑层 │ │ ├── impl/ # 服务实现类 │ │ └── *.java # 服务接口 │ ├── utils/ # 工具类 │ └── SysJavaApplication.java # 应用启动类 ├── src/main/resources/ │ ├── db/migration/ # Flyway 数据库迁移脚本 │ │ └── V1__init.sql # 初始化脚本 │ ├── mapper/ # MyBatis XML 映射文件 │ ├── application.yml # 主配置文件 │ ├── application-dev.yml # 开发环境配置 │ ├── application-prod.yml # 生产环境配置 │ └── banner.txt # 启动横幅 └── pom.xml # Maven 依赖配置 ``` ### 前端项目 (web) ``` web/ ├── public/ # 静态资源目录 │ └── favicon.svg # 网站默认图标 ├── src/ │ ├── api/ # API 接口封装 │ │ ├── config.js # 参数配置接口 │ │ ├── dict.js # 字典管理接口 │ │ ├── menu.js # 菜单管理接口 │ │ ├── organization.js # 组织机构接口 │ │ ├── other.js # 其他接口 │ │ ├── request.js # Axios 请求封装 │ │ ├── role.js # 角色管理接口 │ │ ├── upload.js # 文件上传接口 │ │ └── user.js # 用户管理接口 │ ├── assets/ # 静态资源 │ │ ├── aliIconfont/ # 阿里矢量图标 │ │ └── images/ # 图片资源 │ ├── components/ # 公共组件 │ │ ├── Adu-Input.vue # 自定义输入框 │ │ ├── Loading.vue # 加载组件 │ │ ├── RichTextEditor.vue # 富文本编辑器 │ │ ├── RouteProgress.vue # 路由进度条 │ │ ├── ScreeningFrame.vue # 筛选框架 │ │ └── iconSelect.vue # 图标选择器 │ ├── router/ # 路由配置 │ │ └── index.js # 路由定义 │ ├── stores/ # Pinia 状态管理 │ │ ├── dict.js # 字典数据 │ │ ├── routeRecord.js # 路由记录 │ │ ├── system.js # 系统状态 │ │ └── user.js # 用户状态 │ ├── utils/ # 工具函数 │ │ ├── cacheManager.js # 缓存管理 │ │ ├── elicons.js # Element Plus 图标 │ │ └── fullscreen.js # 全屏功能 │ ├── views/ # 页面组件 │ │ ├── Config/ # 参数配置页面 │ │ ├── Dashboard/ # 仪表盘 │ │ ├── Dict/ # 字典管理页面 │ │ ├── Latout/ # 布局组件 │ │ ├── Menu/ # 菜单管理页面 │ │ ├── Organization/ # 组织机构页面 │ │ ├── Role/ # 角色管理页面 │ │ ├── Template/ # 模板页面 │ │ ├── User/ # 用户管理页面 │ │ └── Login.vue # 登录页面 │ ├── App.vue # 根组件 │ ├── main.js # 入口文件 │ └── style.css # 全局样式 ├── .env.development # 开发环境变量 ├── .env.production # 生产环境变量 ├── package.json # 项目依赖配置 └── vite.config.js # Vite 构建配置 ``` --- ## 🚀 快速开始 ### 环境要求 **后端环境:** - JDK 17 或更高版本 - MySQL 8.0+ - Redis 5.0+ - Maven 3.6+ **前端环境:** - Node.js >= 16.x - npm >= 8.x ### 后端部署 #### 1. 环境准备 确保以下服务已安装并启动: - MySQL 数据库 - Redis 服务 #### 2. 数据库配置 创建数据库(例如:`sys_db`),然后在 `sys_java/src/main/resources/application-dev.yml` 中配置数据库连接信息: ``` yaml spring: datasource: druid: url: jdbc:mysql://localhost:3306/sys_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: your_username password: your_password ``` > **提示**:项目集成了 Flyway 数据库版本管理,启动时会自动创建表结构和初始化数据,无需手动导入 SQL 文件。如果不是使用root用户,需要授予你创建用户的performance_schema数据库查询权限。因为Flyway在连接数据库后,需要检查服务端的一些系统级变量和当前会话的设置,来判断兼容性和执行环境,而这正是performance_schema负责提供的功能 ### 第一步:用 root 用户登录 MySQL ```bash mysql -uroot -p ``` ### 第二步:执行授权命令 ```bash -- 1. 授予 你创建 用户查询 performance_schema 数据库的权限 GRANT SELECT ON performance_schema.* TO '你创建的用户名'@'%'; -- 2. 刷新权限使生效 FLUSH PRIVILEGES; -- 3. 查看授权结果(验证) SHOW GRANTS FOR '你创建的用户名'@'%'; -- 4. 退出MySQL EXIT; ``` #### 3. Redis 配置 在 `sys_java/src/main/resources/application.yml` 中配置 Redis 连接: ``` yaml spring: redisson: single-server-config: address: redis://127.0.0.1:6379 password: your_redis_password # 如有密码 database: 0 ``` #### 4. 启动项目 ``` bash cd sys_java # 方式一:Maven 运行 mvn spring-boot:run # 方式二:打包后运行 mvn clean package java -jar target/sys_java-1.0.jar ``` #### 5. 访问系统 - **应用地址**: http://localhost:8080 - **API 文档**: http://localhost:8080/doc.html **默认账号:** - 管理员账号:`admin` / `123456` - 测试账号:`test` / `123456` ### 前端部署 #### 1. 安装依赖 ``` bash cd web npm install ``` #### 2. 配置 API 地址 根据实际后端地址修改环境变量文件: **开发环境** `.env.development`: ``` VITE_API_BASE_URL=http://localhost:8080 ``` **生产环境** `.env.production`: ``` VITE_API_BASE_URL=https://your-api-domain.com ``` #### 3. 启动开发服务器 ``` bash npm run dev ``` 访问:http://localhost:5173(具体端口以控制台输出为准) #### 4. 生产构建 ``` bash # 构建 npm run build # 预览构建结果 npm run preview ``` 构建产物位于 `dist` 目录,可部署到 Nginx 或其他静态服务器。 ## 部署 1. 后端部署:将 `sys_java` 项目打包,jar包命令运行即可 2. 前端部署:将 `web/dist` 目录下的文件上传到 Nginx 服务器,下面是重点配置: ``` nginx location / { try_files $uri $uri/ /index.html; } # 如果需要查看文档,需要放行 Knife4j 静态资源,不代理,直接让浏览器访问后端的这些路径 location ~ ^/(doc.html|swagger-ui.html|swagger-resources|v3/api-docs|webjars) { proxy_pass http://localhost: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; proxy_set_header X-Forwarded-Proto $scheme; } # 反向代理后端API请求 location /api/ { #后端接口都以/api开头 proxy_pass http://localhost: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; proxy_set_header X-Forwarded-Proto $scheme; } ``` --- ## 🔧 开发指南 ### 后端开发建议 1. **遵循最佳实践** - 使用 RESTful 风格设计接口 - 统一使用 `Result` 封装返回结果 - 合理使用 `@NoRepeatSubmit` 防止表单重复提交 - 使用 `@RateLimit` 进行接口限流保护 2. **代码规范** - 使用 Lombok 简化实体类编写 - 优先使用 Hutool 工具库 - 利用 MyBatis Plus 代码生成器快速生成基础代码 - 新增功能时添加相应的权限标识 3. **数据库管理** **Flyway 命名规范:** ``` V{版本号}__{描述}.sql ``` **注意事项:** - `V` 必须大写 - 版本号可以是数字或小数(如 `1`, `1.0`, `1.1`) - 使用**两个下划线** `__` 分隔版本号和描述 - 描述部分使用下划线分隔单词 **示例:** ``` V1__init.sql V1.1__add_user_table.sql V2__update_role_permission.sql ``` 所有迁移脚本必须放在:`src/main/resources/db/migration/` 4. **配置说明** Flyway 配置位于 `application.yml`,通常无需修改: ``` yaml spring: flyway: enabled: true baseline-on-migrate: true baseline-version: 1 locations: classpath:db/migration encoding: UTF-8 validate-on-migrate: true ``` ### 前端开发建议 1. **组件开发** - 使用 `