fix(frontend): 轮询识别awaiting_cover状态,visibilitychange恢复轮询,自动跳封面页 #2088

Merged
auto-approve-bot merged 3 commits from fix/frontend-polling-awaiting-cover into develop 2026-09-28 19:39:19 +08:00
Owner

问题

智能剪辑进度条卡 56%/99%、不自动跳转封面页。根因:

  1. 单任务路径 startPolling 的 Promise.then 硬编码弹「视频生成完成」toast 并调 onComplete(videos),没有透传后端 awaiting_cover 状态;外层无法区分「渲染完成等封面」vs「已完成」。
  2. 浏览器后台标签页把 setTimeout 降到 1Hz/冻结,切回来后轮询没被「唤醒」,导致进度卡在中间值。
  3. 页面无 visibilitychange 监听。

顺带:TaskStatus 类型和任务列表页 STATUS_CONFIG 缺失 awaiting_cover,TS 编译报错。

修改

useGenerationPolling v5

  • 单任务路径改用 callbacks 模式调 onTaskCompleted(videos, taskStatus),把 completed/awaiting_cover 透传到外层;awaiting_cover 不弹完成 toast。
  • 新增 immediateTickRef:每次 poll() 入口注册一个「立刻补拉」函数,done=true 后清理。
  • useEffect 监听 visibilitychange + window.focus,页面回到可见时调用 immediateTickRef.current() 清空未触发的 setTimeout 立即拉一次。
  • 非 4xx/5xx 错误(网络/5xx)3s 退避重试,最多 10 次(已有逻辑保留)。
  • 批量路径聚合 statusMap,任一任务 awaiting_cover 则整体透传 awaiting_cover。

状态透传

  • onGenerationSuccess(status?) 回调新增可选 status 参数,useGenerateVideo.handleComplete 透传。
  • GeneratePage.onGenerationSuccess 在 awaiting_cover/completed 时自动 setCurrentStep(5) 跳封面页,不再等用户手动点「下一步」。

类型/UI 补齐

  • TaskStatus 类型加入 "awaiting_cover"。
  • 任务列表页 STATUS_CONFIG 加 awaiting_cover(标签「待选封面」,warning 色)。

验证

  • tsc --noEmit 通过(0 error)。
  • eslint 6 个修改文件通过(0 error 0 warn)。
  • vitest:GeneratePage + useGenerateVideo 共 3 个用例全部通过。

影响

  • 进度条在渲染完成后立刻到 100% 并自动跳封面选择页(step 5),不再卡中间值。
  • 切后台再回来进度立刻恢复更新。
  • 网络波动自动重试,不再静默停止轮询。
