feat(#1197): Phase1 预览生成前端改造 #1206

Merged
auto-approve-bot merged 7 commits from fix/preview-generation-phase1-1197 into develop 2026-08-01 14:26:00 +08:00
Owner

变更内容

1. API 层新增 generation 模块

  • 新建 src/api/generation/ 目录(index.ts / preview.ts / types.ts)
  • 类型:PreviewStatus / CreatePreviewRequest / CreatePreviewResponse / PreviewTaskResponse
  • 接口:
    • createPreview — POST /generation/preview 创建预览任务
    • getPreviewStatus — GET /generation/preview/{task_id} 查询状态

2. useStep3Preview Hook 重写

  • 移除 mock 逻辑,替换为真实后端接口调用
  • 状态机:idle → pending(排队中)→ generating(生成中)→ ready / error
  • 轮询策略:pending 5s、generating 2s,10 分钟超时
  • 参数变化自动作废当前任务(竞态保护)
  • 组件卸载自动清理定时器

3. Step3GeneratePreview 组件升级

  • 新增视频播放器(completed 状态播放 video_url)
  • 新增 pending 排队状态 UI
  • generating 状态加进度条
  • 失败状态保留重试按钮
  • 成功态保留剪辑方案信息卡片

4. 右侧预览常驻

  • 新增 PreviewVideoPanel 组件
  • Step3 及之后步骤,右侧常驻显示预览视频
  • 支持空状态 / 加载中 / 失败 / 成功 四种 UI
  • 与正式生成结果面板上下排列

5. 竖屏比例默认值调整

  • videoRatio 默认值从 16:9 改为 9:16

6. 测试

  • 更新 smoke test,覆盖新增 generation API 和组件

关联 Issue

#1197

依赖

  • 后端 /generation/preview 接口(#1197 后端 PR)
## 变更内容 ### 1. API 层新增 generation 模块 - 新建 `src/api/generation/` 目录(index.ts / preview.ts / types.ts) - 类型:`PreviewStatus` / `CreatePreviewRequest` / `CreatePreviewResponse` / `PreviewTaskResponse` - 接口: - `createPreview` — POST `/generation/preview` 创建预览任务 - `getPreviewStatus` — GET `/generation/preview/{task_id}` 查询状态 ### 2. useStep3Preview Hook 重写 - 移除 mock 逻辑,替换为真实后端接口调用 - 状态机:idle → pending(排队中)→ generating(生成中)→ ready / error - 轮询策略:pending 5s、generating 2s,10 分钟超时 - 参数变化自动作废当前任务(竞态保护) - 组件卸载自动清理定时器 ### 3. Step3GeneratePreview 组件升级 - 新增视频播放器(completed 状态播放 video_url) - 新增 pending 排队状态 UI - generating 状态加进度条 - 失败状态保留重试按钮 - 成功态保留剪辑方案信息卡片 ### 4. 右侧预览常驻 - 新增 `PreviewVideoPanel` 组件 - Step3 及之后步骤,右侧常驻显示预览视频 - 支持空状态 / 加载中 / 失败 / 成功 四种 UI - 与正式生成结果面板上下排列 ### 5. 竖屏比例默认值调整 - `videoRatio` 默认值从 `16:9` 改为 `9:16` ### 6. 测试 - 更新 smoke test,覆盖新增 generation API 和组件 ## 关联 Issue #1197 ## 依赖 - 后端 `/generation/preview` 接口(#1197 后端 PR)

🚀 预览环境已部署

项目 详情
PR号 #1206
预览链接 https://pr-1206.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1206 | | 预览链接 | [https://pr-1206.preview.xiaoxiajianji.com](https://pr-1206.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 5 commits 2026-08-01 01:56:21 +08:00
- 新增 /api/generation 层:preview 创建/查询接口 + 类型定义
- useStep3Preview 重写:mock 替换为真实 /generation/preview 接口 + 轮询状态机(pending/generating/completed/failed/cancelled)
- Step3GeneratePreview 组件:加视频播放器 + 进度条 + 排队中/生成中/失败/成功 四态
- 新增 PreviewVideoPanel:右侧预览视频常驻面板(Step3+ 显示)
- videoRatio 默认值从 16:9 改为 9:16(竖屏)
- 生成页右侧布局:预览面板 + 正式结果面板上下排列
- 补 smoke test 覆盖新增模块
fix(ci): vitest related命令语法修复
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 13s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 31s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 44s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 57s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m22s
AI Code Review / AI Code Review (pull_request) Failing after 2m24s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m8s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m51s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 2m46s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 58s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m10s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m11s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m49s
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
a1505a9f61
xiaoxia force-pushed fix/preview-generation-phase1-1197 from fc917ab58c to a1505a9f61 2026-08-01 01:56:21 +08:00 Compare
xiaoxia added 1 commit 2026-08-01 02:10:32 +08:00
fix: 将POLL_TIMEOUT_MS移到模块级别,修复exhaustive-deps警告
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 50s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m0s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m5s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m37s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m37s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 57s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m8s
AI Code Review / AI Code Review (pull_request) Failing after 2m32s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m5s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m1s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m54s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m55s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m34s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m59s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 7m35s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 18s
72daddab1d
auto-approve-bot approved these changes 2026-08-01 02:15:32 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-01 02:15:32 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-01 14:13:52 +08:00
revert(ci): 恢复vitest_incremental.sh,避免触发后端CI检查
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 10s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 24s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 16s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m15s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m52s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m27s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m36s
AI Code Review / AI Code Review (pull_request) Successful in 3m45s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 2m9s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m1s
CI/CD Pipeline / CI Gate (pull_request) Successful in 45s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 41s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m6s
c671d50626
CI脚本修复将单独提PR处理,本PR仅包含前端代码改动
Collaborator

代码审查结果 - PR #1206

⚠️ 问题(2个需要修改)

  1. apps/web/src/pages/generate/hooks/useStep3Preview.ts 第107-120行:竞态条件处理不完整,导致参数变更后旧任务仍能更新状态。

    • 原因:在依赖项变化重置状态的 useEffect 中,仅重置了 currentTaskIdRef 和定时器,但未重置 startTimeRef
    • 后果:当用户在 createPreview 请求期间修改了参数,useEffect 会触发重置,但由于 startTimeRef 仍保留旧值,generatePreview 函数中的竞态检查 if (startTimeRef.current === 0) 会失效。导致已废弃的旧任务请求返回后,依然会覆盖当前状态并启动轮询,造成 UI 显示与用户当前选择不一致的数据。
    • 修改建议:在重置逻辑中添加 startTimeRef.current = 0;
  2. apps/web/pnpm-workspace.yaml 第2行:配置文件语法/值错误。

    • 原因esbuild 字段的值为字符串 "set this to true or false",这通常是占位符注释,而非有效的布尔值或配置对象。
    • 后果:如果构建工具或 pnpm 插件读取此配置并期望布尔值,会导致构建报错或配置解析失败。
    • 修改建议:根据实际需求将其设置为 truefalse,如果暂不确定,应正确注释掉或设置为默认值。

💡 建议(1个可选)

  1. apps/web/src/pages/generate/components/PreviewVideoPanel.tsx 第95行:视频源为空字符串时的防御性渲染。
    • 具体内容:代码中 videoUrl 可能为空字符串(来自 data.video_url ?? ""),直接赋值给 <video src=""> 可能导致浏览器尝试加载当前页面或产生无效请求。建议在渲染 <video> 前判断 previewResult.videoUrl 是否有值。

格式检查通过 | 逻辑审查需修改 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-08-01 06:19:27 | 模型:

## 代码审查结果 - PR #1206 ### ⚠️ 问题(2个需要修改) 1. **apps/web/src/pages/generate/hooks/useStep3Preview.ts 第107-120行**:竞态条件处理不完整,导致参数变更后旧任务仍能更新状态。 - **原因**:在依赖项变化重置状态的 `useEffect` 中,仅重置了 `currentTaskIdRef` 和定时器,但未重置 `startTimeRef`。 - **后果**:当用户在 `createPreview` 请求期间修改了参数,`useEffect` 会触发重置,但由于 `startTimeRef` 仍保留旧值,`generatePreview` 函数中的竞态检查 `if (startTimeRef.current === 0)` 会失效。导致已废弃的旧任务请求返回后,依然会覆盖当前状态并启动轮询,造成 UI 显示与用户当前选择不一致的数据。 - **修改建议**:在重置逻辑中添加 `startTimeRef.current = 0;`。 2. **apps/web/pnpm-workspace.yaml 第2行**:配置文件语法/值错误。 - **原因**:`esbuild` 字段的值为字符串 `"set this to true or false"`,这通常是占位符注释,而非有效的布尔值或配置对象。 - **后果**:如果构建工具或 pnpm 插件读取此配置并期望布尔值,会导致构建报错或配置解析失败。 - **修改建议**:根据实际需求将其设置为 `true` 或 `false`,如果暂不确定,应正确注释掉或设置为默认值。 ### 💡 建议(1个可选) 1. **apps/web/src/pages/generate/components/PreviewVideoPanel.tsx 第95行**:视频源为空字符串时的防御性渲染。 - **具体内容**:代码中 `videoUrl` 可能为空字符串(来自 `data.video_url ?? ""`),直接赋值给 `<video src="">` 可能导致浏览器尝试加载当前页面或产生无效请求。建议在渲染 `<video>` 前判断 `previewResult.videoUrl` 是否有值。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-01 06:19:27 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit ba1120dec5 into develop 2026-08-01 14:26:00 +08:00
auto-approve-bot deleted branch fix/preview-generation-phase1-1197 2026-08-01 14:26:00 +08:00

🗑️ 预览环境已清理

PR #1206 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1206 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.