feat: #1281 支持生成多个预览视频 + 配音前置 #1285

Merged
auto-approve-bot merged 4 commits from feat/1281-multi-preview-with-voice into develop 2026-08-07 23:01:06 +08:00
Owner

改动内容

步骤顺序调整

  • :模板(1)→素材(2)→预览(3)→标题(4)→配音(5)→封面(6)→确认(7)
  • :模板(1)→素材(2)→配音(3)预览(4)→标题(5)→封面(6)→确认(7)

将配音选择移到预览之前,让预览视频可以包含配音音频。

多预览功能

  • 支持选择生成 1/2/3 个预览视频
  • 网格展示所有预览结果,每个可单独播放
  • 点击选择要查看的版本,右侧面板同步显示

配音传入预览

  • 生成预览时传递 voice_ids 参数(后端 API CreatePreviewRequest.voice_ids 已支持)
  • 根据 voiceMode 自动选择 selectedVoice(preset/custom)或 selectedClonedVoice(clone)

文件变更

文件 变更
constants.ts STEPS 顺序调整
useStep4Preview.ts 新 hook,多预览 + voice_ids
Step4GeneratePreview.tsx 新组件,多预览网格 UI
GeneratePage.tsx 步骤阈值调整、voice_ids 传递
GenerateStepContent.tsx case 映射更新
useStepNavigation.ts 校验步骤号更新
PreviewVideoPanel.tsx import 路径更新
旧文件 删除 useStep3Preview.ts / Step3GeneratePreview.tsx
## 改动内容 ### 步骤顺序调整 - **旧**:模板(1)→素材(2)→预览(3)→标题(4)→配音(5)→封面(6)→确认(7) - **新**:模板(1)→素材(2)→**配音(3)**→**预览(4)**→标题(5)→封面(6)→确认(7) 将配音选择移到预览之前,让预览视频可以包含配音音频。 ### 多预览功能 - 支持选择生成 1/2/3 个预览视频 - 网格展示所有预览结果,每个可单独播放 - 点击选择要查看的版本,右侧面板同步显示 ### 配音传入预览 - 生成预览时传递 `voice_ids` 参数(后端 API `CreatePreviewRequest.voice_ids` 已支持) - 根据 `voiceMode` 自动选择 `selectedVoice`(preset/custom)或 `selectedClonedVoice`(clone) ## 文件变更 | 文件 | 变更 | |------|------| | `constants.ts` | STEPS 顺序调整 | | `useStep4Preview.ts` | 新 hook,多预览 + voice_ids | | `Step4GeneratePreview.tsx` | 新组件,多预览网格 UI | | `GeneratePage.tsx` | 步骤阈值调整、voice_ids 传递 | | `GenerateStepContent.tsx` | case 映射更新 | | `useStepNavigation.ts` | 校验步骤号更新 | | `PreviewVideoPanel.tsx` | import 路径更新 | | 旧文件 | 删除 useStep3Preview.ts / Step3GeneratePreview.tsx |
xiaoxia added 1 commit 2026-08-07 21:40:47 +08:00
feat: #1281 支持生成多个预览视频 + 配音前置
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build 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 / Check if frontend-only change (pull_request) Successful in 41s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 47s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 59s
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 56s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m2s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m50s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m50s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m5s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 2m6s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 6m8s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 6s
AI Code Review / AI Code Review (pull_request) Failing after 6m22s
d3b3a0d31e
步骤顺序调整:
- 模板(1)→素材(2)→预览(3)→标题(4)→配音(5)→封面(6)→确认(7)
- 改为:模板(1)→素材(2)→配音(3)→预览(4)→标题(5)→封面(6)→确认(7)

多预览功能:
- 新增 useStep4Preview hook(替代 useStep3Preview),支持 voiceIds + previewCount
- 新增 Step4GeneratePreview 组件,支持预览数量选择(1/2/3个)和网格展示
- 每个预览独立轮询,可选择查看不同版本
- 右侧面板展示当前选中的预览视频

配音传入预览:
- 生成预览时传递 voice_ids 参数(后端 API 已支持)
- 根据 voiceMode 自动选择 selectedVoice 或 selectedClonedVoice

