diff --git a/apps/web/src/pages/generate/components/Step7ConfirmGenerate.tsx b/apps/web/src/pages/generate/components/Step7ConfirmGenerate.tsx old mode 100644 new mode 100755 index b05985c54..3b5b4a419 --- a/apps/web/src/pages/generate/components/Step7ConfirmGenerate.tsx +++ b/apps/web/src/pages/generate/components/Step7ConfirmGenerate.tsx @@ -2,19 +2,14 @@ * Step 7 确认生成组件 */ import React from "react" -import { - LoadingOutlined, - CheckCircleFilled, - CloseCircleOutlined, - MinusOutlined, - PlusOutlined, -} from "@ant-design/icons" import type { EditingTemplate } from "@/api/editing-planner" import type { GeneratedVideo } from "@/api/template-editor" import type { CoverConfig } from "../../editing-planner/types" import type { VoiceClone } from "@/api/voice-clone" import type { PresetVoiceItem } from "@/api/voices" import { useStep7Generate } from "../hooks/useStep7Generate" +import SummaryCard from "./step7-confirm/SummaryCard" +import GenerationStatus from "./step7-confirm/GenerationStatus" interface Step7ConfirmGenerateProps { templates: EditingTemplate[] @@ -64,129 +59,28 @@ const Step7ConfirmGenerate: React.FC = (props) => { return (

✨ 确认生成

-
-
- 模板 - {templateName} -
-
- 素材 - {materialSummary} -
-
- 标题 - {title || "未选择"} -
-
- 配音 - {voiceName} -
-
- 封面 - {coverSummary} -
-
- 生成数量 - -
- - {generateCount} - - 条视频 -
-
-
-
- - {/* 生成进度 / 结果反馈 */} - {(generating || generated || generateError) && ( -
- {generating && ( -
-
-
- -
-
-
- {getGenerationPhase(progress).icon} {getGenerationPhase(progress).label} -
-
预计还需 1-2 分钟,请稍候…
-
-
{Math.round(progress)}%
-
-
-
-
-
- 💡 生成过程中可以切换到其他页面操作,完成后会自动通知 -
-
- )} - {generated && !generating && ( -
-
- -
-
-
视频生成完成!
-
- 共生成 {generatedVideos.length} 条视频,可在右侧预览或前往成片库查看 -
-
- -
- )} - {generateError && !generating && ( -
-
- -
-
-
生成失败
-
- {typeof generateError === "string" - ? generateError - : JSON.stringify(generateError)} -
-
-
- - -
-
- )} -
- )} + +
) } diff --git a/apps/web/src/pages/generate/components/step7-confirm/GenerationStatus.tsx b/apps/web/src/pages/generate/components/step7-confirm/GenerationStatus.tsx new file mode 100755 index 000000000..901e2c3d7 --- /dev/null +++ b/apps/web/src/pages/generate/components/step7-confirm/GenerationStatus.tsx @@ -0,0 +1,106 @@ +import React from "react" +import { LoadingOutlined, CheckCircleFilled, CloseCircleOutlined } from "@ant-design/icons" +import type { GeneratedVideo } from "@/api/template-editor" + +interface GenerationStatusProps { + generating: boolean + generated: boolean + generateError: string | null + progress: number + generatedVideos: GeneratedVideo[] + getGenerationPhase: (progress: number) => { icon: string; label: string } + onScrollToPreview: () => void + onRetry: () => void + onDismissError: () => void +} + +const GenerationStatus: React.FC = ({ + generating, + generated, + generateError, + progress, + generatedVideos, + getGenerationPhase, + onScrollToPreview, + onRetry, + onDismissError, +}) => { + if (!generating && !generated && !generateError) return null + + return ( +
+ {generating && ( +
+
+
+ +
+
+
+ {getGenerationPhase(progress).icon} {getGenerationPhase(progress).label} +
+
预计还需 1-2 分钟,请稍候…
+
+
{Math.round(progress)}%
+
+
+
+
+
+ 💡 生成过程中可以切换到其他页面操作,完成后会自动通知 +
+
+ )} + {generated && !generating && ( +
+
+ +
+
+
视频生成完成!
+
+ 共生成 {generatedVideos.length} 条视频,可在右侧预览或前往成片库查看 +
+
+ +
+ )} + {generateError && !generating && ( +
+
+ +
+
+
生成失败
+
+ {typeof generateError === "string" ? generateError : JSON.stringify(generateError)} +
+
+
+ + +
+
+ )} +
+ ) +} + +export default GenerationStatus diff --git a/apps/web/src/pages/generate/components/step7-confirm/SummaryCard.tsx b/apps/web/src/pages/generate/components/step7-confirm/SummaryCard.tsx new file mode 100755 index 000000000..2d26b5469 --- /dev/null +++ b/apps/web/src/pages/generate/components/step7-confirm/SummaryCard.tsx @@ -0,0 +1,76 @@ +import React from "react" +import { MinusOutlined, PlusOutlined } from "@ant-design/icons" + +interface SummaryCardProps { + templateName: string + materialSummary: string + title: string + voiceName: string + coverSummary: string + generateCount: number + generating: boolean + onDecrement: () => void + onIncrement: () => void +} + +const SummaryCard: React.FC = ({ + templateName, + materialSummary, + title, + voiceName, + coverSummary, + generateCount, + generating, + onDecrement, + onIncrement, +}) => { + return ( +
+
+ 模板 + {templateName} +
+
+ 素材 + {materialSummary} +
+
+ 标题 + {title || "未选择"} +
+
+ 配音 + {voiceName} +
+
+ 封面 + {coverSummary} +
+
+ 生成数量 + +
+ + {generateCount} + + 条视频 +
+
+
+
+ ) +} + +export default SummaryCard