Files
ColaFlow/FRONTEND_DEVELOPMENT_PLAN.md
Yaojia Wang 08b317e789
Some checks failed
Code Coverage / Generate Coverage Report (push) Has been cancelled
Tests / Run Tests (9.0.x) (push) Has been cancelled
Tests / Docker Build Test (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Add trace files.
2025-11-04 23:28:56 +01:00

2110 lines
64 KiB
Markdown

# 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<TaskCardProps> = ({ 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<AuthState>((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<Task> =>
apiClient.post('/tasks', data),
getTask: (id: string): Promise<Task> =>
apiClient.get(`/tasks/${id}`),
listTasks: (storyId: string): Promise<Task[]> =>
apiClient.get('/tasks', { params: { storyId } }),
updateTask: (id: string, data: UpdateTaskRequest): Promise<Task> =>
apiClient.put(`/tasks/${id}`, data),
updateTaskStatus: (id: string, status: string): Promise<Task> =>
apiClient.patch(`/tasks/${id}/status`, { status }),
deleteTask: (id: string): Promise<void> =>
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: <LoginPage />,
},
{
path: '/',
element: <ProtectedRoute><AppLayout /></ProtectedRoute>,
children: [
{ index: true, element: <Navigate to="/projects" replace /> },
{ path: 'projects', element: <ProjectsPage /> },
{ path: 'projects/:projectId', element: <ProjectDetailPage /> },
{ path: 'projects/:projectId/epics', element: <EpicsPage /> },
{ path: 'epics/:epicId/stories', element: <StoriesPage /> },
{ path: 'stories/:storyId/tasks', element: <TasksPage /> },
{ path: 'projects/:projectId/board', element: <KanbanPage /> },
{ path: 'projects/:projectId/sprints', element: <SprintsPage /> },
{ path: 'dashboard', element: <DashboardPage /> },
],
},
]);
```
**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 <Navigate to="/login" replace />;
}
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<Props> = ({ 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 (
<Modal
title="Create Task"
open={open}
onOk={handleSubmit}
onCancel={onClose}
confirmLoading={isPending}
>
<Form form={form} layout="vertical">
<Form.Item
name="title"
label="Title"
rules={[{ required: true, message: 'Please input task title' }]}
>
<Input placeholder="Task title" />
</Form.Item>
<Form.Item name="description" label="Description">
<Input.TextArea rows={4} />
</Form.Item>
<Form.Item name="priority" label="Priority" initialValue="Medium">
<Select>
<Select.Option value="Low">Low</Select.Option>
<Select.Option value="Medium">Medium</Select.Option>
<Select.Option value="High">High</Select.Option>
<Select.Option value="Critical">Critical</Select.Option>
</Select>
</Form.Item>
</Form>
</Modal>
);
};
```
---
#### 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<Props, State> {
constructor(props: Props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error: Error): State {
return { hasError: true, error };
}
render() {
if (this.state.hasError) {
return (
<Result
status="500"
title="Something went wrong"
subTitle={this.state.error?.message}
extra={<Button onClick={() => window.location.reload()}>Reload</Button>}
/>
);
}
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<HubConnection | null>(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 (
<QueryClientProvider client={queryClient}>
<ErrorBoundary>
<RouterProvider router={router} />
</ErrorBoundary>
</QueryClientProvider>
);
};
```
---
#### 4.3.8 性能优化规范
**1. React.memo 应用**
```typescript
// TaskCard.tsx
export const TaskCard = React.memo<TaskCardProps>(({ 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<Props> = ({ 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 => (
<TaskCard key={task.id} task={task} onClick={handleTaskClick} />
))}
</>
);
};
```
**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: <Suspense fallback={<Spin />}><KanbanPage /></Suspense>
}
```
**4. 虚拟滚动 (可选,长列表优化)**
```typescript
import { FixedSizeList } from 'react-window';
const TaskList: React.FC<Props> = ({ tasks }) => {
return (
<FixedSizeList
height={600}
itemCount={tasks.length}
itemSize={80}
width="100%"
>
{({ index, style }) => (
<div style={style}>
<TaskCard task={tasks[index]} />
</div>
)}
</FixedSizeList>
);
};
```
---
### 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**