imeeting/backend/design/project_design.md

109 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 项目设计文档imeetingNew
## 1. 项目概述
本项目为“智能会议语音识别与总结系统”的管理后台,提供用户、角色、权限、设备与任务等管理能力。
后端为 Java 服务,前端为后台管理 Web。 后续所有内容变更都必须同步更新该文档
## 2. 技术栈
### 后端
- Java 17
- Spring Boot 3.x
- Spring MVC
- Spring Security + JWT
- ORM: MyBatis / MyBatis-Plus
- Database: PostgreSQL
- Cache: Redis
- Build: Maven
### 前端
- React 18
- TypeScript
- Ant Design
- React Router
- Axios
- Vite
## 3. 系统架构
### 后端分层
- Controller接收请求、参数校验、返回响应
- Service业务编排与事务边界
- Mapper数据访问
- DTO/VO对外数据结构
### 前端分层
```
src
├─ api # 后端接口封装
├─ components # 通用组件
├─ layouts # 布局
├─ pages # 页面
├─ routes # 路由
├─ hooks # 自定义 hooks
├─ utils # 工具
└─ types # 类型定义
```
## 4. 数据库设计(核心)
详见 `design/db_schema.md``design/db_schema_pgsql.sql`
核心表:
- sys_user / sys_role / sys_user_role
- sys_permission / sys_role_permission
- sys_dict_type / sys_dict_item
- sys_param
- sys_log
## 5. 权限设计
### 权限模型
- 角色与权限多对多
- 用户与角色多对多
- 权限分为 menu / button
- 支持层级菜单1级/2级
### 超级管理员
- 约定 `user_id = 1` 为超级管理员
- 后端权限查询对其返回全量权限
### 接口
- `GET /api/permissions`:仅管理员可用(全量)
- `GET /api/permissions/me`:当前用户权限
- `GET /api/permissions/tree`:管理员权限树
- `GET /api/permissions/tree/me`:当前用户权限树
### 创建/更新校验
- level=1 时清空 parentId
- level=2 时 parentId 必须存在且为 level=1
- button 权限必须填写 code
- menu 权限 code 可选
## 6. 前端权限处理
- 登录后调用 `/api/users/me` 获取 `isAdmin`
- `isAdmin=true` 时前端不做权限限制
- 非管理员通过 `/api/permissions/me` 获取权限码用于按钮控制
- 菜单展示按权限树构建
## 7. 关键流程
### 登录
1. `/auth/captcha`
2. `/auth/login`
3. `/api/users/me`(获取用户信息与 isAdmin
### 验证码开关(系统参数)
- 系统参数 `security.captcha.enabled` 控制验证码是否启用true/false
- 系统启动时加载 `sys_param` 到 Redis Hash`sys:param:{paramKey}`字段value/type
- 前端登录页根据系统参数决定是否展示验证码
### 权限菜单渲染
1. `/api/permissions/me` 获取权限列表
2. 前端构建树形菜单
## 8. 约束与规范
- 后端禁用 JPA/Hibernate
- 统一响应 `ApiResponse<T>`
- Controller 不直接调用 Mapper
- 前端禁止在页面内直接调用 axios
## 9. 后续扩展建议
- 添加审计日志落库策略
- 任务管理模块完善
- 权限树缓存与增量刷新策略