feat(editing-planner): 生成进度展示 — 任务 2.17 #158
Reference in New Issue
Block a user
Delete Branch "feature/task-2.17-generation-progress"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
任务 2.17:生成进度展示
实现内容
技术实现
refetchInterval实现任务状态轮询ep-gen-涉及文件
apps/web/src/api/tasks.ts— 新增 getTask/retryTask APIapps/web/src/pages/editing-planner/components/GenerationProgressModal.tsx— 新组件apps/web/src/pages/editing-planner/EditingPlanner.tsx— 集成任务创建和轮询apps/web/src/pages/editing-planner/EditingPlanner.css— 新增样式验证
代码审查报告 — PR #158(任务 2.17 生成进度展示)
审查范围: 4 个文件,+482/-14
api/tasks.ts— 新增getTask轮询接口EditingPlanner.css— 进度弹窗样式(149 行)EditingPlanner.tsx— 集成新弹窗 + React Query 轮询components/GenerationProgressModal.tsx— 新组件(251 行)✅ 审查结论:有条件通过(2 P2 + 3 P3,不阻塞合并)
整体设计合理:三阶段状态机(setup → progress → completed/failed)清晰,React Query 轮询在终态自动停止,SVG 进度环 + 进度条双重视觉反馈体验好。CSS 命名规范,类型安全。以下是建议修复项。
P2 — 建议修复
P2-1:
handleRetry未用返回值更新缓存,可能闪现旧失败状态建议:用
queryClient.setQueryData立即更新缓存,避免闪烁:P2-2:
ep-gen-duration-inputCSS 类缺失setup 阶段的
<input>使用了className="ep-gen-duration-input",但 CSS 文件中没有定义这个类。输入框会回退到浏览器默认样式,与整体设计不一致。建议:在 CSS 中补充样式,或使用项目已有的 input 组件/类名。
P3 — 可选优化
P3-1:
prevOpenref 逻辑是空操作这个 effect 没有任何实际作用(注释也说了 parent handles reset)。建议删除,减少无谓的 re-render。
P3-2:
getStepLabel对 unknown step 的 fallback 可读性一般step.replace(/_/g, " ")输出全小写(如"downloading assets"),建议首字母大写:P3-3:completed 阶段未展示
result_countTaskItem有result_count相关信息(通过CreateGenerationTaskResponse),但 completed 阶段 UI 只展示了userMessage,没有展示生成了多少个视频/素材。可考虑在结果页增加一行"共生成 N 个视频"。👍 亮点
GenPhase类型约束合理refetchInterval函数式用法正确:终态返回false自动停止轮询strokeDashoffset计算正确,颜色跟随步骤状态变化handleCloseProgressModal统一清理genPhase+taskId,避免状态残留--space-md、--text-primary等),响应式一致总结: 功能完整,代码质量良好。2 个 P2 建议修复(���试缓存更新 + 缺失 CSS),不阻塞合并。mergeable=True,可以直接合并。