# ColaFlow 前端开发评估与规划报告 **报告日期**: 2025-11-05 (Day 15) **报告人**: Product Manager Agent **项目阶段**: M1 核心项目模块 (78% 完成) **目标**: 评估前端开发状态,规划 M1 阶段前端开发任务 --- ## 执行摘要 ColaFlow 前端开发目前处于**早期阶段**,仅完成了 Kanban Board 看板功能(15个文件,1134行代码)。基于 **Day 14-15 架构决策(采用 ProjectManagement Module)**,前端需要重新开发 Epic/Story/Task 管理界面,并与后端 ProjectManagement API 集成。 ### 关键发现 1. **已完成功能**: Kanban Board (拖拽功能 + 4列工作流 + 基础 UI) 2. **技术栈**: React 18 + TypeScript + Zustand + Ant Design + React Query(推测) 3. **代码规模**: 15个文件,1134行代码 4. **关键问题**: - 前端仅对接 Issue Management API,需要切换到 ProjectManagement API - 缺失 Epic/Story/Task 三层层级管理 UI - 缺失项目管理、迭代管理、用户管理等核心功能 ### 重大架构决策影响 基于 Day 14-15 后端架构决策(采用 ProjectManagement Module): - **前端需要重新开发**: Epic/Story/Task 管理 UI(预计 2-3 天) - **Kanban Board 需要更新**: 适配 ProjectManagement API(预计 1 天) - **新增开发任务**: 项目管理、Sprint 管理、用户管理等核心 UI ### M1 前端完成度评估 - **当前完成度**: 约 15-20% (仅 Kanban Board) - **M1 目标完成度**: 100% (Epic/Story/Task + Project + Sprint + User Management) - **预计剩余工作量**: 18-22 天 - **目标完成日期**: 2025-11-27 (与后端 M1 完成日期对齐) --- ## 一、当前前端状态评估 ### 1.1 已完成功能清单 #### Kanban Board 看板 (Day 13) - 需要更新 **完成度**: 100% (基于 Issue Management API) **代码规模**: 15 文件, 1,134 行代码 **技术栈**: React 18 + TypeScript + Zustand + Ant Design + @dnd-kit **核心功能**: - 拖拽式任务卡片 (@dnd-kit/core + @dnd-kit/sortable) - 4列工作流: Backlog → Todo → InProgress → Done - 任务卡片显示: Title, Type, Priority, Assignee - 拖拽更新任务状态 - 基础 UI 交互 **API 集成状态**: - 已对接 Issue Management API (7 个端点) - 需要更新为 ProjectManagement API (Day 18-20) **问题与待改进**: - ⚠️ 当前对接 Issue Management API,需要切换到 ProjectManagement API - ⚠️ 未显示 Epic/Story 层级关系 - ⚠️ 未显示工时信息 (EstimatedHours/ActualHours) - ⚠️ 实时更新功能未完全集成 (SignalR 集成不完整) **状态**: ✅ 完成 (需要更新以支持 ProjectManagement) --- #### 认证系统 (Day 11) - 生产就绪 **完成度**: 100% **核心功能**: - 登录/注册页面 - JWT Token 管理 - 受保护路由 (Protected Routes) - 用户会话管理 **状态**: ✅ 完成 --- ### 1.2 代码结构分析 (推测) 基于后端文档和前端最佳实践,推测当前前端项目结构如下: ``` colaflow-frontend/ ├── src/ │ ├── api/ # API Clients (推测) │ │ ├── auth.api.ts │ │ └── issue.api.ts # 需要替换为 ProjectManagement API │ ├── components/ # React 组件 │ │ ├── kanban/ # Kanban Board 组件 (15 文件) │ │ ├── auth/ # 认证相关组件 │ │ └── common/ # 通用组件 │ ├── hooks/ # React Hooks (推测) │ │ └── useAuth.ts │ ├── store/ # Zustand Store (推测) │ │ └── authStore.ts │ ├── types/ # TypeScript 类型定义 │ ├── utils/ # 工具函数 │ └── App.tsx ├── package.json └── tsconfig.json ``` **技术栈验证**: - React 18 (已确认) - TypeScript (已确认) - Zustand (状态管理,已确认) - Ant Design (UI 组件库,已确认) - @dnd-kit (拖拽库,已确认) - React Query / SWR (数据获取库,推测) - React Router (路由管理,推测) - SignalR Client (@microsoft/signalr,推测) --- ### 1.3 技术债务识别 #### 1.3.1 架构迁移债务 (CRITICAL) **问题**: 当前 Kanban Board 对接 Issue Management API,需要切换到 ProjectManagement API **影响**: - Issue API → Epic/Story/Task API 切换 - 数据结构变化 (扁平结构 → 三层层级) - UI 需要显示层级关系 **工作量**: 6-8 小时 (Day 18-20) --- #### 1.3.2 缺失功能债务 (HIGH) **缺失的核心功能**: 1. Epic/Story/Task 三层层级管理 UI (项目规划核心功能) 2. 项目管理界面 (创建/编辑/列表) 3. Sprint 迭代管理界面 (Scrum 核心功能) 4. 用户管理界面 (团队协作核心功能) 5. Dashboard 仪表盘 (项目概览) **影响**: 用户无法使用完整的项目管理功能 **工作量**: 14-18 天 --- #### 1.3.3 实时协作集成债务 (MEDIUM) **问题**: SignalR 实时更新未完全集成 **影响**: - 多用户协作时无法实时看到其他用户的操作 - Kanban Board 拖拽不实时同步 **工作量**: 2-3 小时 (Day 20) --- #### 1.3.4 代码质量债务 (LOW) **问题**: - 缺少单元测试 (测试覆盖率未知,推测 < 20%) - 缺少 E2E 测试 - 代码文档不足 - 可能存在重复代码 **影响**: 代码可维护性和质量保证不足 **工作量**: 2-3 天 (可延后到 M1.5) --- ## 二、M1 阶段前端待开发功能清单 ### 2.1 功能优先级分级 (P0/P1/P2) 基于产品计划 (product.md) 和后端架构决策,M1 阶段前端功能优先级如下: --- ### P0 (Must Have) - M1 必须完成 #### 2.1.1 Epic/Story/Task 三层层级管理 UI (CRITICAL) **业务价值**: 项目规划核心功能,支持 Epic 拆解为 Stories,Stories 拆解为 Tasks **核心页面**: 1. **Epic 列表页** (`/projects/{projectId}/epics`) - Epic 卡片列表 (网格布局) - 显示: Epic Title, Description, Status, Story 计数, Progress - 操作: Create Epic, Edit Epic, Delete Epic, 点击进入 Story 列表 2. **Story 列表页** (`/epics/{epicId}/stories`) - Story 卡片列表 - 显示: Story Title, Description, Status, Task 计数, Assignee, Progress - 操作: Create Story, Edit Story, Delete Story, 点击进入 Task 列表 - 面包屑导航: Project → Epic → Story 3. **Task 列表页** (`/stories/{storyId}/tasks`) - Task 卡片列表或表格视图 - 显示: Task Title, Status, Priority, Assignee, EstimatedHours, ActualHours - 操作: Create Task, Edit Task, Delete Task, Update Status - 面包屑导航: Project → Epic → Story → Task 4. **Epic/Story/Task 创建/编辑对话框** - Form 表单组件 (Ant Design Form) - 字段: Title, Description, Type, Priority, Assignee, EstimatedHours, Sprint - 验证: Required fields, format validation **技术实现**: - API Clients: `epic.api.ts`, `story.api.ts`, `task.api.ts` - React Query Hooks: `useEpics`, `useStories`, `useTasks` - Components: `EpicCard`, `StoryCard`, `TaskCard`, `CreateEpicDialog`, etc. - 路由: React Router 路由配置 **验收标准**: - 用户可以创建/编辑/删除 Epic/Story/Task - 三层层级关系正确显示 - 面包屑导航正确 - API 调用正确,数据持久化 - UI 响应式设计 (Mobile + Desktop) **工作量**: 8-12 小时 (Day 18-20) **依赖**: ProjectManagement API 完成 (Day 15-17) --- #### 2.1.2 Kanban Board 更新 - 支持 ProjectManagement (CRITICAL) **业务价值**: 更新现有 Kanban Board 以支持 ProjectManagement Module **更新内容**: 1. **API 切换**: Issue API → WorkTask API - 更新 API Client (`task.api.ts`) - 更新 React Query Hooks (`useTasks`) - 更新数据结构 (Issue → WorkTask) 2. **UI 增强**: 显示层级信息 - TaskCard 显示所属 Epic/Story 信息 - TaskCard 显示工时信息 (EstimatedHours/ActualHours) - 点击 Task 可跳转到所属 Story/Epic 3. **拖拽更新**: 适配 WorkTask 状态更新 API - 拖拽更新 WorkTask 状态 - 拖拽时显示确认提示 (可选) **验收标准**: - Kanban Board 正常显示 WorkTasks - 拖拽更新状态正常工作 - 显示 Epic/Story 层级信息 - 显示工时信息 - API 调用正确 **工作量**: 4-6 小时 (Day 19) **依赖**: Epic/Story/Task API Clients 完成 --- #### 2.1.3 Project Management UI (项目管理界面) **业务价值**: 用户可以创建/管理项目,是所有功能的入口 **核心页面**: 1. **项目列表页** (`/projects`) - 项目卡片网格布局 - 显示: Project Name, Description, Team 人数, Issue 计数, Progress - 操作: Create Project, Edit Project, Delete Project, 进入项目详情 2. **项目详情页** (`/projects/{projectId}`) - 项目信息展示 - Tab 切换: Overview, Epics, Board, Sprints, Team, Settings - 操作: Edit Project, Add Member, Remove Member 3. **项目创建/编辑对话框** - Form 表单: Name, Description, Start Date, End Date - 验证: Required fields **技术实现**: - API Client: `project.api.ts` - React Query Hooks: `useProjects`, `useProject`, `useCreateProject`, etc. - Components: `ProjectCard`, `ProjectDetail`, `CreateProjectDialog` **验收标准**: - 用户可以创建/编辑/删除项目 - 项目列表正确显示 - 项目详情页 Tab 切换正常 - API 调用正确 **工作量**: 6-8 小时 (Day 16-17) **依赖**: Project API 完成 (Day 14-15 后端开发) --- #### 2.1.4 Sprint Management UI (迭代管理界面) **业务价值**: Scrum 敏捷开发核心功能,支持迭代规划和跟踪 **核心页面**: 1. **Sprint 列表页** (`/projects/{projectId}/sprints`) - Sprint 卡片列表 - 显示: Sprint Name, Goal, Date Range, Status, Task 计数, Progress - 操作: Create Sprint, Start Sprint, Complete Sprint, Close Sprint 2. **Sprint 详情页** (`/sprints/{sprintId}`) - Sprint 信息展示 - Sprint Backlog (任务列表) - Burndown Chart (燃尽图,基础版) - 操作: Add Task to Sprint, Remove Task, Update Sprint 3. **Sprint 创建/编辑对话框** - Form 表单: Name, Goal, Start Date, End Date - 验证: Start Date < End Date **技术实现**: - API Client: `sprint.api.ts` - React Query Hooks: `useSprints`, `useSprint`, `useCreateSprint`, etc. - Components: `SprintCard`, `SprintDetail`, `CreateSprintDialog`, `BurndownChart` **验收标准**: - 用户可以创建/启动/完成/关闭 Sprint - Sprint Backlog 正确显示 - 可以添加/移除 Task 到 Sprint - Burndown Chart 基础版显示 - API 调用正确 **工作量**: 8-10 小时 (Day 21-22) **依赖**: Sprint API 完成 (Day 31-34 后端开发) --- #### 2.1.5 User Management UI (用户管理界面) **业务价值**: 团队协作核心功能,管理项目成员和权限 **核心页面**: 1. **用户列表页** (`/projects/{projectId}/team`) - 用户卡片或表格视图 - 显示: User Name, Email, Role, Assigned Tasks 计数 - 操作: Invite User, Update Role, Remove User 2. **用户邀请对话框** - Form 表单: Email, Role (Owner/Admin/Member/Viewer/Guest) - 验证: Email format 3. **用户详情页** (`/users/{userId}`) (可选) - 用户信息展示 - 用户负责的任务列表 - 用户活动历史 **技术实现**: - 复用 Identity Module API (已完成) - API Client: `user.api.ts`, `role.api.ts` - React Query Hooks: `useUsers`, `useInviteUser`, `useUpdateRole` - Components: `UserCard`, `InviteUserDialog`, `UserDetail` **验收标准**: - 用户可以邀请新成员 - 用户可以更新成员角色 - 用户可以移除成员 - 权限控制正确 (只有 Owner/Admin 可以操作) - API 调用正确 **工作量**: 4-6 小时 (Day 17-18) **依赖**: Identity API (已完成) --- #### 2.1.6 SignalR 实时更新集成 (CRITICAL) **业务价值**: 多用户协作实时同步,提升用户体验 **实时更新场景**: 1. **Kanban Board**: 其他用户拖拽任务时实时更新 2. **Epic/Story/Task 列表**: 其他用户创建/更新/删除时实时更新 3. **Sprint Backlog**: 其他用户添加/移除任务时实时更新 4. **Project 信息**: 其他用户更新项目信息时实时更新 **技术实现**: - SignalR Client 配置 (`@microsoft/signalr`) - SignalR Connection 管理 (全局单例) - Event Listeners: 监听 ProjectHub/NotificationHub 事件 - React Query Invalidation: 接收到事件时刷新数据 - Toast 通知: 显示实时操作提示 **事件监听**: - `ProjectCreated`, `ProjectUpdated`, `ProjectDeleted` - `EpicCreated`, `EpicUpdated`, `EpicDeleted` - `StoryCreated`, `StoryUpdated`, `StoryDeleted` - `TaskCreated`, `TaskStatusChanged`, `TaskDeleted` - `SprintStarted`, `SprintCompleted`, `TaskAddedToSprint` **验收标准**: - SignalR 连接正常建立 - 实时事件正确接收 - UI 自动刷新 (React Query invalidation) - Toast 通知正常显示 - 多用户测试通过 (2+ users) **工作量**: 4-6 小时 (Day 20) **依赖**: SignalR Infrastructure 完成 (已完成) --- ### P1 (Should Have) - M1 重要但非阻塞 #### 2.1.7 Dashboard 仪表盘 (项目概览) **业务价值**: 项目健康度可视化,帮助团队了解项目状态 **核心内容**: 1. **项目统计卡片** - Total Epics, Stories, Tasks - Completed Tasks, In Progress Tasks - Team Members 计数 2. **任务状态分布图** (饼图或柱状图) - Backlog, Todo, InProgress, Done 数量 3. **Sprint 进度条** (当前 Sprint) - Sprint 名称, 剩余天数 - 完成度百分比 4. **最近活动流** (Activity Stream) - 最近创建/更新的任务 - 最近分配的任务 **技术实现**: - Chart 库: `recharts` or `chart.js` - API: 复用现有 API + 聚合数据 - Components: `Dashboard`, `StatCard`, `TaskChart`, `ActivityFeed` **验收标准**: - Dashboard 正确显示统计数据 - 图表渲染正常 - 数据自动刷新 (定时 or 实时) **工作量**: 6-8 小时 (Day 23-24) **依赖**: Epic/Story/Task/Sprint API 完成 --- #### 2.1.8 高级搜索与过滤 **业务价值**: 提高任务查找效率 **核心功能**: 1. **快速过滤器** (Quick Filters) - My Tasks (我的任务) - Unassigned (未分配) - Overdue (逾期) - High Priority (高优先级) 2. **高级搜索表单** - 字段: Title, Assignee, Status, Priority, Type, Date Range - 保存过滤条件 (可选) 3. **搜索结果页** - 表格或卡片视图 - 分页 + 排序 **技术实现**: - Search API: 复用 List API with filters - Components: `SearchBar`, `AdvancedFilter`, `SearchResults` - URL Query Params: 保存过滤条件到 URL **验收标准**: - 快速过滤器正常工作 - 高级搜索返回正确结果 - URL 可分享 (带过滤条件) **工作量**: 4-6 小时 (Day 25-26) **依赖**: Issue/Task List API with filters --- ### P2 (Nice to Have) - M1 可延后到 M1.5 或 M2 #### 2.1.9 任务详情页 (全屏模式) **业务价值**: 深度查看和编辑任务详情 **核心内容**: - Task 完整信息展示 - 描述 (富文本编辑器) - 评论系统 (Comments) - 附件上传 (Attachments) - 活动历史 (Activity Log) - 子任务 (Sub-tasks) **工作量**: 8-10 小时 **优先级**: P2 (可延后到 M2) --- #### 2.1.10 Gantt Chart 甘特图 **业务价值**: 项目时间线可视化 **核心内容**: - 任务时间轴 - 依赖关系 - 里程碑 **工作量**: 10-12 小时 **优先级**: P2 (可延后到 M2) --- #### 2.1.11 通知系统 **业务价值**: 及时提醒用户任务变更 **核心内容**: - In-app Notifications - 通知列表 - 标记为已读 **工作量**: 6-8 小时 **优先级**: P2 (可延后到 M2) --- ## 三、前端开发任务分解与工时估算 ### 3.1 任务分解树 (Task Breakdown Structure) ``` M1 前端开发 (18-22 天) ├── Phase 1: ProjectManagement 前端集成 (Day 16-20, 5 天) │ ├── 1.1 API Clients 创建 (2-3h) │ │ ├── epic.api.ts (Create, Read, Update, Delete, List, GetWithStories) │ │ ├── story.api.ts (Create, Read, Update, Delete, List, GetWithTasks) │ │ └── task.api.ts (Create, Read, Update, Delete, List, UpdateStatus) │ ├── 1.2 React Query Hooks (2-3h) │ │ ├── useEpics, useEpic, useCreateEpic, useUpdateEpic, useDeleteEpic │ │ ├── useStories, useStory, useCreateStory, useUpdateStory, useDeleteStory │ │ └── useTasks, useTask, useCreateTask, useUpdateTask, useDeleteTask │ ├── 1.3 Epic/Story/Task 管理 UI (8-12h) │ │ ├── Epic 列表页 + EpicCard + CreateEpicDialog (3-4h) │ │ ├── Story 列表页 + StoryCard + CreateStoryDialog (3-4h) │ │ ├── Task 列表页 + TaskCard + CreateTaskDialog (2-4h) │ │ └── 面包屑导航 + 路由配置 (1h) │ ├── 1.4 Kanban Board 更新 (4-6h) │ │ ├── API Client 切换 (Issue → WorkTask) (2h) │ │ ├── TaskCard 增强 (显示层级 + 工时) (2h) │ │ └── 拖拽状态更新适配 (1-2h) │ └── 1.5 SignalR 实时更新集成 (4-6h) │ ├── SignalR Client 配置 (1h) │ ├── Event Listeners 实现 (2-3h) │ └── React Query Invalidation (1-2h) │ ├── Phase 2: 项目管理与用户管理 (Day 17-18, 2 天) │ ├── 2.1 Project Management UI (6-8h) │ │ ├── API Client: project.api.ts (1h) │ │ ├── React Query Hooks (1h) │ │ ├── 项目列表页 + ProjectCard (2-3h) │ │ ├── 项目详情页 (Tab 切换) (2-3h) │ │ └── 创建/编辑对话框 (1h) │ └── 2.2 User Management UI (4-6h) │ ├── API Client: user.api.ts, role.api.ts (1h) │ ├── React Query Hooks (1h) │ ├── 用户列表页 + UserCard (2-3h) │ └── 邀请用户对话框 (1h) │ ├── Phase 3: Sprint 管理与 Dashboard (Day 21-24, 4 天) │ ├── 3.1 Sprint Management UI (8-10h) │ │ ├── API Client: sprint.api.ts (1h) │ │ ├── React Query Hooks (1h) │ │ ├── Sprint 列表页 + SprintCard (2-3h) │ │ ├── Sprint 详情页 + Backlog (3-4h) │ │ └── Burndown Chart 基础版 (2h) │ └── 3.2 Dashboard 仪表盘 (6-8h) │ ├── 统计卡片 (2h) │ ├── 任务状态分布图 (2-3h) │ ├── Sprint 进度条 (1h) │ └── 最近活动流 (2h) │ ├── Phase 4: 高级功能与优化 (Day 25-27, 3 天) │ ├── 4.1 高级搜索与过滤 (4-6h) │ │ ├── 快速过滤器 (2h) │ │ ├── 高级搜索表单 (2h) │ │ └── 搜索结果页 (1-2h) │ ├── 4.2 UI/UX 优化 (4-6h) │ │ ├── 响应式设计优化 (2h) │ │ ├── Loading 状态优化 (1h) │ │ ├── Error Handling 优化 (1h) │ │ └── 动画与过渡效果 (1-2h) │ └── 4.3 性能优化 (2-4h) │ ├── React.memo 应用 (1h) │ ├── 虚拟滚动 (可选) (2h) │ └── 代码分割 (Code Splitting) (1h) │ └── Phase 5: 测试与文档 (Day 28-30, 3 天) ├── 5.1 E2E 测试 (8-10h) │ ├── Cypress/Playwright 配置 (2h) │ ├── 核心流程测试 (5+ scenarios) (5-7h) │ └── CI/CD 集成 (1h) ├── 5.2 单元测试 (可选) (4-6h) │ ├── Component 测试 (2-3h) │ └── Hooks 测试 (2-3h) └── 5.3 文档编写 (2-3h) ├── 前端开发指南 (1h) ├── 组件文档 (Storybook,可选) (1h) └── 部署指南 (1h) ``` --- ### 3.2 工时估算汇总表 | Phase | 任务 | 预计工时 | 依赖 | 优先级 | |-------|------|---------|------|--------| | **Phase 1** | **ProjectManagement 前端集成** | **18-28h (2.5-3.5天)** | 后端 ProjectManagement API | **P0** | | 1.1 | API Clients 创建 | 2-3h | 后端 API | P0 | | 1.2 | React Query Hooks | 2-3h | 1.1 | P0 | | 1.3 | Epic/Story/Task 管理 UI | 8-12h | 1.2 | P0 | | 1.4 | Kanban Board 更新 | 4-6h | 1.3 | P0 | | 1.5 | SignalR 实时更新集成 | 4-6h | 1.4 | P0 | | **Phase 2** | **项目管理与用户管理** | **10-14h (1.5-2天)** | 后端 Project/User API | **P0** | | 2.1 | Project Management UI | 6-8h | 后端 Project API | P0 | | 2.2 | User Management UI | 4-6h | 后端 Identity API | P0 | | **Phase 3** | **Sprint 管理与 Dashboard** | **14-18h (2-2.5天)** | 后端 Sprint API | **P0** | | 3.1 | Sprint Management UI | 8-10h | 后端 Sprint API | P0 | | 3.2 | Dashboard 仪表盘 | 6-8h | Phase 1-2 | P1 | | **Phase 4** | **高级功能与优化** | **10-16h (1.5-2天)** | Phase 1-3 | **P1** | | 4.1 | 高级搜索与过滤 | 4-6h | Phase 1 | P1 | | 4.2 | UI/UX 优化 | 4-6h | Phase 1-3 | P1 | | 4.3 | 性能优化 | 2-4h | Phase 1-3 | P1 | | **Phase 5** | **测试与文档** | **14-19h (2-2.5天)** | Phase 1-4 | **P1** | | 5.1 | E2E 测试 | 8-10h | Phase 1-3 | P1 | | 5.2 | 单元测试 (可选) | 4-6h | Phase 1-3 | P2 | | 5.3 | 文档编写 | 2-3h | All | P1 | | **总计** | | **66-95h (9-13天)** | | | **考虑缓冲时间 + Bug 修复 + 返工**: **18-22天** (每天 5-6 小时有效工作时间) --- ### 3.3 依赖关系图 ``` 后端 ProjectManagement API (Day 15-17) 完成 ↓ 前端 Phase 1: ProjectManagement 前端集成 (Day 18-20) ↓ 前端 Phase 2: 项目管理与用户管理 (Day 21-22) ↓ (并行) 后端 Sprint API (Day 31-34) 完成 ↓ 前端 Phase 3: Sprint 管理与 Dashboard (Day 23-24) ↓ 前端 Phase 4: 高级功能与优化 (Day 25-27) ↓ 前端 Phase 5: 测试与文档 (Day 28-30) ``` **关键依赖**: - ✅ 后端 Identity API - 已完成 - ✅ 后端 SignalR Infrastructure - 已完成 - ⏳ 后端 ProjectManagement API - Day 15-17 (阻塞 Phase 1) - ⏳ 后端 Project API - Day 14-15 (阻塞 Phase 2) - ⏳ 后端 Sprint API - Day 31-34 (阻塞 Phase 3) --- ## 四、前端技术规范与最佳实践 ### 4.1 项目结构规范 ``` colaflow-frontend/ ├── public/ # 静态资源 ├── src/ │ ├── api/ # API Clients (Axios 封装) │ │ ├── client.ts # Axios 实例配置 (baseURL, interceptors) │ │ ├── auth.api.ts # 认证 API │ │ ├── project.api.ts # 项目管理 API │ │ ├── epic.api.ts # Epic API │ │ ├── story.api.ts # Story API │ │ ├── task.api.ts # Task API │ │ ├── sprint.api.ts # Sprint API │ │ └── user.api.ts # 用户管理 API │ ├── components/ # React 组件 (原子设计模式) │ │ ├── atoms/ # 原子组件 (Button, Input, Card) │ │ ├── molecules/ # 分子组件 (SearchBar, TaskCard) │ │ ├── organisms/ # 有机组件 (Kanban, EpicList) │ │ └── templates/ # 模板组件 (PageLayout) │ ├── pages/ # 页面组件 (路由页面) │ │ ├── LoginPage.tsx │ │ ├── ProjectsPage.tsx │ │ ├── EpicsPage.tsx │ │ ├── KanbanPage.tsx │ │ └── DashboardPage.tsx │ ├── hooks/ # 自定义 Hooks │ │ ├── useAuth.ts # 认证 Hook │ │ ├── useProjects.ts # 项目管理 Hooks (React Query) │ │ ├── useEpics.ts # Epic Hooks │ │ ├── useStories.ts # Story Hooks │ │ ├── useTasks.ts # Task Hooks │ │ ├── useSprints.ts # Sprint Hooks │ │ └── useSignalR.ts # SignalR Hook │ ├── store/ # Zustand Store (全局状态) │ │ ├── authStore.ts # 认证状态 │ │ ├── uiStore.ts # UI 状态 (sidebar, theme) │ │ └── index.ts │ ├── types/ # TypeScript 类型定义 │ │ ├── api.types.ts # API 请求/响应类型 │ │ ├── domain.types.ts # 领域模型类型 (Epic, Story, Task) │ │ └── index.ts │ ├── utils/ # 工具函数 │ │ ├── formatters.ts # 格式化函数 (date, number) │ │ ├── validators.ts # 验证函数 │ │ └── constants.ts # 常量定义 │ ├── styles/ # 全局样式 │ │ ├── global.css # 全局 CSS │ │ └── antd-theme.ts # Ant Design 主题配置 │ ├── App.tsx # 应用根组件 │ ├── main.tsx # 应用入口 │ └── router.tsx # 路由配置 (React Router) ├── tests/ # 测试文件 │ ├── e2e/ # E2E 测试 (Cypress/Playwright) │ └── unit/ # 单元测试 (Vitest) ├── .env.example # 环境变量示例 ├── package.json ├── tsconfig.json └── vite.config.ts # Vite 配置 ``` --- ### 4.2 技术栈规范 #### 4.2.1 核心技术栈 | 技术 | 版本 | 用途 | 备注 | |------|------|------|------| | React | 18.x | UI 框架 | 使用 Hooks,禁用 Class Components | | TypeScript | 5.x | 类型系统 | 严格模式 (strict: true) | | Vite | 5.x | 构建工具 | 快速开发,HMR | | React Router | 6.x | 路由管理 | 使用 Data Router (createBrowserRouter) | | Ant Design | 5.x | UI 组件库 | 按需导入,自定义主题 | | Zustand | 4.x | 状态管理 | 轻量级,替代 Redux | | React Query | 5.x | 数据获取与缓存 | Server State 管理 | | Axios | 1.x | HTTP Client | 统一封装,拦截器 | | @dnd-kit | 6.x | 拖拽库 | Kanban Board 拖拽 | | @microsoft/signalr | 8.x | SignalR Client | 实时通信 | | Zod | 3.x | 数据验证 | API 响应验证,Form 验证 | | date-fns | 3.x | 日期处理 | 替代 moment.js (更轻量) | | recharts | 2.x | 图表库 | Dashboard 图表 | #### 4.2.2 开发工具 | 工具 | 用途 | |------|------| | ESLint | 代码规范检查 | | Prettier | 代码格式化 | | Husky | Git Hooks (pre-commit, pre-push) | | lint-staged | 只检查暂存文件 | | Vitest | 单元测试 (Vite 原生支持) | | Cypress/Playwright | E2E 测试 | | Storybook (可选) | 组件文档 | --- ### 4.3 代码规范 #### 4.3.1 组件设计规范 **1. 使用函数组件 + Hooks** ```typescript // ✅ Good const TaskCard: React.FC = ({ task }) => { const { mutate } = useUpdateTask(); // ... }; // ❌ Bad class TaskCard extends React.Component { } ``` **2. Props 类型定义** ```typescript interface TaskCardProps { task: Task; onEdit?: (task: Task) => void; onDelete?: (taskId: string) => void; className?: string; } ``` **3. 组件拆分原则** - 单一职责原则 (SRP): 一个组件只做一件事 - 组件行数 < 200 行 (超过则拆分) - 复杂逻辑提取到自定义 Hook **4. 命名规范** - 组件: PascalCase (`TaskCard`, `EpicList`) - 函数/变量: camelCase (`fetchTasks`, `isLoading`) - 常量: UPPER_SNAKE_CASE (`API_BASE_URL`) - 文件名: kebab-case (`task-card.tsx`, `use-tasks.ts`) --- #### 4.3.2 状态管理规范 **1. Zustand Store (Client State)** 用途: 全局 UI 状态 (sidebar 开关, theme, 当前用户等) ```typescript // authStore.ts import { create } from 'zustand'; interface AuthState { user: User | null; token: string | null; setUser: (user: User) => void; logout: () => void; } export const useAuthStore = create((set) => ({ user: null, token: null, setUser: (user) => set({ user }), logout: () => set({ user: null, token: null }), })); ``` **2. React Query (Server State)** 用途: 服务端数据获取、缓存、同步 ```typescript // useTasks.ts import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { taskApi } from '@/api/task.api'; export const useTasks = (storyId: string) => { return useQuery({ queryKey: ['tasks', storyId], queryFn: () => taskApi.listTasks(storyId), staleTime: 5 * 60 * 1000, // 5分钟 }); }; export const useCreateTask = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: taskApi.createTask, onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ['tasks', data.storyId] }); }, }); }; ``` **3. 状态选择原则** - Client State (Zustand): 全局 UI 状态, 用户登录状态 - Server State (React Query): API 数据, 缓存数据 - Component State (useState): 局部 UI 状态 (modal open, form input) --- #### 4.3.3 API 调用规范 **1. Axios 实例配置** ```typescript // api/client.ts import axios from 'axios'; import { useAuthStore } from '@/store/authStore'; export const apiClient = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:5000/api', timeout: 10000, }); // 请求拦截器: 添加 JWT Token apiClient.interceptors.request.use((config) => { const token = useAuthStore.getState().token; if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }); // 响应拦截器: 处理错误 apiClient.interceptors.response.use( (response) => response.data, (error) => { if (error.response?.status === 401) { useAuthStore.getState().logout(); window.location.href = '/login'; } return Promise.reject(error); } ); ``` **2. API Client 模块化** ```typescript // api/task.api.ts import { apiClient } from './client'; import type { Task, CreateTaskRequest, UpdateTaskRequest } from '@/types'; export const taskApi = { createTask: (data: CreateTaskRequest): Promise => apiClient.post('/tasks', data), getTask: (id: string): Promise => apiClient.get(`/tasks/${id}`), listTasks: (storyId: string): Promise => apiClient.get('/tasks', { params: { storyId } }), updateTask: (id: string, data: UpdateTaskRequest): Promise => apiClient.put(`/tasks/${id}`, data), updateTaskStatus: (id: string, status: string): Promise => apiClient.patch(`/tasks/${id}/status`, { status }), deleteTask: (id: string): Promise => apiClient.delete(`/tasks/${id}`), }; ``` **3. TypeScript 类型定义** ```typescript // types/domain.types.ts export interface Task { id: string; title: string; description?: string; status: TaskStatus; priority: TaskPriority; assigneeId?: string; storyId: string; epicId?: string; estimatedHours?: number; actualHours?: number; createdAt: string; updatedAt: string; } export enum TaskStatus { Backlog = 'Backlog', Todo = 'Todo', InProgress = 'InProgress', Done = 'Done', } export enum TaskPriority { Low = 'Low', Medium = 'Medium', High = 'High', Critical = 'Critical', } export interface CreateTaskRequest { title: string; description?: string; storyId: string; priority?: TaskPriority; assigneeId?: string; estimatedHours?: number; } ``` --- #### 4.3.4 路由管理规范 **1. React Router 配置 (Data Router)** ```typescript // router.tsx import { createBrowserRouter, Navigate } from 'react-router-dom'; import { ProtectedRoute } from '@/components/ProtectedRoute'; export const router = createBrowserRouter([ { path: '/login', element: , }, { path: '/', element: , children: [ { index: true, element: }, { path: 'projects', element: }, { path: 'projects/:projectId', element: }, { path: 'projects/:projectId/epics', element: }, { path: 'epics/:epicId/stories', element: }, { path: 'stories/:storyId/tasks', element: }, { path: 'projects/:projectId/board', element: }, { path: 'projects/:projectId/sprints', element: }, { path: 'dashboard', element: }, ], }, ]); ``` **2. 受保护路由** ```typescript // components/ProtectedRoute.tsx import { Navigate } from 'react-router-dom'; import { useAuthStore } from '@/store/authStore'; export const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => { const token = useAuthStore((state) => state.token); if (!token) { return ; } return <>{children}; }; ``` --- #### 4.3.5 表单处理规范 **推荐使用 Ant Design Form + React Hook Form (可选)** **1. Ant Design Form 示例** ```typescript // CreateTaskDialog.tsx import { Form, Input, Select, Modal } from 'antd'; import { useCreateTask } from '@/hooks/useTasks'; export const CreateTaskDialog: React.FC = ({ open, onClose, storyId }) => { const [form] = Form.useForm(); const { mutate: createTask, isPending } = useCreateTask(); const handleSubmit = async () => { const values = await form.validateFields(); createTask({ ...values, storyId }, { onSuccess: () => { form.resetFields(); onClose(); }, }); }; return (
); }; ``` --- #### 4.3.6 错误处理规范 **1. API 错误处理** ```typescript // hooks/useTasks.ts export const useCreateTask = () => { return useMutation({ mutationFn: taskApi.createTask, onError: (error: AxiosError<{ message: string }>) => { const message = error.response?.data?.message || 'Failed to create task'; notification.error({ message: 'Error', description: message }); }, }); }; ``` **2. ErrorBoundary 组件** ```typescript // components/ErrorBoundary.tsx import { Component, ReactNode } from 'react'; import { Result, Button } from 'antd'; interface Props { children: ReactNode; } interface State { hasError: boolean; error?: Error; } export class ErrorBoundary extends Component { constructor(props: Props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error: Error): State { return { hasError: true, error }; } render() { if (this.state.hasError) { return ( window.location.reload()}>Reload} /> ); } return this.props.children; } } ``` --- #### 4.3.7 SignalR 集成规范 **1. SignalR Connection 管理** ```typescript // hooks/useSignalR.ts import { useEffect, useRef } from 'react'; import { HubConnection, HubConnectionBuilder } from '@microsoft/signalr'; import { useAuthStore } from '@/store/authStore'; import { useQueryClient } from '@tanstack/react-query'; export const useSignalR = () => { const connectionRef = useRef(null); const token = useAuthStore((state) => state.token); const queryClient = useQueryClient(); useEffect(() => { if (!token) return; const connection = new HubConnectionBuilder() .withUrl(`${import.meta.env.VITE_API_BASE_URL}/hubs/project`, { accessTokenFactory: () => token, }) .withAutomaticReconnect() .build(); connection.start().then(() => { console.log('SignalR connected'); }); // 监听事件 connection.on('TaskStatusChanged', (taskId: string, status: string) => { queryClient.invalidateQueries({ queryKey: ['tasks'] }); notification.info({ message: `Task ${taskId} status changed to ${status}` }); }); connection.on('EpicCreated', (epic: Epic) => { queryClient.invalidateQueries({ queryKey: ['epics'] }); notification.success({ message: `Epic "${epic.title}" created` }); }); connectionRef.current = connection; return () => { connection.stop(); }; }, [token, queryClient]); return connectionRef.current; }; ``` **2. 在 App 级别使用 SignalR Hook** ```typescript // App.tsx import { useSignalR } from '@/hooks/useSignalR'; export const App: React.FC = () => { useSignalR(); // 全局启动 SignalR 连接 return ( ); }; ``` --- #### 4.3.8 性能优化规范 **1. React.memo 应用** ```typescript // TaskCard.tsx export const TaskCard = React.memo(({ task, onEdit, onDelete }) => { // ... }, (prevProps, nextProps) => { return prevProps.task.id === nextProps.task.id && prevProps.task.updatedAt === nextProps.task.updatedAt; }); ``` **2. useMemo 和 useCallback** ```typescript const TaskList: React.FC = ({ tasks, onTaskClick }) => { const sortedTasks = useMemo(() => { return tasks.sort((a, b) => a.priority - b.priority); }, [tasks]); const handleTaskClick = useCallback((taskId: string) => { onTaskClick(taskId); }, [onTaskClick]); return ( <> {sortedTasks.map(task => ( ))} ); }; ``` **3. 代码分割 (Code Splitting)** ```typescript // Lazy load heavy components const KanbanPage = lazy(() => import('@/pages/KanbanPage')); const DashboardPage = lazy(() => import('@/pages/DashboardPage')); // In router { path: 'board', element: }> } ``` **4. 虚拟滚动 (可选,长列表优化)** ```typescript import { FixedSizeList } from 'react-window'; const TaskList: React.FC = ({ tasks }) => { return ( {({ index, style }) => (
)}
); }; ``` --- ### 4.4 国际化 (i18n) 建议 **M1 阶段暂不实施,M2 考虑引入** 推荐技术: `react-i18next` or `next-intl` --- ## 五、前端开发时间计划 (4周内完成 M1 前端) ### 5.1 总体时间线 | 周次 | 日期 | Phase | 主要任务 | 工作量 | 状态 | |------|------|-------|---------|--------|------| | **Week 1** | **Day 16-20** | **Phase 1** | **ProjectManagement 前端集成** | **3.5-4天** | ⏳ 计划中 | | Day 16 | 2025-11-08 | Phase 1.1-1.2 | API Clients + React Query Hooks | 4-6h | ⏳ | | Day 17 | 2025-11-09 | Phase 1.3 | Epic/Story 列表页 | 6-8h | ⏳ | | Day 18 | 2025-11-10 | Phase 1.3 | Task 列表页 + 面包屑导航 | 6-8h | ⏳ | | Day 19 | 2025-11-11 | Phase 1.4 | Kanban Board 更新 | 4-6h | ⏳ | | Day 20 | 2025-11-12 | Phase 1.5 | SignalR 实时更新集成 | 4-6h | ⏳ | | **Week 2** | **Day 21-25** | **Phase 2-3** | **项目/用户/Sprint 管理** | **5天** | ⏳ 计划中 | | Day 21 | 2025-11-13 | Phase 2.1 | Project Management UI | 6-8h | ⏳ | | Day 22 | 2025-11-14 | Phase 2.2 | User Management UI | 4-6h | ⏳ | | Day 23 | 2025-11-15 | Phase 3.1 | Sprint Management UI (Part 1) | 4-5h | ⏳ | | Day 24 | 2025-11-16 | Phase 3.1 | Sprint Management UI (Part 2) + Burndown | 4-5h | ⏳ | | Day 25 | 2025-11-17 | Phase 3.2 | Dashboard 仪表盘 | 6-8h | ⏳ | | **Week 3** | **Day 26-30** | **Phase 4-5** | **高级功能 + 测试** | **5天** | ⏳ 计划中 | | Day 26 | 2025-11-18 | Phase 4.1 | 高级搜索与过滤 | 4-6h | ⏳ | | Day 27 | 2025-11-19 | Phase 4.2-4.3 | UI/UX 优化 + 性能优化 | 6-10h | ⏳ | | Day 28 | 2025-11-20 | Phase 5.1 | E2E 测试 (Part 1) | 4-5h | ⏳ | | Day 29 | 2025-11-21 | Phase 5.1 | E2E 测试 (Part 2) | 4-5h | ⏳ | | Day 30 | 2025-11-22 | Phase 5.3 | 文档编写 | 2-3h | ⏳ | | **Week 4** | **Day 31-35** | **缓冲 + 集成** | **Bug 修复 + 集成测试** | **5天** | ⏳ 计划中 | | Day 31-35 | 2025-11-23至27 | 缓冲 | Bug 修复, 返工, 集成测试, M1 验收 | 40h | ⏳ | **目标完成日期**: **2025-11-27** (与后端 M1 完成日期对齐) --- ### 5.2 详细每日任务分解 #### Week 1: ProjectManagement 前端集成 (Day 16-20) **Day 16 (2025-11-08) - API Clients + React Query Hooks** 时间: 4-6 小时 - [ ] 08:00-10:00: API Clients 创建 - [ ] epic.api.ts (6个方法) - [ ] story.api.ts (6个方法) - [ ] task.api.ts (6个方法) - [ ] 10:00-12:00: React Query Hooks 创建 - [ ] useEpics, useEpic, useCreateEpic, useUpdateEpic, useDeleteEpic - [ ] useStories, useStory, useCreateStory, useUpdateStory, useDeleteStory - [ ] useTasks, useTask, useCreateTask, useUpdateTask, useDeleteTask - [ ] 13:00-14:00: TypeScript 类型定义 - [ ] Epic, Story, WorkTask 类型 - [ ] CreateEpicRequest, UpdateEpicRequest 等 - [ ] 14:00-15:00: API 集成测试 (手动测试 API 调用) **交付物**: - ✅ API Clients (epic.api.ts, story.api.ts, task.api.ts) - ✅ React Query Hooks (useEpics, useStories, useTasks) - ✅ TypeScript 类型定义 --- **Day 17 (2025-11-09) - Epic/Story 列表页** 时间: 6-8 小时 - [ ] 08:00-11:00: Epic 列表页 - [ ] EpicCard 组件 (显示 Epic 信息 + Story 计数) - [ ] EpicsPage 页面布局 - [ ] CreateEpicDialog 组件 - [ ] 路由配置 (`/projects/{id}/epics`) - [ ] 11:00-12:00: Epic CRUD 功能测试 - [ ] 13:00-16:00: Story 列表页 - [ ] StoryCard 组件 (显示 Story 信息 + Task 计数) - [ ] StoriesPage 页面布局 - [ ] CreateStoryDialog 组件 - [ ] 路由配置 (`/epics/{id}/stories`) - [ ] 面包屑导航 (Project → Epic → Story) **交付物**: - ✅ Epic 列表页 + CRUD 功能 - ✅ Story 列表页 + CRUD 功能 - ✅ 面包屑导航 --- **Day 18 (2025-11-10) - Task 列表页 + 面包屑导航** 时间: 6-8 小时 - [ ] 08:00-11:00: Task 列表页 - [ ] TaskCard 组件 (显示 Task 信息 + 状态) - [ ] TasksPage 页面布局 - [ ] CreateTaskDialog 组件 - [ ] 路由配置 (`/stories/{id}/tasks`) - [ ] 面包屑导航 (Project → Epic → Story → Task) - [ ] 11:00-12:00: Task CRUD 功能测试 - [ ] 13:00-15:00: 三层层级导航优化 - [ ] 点击 Task 可跳转到所属 Story/Epic - [ ] 显示完整层级路径 - [ ] 15:00-16:00: UI/UX 细节优化 **交付物**: - ✅ Task 列表页 + CRUD 功能 - ✅ 完整三层层级导航 --- **Day 19 (2025-11-11) - Kanban Board 更新** 时间: 4-6 小时 - [ ] 08:00-10:00: API Client 切换 - [ ] 更新 Kanban API Client (Issue → WorkTask) - [ ] 更新 React Query Hooks - [ ] 更新数据结构 (Issue → WorkTask) - [ ] 10:00-12:00: TaskCard 增强 - [ ] 显示 Epic/Story 层级信息 - [ ] 显示工时信息 (EstimatedHours/ActualHours) - [ ] 点击 Task 跳转到所属 Story/Epic - [ ] 13:00-14:00: 拖拽状态更新适配 - [ ] 拖拽更新 WorkTask 状态 - [ ] 拖拽时显示确认提示 (可选) - [ ] 14:00-15:00: Kanban Board 功能测试 **交付物**: - ✅ Kanban Board 支持 ProjectManagement - ✅ 显示层级信息和工时信息 --- **Day 20 (2025-11-12) - SignalR 实时更新集成** 时间: 4-6 小时 - [ ] 08:00-09:00: SignalR Client 配置 - [ ] useSignalR Hook 实现 - [ ] SignalR Connection 管理 - [ ] 09:00-12:00: Event Listeners 实现 - [ ] EpicCreated, EpicUpdated, EpicDeleted - [ ] StoryCreated, StoryUpdated, StoryDeleted - [ ] TaskCreated, TaskStatusChanged, TaskDeleted - [ ] SprintStarted, SprintCompleted, TaskAddedToSprint - [ ] 13:00-15:00: React Query Invalidation - [ ] 接收到事件时刷新对应数据 - [ ] Toast 通知显示 - [ ] 15:00-16:00: 多用户实时测试 (2+ users) **交付物**: - ✅ SignalR 实时更新正常工作 - ✅ 多用户协作测试通过 --- #### Week 2: 项目/用户/Sprint 管理 (Day 21-25) **Day 21 (2025-11-13) - Project Management UI** 时间: 6-8 小时 - [ ] 08:00-10:00: API Client + Hooks - [ ] project.api.ts - [ ] useProjects, useProject, useCreateProject, etc. - [ ] 10:00-12:00: 项目列表页 - [ ] ProjectCard 组件 - [ ] ProjectsPage 页面布局 - [ ] 路由配置 (`/projects`) - [ ] 13:00-16:00: 项目详情页 - [ ] ProjectDetail 组件 - [ ] Tab 切换 (Overview, Epics, Board, Sprints, Team, Settings) - [ ] CreateProjectDialog 组件 **交付物**: - ✅ 项目列表页 + 详情页 - ✅ 项目 CRUD 功能 --- **Day 22 (2025-11-14) - User Management UI** 时间: 4-6 小时 - [ ] 08:00-09:00: API Client + Hooks - [ ] user.api.ts, role.api.ts - [ ] useUsers, useInviteUser, useUpdateRole - [ ] 09:00-12:00: 用户列表页 - [ ] UserCard 组件 (或表格视图) - [ ] TeamPage 页面布局 - [ ] InviteUserDialog 组件 - [ ] 路由配置 (`/projects/{id}/team`) - [ ] 13:00-14:00: 权限控制 - [ ] 只有 Owner/Admin 可以邀请/移除用户 - [ ] UI 根据用户角色显示/隐藏操作按钮 **交付物**: - ✅ 用户列表页 + 邀请/移除功能 - ✅ 权限控制正确 --- **Day 23-24 (2025-11-15至16) - Sprint Management UI** 时间: 8-10 小时 (2天) - [ ] Day 23 08:00-09:00: API Client + Hooks - [ ] sprint.api.ts - [ ] useSprints, useSprint, useCreateSprint, etc. - [ ] Day 23 09:00-12:00: Sprint 列表页 - [ ] SprintCard 组件 - [ ] SprintsPage 页面布局 - [ ] 路由配置 (`/projects/{id}/sprints`) - [ ] Day 23 13:00-17:00: Sprint 详情页 (Part 1) - [ ] SprintDetail 组件 - [ ] Sprint Backlog (任务列表) - [ ] Add/Remove Task to Sprint - [ ] Day 24 08:00-12:00: Sprint 详情页 (Part 2) - [ ] Sprint 状态流转 (Start/Complete/Close) - [ ] CreateSprintDialog 组件 - [ ] Day 24 13:00-15:00: Burndown Chart 基础版 - [ ] recharts 集成 - [ ] 显示每日剩余任务数 **交付物**: - ✅ Sprint 列表页 + 详情页 - ✅ Sprint CRUD + 状态流转 - ✅ Burndown Chart 基础版 --- **Day 25 (2025-11-17) - Dashboard 仪表盘** 时间: 6-8 小时 - [ ] 08:00-10:00: 统计卡片 - [ ] Total Epics, Stories, Tasks - [ ] Completed Tasks, In Progress Tasks - [ ] 10:00-12:00: 任务状态分布图 - [ ] 饼图或柱状图 (recharts) - [ ] Backlog, Todo, InProgress, Done 数量 - [ ] 13:00-14:00: Sprint 进度条 - [ ] 当前 Sprint 名称, 剩余天数 - [ ] 完成度百分比 - [ ] 14:00-16:00: 最近活动流 - [ ] 最近创建/更新的任务 - [ ] 最近分配的任务 **交付物**: - ✅ Dashboard 仪表盘完整功能 --- #### Week 3: 高级功能 + 测试 (Day 26-30) **Day 26 (2025-11-18) - 高级搜索与过滤** 时间: 4-6 小时 - [ ] 08:00-10:00: 快速过滤器 - [ ] My Tasks, Unassigned, Overdue, High Priority - [ ] 10:00-12:00: 高级搜索表单 - [ ] 字段: Title, Assignee, Status, Priority, Type, Date Range - [ ] 13:00-14:00: 搜索结果页 - [ ] 表格或卡片视图 - [ ] 分页 + 排序 - [ ] 14:00-15:00: URL Query Params (保存过滤条件) **交付物**: - ✅ 高级搜索与过滤功能 --- **Day 27 (2025-11-19) - UI/UX 优化 + 性能优化** 时间: 6-10 小时 - [ ] 08:00-10:00: 响应式设计优化 - [ ] Mobile 适配 (< 768px) - [ ] Tablet 适配 (768px - 1024px) - [ ] 10:00-11:00: Loading 状态优化 - [ ] Skeleton Screens - [ ] Loading Spinners - [ ] 11:00-12:00: Error Handling 优化 - [ ] Error Messages 优化 - [ ] Retry 机制 - [ ] 13:00-15:00: 性能优化 - [ ] React.memo 应用 - [ ] useMemo, useCallback - [ ] Code Splitting (Lazy loading) - [ ] 15:00-16:00: 动画与过渡效果 - [ ] 页面切换动画 - [ ] 拖拽动画优化 **交付物**: - ✅ UI/UX 优化完成 - ✅ 性能优化完成 --- **Day 28-29 (2025-11-20至21) - E2E 测试** 时间: 8-10 小时 (2天) - [ ] Day 28 08:00-10:00: Cypress/Playwright 配置 - [ ] 安装依赖 - [ ] 配置文件 - [ ] 基础测试用例模板 - [ ] Day 28 10:00-12:00: 核心流程测试 (Part 1) - [ ] 测试场景 1: 用户登录 - [ ] 测试场景 2: 创建项目 - [ ] 测试场景 3: 创建 Epic → Story → Task - [ ] Day 28 13:00-17:00: 核心流程测试 (Part 2) - [ ] 测试场景 4: Kanban Board 拖拽 - [ ] 测试场景 5: Sprint 创建 + 启动 - [ ] Day 29 08:00-12:00: 核心流程测试 (Part 3) - [ ] 测试场景 6: 用户邀请 - [ ] 测试场景 7: Dashboard 显示 - [ ] 测试场景 8: 实时更新 (多用户) - [ ] Day 29 13:00-15:00: Bug 修复 (测试发现的问题) - [ ] Day 29 15:00-16:00: CI/CD 集成 (可选) **交付物**: - ✅ E2E 测试覆盖核心流程 (8+ scenarios) - ✅ 测试通过率 ≥ 90% --- **Day 30 (2025-11-22) - 文档编写** 时间: 2-3 小时 - [ ] 08:00-09:00: 前端开发指南 - [ ] 项目结构说明 - [ ] 技术栈说明 - [ ] 开发流程 - [ ] 09:00-10:00: 组件文档 (可选) - [ ] Storybook 配置 (如果时间允许) - [ ] 组件使用说明 - [ ] 10:00-11:00: 部署指南 - [ ] 环境变量配置 - [ ] 构建命令 - [ ] 部署步骤 **交付物**: - ✅ 前端开发文档完整 --- #### Week 4: 缓冲 + 集成 (Day 31-35) **Day 31-35 (2025-11-23至27) - Bug 修复 + 集成测试 + M1 验收** 时间: 40 小时 (5天) - [ ] Bug 修复 (测试阶段发现的问题) - [ ] 返工 (架构调整或需求变更) - [ ] 前后端集成测试 (端到端集成验证) - [ ] 性能优化 (压测发现的问题) - [ ] M1 验收准备 (演示环境搭建, 演示数据准备) - [ ] M1 验收评审 (Product Manager 验收) **交付物**: - ✅ M1 前端功能 100% 完成 - ✅ 所有 P0 功能验收通过 - ✅ Bug 修复完成 - ✅ M1 Release Notes (前端部分) --- ### 5.3 并行开发建议 为了加快开发速度,建议前后端并行开发: **Week 1 (Day 16-20)**: - 后端: ProjectManagement 安全加固 + 前端集成准备 (Day 15-20) - 前端: API Clients + Epic/Story/Task UI + Kanban 更新 (Day 16-20) - **并行**: 后端完成 API 后,前端立即集成 **Week 2 (Day 21-25)**: - 后端: Audit Log MVP Phase 1-2 (Day 23-30, 不阻塞前端) - 前端: Project/User/Sprint UI + Dashboard (Day 21-25) - **并行**: Sprint UI 可以先基于 Mock 数据开发,后端 Sprint API 完成后再集成 **Week 3-4 (Day 26-35)**: - 后端: Sprint Management + Audit Log 完成 (Day 31-34) - 前端: 高级功能 + 测试 + Bug 修复 (Day 26-35) - **并行**: 前端测试期间,后端继续完成剩余功能 --- ## 六、风险识别与应对措施 ### 6.1 技术风险 #### 风险 1: 后端 API 延期导致前端阻塞 (HIGH) **风险描述**: - 前端开发严重依赖后端 API 完成 - 如果后端 ProjectManagement API 延期 (Day 15-17),前端 Phase 1 无法启动 - 如果后端 Sprint API 延期 (Day 31-34),前端 Sprint UI 无法完成 **影响**: - M1 前端完成时间延后 - M1 整体时间线延期 **缓解措施**: 1. **Mock 数据开发**: 前端先基于 Mock 数据开发 UI,后端 API 完成后再集成 - 使用 MSW (Mock Service Worker) 或 json-server - 优势: 前后端完全解耦,前端不受后端影响 2. **API Contract First**: 后端先定义 API 接口文档 (OpenAPI),前端基于接口文档开发 3. **并行开发**: Sprint UI 可以先开发,后端 Sprint API 延后也不影响前端进度 4. **每日 Standup**: 前后端每日同步进度,及时发现阻塞 **责任人**: Frontend Lead + Backend Lead --- #### 风险 2: SignalR 实时更新集成复杂度 (MEDIUM) **风险描述**: - SignalR 实时更新涉及多个事件监听和 React Query Invalidation - 可能存在事件丢失、重复触发、性能问题等 **影响**: - 多用户协作体验不佳 - 可能需要额外调试时间 **缓解措施**: 1. **分阶段集成**: 先实现基础实时更新 (TaskStatusChanged),再逐步增加其他事件 2. **降级方案**: 如果实时更新有问题,可以降级为定时轮询 (polling) 3. **充分测试**: 多用户测试 (2-4 users),验证实时更新正确性 4. **性能监控**: 监控 SignalR 连接数和消息延迟 **责任人**: Frontend Developer --- #### 风险 3: React Query 缓存策略不当 (MEDIUM) **风险描述**: - React Query 缓存配置不当可能导致数据不一致 (stale data) - Invalidation 策略不合理可能导致过多 API 调用 **影响**: - 用户看到过期数据 - API 调用频繁,性能下降 **缓解措施**: 1. **合理的 staleTime**: 设置合理的缓存时间 (5-10分钟) 2. **精确的 Invalidation**: 只 invalidate 受影响的 queryKey,避免全局 invalidate 3. **Optimistic Updates**: 使用乐观更新,提升用户体验 4. **充分测试**: 测试数据一致性场景 **责任人**: Frontend Developer --- ### 6.2 进度风险 #### 风险 4: 工时估算不准确,实际开发时间超出预期 (HIGH) **风险描述**: - 当前工时估算为 18-22 天,但实际开发可能遇到意外问题 - 可能的延期因素: Bug 修复、架构调整、需求变更、测试不通过 **影响**: - M1 前端完成时间延后至 12月初 (比目标晚 1-2 周) - M1 整体时间线延期 **缓解措施**: 1. **预留缓冲时间**: Week 4 (Day 31-35) 预留 5天 缓冲时间 2. **每日进度跟踪**: 每日 Standup,及时发现进度偏差 3. **优先级调整**: 如果进度滞后,P1/P2 功能延后到 M1.5 或 M2 4. **加班或增加人手**: 关键时刻考虑加班或临时增加前端开发人员 **责任人**: Product Manager + Frontend Lead --- #### 风险 5: 前端开发人员不足 (MEDIUM) **风险描述**: - 当前假设 1名前端开发人员,工作量 18-22 天 - 如果前端人员请假、生病或其他项目占用时间,进度受影响 **影响**: - M1 前端完成时间延后 **缓解措施**: 1. **增加前端人手**: 考虑增加 1名前端开发人员,减少到 10-12 天完成 2. **任务并行**: 2名前端开发人员并行开发不同 Phase 3. **外包或兼职**: 考虑外包部分 P1/P2 功能 (如 Dashboard, 高级搜索) **责任人**: Product Manager --- ### 6.3 质量风险 #### 风险 6: 测试覆盖不足,上线后 Bug 较多 (MEDIUM) **风险描述**: - E2E 测试覆盖有限 (8+ scenarios),可能遗漏边界情况 - 单元测试可选,代码质量保证不足 **影响**: - 上线后用户发现 Bug,影响用户体验 - 需要紧急修复,影响 M2 开发 **缓解措施**: 1. **增加测试场景**: E2E 测试覆盖更多边界情况 (10-15 scenarios) 2. **手动测试**: QA 进行全面手动测试 3. **内部试用**: 团队内部先使用 1-2 周,发现问题 4. **快速迭代**: M1 上线后快速修复 Bug,发布 M1.1, M1.2 补丁版本 **责任人**: QA Lead + Frontend Developer --- #### 风险 7: 响应式设计不佳,Mobile 体验差 (LOW) **风险描述**: - M1 阶段主要关注桌面端,Mobile 适配可能不完善 **影响**: - Mobile 用户体验差 - 需要额外优化时间 **缓解措施**: 1. **优先桌面端**: M1 先完成桌面端,Mobile 优化延后到 M1.5 或 M2 2. **响应式框架**: 使用 Ant Design 响应式组件,减少适配工作 3. **基础适配**: M1 至少保证 Mobile 可用 (不要求完美) **责任人**: Frontend Developer --- ### 6.4 需求风险 #### 风险 8: 需求变更或范围蔓延 (MEDIUM) **风险描述**: - 开发过程中可能出现新需求或需求变更 - Scope 蔓延可能导致工作量增加 **影响**: - M1 完成时间延后 - 团队士气下降 **缓解措施**: 1. **严格控制 Scope**: M1 只做 P0 功能,P1/P2 延后到 M2 2. **变更评审**: 任何需求变更需要 Product Manager 评审,评估工作量和优先级 3. **积压管理**: 新需求加入 Backlog,不影响 M1 时间线 4. **MVP 思维**: M1 是 MVP,功能可以简化,后续迭代优化 **责任人**: Product Manager --- ## 七、验收标准 ### 7.1 功能完整性验收标准 | 功能模块 | 验收标准 | 优先级 | |---------|---------|--------| | **Epic/Story/Task 管理** | 用户可以创建/编辑/删除 Epic/Story/Task,三层层级关系正确显示 | P0 | | **Kanban Board** | Kanban Board 正常显示 WorkTasks,拖拽更新状态正常,显示层级和工时信息 | P0 | | **Project Management** | 用户可以创建/编辑/删除项目,项目列表和详情页正常显示 | P0 | | **User Management** | 用户可以邀请/移除成员,权限控制正确 | P0 | | **Sprint Management** | 用户可以创建/启动/完成 Sprint,Sprint Backlog 正常显示,Burndown Chart 基础版显示 | P0 | | **SignalR 实时更新** | 多用户协作时实时更新正常,Toast 通知显示 | P0 | | **Dashboard** | Dashboard 正确显示统计数据和图表 | P1 | | **高级搜索** | 快速过滤器和高级搜索正常工作 | P1 | | **响应式设计** | 桌面端 (1920x1080, 1366x768) 显示正常,Mobile 基础可用 | P1 | --- ### 7.2 质量验收标准 | 质量指标 | 目标值 | 验收方法 | |---------|--------|---------| | **E2E 测试覆盖** | ≥ 8 scenarios | Cypress/Playwright 测试报告 | | **E2E 测试通过率** | ≥ 90% | 测试报告 | | **页面加载时间** | < 2s (初次加载), < 500ms (后续导航) | Chrome DevTools Performance | | **API 调用成功率** | ≥ 99% | 手动测试 + 日志监控 | | **UI 响应时间** | < 100ms (用户操作反馈) | 手动测试 | | **浏览器兼容性** | Chrome 90+, Firefox 88+, Safari 14+, Edge 90+ | 手动测试 | | **代码规范检查** | 0 ESLint errors | ESLint 报告 | | **TypeScript 类型检查** | 0 type errors | tsc --noEmit 报告 | | **Build 成功** | 无 build errors | npm run build 成功 | --- ### 7.3 用户体验验收标准 | UX 指标 | 验收标准 | 验收方法 | |---------|---------|---------| | **易用性** | 新用户 5分钟内可以创建项目并添加任务 | 用户测试 | | **一致性** | UI 风格统一,遵循 Ant Design 设计规范 | 设计审查 | | **可访问性** | 基础可访问性 (Keyboard Navigation, Focus Management) | 手动测试 | | **错误提示** | 所有错误都有清晰的提示信息 | 手动测试 | | **Loading 状态** | 所有异步操作都有 Loading 指示器 | 手动测试 | | **实时反馈** | 用户操作后立即有视觉反馈 (Toast, Loading, etc.) | 手动测试 | --- ## 八、成功标准与关键指标 ### 8.1 M1 前端完成标准 **M1 前端 100% 完成** 需要满足以下条件: 1. ✅ 所有 P0 功能开发完成 (Epic/Story/Task, Kanban, Project, User, Sprint, SignalR) 2. ✅ E2E 测试覆盖核心流程 (8+ scenarios),通过率 ≥ 90% 3. ✅ 前后端集成测试通过 (所有 API 调用成功) 4. ✅ 质量指标达标 (页面加载 < 2s, UI 响应 < 100ms, 0 ESLint errors) 5. ✅ 验收测试通过 (Product Manager 验收) 6. ✅ 文档完整 (前端开发指南, 组件文档, 部署指南) 7. ✅ 演示环境部署成功,可以对外演示 --- ### 8.2 关键指标 (KPIs) | 指标项 | 目标值 | 当前值 | 状态 | |-------|--------|--------|------| | **M1 前端完成度** | 100% | 15-20% | 🔄 进行中 | | **前端代码规模** | 5,000+ 行 | 1,134 行 | 🔄 进行中 | | **前端文件数** | 80+ 文件 | 15 文件 | 🔄 进行中 | | **React 组件数** | 50+ 组件 | ~10 组件 | 🔄 进行中 | | **API Clients** | 7 clients | 1 client (Issue API) | 🔄 进行中 | | **页面数** | 15+ 页面 | ~5 页面 | 🔄 进行中 | | **E2E 测试覆盖** | ≥ 8 scenarios | 0 | ⏳ 待开始 | | **E2E 测试通过率** | ≥ 90% | N/A | ⏳ 待开始 | | **页面加载时间** | < 2s | N/A | ⏳ 待测试 | | **UI 响应时间** | < 100ms | N/A | ⏳ 待测试 | | **浏览器兼容性** | 4+ 浏览器 | Chrome (推测) | ⏳ 待测试 | --- ## 九、资源需求 ### 9.1 人力资源需求 | 角色 | 工作量 | 人数 | 备注 | |------|--------|------|------| | **Frontend Developer (核心)** | 18-22 天 | 1 人 | 全职开发 | | **Frontend Developer (支持,可选)** | 10-12 天 | 1 人 | 并行开发,加速交付 | | **UI/UX Designer (支持)** | 2-3 天 | 0.2 人 | 设计审查,UI 优化建议 | | **QA Engineer** | 3-5 天 | 0.5 人 | E2E 测试,手动测试 | | **Backend Developer (协作)** | N/A | N/A | 提供 API,协助前后端联调 | **推荐配置**: - **选项 1 (单人)**: 1 名前端开发人员,22 天完成 (风险较高) - **选项 2 (双人,推荐)**: 2 名前端开发人员并行开发,12 天完成 (更快,风险更低) --- ### 9.2 技术资源需求 | 资源 | 需求 | 备注 | |------|------|------| | **开发环境** | Node.js 18+, npm/yarn, VS Code | 标准前端开发环境 | | **测试环境** | 后端 API 可访问,SignalR 可连接 | 依赖后端环境 | | **CI/CD 环境** | GitHub Actions / GitLab CI | 自动化测试和部署 | | **演示环境** | Vercel / Netlify / Nginx | 部署前端应用 | | **设计资源** | Figma / Sketch (可选) | UI 设计稿 (如果有) | --- ## 十、总结与建议 ### 10.1 总结 ColaFlow 前端开发目前处于早期阶段,仅完成了 Kanban Board 看板功能 (15个文件,1134行代码)。基于 Day 14-15 后端架构决策 (采用 ProjectManagement Module),前端需要重新开发 Epic/Story/Task 三层层级管理界面,并与后端 ProjectManagement API 集成。 **M1 前端待开发功能**: - Epic/Story/Task 三层层级管理 UI (P0) - Kanban Board 更新 - 支持 ProjectManagement (P0) - Project Management UI (P0) - User Management UI (P0) - Sprint Management UI (P0) - SignalR 实时更新集成 (P0) - Dashboard 仪表盘 (P1) - 高级搜索与过滤 (P1) **预计剩余工作量**: 18-22 天 (单人开发) 或 10-12 天 (双人并行开发) **目标完成日期**: 2025-11-27 (与后端 M1 完成日期对齐) --- ### 10.2 关键建议 #### 建议 1: 增加前端开发人员,加速交付 (HIGH PRIORITY) **理由**: - 当前工作量 18-22 天,单人开发风险较高 - 增加 1 名前端开发人员,可以减少到 10-12 天,降低延期风险 **建议**: - **方案 1**: 招聘 1 名全职前端开发人员 - **方案 2**: 临时外包或兼职 1 名前端开发人员 - **方案 3**: 从其他项目借调 1 名前端开发人员 (临时支援) --- #### 建议 2: 前端先基于 Mock 数据开发,降低对后端的依赖 (MEDIUM PRIORITY) **理由**: - 后端 API 开发进度不确定,可能延期 - 前端基于 Mock 数据开发,可以完全解耦,不受后端影响 **建议**: - 使用 MSW (Mock Service Worker) 或 json-server - 后端先定义 API 接口文档 (OpenAPI),前端基于接口开发 - 后端 API 完成后再切换到真实 API --- #### 建议 3: 优先完成 P0 功能,P1/P2 延后到 M1.5 或 M2 (HIGH PRIORITY) **理由**: - M1 时间线紧张,需要严格控制 Scope - Dashboard 和高级搜索是 P1 功能,可以延后 **建议**: - M1 只做 P0 功能 (Epic/Story/Task, Kanban, Project, User, Sprint, SignalR) - Dashboard 和高级搜索延后到 M1.5 (12月初发布) - 任务详情页、Gantt Chart、通知系统延后到 M2 --- #### 建议 4: 增加 E2E 测试覆盖,提高质量保证 (MEDIUM PRIORITY) **理由**: - 前端功能复杂,手动测试覆盖不全 - E2E 测试可以提高质量,减少上线后 Bug **建议**: - E2E 测试覆盖核心流程 (10-15 scenarios) - 集成到 CI/CD,每次提交自动运行测试 - QA 进行全面手动测试,补充 E2E 测试未覆盖的边界情况 --- #### 建议 5: 每日 Standup + 每周 Review,确保进度可控 (HIGH PRIORITY) **理由**: - 前端开发周期 4 周,需要严格的进度管理 - 每日 Standup 可以及时发现阻塞和风险 **建议**: - 每日 Standup (15分钟): 昨天完成、今天计划、遇到的问题 - 每周 Review (1小时): Demo 本周完成的功能,Product Manager 验收 - 使用看板 (Kanban Board) 跟踪任务进度 --- #### 建议 6: 预留缓冲时间,应对意外情况 (HIGH PRIORITY) **理由**: - 工时估算可能不准确,实际开发可能遇到意外问题 - 缓冲时间可以吸收风险,避免 M1 延期 **建议**: - Week 4 (Day 31-35) 预留 5 天缓冲时间 - 如果进度超前,可以提前完成 P1 功能或进行优化 - 如果进度滞后,缓冲时间用于 Bug 修复和返工 --- ## 十一、附录 ### 11.1 参考文档 - `c:\Users\yaoji\git\ColaCoder\product-master\product.md` - 项目计划书 - `c:\Users\yaoji\git\ColaCoder\product-master\M1_REMAINING_TASKS.md` - M1 剩余任务清单 - `c:\Users\yaoji\git\ColaCoder\product-master\BACKEND_PROGRESS_REPORT.md` - 后端进度报告 --- ### 11.2 联系人 - **Product Manager**: Product Manager Agent - **Tech Lead**: Architect Agent - **Backend Lead**: Backend Agent - **Frontend Lead**: Frontend Agent (待指定) - **QA Lead**: QA Agent - **Main Coordinator**: Main Coordinator Agent --- **报告生成时间**: 2025-11-05 (Day 15) **下次更新**: 2025-11-12 (Day 22, Week 1 完成) --- **END OF DOCUMENT**