From 8ec02614276063d22941e0e5ba50242e784b3208 Mon Sep 17 00:00:00 2001 From: bujinyuan Date: Mon, 2 Mar 2026 17:53:46 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=90=8C=E6=AD=A5=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=96=87=E6=A1=A3=E8=87=B3=20Phase=202a=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 架构设计文档:更新模块职责表(ws/contact 标记已完成)、路由架构、分层图 - 总体系统设计:联系人 API 扩展至 17 个、管理端 API 补充在线监控和好友管理 - Phase 2a 设计文档:状态标记为已完成 - API README:导航表 + 目录结构 + 联系人模块错误码 - 开发规范:新增 WebSocket 事件联动规范(第 8 节) - 项目规则:新增「文档自动同步规则」,每个 Task 完成后自动检查更新文档 Made-with: Cursor --- .cursor/rules/project-context.mdc | 49 ++++++- docs/api/README.md | 49 ++++--- docs/architecture/system-architecture.md | 35 ++--- .../frontend-backend-integration.md | 39 +++++- .../2026-02-27-echochat-system-design.md | 125 ++++++++++++------ docs/plans/2026-03-02-phase2a-design.md | 2 +- 6 files changed, 218 insertions(+), 81 deletions(-) diff --git a/.cursor/rules/project-context.mdc b/.cursor/rules/project-context.mdc index d9f3e10..d7de979 100644 --- a/.cursor/rules/project-context.mdc +++ b/.cursor/rules/project-context.mdc @@ -15,16 +15,19 @@ alwaysApply: true ## 当前进度 - **Phase 1(基础设施与用户认证)**:✅ 全部完成(11 个 Task) -- **Phase 2(即时通讯)**:待制定实施计划 -- 分支:`feature/phase1-foundation-and-auth`(待合并到 main) +- **Phase 2a(WebSocket 实时通讯与联系人管理)**:✅ 全部完成(13 个 Task) +- **Phase 2b(即时通讯消息系统)**:待制定实施计划 +- 分支:`feature/phase2a-websocket-contacts` ## 项目概述 EchoChat 是一个实时音视频通讯平台,包含三个子项目: -- `backend/go-service/` — Go 后端(Gin + GORM + Wire + Redis) +- `backend/go-service/` — Go 后端(Gin + GORM + Wire + Redis + gorilla/websocket) - `frontend/` — 前台用户端(uni-app + Vue 3.4 + Pinia 2.x) - `admin/` — 后台管理端(Vue 3.5+ + Element Plus + Pinia 3.x) +已实现模块:auth(认证)、contact(联系人)、ws(WebSocket)、admin(管理端) + ## 核心开发规则 1. **前端设计**:必须使用 openskills 安装的 `ui-ux-pro-max` 技能包,脚本绝对路径为 `/Users/bojinyuan/.agent/skills/ui-ux-pro-max/scripts/search.py`。**严禁使用** `.cursor/skills/ui-ux-pro-max.bak/` 目录下的任何文件,该目录已废弃。禁止手动设计系统 @@ -36,10 +39,42 @@ EchoChat 是一个实时音视频通讯平台,包含三个子项目: 7. **JWT 策略**:有状态 JWT,Token 存 Redis(按 clientType 隔离:`echo:auth:token:{frontend|admin}:{user_id}`),前后台互不影响 8. **角色等级体系**:`auth_roles.level` 字段(值越小权限越高:1=超管, 10=管理员, 100=普通用户),所有管理操作强制执行层级权限校验 9. **代码注释**:所有公开函数、组件、Store 必须有详细注释 -9. **文档同步**:代码变更后必须同步更新 docs/ 下相关文档 -10. **验证方式**:使用 Playwright MCP 进行页面自动化验证 -11. **代码审查**:每个 Task 完成后,使用 `code-reviewer` 子代理进行结构化审查,确保代码质量和计划一致性 -12. **完成验证**:使用 `verification-before-completion` 技能,在声称完成前运行验证命令并确认输出 +10. **文档自动同步(强制)**:每个 Task 或功能开发完成后,必须自动执行文档同步,详见下方「文档自动同步规则」 +11. **验证方式**:使用 Playwright MCP 进行页面自动化验证 +12. **代码审查**:每个 Task 完成后,使用 `code-reviewer` 子代理进行结构化审查,确保代码质量和计划一致性 +13. **完成验证**:使用 `verification-before-completion` 技能,在声称完成前运行验证命令并确认输出 + +## 文档自动同步规则(强制执行) + +**触发时机**:每个 Task 或功能模块开发完成后,代码提交前,必须自动检查并更新以下文档,无需用户提醒。 + +### 必须检查的文档清单 + +| 文档 | 路径 | 更新条件 | +|------|------|---------| +| 项目进度 | `docs/progress/CURRENT_STATUS.md` | 每个 Task 完成后更新 Task 状态表、新增功能描述 | +| 架构设计 | `docs/architecture/system-architecture.md` | 新增模块、路由、中间件、数据流变化时更新 | +| 当前阶段设计文档 | `docs/plans/20xx-xx-xx-phaseXx-design.md` | 设计变更、状态变更时更新 | +| 总体系统设计 | `docs/plans/2026-02-27-echochat-system-design.md` | API 列表、页面结构、数据库表、分期规划变更时更新 | +| API 文档导航 | `docs/api/README.md` | 新增 API 文档文件时更新导航表和目录结构 | +| 模块 API 文档 | `docs/api/{frontend,admin}/*.md` | 新增/修改 API 接口时更新对应模块文档 | +| 开发规范 | `docs/conventions/frontend-backend-integration.md` | 新增通用规范(错误处理、协议、联动模式)时更新 | +| 项目规则 | `.cursor/rules/project-context.mdc` | 进度变更、新规则、新模块时更新 | + +### 文档质量要求 + +1. **单文件 ≤ 500 行**:超过时拆分为独立文件,在导航中添加链接 +2. **状态标记实时**:Task 完成后立即将状态标记从 🔜/📋 改为 ✅ +3. **结构一致**:新增内容遵循现有文档的格式和层级结构 +4. **交叉引用**:相关文档之间保持引用链接一致(如设计文档引用 API 文档路径) +5. **日期更新**:文档头部的「最后更新」日期保持最新 + +### 每阶段(Phase)结束时的额外检查 + +- 当前阶段设计文档状态标记为「✅ 已完成」 +- 总体设计文档的开发分期部分更新完成标记 +- project-context.mdc 的当前进度更新 +- CURRENT_STATUS.md 的下一阶段规划更新 ## 前后端联动规范(必须遵守) diff --git a/docs/api/README.md b/docs/api/README.md index 99fef1f..a58391e 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -13,10 +13,11 @@ | 文档 | 模块 | 状态 | 说明 | |------|------|------|------| | [frontend/auth.md](frontend/auth.md) | 用户认证 | ✅ Phase 1 | 注册、登录、Token 刷新、个人信息管理 | -| [frontend/contact.md](frontend/contact.md) | 联系人 | 📋 Phase 2 | 好友申请/管理、好友分组 | -| [frontend/im.md](frontend/im.md) | 即时通讯 | 📋 Phase 2 | 会话列表、消息历史、群聊创建与管理 | -| [frontend/meeting.md](frontend/meeting.md) | 会议 | 📋 Phase 3 | 即时会议、预约会议、加入/离开、会议列表 | -| [frontend/notify.md](frontend/notify.md) | 通知 | 📋 Phase 2 | 通知列表、标记已读 | +| [frontend/contact.md](frontend/contact.md) | 联系人 | ✅ Phase 2a | 17 个 API:好友申请/管理、好友分组、黑名单、搜索/推荐、在线状态 | +| [frontend/websocket.md](frontend/websocket.md) | WebSocket | ✅ Phase 2a | 前端 WebSocket 连接管理、事件协议、心跳、重连 | +| [frontend/im.md](frontend/im.md) | 即时通讯 | 📋 Phase 2b | 会话列表、消息历史、群聊创建与管理 | +| [frontend/meeting.md](frontend/meeting.md) | 会议 | 📋 后续 | 即时会议、预约会议、加入/离开、会议列表 | +| [frontend/notify.md](frontend/notify.md) | 通知 | 📋 后续 | 通知列表、标记已读 | ### 后台管理端 (`admin/`) @@ -24,14 +25,16 @@ |------|------|------|------| | [admin/auth.md](admin/auth.md) | 管理员认证 | ✅ Phase 1 | 管理员登录(验证 admin 角色) | | [admin/user.md](admin/user.md) | 用户管理 | ✅ Phase 1 | 用户列表/详情、状态管理、角色分配、创建用户 | -| [admin/meeting.md](admin/meeting.md) | 会议管理 | 📋 Phase 3 | 会议列表/详情、强制结束、会议统计 | +| [admin/online.md](admin/online.md) | 在线监控 | ✅ Phase 2a | 在线用户列表、在线用户计数 | +| [admin/contact.md](admin/contact.md) | 好友关系管理 | ✅ Phase 2a | 好友关系列表(分页)、管理员解除好友关系 | +| [admin/meeting.md](admin/meeting.md) | 会议管理 | 📋 后续 | 会议列表/详情、强制结束、会议统计 | | [admin/system.md](admin/system.md) | 系统管理 | 📋 待定 | 仪表盘数据、操作日志、系统配置 | ### 跨端通用 | 文档 | 状态 | 说明 | |------|------|------| -| [websocket.md](websocket.md) | 📋 Phase 2 | WebSocket 实时事件协议(IM 消息、会议信令、在线状态) | +| [websocket.md](websocket.md) | ✅ Phase 2a | WebSocket 实时事件协议(联系人通知、在线状态、心跳) | --- @@ -114,6 +117,17 @@ yyyy-MM-dd HH:mm:ss | 2003 | 账号或密码错误 | 登录失败 | | 2004 | 账号已被禁用 | 用户状态为禁用 | +#### 联系人模块错误码(2100-2199) + +| 错误码 | 含义 | 说明 | +|--------|------|------| +| 2101 | 不能添加自己 | 好友申请目标为自身 | +| 2102 | 已是好友关系 | 重复发送好友申请 | +| 2103 | 已被对方拉黑 | 被拉黑后无法发送申请 | +| 2104 | 申请不存在 | 待处理申请记录不存在或已处理 | +| 2105 | 好友关系不存在 | 尝试操作不存在的好友关系 | +| 2106 | 分组不存在 | 好友分组 ID 无效 | + #### IM 模块错误码(3000-3099) | 错误码 | 含义 | 说明 | @@ -177,15 +191,18 @@ yyyy-MM-dd HH:mm:ss docs/api/ ├── README.md # 通用规范(本文件) ├── frontend/ # 前台用户端 API -│ ├── auth.md # 用户认证 -│ ├── contact.md # 联系人管理 -│ ├── im.md # 即时通讯 -│ ├── meeting.md # 会议 -│ └── notify.md # 通知 +│ ├── auth.md # 用户认证 ✅ Phase 1 +│ ├── contact.md # 联系人管理(17 个 API) ✅ Phase 2a +│ ├── websocket.md # WebSocket 事件协议 ✅ Phase 2a +│ ├── im.md # 即时通讯 📋 Phase 2b +│ ├── meeting.md # 会议 📋 后续 +│ └── notify.md # 通知 📋 后续 ├── admin/ # 后台管理端 API -│ ├── auth.md # 管理员认证 -│ ├── user.md # 用户管理 -│ ├── meeting.md # 会议管理 -│ └── system.md # 系统管理 -└── websocket.md # WebSocket 事件协议 +│ ├── auth.md # 管理员认证 ✅ Phase 1 +│ ├── user.md # 用户管理 ✅ Phase 1 +│ ├── online.md # 在线监控 ✅ Phase 2a +│ ├── contact.md # 好友关系管理 ✅ Phase 2a +│ ├── meeting.md # 会议管理 📋 后续 +│ └── system.md # 系统管理 📋 待定 +└── websocket.md # WebSocket 全量事件协议 ✅ Phase 2a ``` diff --git a/docs/architecture/system-architecture.md b/docs/architecture/system-architecture.md index 62c18e8..3b98792 100644 --- a/docs/architecture/system-architecture.md +++ b/docs/architecture/system-architecture.md @@ -40,10 +40,10 @@ EchoChat 采用 **「精简单体 + 媒体微服务」** 架构,核心思想 │ │ auth │ │ im │ │ meeting │ │ admin │ │ │ │ 认证鉴权 │ │ 即时通讯 │ │ 会议控制 │ │ 后台管理 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │ -│ ┌──────────┐ ┌──────────┐ │ -│ │ contact │ │ notify │ 每个模块: Controller → │ -│ │ 联系人 │ │ 通知 │ Service → DAO → Model │ -│ └──────────┘ └──────────┘ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ contact │ │ notify │ │ ws │ 每个模块: │ +│ │ 联系人 │ │ 通知 │ │ WebSocket│ Controller → │ +│ └──────────┘ └──────────┘ └──────────┘ Service → DAO │ │ │ │ │ │ │ ┌────┴──────────────┴──────────────┴──────┐ │ │ │ 公共基础设施层 (pkg/) │ │ @@ -86,14 +86,15 @@ EchoChat 采用 **「精简单体 + 媒体微服务」** 架构,核心思想 系统的 **"大脑"**,处理所有业务逻辑。 -| 模块 | 职责 | -|------|------| -| auth | 用户注册/登录、有状态 JWT Token 管理(Redis 存储)、RBAC 角色权限(当前粗粒度 3 角色,预留细粒度权限点扩展) | -| im | 即时消息收发、会话管理、消息存储 | -| contact | 好友关系管理、好友分组 | -| meeting | 会议创建/管理、信令转发、mediasoup 资源编排 | -| notify | 通知推送、会议邀请、好友申请通知 | -| admin | 后台管理(用户管理、会议监控、系统配置) | +| 模块 | 职责 | 状态 | +|------|------|------| +| auth | 用户注册/登录、有状态 JWT Token 管理(Redis 存储 + client_type 隔离)、RBAC 角色权限(level 等级体系:1=超管, 10=管理员, 100=用户) | ✅ Phase 1 | +| ws | WebSocket 连接管理(Hub/Client/PubSub)、在线状态管理(Redis SET + TTL 心跳续期) | ✅ Phase 2a | +| contact | 好友关系管理(申请/接受/拒绝/删除/拉黑)、好友分组(CRUD + 移动)、用户搜索、好友推荐 | ✅ Phase 2a | +| im | 即时消息收发、会话管理、消息存储 | 🔜 Phase 2b | +| meeting | 会议创建/管理、信令转发、mediasoup 资源编排 | 📋 后续 | +| notify | 通知推送、会议邀请、好友申请通知 | 📋 后续 | +| admin | 后台管理(用户管理 + 角色权限管理 + 在线监控 + 好友关系管理、会议监控、系统配置) | ✅ Phase 1/2a | **不负责的事情:** 不处理 RTP 媒体数据、不参与音视频转发、不做 WebRTC 协议协商。 @@ -109,8 +110,9 @@ router/ app/auth/router.go ← auth 模块的具体路由定义 app/admin/router.go ← admin 模块的具体路由定义 -app/im/router.go ← im 模块的具体路由定义(后续阶段) -app/contact/router.go ← contact 模块的具体路由定义(后续阶段) +app/contact/router.go ← contact 模块的具体路由定义(Phase 2a 已实现) +app/ws/router.go ← WebSocket 模块的路由定义(Phase 2a 已实现) +app/im/router.go ← im 模块的具体路由定义(Phase 2b 实现) app/meeting/router.go ← meeting 模块的具体路由定义(后续阶段) ``` @@ -122,8 +124,9 @@ main.go ├── engine.GET("/health", ...) // 健康检查 ├── auth.RegisterRoutes(engine, ...) // /api/v1/auth/* ├── admin.RegisterRoutes(engine, ...) // /api/v1/admin/* - ├── im.RegisterRoutes(engine, ...) // /api/v1/im/* (后续) - ├── contact.RegisterRoutes(engine, ...) // /api/v1/contact/* (后续) + ├── contact.RegisterRoutes(engine, ...) // /api/v1/contacts/* ✅ Phase 2a + ├── ws.RegisterRoutes(engine, ...) // /ws ✅ Phase 2a + ├── im.RegisterRoutes(engine, ...) // /api/v1/im/* (Phase 2b) └── meeting.RegisterRoutes(engine, ...) // /api/v1/meeting/* (后续) ``` diff --git a/docs/conventions/frontend-backend-integration.md b/docs/conventions/frontend-backend-integration.md index eb9dffb..278f644 100644 --- a/docs/conventions/frontend-backend-integration.md +++ b/docs/conventions/frontend-backend-integration.md @@ -2,7 +2,7 @@ > **适用范围**:EchoChat 项目全端(Go 后端 + admin 管理端 + frontend 用户端) > **创建日期**:2026-03-02 -> **最后更新**:2026-03-02(新增前后台 Token 隔离规范) +> **最后更新**:2026-03-02(Phase 2a:新增 WebSocket 事件联动规范 + 联系人模块错误处理) --- @@ -312,3 +312,40 @@ JWT Token 的 Claims 中包含 `client_type` 字段,用于: - [ ] 权限不足时返回 403(`ErrInsufficientPermission`) - [ ] 前端通过比较 `adminMaxLevel` 和 `targetMaxLevel` 控制 UI 可见性 - [ ] 角色分配使用全量覆盖模式(`SetUserRoles`),非追加模式 + +--- + +## 8. WebSocket 事件联动规范 + +### 8.1 适用范围 + +仅前台用户端(frontend)使用 WebSocket 实时通讯,管理端(admin)使用 REST 轮询。 + +### 8.2 连接管理 + +- WebSocket 地址:`ws(s)://host/ws?token=xxx` +- 认证方式:URL Query 参数传递 JWT Token(前台 frontend Token) +- 心跳间隔:30 秒 ping/pong +- 断线重连:指数退避(1s → 2s → 4s → 8s → 30s max) + +### 8.3 事件命名规范 + +格式:`{模块}.{对象}.{动作}` + +| 事件 | 方向 | 说明 | +|------|------|------| +| `heartbeat` | 双向 | 心跳保活 | +| `notify.friend.request` | 服务端 → 客户端 | 收到好友申请 | +| `contact.request.accepted` | 服务端 → 客户端 | 好友申请被接受 | +| `user.status.online` | 服务端 → 客户端 | 好友上线 | +| `user.status.offline` | 服务端 → 客户端 | 好友下线 | + +### 8.4 前端事件处理原则 + +1. **WebSocket Store 统一管理**:连接状态、事件监听、消息发送由 `store/websocket.js` 管理 +2. **业务 Store 订阅事件**:各模块 Store(如 `contact.js`)通过 WebSocket Store 注册事件回调 +3. **避免页面直接操作 WebSocket**:页面组件通过 Store 间接与 WebSocket 交互 + +### 8.5 WebSocket 详细协议 + +> 完整事件协议见 `docs/api/frontend/websocket.md` diff --git a/docs/plans/2026-02-27-echochat-system-design.md b/docs/plans/2026-02-27-echochat-system-design.md index 2118f6f..9438ca3 100644 --- a/docs/plans/2026-02-27-echochat-system-design.md +++ b/docs/plans/2026-02-27-echochat-system-design.md @@ -674,15 +674,33 @@ GET /api/v1/auth/profile PUT /api/v1/auth/profile PUT /api/v1/auth/password -# 联系人模块 -GET /api/v1/contacts -POST /api/v1/contacts/request -POST /api/v1/contacts/accept -POST /api/v1/contacts/reject -DELETE /api/v1/contacts/:id -PUT /api/v1/contacts/:id/remark -GET /api/v1/contacts/groups -POST /api/v1/contacts/groups +# 联系人模块(Phase 2a 已实现) +GET /api/v1/contacts 好友列表(含在线状态) +POST /api/v1/contacts/request 发送好友申请 +POST /api/v1/contacts/accept 接受申请 +POST /api/v1/contacts/reject 拒绝申请 +DELETE /api/v1/contacts/:id 删除好友 +PUT /api/v1/contacts/:id/remark 设置备注 +GET /api/v1/contacts/requests 待处理申请列表 + +# 好友分组 +GET /api/v1/contacts/groups 分组列表 +POST /api/v1/contacts/groups 创建分组 +PUT /api/v1/contacts/groups/:id 修改分组 +DELETE /api/v1/contacts/groups/:id 删除分组 +PUT /api/v1/contacts/:id/group 移动好友到分组 + +# 黑名单 +POST /api/v1/contacts/block 拉黑用户 +DELETE /api/v1/contacts/block/:user_id 取消拉黑 +GET /api/v1/contacts/block 黑名单列表 + +# 搜索与推荐 +GET /api/v1/users/search 搜索用户 +GET /api/v1/contacts/recommend 好友推荐 + +# 在线状态 +GET /api/v1/contacts/online 批量查询好友在线状态 # 即时通讯模块 GET /api/v1/conversations @@ -711,25 +729,33 @@ PUT /api/v1/notifications/read-all ### 5.4 后台管理 RESTful API ``` -# 管理员认证 -POST /api/v1/admin/auth/login +# 管理员认证(Phase 1 已实现) +POST /api/v1/admin/auth/login 管理员登录 -# 用户管理 -GET /api/v1/admin/users -GET /api/v1/admin/users/:id -PUT /api/v1/admin/users/:id/status -PUT /api/v1/admin/users/:id/roles -POST /api/v1/admin/users -GET /api/v1/admin/roles -GET /api/v1/admin/users/:id/meetings +# 用户管理(Phase 1 已实现) +GET /api/v1/admin/users 用户列表(分页) +GET /api/v1/admin/users/:id 用户详情 +PUT /api/v1/admin/users/:id/status 启用/禁用用户(受 level 层级约束) +PUT /api/v1/admin/users/:id/roles 分配角色(多选,受 level 约束) +POST /api/v1/admin/users 创建用户 +GET /api/v1/admin/roles 角色列表(受 level 过滤,仅显示可管理角色) +GET /api/v1/admin/users/:id/meetings 用户的会议记录 -# 会议管理 +# 在线监控(Phase 2a 已实现) +GET /api/v1/admin/online/users 在线用户列表 +GET /api/v1/admin/online/count 在线用户数 + +# 好友关系管理(Phase 2a 已实现) +GET /api/v1/admin/contacts 所有好友关系(分页) +DELETE /api/v1/admin/contacts/:id 管理员解除好友关系 + +# 会议管理(后续阶段) GET /api/v1/admin/meetings GET /api/v1/admin/meetings/:id PUT /api/v1/admin/meetings/:id/close GET /api/v1/admin/meetings/stats -# 系统管理 +# 系统管理(后续阶段) GET /api/v1/admin/dashboard GET /api/v1/admin/logs GET /api/v1/admin/system/config @@ -789,10 +815,12 @@ pages/ │ ├── conversation.vue # 聊天对话页 │ └── group-create.vue # 创建群聊 ├── contact/ -│ ├── index.vue # 联系人列表 -│ ├── add-friend.vue # 添加好友 -│ ├── friend-requests.vue # 好友申请列表 -│ └── detail.vue # 好友资料页 +│ ├── index.vue # 联系人列表(含搜索/在线状态) ✅ Phase 2a +│ ├── search.vue # 搜索添加好友 + 好友推荐 ✅ Phase 2a +│ ├── request.vue # 好友申请列表(接受/拒绝) ✅ Phase 2a +│ ├── detail.vue # 好友详情(备注/分组/拉黑/删除) ✅ Phase 2a +│ ├── groups.vue # 好友分组管理(CRUD) ✅ Phase 2a +│ └── blacklist.vue # 黑名单管理 ✅ Phase 2a ├── meeting/ │ ├── index.vue # 会议首页(即将开始 + 进行中 + 快速入口) │ ├── create.vue # 创建即时会议 @@ -815,25 +843,27 @@ TabBar 导航(底部4标签):消息 | 联系人 | 会议 | 我的 ``` views/ -├── login.vue # 管理员登录 -├── dashboard/index.vue # 数据看板 +├── login.vue # 管理员登录 ✅ Phase 1 +├── dashboard/index.vue # 数据看板 📋 后续 ├── user/ -│ ├── list.vue # 用户列表 -│ └── detail.vue # 用户详情(含会议记录Tab) +│ ├── list.vue # 用户列表 ✅ Phase 1 +│ └── detail.vue # 用户详情(含会议记录Tab) 📋 后续 +├── monitor/ +│ └── online.vue # 在线用户监控 ✅ Phase 2a +├── contact/ +│ └── list.vue # 好友关系管理 ✅ Phase 2a ├── meeting/ -│ ├── list.vue # 会议列表 -│ ├── detail.vue # 会议详情 -│ └── monitor.vue # 实时监控 +│ ├── list.vue # 会议列表 📋 后续 +│ ├── detail.vue # 会议详情 📋 后续 +│ └── monitor.vue # 实时监控 📋 后续 ├── permission/ -│ ├── role.vue # 角色管理 -│ └── assign.vue # 权限分配 +│ ├── role.vue # 角色管理 📋 后续 +│ └── assign.vue # 权限分配 📋 后续 ├── system/ -│ ├── config.vue # 系统配置 -│ └── logs.vue # 操作日志 +│ ├── config.vue # 系统配置 📋 后续 +│ └── logs.vue # 操作日志 📋 后续 └── layout/ - ├── index.vue # 布局框架 - ├── sidebar.vue # 侧边栏 - └── header.vue # 顶部栏 + ├── index.vue # 布局框架(含侧边栏导航) ✅ Phase 1 ``` --- @@ -893,9 +923,24 @@ services: ## 八、开发分期规划 ### 第一期(MVP) + +#### Phase 1:基础设施与用户认证 ✅ 已完成 - 用户注册/登录(邮箱+密码、用户名+密码) +- 有状态 JWT Token 管理(Redis 存储 + client_type 隔离) +- RBAC 角色权限(level 等级体系) +- 后台管理端基础框架 + 用户管理 +- Docker Compose 开发环境 + +#### Phase 2a:WebSocket 实时通讯与联系人管理 ✅ 已完成 +- WebSocket 长连接(心跳、断线重连、Redis Pub/Sub 消息总线) +- 联系人完整功能(好友申请/接受/拒绝/删除/分组/黑名单/搜索/推荐) +- 在线状态管理(混合推拉方案) +- 管理端扩展(在线监控 + 好友关系管理) + +#### Phase 2b:即时通讯消息系统 🔜 待开发 - 即时聊天(单聊 + 群聊,文字/图片/文件) -- 联系人/好友管理 + +#### Phase 2c:会议与通知 📋 待规划 - 多人音视频会议(即时会议 + 预约会议) - 消息通知系统 diff --git a/docs/plans/2026-03-02-phase2a-design.md b/docs/plans/2026-03-02-phase2a-design.md index 0ea0f09..c178015 100644 --- a/docs/plans/2026-03-02-phase2a-design.md +++ b/docs/plans/2026-03-02-phase2a-design.md @@ -1,6 +1,6 @@ # Phase 2a 设计文档:WebSocket 实时通讯与联系人管理 -> **状态:** 设计确认,开发中 +> **状态:** ✅ 已完成(全部 13 个 Task) > **分支:** `feature/phase2a-websocket-contacts` > **实施计划:** `docs/plans/2026-03-02-phase2a-implementation.md`(独立文件) > **前置依赖:** Phase 1 全部完成(用户认证 + 管理端用户管理)