## 问题 智能剪辑进度条卡 56%/99%、不自动跳转封面页。根因: 1. 单任务路径 `startPolling` 的 Promise.then 硬编码弹「视频生成完成」toast 并调 `onComplete(videos)`,没有透传后端 `awaiting_cover` 状态;外层无法区分「渲染完成等封面」vs「已完成」。 2. 浏览器后台标签页把 setTimeout 降到 1Hz/冻结,切回来后轮询没被「唤醒」,导致进度卡在中间值。 3. 页面无 visibilitychange 监听。 顺带:TaskStatus 类型和任务列表页 STATUS_CONFIG 缺失 `awaiting_cover`,TS 编译报错。 ## 修改 ### useGenerationPolling v5 - 单任务路径改用 `callbacks` 模式调 `onTaskCompleted(videos, taskStatus)`,把 `completed/awaiting_cover` 透传到外层;`awaiting_cover` 不弹完成 toast。 - 新增 `immediateTickRef`:每次 `poll()` 入口注册一个「立刻补拉」函数,`done=true` 后清理。 - `useEffect` 监听 `visibilitychange` + `window.focus`,页面回到可见时调用 `immediateTickRef.current()` 清空未触发的 setTimeout 立即拉一次。 - 非 4xx/5xx 错误(网络/5xx)3s 退避重试,最多 10 次(已有逻辑保留)。 - 批量路径聚合 `statusMap`,任一任务 `awaiting_cover` 则整体透传 `awaiting_cover`。 ### 状态透传 - `onGenerationSuccess(status?)` 回调新增可选 status 参数,`useGenerateVideo.handleComplete` 透传。 - `GeneratePage.onGenerationSuccess` 在 `awaiting_cover/completed` 时自动 `setCurrentStep(5)` 跳封面页,不再等用户手动点「下一步」。 ### 类型/UI 补齐 - `TaskStatus` 类型加入 `"awaiting_cover"`。 - 任务列表页 `STATUS_CONFIG` 加 `awaiting_cover`(标签「待选封面」,warning 色)。 ## 验证 - `tsc --noEmit` 通过(0 error)。 - `eslint` 6 个修改文件通过(0 error 0 warn)。 - vitest:GeneratePage + useGenerateVideo 共 3 个用例全部通过。 ## 影响 - 进度条在渲染完成后立刻到 100% 并自动跳封面选择页(step 5),不再卡中间值。 - 切后台再回来进度立刻恢复更新。 - 网络波动自动重试,不再静默停止轮询。
xiaoxia added 1 commit 2026-09-28 19:13:46 +08:00
fix(frontend): #2088 轮询识别awaiting_cover+visibilitychange恢复+状态透传自动跳封面
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped 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 / PR Build Web Image (pull_request) Successful in 1m50s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m57s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m58s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m9s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m13s
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
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
428ba22473
- useGenerationPolling v5:
  1. 单任务路径透传 taskStatus(completed/awaiting_cover)到 onComplete,
     外层据此区分:awaiting_cover→封面选择页,completed→结果/历史页;
     awaiting_cover 不再弹'视频生成完成'toast(只在 completed 弹)
  2. visibilitychange + focus 监听:页面切后台被浏览器降频/冻结 setTimeout 后,
     切回前台立即补拉一次任务状态,解决'进度卡56%'的真因
  3. 非4xx错误(网络/5xx)3s退避重试,MAX_RETRYABLE_ERRORS=10 兜底
- TaskStatus 类型补 awaiting_cover,STATUS_CONFIG 加'待选封面'标签
- onGenerationSuccess 回调接受 status 参数,渲染完成自动 setCurrentStep(5) 跳封面页
- 批量路径聚合 statusMap,任一任务 awaiting_cover 则整体透传 awaiting_cover

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #2088 | | 预览链接 | [https://pr-2088.preview.xiaoxiajianji.com](https://pr-2088.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia referenced this issue from a commit 2026-09-28 19:16:27 +08:00
xiaoxia added 1 commit 2026-09-28 19:16:27 +08:00
chore: trigger CI for #2088
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
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 / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration 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 / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped 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 / PR Build Web Image (pull_request) Successful in 53s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m34s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m29s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m40s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m40s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m52s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 3m4s
AI Code Review / AI Code Review (pull_request) Successful in 6m34s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 7m30s
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 / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 1s
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m58s
1eec304a68
xiaoxia added 1 commit 2026-09-28 19:29:00 +08:00
style: prettier format types.ts
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
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 / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration 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 / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web 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 / Frontend Lint (pull_request) Successful in 1m35s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m49s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m51s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 3m30s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 3m54s
AI Code Review / AI Code Review (pull_request) Successful in 6m39s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 9m35s
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 / CI Gate (pull_request) Successful in 0s
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 8m30s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m12s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m10s
6bf74fd066
auto-approve-bot approved these changes 2026-09-28 19:30:50 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-09-28 19:30:50 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit f79f75b863 into develop 2026-09-28 19:39:19 +08:00
auto-approve-bot deleted branch fix/frontend-polling-awaiting-cover 2026-09-28 19:39:21 +08:00

🗑️ 预览环境已清理

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

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

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