# single-admin
**Repository Path**: hefuhai001/single-admin
## Basic Information
- **Project Name**: single-admin
- **Description**: 基于 Spring Boot 3 + Vue 3 的基础单体通用开发基座,采用前后端分离架构,内置 RBAC 权限控制、动态菜单路由、部门岗位、字典参数、操作日志、代码生成、文件管理等通用系统能力,可作为各类业务系统的起始模板。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-10
- **Last Updated**: 2026-08-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 单体通用开发基座 (Single Admin Base)
基于 Spring Boot 3 + Vue 3 的基础单体通用开发基座,采用前后端分离架构,内置 RBAC 权限控制、动态菜单路由、部门岗位、字典参数、操作日志、代码生成、文件管理等通用系统能力,可作为各类业务系统的起始模板。
---
## 功能特性
- **RBAC 权限系统**:基于“用户-角色-权限”多对多模型的细粒度权限控制,支持接口权限与菜单/按钮权限
- **动态菜单与路由**:根据用户权限自动生成前端菜单与路由,实现页面级权限控制
- **用户与角色管理**:用户增删改查、状态启用/禁用、角色分配、多角色支持
- **部门与岗位管理**:树形部门结构、岗位配置、用户关联
- **字典与参数管理**:系统字典、业务参数、运行配置维护
- **系统配置管理**:站点标题、主题色、备案号、对象存储等配置集中维护,前后端实时生效
- **操作日志**:登录日志与操作日志记录,支持审计与查询
- **在线用户管理**:实时监控在线用户,支持会话查看与强制下线
- **文件管理**:集成 MinIO / 阿里云 OSS / 七牛云对象存储,支持存储服务商配置切换、文件上传与统一管理
- **代码生成器**:根据数据库表快速生成前后端基础代码
- **动态主题**:支持自定义主题色、字体大小、深色模式,可切换后端统一下发或前端自主配置
- **多环境配置**:支持 dev / test / prod 等多环境配置切换
- **Docker 部署**:提供完整的 Docker Compose 编排方案,一键部署全部服务
---
## 技术栈
### 后端
| 技术 | 版本 | 说明 |
|------|------|------|
| Java | 25 | |
| Spring Boot | 3.5.14 | 基础框架 |
| Sa-Token | 1.40.0 | 认证鉴权(整合 Redis) |
| MyBatis-Plus | 3.5.14 | ORM 框架 |
| MySQL | 8.0+ | 数据库 |
| Redis | - | 缓存 / 会话存储 |
| MinIO | 8.5.7 | 对象存储 |
| Knife4j | 4.5.0 | API 文档 |
| Undertow | - | Web 容器(替代 Tomcat) |
### 前端
| 技术 | 版本 | 说明 |
|------|------|------|
| Vue | 3.5.x | 渐进式框架 |
| Vite | 7.3.x | 构建工具 |
| Vue Router | 5.0.x | 路由管理(含动态路由) |
| Pinia | 3.0.x | 状态管理 |
| Element Plus | 2.13.x | UI 组件库 |
| ECharts | 6.x | 图表库 |
| TailwindCSS | 3.4.x | 原子化 CSS |
| Axios | 1.13.x | HTTP 请求 |
---
## 系统架构
### 整体架构
```mermaid
graph TB
subgraph "前端 Frontend"
A1[Vue 3 + Vite]
A2[Element Plus + TailwindCSS]
A3[Pinia + Vue Router]
end
subgraph "后端 Backend"
B1[Spring Boot 3]
B2[Sa-Token 认证]
B3[MyBatis-Plus ORM]
end
subgraph "数据层 Data"
C1[(MySQL)]
C2[(Redis)]
C3[(MinIO)]
end
A1 -->|HTTP/RESTful API| B1
B2 -->|会话存储| C2
B3 -->|持久化| C1
B1 -->|文件存储| C3
```
### RBAC 权限模型
```mermaid
graph TB
U[sys_user 用户] -->|多对多| UR[sys_user_role 关联表]
UR -->|roleId| R[sys_role 角色]
R -->|多对多| RP[sys_role_permission 关联表]
RP -->|permissionId| P[sys_permission 权限]
P --> PT{permissionType}
PT -->|1-接口权限| API[API 接口鉴权]
PT -->|2-菜单/路由权限| ROUTE[前端动态路由]
```
### 权限查询流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant Auth as StpInterfaceImpl
participant DB as 数据库
Client->>Auth: 登录认证
Auth->>DB: 查询用户角色列表
JOIN sys_user_role + sys_role
DB-->>Auth: 返回角色列表
Auth->>DB: 查询用户权限码列表
JOIN sys_user_role + sys_role_permission + sys_permission
DB-->>Auth: 返回权限码列表
Auth-->>Client: 认证成功
携带角色 & 权限信息
```
---
## 项目结构
```
single-admin/
├── backend/ # 后端项目 (Spring Boot)
│ ├── src/main/java/com/hfh/api/
│ │ ├── config/ # 配置类(Sa-Token、Redis、MyBatis-Plus)
│ │ ├── modules/
│ │ │ └── system/ # system 模块(用户、角色、权限、部门、岗位、字典、参数、日志)
│ │ ├── base/ # 基础类(Controller、Entity)
│ │ ├── utils/ # 工具类
│ │ ├── exception/ # 异常处理
│ │ └── generator/ # 代码生成器
│ └── src/main/resources/
│ ├── mapper/ # MyBatis XML 映射
│ │ └── system/ # system 模块 Mapper XML
│ ├── sql/ # 数据库脚本
│ └── application*.yaml # 配置文件
│
├── frontend/ # 前端项目 (Vue 3 + Vite)
│ ├── src/
│ │ ├── api/ # API 接口层
│ │ ├── views/ # 页面视图
│ │ │ ├── admin/
│ │ │ │ ├── dashboard/ # 数据看板
│ │ │ │ ├── system/ # 系统管理(用户/角色/权限/部门/岗位/字典/参数/日志)
│ │ │ │ └── layout/ # 布局组件
│ │ │ └── login/ # 登录页
│ │ ├── router/ # 路由配置(静态 + 动态)
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── components/ # 公共组件
│ │ └── utils/ # 工具函数
│ └── package.json
│
└── docker/ # Docker 部署
├── docker-compose.yml # 编排配置
├── mysql/ # MySQL 配置
├── redis/ # Redis 配置
├── minio/ # MinIO 配置
├── backend/ # 后端部署配置
└── frontend/ # 前端 Nginx 配置
```
---
## 数据库设计
### 表结构概览
| 表名前缀 | 模块 | 说明 |
|----------|------|------|
| `sys_` | 系统模块 | 用户、角色、权限、部门、岗位、字典、参数、日志等 |
### 核心权限表
- **sys_user** — 用户表
- **sys_role** — 角色表
- **sys_permission** — 权限表(支持接口权限 / 菜单路由权限两种类型)
- **sys_user_role** — 用户角色关联表(多对多)
- **sys_role_permission** — 角色权限关联表(多对多)
> 详细建表 SQL 请参见 `backend/src/main/resources/sql/db_single_admin.sql`
---
## 快速开始
### 环境要求
- Node.js >= 20.19.0
- Java >= 25
- Maven 3.x
- MySQL 8.0+
- Redis
- MinIO
### 后端启动
```bash
# 1. 创建数据库并导入初始化脚本
mysql -u root -p < backend/src/main/resources/sql/db_single_admin.sql
# 2. 修改数据库连接配置
# 编辑 backend/src/main/resources/application-dev.yaml
# 3. 启动后端服务
cd backend
./mvnw spring-boot:run
```
后端服务默认运行在 `http://localhost:8080`,API 文档地址:`http://localhost:8080/doc.html`
### 前端启动
```bash
# 1. 安装依赖
cd frontend
npm install
# 2. 启动开发服务器
npm run dev
```
前端开发服务器默认运行在 `http://localhost:5173`
### Docker 部署(推荐)
```bash
# 一键启动全部服务
cd docker
docker compose up -d
```
Docker Compose 将自动启动以下服务:
- MySQL 8.0
- Redis
- MinIO
- 后端 API 服务
- 前端 Nginx 服务
---
## 可用命令
### 前端
| 命令 | 说明 |
|------|------|
| `npm run dev` | 开发环境启动 |
| `npm run dev:test` | 测试环境启动 |
| `npm run build` | 生产环境构建 |
| `npm run build:test` | 测试环境构建 |
| `npm run lint` | 代码检查 |
| `npm run format` | 代码格式化 |
### 后端
| 命令 | 说明 |
|------|------|
| `./mvnw spring-boot:run` | 启动应用(dev 环境) |
| `./mvnw package -DskipTests` | 打包 JAR |
| `java -jar backend.jar --spring.profiles.active=prod` | 生产环境运行 |
---
## 许可证
MIT License