feat(generate): 批量生成>3视频排队提交 + 两列标题 + 独立配音 #2096

Open
xiaoxia wants to merge 1 commits from fix/batch-generation-issues-20260929 into develop
Owner

改动摘要

P0:>3 视频无法提交(最多3个任务)

  • 批量提交由原来的一次性 POST count=N 改为串行 count=1 逐任务提交
  • 遇到后端 429 USER_QUEUE_FULL / 503 SYSTEM_QUEUE_FULL 自动读取 estimated_wait_seconds 等待后重试,不再弹错阻止提交
  • 单任务提交非限流类失败只标记该卡片 failed,不阻断其他任务
  • BatchTaskState.status 新增 queued 枚举;BatchGenerationGrid 新增时钟图标+「排队等待中」文案
  • 新增 cancelledRef/queueTimersRef 在 unmount / 重新生成时清理排队定时器
  • generating 状态改为全部任务到达终态(completed/awaiting_cover/failed)且无 queued/running 时才关闭

P1:批量标题两列布局

  • Step4TitleSettings 批量标题容器改为 display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:16px
  • 单字段 maxWidth 由 640px 改为 100%,列内自适应

P1:每个视频独立配音

  • GenerateStepContent case 3 在 Step4TitleSettings 下渲染已有的 Step3VoiceWithMode 组件(之前 props 已透传但 JSX 未引用)
  • 批量模式下顶部开关:所有视频共用配音 / 每个视频独立配音
  • 独立模式下每个视频显示 compact 配音卡片,默认继承全局配音,可单独覆盖

验证

  • tsc --noEmit ✅
  • eslint ✅
  • prettier --write ✅
  • vite build ✅(GeneratePage chunk 104KB,正常)

不改动

  • 后端限流策略未改(仍为 USER_PENDING_LIMIT=3),前端通过串行+排队重试适配任意数量
  • PR #2071(进度条修复)是独立分支,本 PR 不包含其改动

Closes #2096

## 改动摘要 ### P0:>3 视频无法提交(最多3个任务) - 批量提交由原来的一次性 `POST count=N` 改为串行 `count=1` 逐任务提交 - 遇到后端 429 `USER_QUEUE_FULL` / 503 `SYSTEM_QUEUE_FULL` 自动读取 `estimated_wait_seconds` 等待后重试,不再弹错阻止提交 - 单任务提交非限流类失败只标记该卡片 failed,不阻断其他任务 - `BatchTaskState.status` 新增 `queued` 枚举;`BatchGenerationGrid` 新增时钟图标+「排队等待中」文案 - 新增 `cancelledRef/queueTimersRef` 在 unmount / 重新生成时清理排队定时器 - `generating` 状态改为全部任务到达终态(completed/awaiting_cover/failed)且无 queued/running 时才关闭 ### P1:批量标题两列布局 - `Step4TitleSettings` 批量标题容器改为 `display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:16px` - 单字段 `maxWidth` 由 640px 改为 `100%`,列内自适应 ### P1:每个视频独立配音 - `GenerateStepContent` case 3 在 `Step4TitleSettings` 下渲染已有的 `Step3VoiceWithMode` 组件(之前 props 已透传但 JSX 未引用) - 批量模式下顶部开关:所有视频共用配音 / 每个视频独立配音 - 独立模式下每个视频显示 compact 配音卡片,默认继承全局配音,可单独覆盖 ## 验证 - tsc --noEmit ✅ - eslint ✅ - prettier --write ✅ - vite build ✅(GeneratePage chunk 104KB,正常) ## 不改动 - 后端限流策略未改(仍为 USER_PENDING_LIMIT=3),前端通过串行+排队重试适配任意数量 - PR #2071(进度条修复)是独立分支,本 PR 不包含其改动 Closes #2096
auto-approve-bot approved these changes 2026-09-29 18:03:51 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-09-29 18:03:51 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #2096 | | 预览链接 | [https://pr-2096.preview.xiaoxiajianji.com](https://pr-2096.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-09-29 18:05:30 +08:00
feat(generate): 批量生成支持>3视频排队提交 + 两列标题 + 独立配音 (#2096)
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 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 / 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 / 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 / Frontend Unit Tests (pull_request) Successful in 1m59s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m4s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m5s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m16s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m57s
AI Code Review / AI Code Review (pull_request) Successful in 7m7s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 9m28s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 11m39s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m52s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 28m31s
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) Successful in 2s
0a004db1bd
- P0: 批量生成由一次性提交count=N改为串行count=1逐任务提交;
  遇到 429 USER_QUEUE_FULL / 503 SYSTEM_QUEUE_FULL 自动读取 estimated_wait_seconds
  后重试,不再弹错误阻止提交;
  新增 useGenerationPolling.pollBatchTaskQueued 支持增量排队轮询(不触发整体 onComplete);
  卡片新增 queued 状态(时钟图标+排队文案);
  单个任务提交失败不阻断其余任务,失败卡片独立展示错误+重试按钮;
  generating 状态改为所有任务到达终态(completed/awaiting_cover/failed)且无queued/running才关闭。
- P1: Step4 批量标题改为 CSS Grid 两列布局(gridTemplateColumns: repeat(2,minmax(0,1fr))),
  单字段 maxWidth 由 640 改为 100%,纵向空间节省约一半。
- P1: Step3(标题页)集成 Step3VoiceWithMode,批量模式下支持共用/独立配音切换;
  独立配音时每个视频可单独选择音色,默认继承全局配音;
  GenerateStepContent props 已从 GeneratePage 透传,之前组件只定义未渲染,本次补齐 JSX 引用。
- BatchTaskState.status 新增 queued 枚举;
- useGenerateVideo 重构 generate 函数,拆分 buildBasePayload/submitOne 逻辑,
  新增 cancelledRef/queueTimersRef 做 unmount 清理。
xiaoxia force-pushed fix/batch-generation-issues-20260929 from 84ae2f222c to 0a004db1bd 2026-09-29 18:05:30 +08:00 Compare
Some checks are pending
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 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 / 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 / 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 / Frontend Unit Tests (pull_request) Successful in 1m59s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m4s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m5s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m16s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m57s
AI Code Review / AI Code Review (pull_request) Successful in 7m7s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 9m28s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 11m39s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m52s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 28m31s
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) Successful in 2s
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/batch-generation-issues-20260929:fix/batch-generation-issues-20260929
git checkout fix/batch-generation-issues-20260929
Sign in to join this conversation.