From 89cd853bbe660dc20b46f64affb64480bee53510 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 27 Aug 2026 16:50:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(generate):=20=E7=A1=AE=E8=AE=A4=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=97=B6=E6=98=BE=E5=BC=8F=E8=B0=83=E7=94=A8=20from-a?= =?UTF-8?q?ssets=20=E5=88=9B=E5=BB=BA=E7=89=87=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 handleGenerate 调用 createGenerationTask 之前,先显式调用 createClipsFromAssets 确保片段已创建,不再依赖 useStep2Materials 中 useEffect 的异步触发时机,避免用户快速点击生成时片段尚未 就绪导致后端报错「没有可渲染的就绪片段」。 --- apps/web/src/pages/generate/hooks/useGenerateVideo.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/web/src/pages/generate/hooks/useGenerateVideo.ts b/apps/web/src/pages/generate/hooks/useGenerateVideo.ts index 1b002a421..a94873fdb 100755 --- a/apps/web/src/pages/generate/hooks/useGenerateVideo.ts +++ b/apps/web/src/pages/generate/hooks/useGenerateVideo.ts @@ -4,7 +4,7 @@ */ import { useState, useCallback } from "react" import { message } from "antd" -import type { GeneratedVideo } from "@/api/template-editor" +import { type GeneratedVideo, createClipsFromAssets } from "@/api/template-editor" import { createGenerationTask } from "@/api/tasks/tasks" import type { UseGenerateVideoProps } from "./generate-video/types" import { getGenerationPhase } from "./generate-video/phase" @@ -78,6 +78,15 @@ export function useGenerateVideo(props: UseGenerateVideoProps) { ? props.selectedClonedVoice || props.selectedVoice || "" : props.selectedVoice || "" + // 确保片段已创建(显式调用 from-assets,不依赖 useEffect 时机) + if (props.sourceEditPlanId && assetIds.length > 0) { + try { + await createClipsFromAssets(props.sourceEditPlanId, assetIds, "main", assetIds.length) + } catch (clipErr) { + console.warn("[handleGenerate] from-assets 调用失败,继续尝试生成:", clipErr) + } + } + // 创建生成任务(服务器渲染) const taskResp = await createGenerationTask({ template_id: selectedTemplate,