refactor: rewrite useStepNavigation for 5-step flow (#1899)
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
/**
|
||||
* GeneratePage 步骤导航(Issue #1677 修正:固定 6 步,单视频与批量一致)
|
||||
* 步骤:模板(1) → 素材(2) → 配音(3) → 标题(4) → 确认生成(5) → 封面(6)
|
||||
* GeneratePage 步骤导航(#1899 简化为 5 步,单视频与批量一致)
|
||||
* 步骤:素材(1) → 配音(2) → 标题(3) → 确认生成(4) → 封面(5)
|
||||
*
|
||||
* - 步骤4底部按钮是「确认生成视频/确认生成 N 个视频」(由 GenerateStepActions 调
|
||||
* onConfirmGenerate),创建成功后跳转步骤5;本 hook 的 goNext 只负责 1→2→3→4
|
||||
* 和 5→6 的「下一步」。
|
||||
* - 步骤5(确认生成进度页):渲染全部完成(generated)后「下一步」解锁进封面。
|
||||
* - 步骤3底部按钮是「确认生成视频」(由 GenerateStepActions 调 onConfirmGenerate),
|
||||
* 创建成功后跳转步骤4;本 hook 的 goNext 只负责 1→2→3 和 4→5 的「下一步」。
|
||||
* - 步骤4(确认生成进度页):渲染全部完成(generated)后「下一步」解锁进封面。
|
||||
*/
|
||||
import { message } from "antd"
|
||||
import type { TitleSettings } from "../types"
|
||||
@@ -13,14 +12,13 @@ import type { TitleSettings } from "../types"
|
||||
export interface UseStepNavigationOptions {
|
||||
currentStep: number
|
||||
setCurrentStep: (step: number | ((prev: number) => number)) => void
|
||||
selectedTemplate: string
|
||||
materialMode: "manual" | "auto"
|
||||
selectedMaterials: string[]
|
||||
smartSelectedIds: string[]
|
||||
titleSettings: TitleSettings
|
||||
/** 是否已完成视频生成(步骤5全部渲染完成后才能进入封面) */
|
||||
/** 是否已完成视频生成(步骤4全部渲染完成后才能进入封面) */
|
||||
generated: boolean
|
||||
/** Step1 点下一步时弹出数量选择弹窗 */
|
||||
/** 点素材下一步时弹出数量选择弹窗 */
|
||||
onOpenCountModal: () => void
|
||||
}
|
||||
|
||||
@@ -33,7 +31,6 @@ export const useStepNavigation = (options: UseStepNavigationOptions): UseStepNav
|
||||
const {
|
||||
currentStep,
|
||||
setCurrentStep,
|
||||
selectedTemplate,
|
||||
materialMode,
|
||||
selectedMaterials,
|
||||
smartSelectedIds,
|
||||
@@ -43,30 +40,26 @@ export const useStepNavigation = (options: UseStepNavigationOptions): UseStepNav
|
||||
|
||||
const goNext = () => {
|
||||
if (currentStep === 1) {
|
||||
if (!selectedTemplate) {
|
||||
message.warning("请先选择一个模板")
|
||||
return
|
||||
}
|
||||
// 选完模板弹数量选择弹窗(每次都弹,不记忆)
|
||||
// 选完素材弹数量选择弹窗
|
||||
onOpenCountModal()
|
||||
return
|
||||
}
|
||||
if (currentStep === 2 && materialMode === "manual" && selectedMaterials.length === 0) {
|
||||
if (currentStep === 1 && materialMode === "manual" && selectedMaterials.length === 0) {
|
||||
message.warning("请至少选择一个素材")
|
||||
return
|
||||
}
|
||||
if (currentStep === 2 && materialMode === "auto" && smartSelectedIds.length === 0) {
|
||||
if (currentStep === 1 && materialMode === "auto" && smartSelectedIds.length === 0) {
|
||||
message.warning("请先进行智能匹配并选择素材")
|
||||
return
|
||||
}
|
||||
// 步骤5(确认生成):全部渲染完成后才能下一步进封面
|
||||
if (currentStep === 5) {
|
||||
// 步骤4(确认生成):全部渲染完成后才能下一步进封面
|
||||
if (currentStep === 4) {
|
||||
if (!generated) {
|
||||
message.warning("视频还在渲染中,请等待生成完成")
|
||||
return
|
||||
}
|
||||
}
|
||||
if (currentStep < 6) {
|
||||
if (currentStep < 5) {
|
||||
setCurrentStep((s) => s + 1)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user