# react-dome
**Repository Path**: mssng/dome
## Basic Information
- **Project Name**: react-dome
- **Description**: QiFeng DDD Frontend 是 QiFeng DDD 后端服务 的官方配套前端应用,基于 React 18 和 Ant Design 5 构建的企业级权限管理系统前端实现。项目完整实现了 RBAC 权限模型的前端交互,支持动态数据级权限控制和多租户隔离。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-10-31
- **Last Updated**: 2026-05-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# QiFeng DDD Frontend - 企业级权限管理系统前端
**React + Ant Design · 动态权限控制 · 完美对接 QiFeng DDD 后端**
[](LICENSE)
[](https://reactjs.org/)
[](https://ant.design/)
[](https://nodejs.org/)
[⚡ 快速开始](#-快速开始) • [🔥 核心特性](#-核心特性) • [📖 API文档](#-api-集成)
---
## 💡 项目简介
QiFeng DDD Frontend 是 **QiFeng DDD 后端服务** 的官方配套前端应用,基于 **React 18** 和 **Ant Design 5** 构建的企业级权限管理系统前端实现。项目完整实现了 RBAC 权限模型的前端交互,支持动态数据级权限控制和多租户隔离。
**核心价值**:
- 🎨 **现代化 UI**:基于 Ant Design 5 的专业后台管理界面
- 🔐 **三层权限防护**:URL级 + 组件级 + 按钮级权限控制
- ⚡ **高性能体验**:路由懒加载、组件按需引入、请求缓存
- 🎯 **配置化权限**:通过 SpEL 表达式实现细粒度控制,无需修改代码
- 🏢 **多租户支持**:自动处理租户上下文,支持 SaaS 模式
- 📱 **响应式设计**:适配桌面端和移动端设备
---
## ⚡ 快速开始
### 前置要求
在开始之前,请确保已安装以下环境:
- **Node.js 16+**:JavaScript 运行时
- **npm 或 yarn**:包管理器
- **QiFeng DDD 后端服务**:需要先启动后端服务(见下方说明)
### 第一步:启动后端服务
本项目需要配合 **QiFeng DDD 后端服务** 使用,请先确保后端服务已启动:
```bash
# 克隆后端项目
git clone https://gitee.com/mssng/ddd.git
cd ddd
# 方式一:Docker Compose 启动(推荐)
docker-compose up -d
# 方式二:本地启动
mvn spring-boot:run -pl qiufeng-ddd-trigger
```
**后端服务地址**:http://localhost:8091
**API 文档**:http://localhost:8091/doc.html
**默认账号**:`master` / `Qq123456`
### 第二步:启动前端项目
```bash
# 克隆前端项目
git clone https://gitee.com/mssng/dome.git
cd dome
# 安装依赖
npm install
# 或使用 yarn
yarn install
# 启动开发服务器
npm start
# 或使用 yarn
yarn start
```
访问 http://localhost:3000
默认账号:`master` / `Qq123456`
### 生产环境部署
```bash
# 构建生产版本
npm run build
# 将 build 目录部署到 Nginx 或其他静态服务器
```
**Nginx 配置示例**:
```nginx
server {
listen 80;
server_name your-domain.com;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# 代理 API 请求到后端
location /api/ {
proxy_pass http://localhost:8091;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
---
## 🔥 核心特性
### 1️⃣ 完整的 RBAC 权限模型
- 👥 **用户管理**:用户的增删改查、状态控制、密码重置
- 🎭 **角色管理**:角色的增删改查、权限分配、数据范围设置
- 🔑 **权限管理**:菜单权限、按钮权限、API 接口权限的细粒度控制
- 📋 **菜单管理**:树形菜单结构、路由配置、图标管理
### 2️⃣ 三层权限防护
| 层级 | 实现方式 | 说明 |
|------|---------|------|
| URL级 | RequireAuth 组件 | 路由级别的认证保护 |
| 组件级 | Permission 组件 | 条件渲染受保护的UI元素 |
| 按钮级 | hasPermission 工具函数 | 细粒度的按钮级别权限控制 |
**使用示例**:
```jsx
// URL级保护
} />
// 组件级保护
// 按钮级保护
{hasPermission('user:delete', permissions) && (
)}
```
### 3️⃣ 动态数据级权限
通过后端 SpEL 表达式引擎实现的数据级权限控制:
```javascript
// 前端只需传递权限标识,规则由后端动态执行
@PreAuthorize("hasPermission('order:view')")
```
配置示例(在后端数据库):
```sql
INSERT INTO permission_rule
VALUES (10, '#order.userId == #currentUserId', 'DATA_SCOPE');
```
### 4️⃣ 高性能优化
- 🚀 **路由懒加载**:按需加载页面组件,减少首屏加载时间
- 📦 **组件按需引入**:Ant Design 组件按需加载,减小打包体积
- 💾 **请求缓存**:常用数据缓存,减少重复请求
- ⚡ **Token 自动刷新**:无感知的 Token 续期机制
### 5️⃣ 在线用户管理
- 👥 实时查看在线用户列表
- 🚫 强制用户下线功能
- 🔒 Token 黑名单机制
- 📊 用户会话监控
### 6️⃣ 登录日志审计
- 📝 完整记录登录/登出行为
- 🌍 IP 地理位置解析
- 🔍 登录失败追踪
- 📈 统计分析功能
### 7️⃣ 多租户数据隔离
- 🏢 **自动隔离**:框架层自动处理租户上下文
- 🔑 **JWT 携带**:Token 中包含租户ID
- 🛡️ **数据安全**:避免跨租户数据泄露
- ⚡ **零侵入**:业务代码无需关心租户逻辑
---
## 📸 演示页面
### 1. 登录页面

### 2. 仪表盘

### 3. 用户管理

### 4. 角色管理

### 5. 权限管理

### 6. 菜单管理

### 7. 公司管理

### 8. 个人中心

### 8. 用户登录日志

---
## 🏗️ 技术栈
| 技术 | 版本 | 用途 |
|------|------|------|
| React | 18.3.1 | 前端框架 |
| Ant Design | 5.25.4 | UI 组件库 |
| React Router DOM | 7.6.2 | 路由管理 |
| Axios | 1.9.0 | HTTP 请求 |
| Crypto-JS | 4.2.0 | 加密工具 |
| React App Rewired | 2.2.1 | 自定义配置 |
| Sass | 1.89.1 | CSS 预处理器 |
---
## 📂 项目结构
```
src/
├── api/ # API 接口层
│ ├── auth.js # 认证相关接口
│ ├── user.js # 用户管理接口
│ ├── role.js # 角色管理接口
│ ├── permission.js # 权限管理接口
│ ├── permissionRule.js # 权限规则接口
│ ├── menu.js # 菜单管理接口
│ ├── company.js # 公司/租户管理接口
│ ├── dept.js # 部门管理接口
│ └── loginLog.js # 登录日志接口
├── components/ # 通用组件
│ └── auth/
│ └── Permission.js # 权限控制组件
├── hooks/ # 自定义 Hooks
│ ├── usePermissions.js # 权限相关 Hooks
│ └── index.js # 统一导出
├── router/ # 路由配置
│ └── IndexRouter.js # 路由定义
├── utils/ # 工具类
│ ├── request.js # HTTP 请求封装
│ ├── auth.js # 认证工具函数
│ ├── permission.js # 权限检查工具
│ ├── encryption.js # 加密工具
│ └── ownership.js # 所有权检查工具
├── views/ # 页面组件
│ ├── login/ # 登录模块
│ │ ├── Login.js # 登录页面
│ │ └── ForgotPassword.js # 忘记密码
│ ├── home/ # 首页模块
│ │ ├── Dashboard.js # 仪表盘
│ │ ├── Home.js # 主页布局
│ │ ├── TopHeader.js # 顶部导航
│ │ ├── SideMenu.js # 侧边菜单
│ │ ├── Profile.js # 个人中心
│ │ ├── Settings.js # 个人设置
│ │ └── Notice.js # 消息通知
│ └── base/ # 基础管理模块
│ ├── UserList.js # 用户列表
│ ├── User.js # 用户详情
│ ├── RoleList.js # 角色列表
│ ├── PermissionList.js # 权限列表
│ ├── MenuList.js # 菜单列表
│ ├── CompanyList.js # 公司列表
│ ├── DeptList.js # 部门列表
│ ├── LoginLogList.js # 登录日志
│ └── OnlineList.js # 在线用户
└── styles/ # 样式文件
└── layout.css # 布局样式
```
---
## 📖 API 集成
本项目与 **QiFeng DDD 后端服务** 完美对接,所有 API 接口已封装完成。
### 认证接口
```javascript
import { login, getCurrentUser, logout } from '@/api/auth';
// 用户登录
const handleLogin = async (values) => {
const data = await login({
username: values.username,
password: values.password
});
localStorage.setItem('accessToken', data.accessToken);
};
// 获取当前用户信息
const userInfo = await getCurrentUser();
// 退出登录
await logout();
```
### 用户管理
```javascript
import { getUserList, createUser, updateUser, deleteUser } from '@/api/user';
// 获取用户列表(分页)
const users = await getUserList({
pageNum: 1,
pageSize: 10,
username: 'admin'
});
// 创建用户
await createUser({
userName: 'testuser',
nickName: '测试用户',
phone: '13800138000',
email: 'test@example.com',
status: 1
});
// 更新用户
await updateUser({ userId, ...userData });
// 删除用户
await deleteUser(userId);
```
### 角色管理
```javascript
import { getAllRoles, assignRoleToUser, getUserRoles } from '@/api/role';
// 获取所有角色
const roles = await getAllRoles();
// 为用户分配角色
await assignRoleToUser(userId, roleId);
// 获取用户角色
const userRoles = await getUserRoles(userId);
```
### 权限管理
```javascript
import { getAllPermissions } from '@/api/permission';
// 获取所有权限
const permissions = await getAllPermissions();
// 为角色分配权限
await assignPermissionToRole(roleId, permissionId);
```
### 菜单管理
```javascript
import { getMenuList } from '@/api/menu';
// 获取菜单列表(树形结构)
const menus = await getMenuList();
```
更多 API 使用示例请参考:[API_USAGE.md](API_USAGE.md)
---
## 🎯 适用场景
- ✅ **企业内部系统**:权限管理系统、OA 系统、ERP 系统
- ✅ **SaaS 平台**:多租户业务系统、云平台管理后台
- ✅ **学习实践**:DDD 架构学习、React 最佳实践、权限系统设计
- ✅ **面试项目**:展示全栈开发能力、系统设计能力
---
## 🌟 支持项目
如果这个项目对你有帮助,欢迎:
- ⭐ Star 项目
- 🍴 Fork 二次开发
- 🐛 提交 Issue
- 🔧 提交 PR
---
## 📄 开源协议
[MIT License](LICENSE)
---
## 🔗 相关链接
- **后端项目**:[QiFeng DDD Backend](https://gitee.com/mssng/ddd)
- **后端 API 文档**:http://localhost:8091/doc.html
- **React 官方文档**:https://reactjs.org/
- **Ant Design 官方文档**:https://ant.design/
---
**Made with ❤️ by houhuai**
[↑ 返回顶部](#qifeng-ddd-frontend---企业级权限管理系统前端)