# yoo-admin **Repository Path**: ylcplus/yoo-admin ## Basic Information - **Project Name**: yoo-admin - **Description**: 轻量级的后台管理脚手架,拒绝臃肿无用的功能,开箱即用 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-03 - **Last Updated**: 2026-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # yoo-admin 全栈后台管理脚手架,基于 Spring Boot 3.4 + Vue 3 + Naive UI。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | Spring Boot 3.4, JDK 21, MyBatis-Plus, Sa-Token, Flyway, Redis | | 前端 | Vue 3, Vite, Naive UI, Axios | ## 项目结构 ``` yoo-admin/ ├── yoo-service/ # 后端多模块 │ ├── yoo-admin/ # 启动入口 + 配置 + Flyway 数据库迁移 │ │ └── src/main/ │ │ ├── java/com/yoo/ │ │ │ └── YooApplication.java │ │ └── resources/ │ │ ├── application.yml │ │ └── db/migration/ # Flyway 迁移脚本 (V1~V8) │ │ │ ├── yoo-framework/ # 基础设施层 │ │ └── src/main/java/com/yoo/framework/ │ │ ├── common/ # 公共类 (ApiResult, BaseEntity, BusinessException) │ │ ├── config/ # 配置类 (Jackson, MyBatisPlus, SaToken) │ │ ├── handler/ # 全局异常处理 │ │ ├── job/ # 定时任务接口定义 │ │ └── log/ # 操作日志注解与切面 │ │ │ ├── yoo-common/ # 公共类型定义 │ │ │ └── yoo-modules/ # 业务模块 │ ├── yoo-system/ # 系统管理模块 │ │ └── src/main/java/com/yoo/modules/system/ │ │ ├── dept/ # 部门管理 │ │ ├── dict/ # 字典管理 │ │ ├── job/ # 定时任务 │ │ ├── log/ # 日志 (操作日志、登录日志) │ │ ├── menu/ # 菜单管理 │ │ ├── role/ # 角色管理 │ │ ├── security/ # 安全认证实现 │ │ └── user/ # 用户管理 │ │ │ └── yoo-business/ # 业务示例模块 │ └── yoo-vue/ # 前端 Vue 3 项目 └── src/ ├── api/ # API 接口层 │ ├── auth.js # 认证接口 │ ├── dept.js # 部门接口 │ ├── dict.js # 字典接口 │ ├── job.js # 定时任务接口 │ ├── login-log.js # 登录日志接口 │ ├── menu.js # 菜单接口 │ ├── operation-log.js # 操作日志接口 │ ├── request.js # Axios 请求封装 │ ├── role.js # 角色接口 │ └── user.js # 用户接口 │ ├── components/ # 公共组件 │ └── common/ │ ├── DictSelect.vue # 字典下拉选择 │ ├── DictTag.vue # 字典标签 │ └── WindowWrapper.vue │ ├── layouts/ # 布局组件 │ ├── MainLayout.vue # 主布局 │ └── components/ │ ├── SettingsDrawer.vue # 设置抽屉 │ └── TabBar.vue # 多标签页 │ ├── router/ # 路由配置 ├── stores/ # Pinia 状态管理 │ ├── tabs.js # 标签页状态 │ └── user.js # 用户状态 │ ├── views/ # 页面视图 │ ├── login/ # 登录页 │ ├── profile/ # 个人设置 │ │ ├── PasswordForm.vue │ │ ├── ProfileInfo.vue │ │ └── index.vue │ ├── system/ # 系统管理 │ │ ├── dept/ # 部门管理 │ │ ├── dict/ # 字典管理 │ │ ├── job/ # 定时任务 │ │ ├── log/ # 日志查看 │ │ ├── menu/ # 菜单管理 │ │ ├── role/ # 角色管理 │ │ └── user/ # 用户管理 │ └── Dashboard.vue # 仪表盘 │ ├── config.js # 前端配置 ├── main.js # 入口文件 └── style.css # 全局样式 ``` ## 快速开始 ### 环境要求 | 工具 | 版本要求 | |------|----------| | JDK | 21+ | | Maven | 3.8+ | | MySQL | 8.0+ | | Redis | 6+ | | Node.js | 18+ | ### 后端启动 ```bash cd yoo-service # 1. 创建数据库 mysql -u root -p -e "CREATE DATABASE yoo_admin DEFAULT CHARSET utf8mb4" # 2. 配置数据库连接 cp yoo-admin/src/main/resources/application-dev.yml.example \ yoo-admin/src/main/resources/application-dev.yml # 编辑 application-dev.yml,配置 MySQL 和 Redis 连接信息 # 3. 编译运行(Flyway 会自动创建表结构) cd yoo-admin && mvn spring-boot:run ``` ### 前端启动 ```bash cd yoo-vue # 安装依赖 npm install # 启动开发服务器 npm run dev ``` ### 默认账号 - 用户名:`admin` - 密码:`123456` ## 内置功能 ### 系统管理 | 模块 | 功能描述 | |------|----------| | 用户管理 | 支持角色分配、部门归属、状态控制,密码 SHA256 + BCrypt 双重加密 | | 角色管理 | 自定义角色,分配菜单权限和数据权限范围 | | 菜单管理 | 目录/菜单/按钮三级树形管理,**自动扫描后端权限注解**生成权限标识树,支持**拖拽排序**(vuedraggable)、图标选择器、可见/状态开关 | | 部门管理 | 树形组织结构,支持新增、编辑、删除、查看 | | 岗位管理 | 岗位字典维护 | ### 数据字典 - 字典类型 + 字典数据分左右两栏布局,无需切换页面即可管理 - 复用组件: - `` - 下拉选择组件 - `` - 标签展示组件 - 传入 `dict-code` 即可使用 - 字典 code 唯一性校验(应用层控制,适配逻辑删除) ### 定时任务 - 基于 Spring `ThreadPoolTaskScheduler` + `CronTrigger` 实现(非 Quartz) - **JobHandler 接口**:实现 `JobHandler` 接口 + `@Component` + `@JobHandlerMeta` 注解,启动时自动扫描注册 - **Cron 可视化编辑器**:支持可视化勾选(指定/范围/步进)和手动输入两种模式,内置常用预设 - **防重复执行**:基于 `AtomicBoolean` 的 CAS 锁,任务未结束时跳过下一次触发 - **多机调度开关**:`job.scheduling-enabled` 配置项,多实例部署时只让一台执行调度 ### 认证与权限 - 验证码登录,密码前端 SHA256 一次哈希后传输,后端 BCrypt 二次加密存储 - RBAC 权限模型,Sa-Token 实现 - 支持 `@SaCheckPermission` 注解驱动权限控制 - Token 持久化到 Redis,30 天有效期,服务重启不丢失 ### 日志 - **操作日志**:基于 `@OperationLog` 注解 + Spring 事件监听,记录操作人、模块、操作类型、请求参数、执行时间、响应状态 - **登录日志**:记录每次登录的 IP、浏览器、操作系统、登录结果 ### 个人设置 - 基本信息修改(昵称、邮箱、手机号) - 修改密码 - Tab 页布局,各功能独立组件 ### 界面特性 - 暗色/亮色主题切换,主题色自由调整,设置持久化到 localStorage - **全屏模式**:一键浏览器全屏 - **多标签页**:打开的页面以标签形式缓存,支持关闭、右键操作 - 窗口样式可配置:**弹窗** / **抽屉** 两种风格 ## API 接口 | 模块 | 路径 | 说明 | |------|------|------| | 认证 | `/auth/*` | 登录、验证码、个人信息 | | 用户 | `/sys/user/*` | 用户 CRUD、角色分配 | | 角色 | `/sys/role/*` | 角色 CRUD、菜单分配 | | 菜单 | `/sys/menu/*` | 菜单 CRUD、权限码 | | 部门 | `/sys/dept/*` | 部门树形管理 | | 字典 | `/sys/dict/*` | 字典类型与数据 | | 任务 | `/sys/job/*` | 定时任务管理 | | 日志 | `/sys/*-log/*` | 操作日志、登录日志 | ## 配置说明 ### 后端配置 (application.yml) ```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/yoo_admin?useUnicode=true&characterEncoding=utf-8 username: root password: your_password redis: host: localhost port: 6379 flyway: enabled: true locations: classpath:db/migration # 任务调度开关(多机部署时只开启一台) job: scheduling-enabled: true ``` ### 前端配置 (src/config.js) ```javascript export default { apiBaseUrl: 'http://localhost:8080', // ...其他配置 } ``` ## 项目截图 ![登录页](yoo-vue/public/ScreenShot_2026-07-04_124009_534.png) ![系统管理](yoo-vue/public/ScreenShot_2026-07-04_124111_674.png) ![菜单管理](yoo-vue/public/ScreenShot_2026-07-04_124154_083.png) ## 技术亮点 1. **前后端分离架构**:Spring Boot 3.4 + Vue 3 完美结合 2. **安全性设计**:双重密码加密(SHA256 + BCrypt),Token 持久化到 Redis 3. **智能菜单权限**:自动扫描后端权限注解生成权限树 4. **可视化任务调度**:Cron 表达式可视化编辑,防重复执行机制 5. **现代化的 UI**:Naive UI 组件库,暗色/亮色主题切换,多标签页 ## 许可证 MIT License