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

64 KiB

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

// ✅ Good
const TaskCard: React.FC<TaskCardProps> = ({ task }) => {
  const { mutate } = useUpdateTask();
  // ...
};

// ❌ Bad
class TaskCard extends React.Component { }

2. Props 类型定义

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, 当前用户等)

// 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)

用途: 服务端数据获取、缓存、同步

// 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 实例配置

// 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 模块化

// 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 类型定义

// 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)

// 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. 受保护路由

// 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 示例

// 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 错误处理

// 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 组件

// 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 管理

// 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

// 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 应用

// 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

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)

// 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. 虚拟滚动 (可选,长列表优化)

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