diff --git a/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts b/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts index e251cc25f..d1cffd1ff 100755 --- a/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts +++ b/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts @@ -84,8 +84,9 @@ export interface GenerateFormState { /** * 传给 Worker 的 source_edit_plan_id。 - * 优先使用 URL 中的 edit_plan_id;URL 没有时回退为 selectedTemplate(模板 ID), - * 因为 Step2 的 clips 就是用 selectedTemplate 作为 plan_id 写入的。 + * 仅使用 URL 中的 edit_plan_id(从剪辑模板编辑器跳转时携带)。 + * URL 没有时传 null,后端正式生成 API 会通过 template_id+user_id 兜底查找正确的 plan。 + * 注意:selectedTemplate 是模板 ID,不是 edit_plan_id,不能作为此值传递。 */ sourceEditPlanId: string | null @@ -107,10 +108,10 @@ export const useGenerateFormState = (): GenerateFormState => { /* ── 模板选择 ── */ const { selectedTemplate, setSelectedTemplate, userTemplates } = useTemplateSelection() - /* ── source_edit_plan_id:URL 优先,否则回退到 selectedTemplate ── */ - // selectedTemplate 是异步加载的(react-query),组件重新渲染时此值会自动更新, - // 因此最终传给 useGenerateVideo 的 sourceEditPlanId 能在模板就绪后拿到正确值。 - const sourceEditPlanId = editPlanId || selectedTemplate || null + /* ── source_edit_plan_id:仅取 URL 参数,无则 null 让后端兜底 ── */ + // selectedTemplate 是模板 ID 而非 edit_plan_id,不能混淆; + // 后端正式生成 API 会在 source_edit_plan_id 为空时通过 template_id+user_id 自动关联。 + const sourceEditPlanId = editPlanId || null /* ── 素材 ── */ const [selectedMaterials, setSelectedMaterials] = useState([]) diff --git a/apps/web/src/pages/generate/hooks/useStep6Cover.ts b/apps/web/src/pages/generate/hooks/useStep6Cover.ts index 3786e499c..f86141680 100644 --- a/apps/web/src/pages/generate/hooks/useStep6Cover.ts +++ b/apps/web/src/pages/generate/hooks/useStep6Cover.ts @@ -154,7 +154,6 @@ export function useStep6Cover({ const previewResp = await createPreview({ template_id: selectedTemplate, asset_ids: assetIds, - source_edit_plan_id: selectedTemplate, duration: duration || 30, ...(titleSettings?.title ? {