文件变更:
- constants.ts: STEPS 顺序调整
- useStep4Preview.ts: 新 hook,多预览 + voice_ids
- Step4GeneratePreview.tsx: 新组件,多预览网格 UI
- GeneratePage.tsx: 步骤阈值调整(>=4 显示预览,>=5 显示结果)
- GenerateStepContent.tsx: case 映射更新
- useStepNavigation.ts: 校验步骤号更新
- PreviewVideoPanel.tsx: import 路径更新
- 删除旧文件 useStep3Preview.ts / Step3GeneratePreview.tsx
- 测试文件同步更新
xiaoxia added 1 commit 2026-08-07 22:38:27 +08:00
fix: remove unused onVoiceModeChange from GenerateStepContent destructuring
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 30s
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 56s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m13s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 35s
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 Merge on CI Green + Approved (pull_request) Successful in 1m35s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 59s
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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m56s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m35s
AI Code Review / AI Code Review (pull_request) Failing after 4m11s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 6m3s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 8s
1e7232e1f6
Resolves ESLint no-unused-vars and TypeScript TS6133 errors that caused
Frontend Lint, PR Build Web Image, and Deploy Preview to all fail.

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1285 | | 预览链接 | [https://pr-1285.preview.xiaoxiajianji.com](https://pr-1285.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-08-07 22:41:14 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-07 22:41:14 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-07 22:49:23 +08:00
fix: add explicit String() conversion for voice IDs in previewVoiceIds
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 47s
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 35s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 50s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 54s
AI Code Review / AI Code Review (pull_request) Failing after 1m21s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m10s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 44s
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
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m1s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m30s
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 / Validate - Code Quality (pull_request) Successful in 4m37s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 1m46s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
7b1485ce55
Addresses AI Code Review concern about type safety — selectedVoice and
selectedClonedVoice are already strings, but explicit String() makes the
intent clearer and prevents future regressions if types change.
xiaoxia added 1 commit 2026-08-07 22:55:28 +08:00
fix: add explicit string type annotations for previewVoiceIds
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 / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
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 / Validate - Type Check (mypy) (pull_request) Successful in 1m3s
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m20s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 52s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m13s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m44s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m54s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m52s
AI Code Review / AI Code Review (pull_request) Successful in 2m20s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m32s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m55s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 6s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 54s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 26s
0150e6ecf2
AI Code Review incorrectly flagged selectedVoice/selectedClonedVoice as
object types. They are string (voice IDs) per useGenerateFormState types.
Added explicit type annotations and comments to make this unambiguous.
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:2 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [GenerateStepContent.tsx] 组件复用逻辑验证

    • 具体内容:代码中将 Step5VoiceSelect 复用为 Step3VoiceSelect。虽然 props 传递看起来兼容(selectedVoice, onSelectedVoiceChange),但建议确认 Step5VoiceSelect 组件内部是否存在硬编码的步骤编号(如 currentStep === 5)或仅在第 5 步才触发的副作用逻辑,避免因步骤变更导致组件内部逻辑异常。
  2. [GeneratePage.tsx] 空值校验建议

    • 具体内容:previewVoiceIds 的计算逻辑中,若未选择配音会返回空数组 []。建议确认 useStepNavigation 中的 canProceed 逻辑已包含对“是否已选择配音”的校验,防止用户在未选择配音的情况下进入 Step4(预览)导致接口报错或生成失败。

良好实践

  • 步骤重构清晰:Step 3 与 Step 4/5 的组件置换及逻辑调整在可见代码中处理得非常干净,状态管理更新及时。
  • 防御性编程:在 Step4GeneratePreview.tsx 中,渲染 video 和访问 item.result 属性前均做了 item.status === "ready" && item.result 的存在性检查,有效避免了空指针异常。
  • 类型安全:使用了 useMemo 优化计算依赖,且保持了 TypeScript 类型定义的引入和更新。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-07 14:57:49 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[GenerateStepContent.tsx] 组件复用逻辑验证** - 具体内容:代码中将 `Step5VoiceSelect` 复用为 `Step3VoiceSelect`。虽然 props 传递看起来兼容(`selectedVoice`, `onSelectedVoiceChange`),但建议确认 `Step5VoiceSelect` 组件内部是否存在硬编码的步骤编号(如 `currentStep === 5`)或仅在第 5 步才触发的副作用逻辑,避免因步骤变更导致组件内部逻辑异常。 2. **[GeneratePage.tsx] 空值校验建议** - 具体内容:`previewVoiceIds` 的计算逻辑中,若未选择配音会返回空数组 `[]`。建议确认 `useStepNavigation` 中的 `canProceed` 逻辑已包含对“是否已选择配音”的校验,防止用户在未选择配音的情况下进入 Step4(预览)导致接口报错或生成失败。 ### ✅ 良好实践 - **步骤重构清晰**:Step 3 与 Step 4/5 的组件置换及逻辑调整在可见代码中处理得非常干净,状态管理更新及时。 - **防御性编程**:在 `Step4GeneratePreview.tsx` 中,渲染 `video` 和访问 `item.result` 属性前均做了 `item.status === "ready" && item.result` 的存在性检查,有效避免了空指针异常。 - **类型安全**:使用了 `useMemo` 优化计算依赖,且保持了 TypeScript 类型定义的引入和更新。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-07 14:57:49 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit 9414dc1318 into develop 2026-08-07 23:01:06 +08:00
auto-approve-bot deleted branch feat/1281-multi-preview-with-voice 2026-08-07 23:01:06 +08:00

🗑️ 预览环境已清理

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

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

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