Compare commits

...

1 Commits

Author SHA1 Message Date
xiaoxia ee69a51406 fix: 正式生成任务传 source_edit_plan_id,仅取URL参数不回退模板ID
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 / Check if frontend-only change (pull_request) Successful in 39s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 - Migration (alembic) (pull_request) Successful in 1m28s
CI/CD Pipeline / PR Build Worker Image (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 / Frontend Unit Tests (pull_request) Successful in 1m9s
AI Code Review / AI Code Review (pull_request) Successful in 1m51s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m8s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m12s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m2s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m30s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m12s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m53s
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 12s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 15s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s
新增 sourceEditPlanId 完整传递链路(前端→后端):
- tasks/types.ts: CreateGenerationTaskRequest 新增 source_edit_plan_id 可选字段
- generate-video/types.ts: UseGenerateVideoProps 新增 sourceEditPlanId
- useGenerateFormState: sourceEditPlanId = editPlanId || null
  selectedTemplate 是模板 ID 不是 edit_plan_id,不能混淆
- useGenerateVideo: 条件传递 source_edit_plan_id 给 createGenerationTask
- GeneratePage: 从 formState 解构并传递给 useGenerateVideo
- useStep6Cover: createPreview 不传 source_edit_plan_id,后端通过 template_id+user_id 兜底
2026-08-24 10:45:07 +08:00
6 changed files with 21 additions and 1 deletions
+2
View File
@@ -82,6 +82,8 @@ export interface CreateGenerationTaskRequest {
stroke?: boolean
shadow?: boolean
}
/** 来源剪辑计划 ID,后端据此从 edit_plan_clips 读取素材/音频/标题配置 */
source_edit_plan_id?: string
}
/** 创建生成任务响应(对齐后端 GenerationTaskResponse */
@@ -72,6 +72,7 @@ const GeneratePage: React.FC = () => {
autoSubtitles,
bgm,
editPlanId,
sourceEditPlanId,
previewVideo,
setPreviewVideo,
previewModalOpen,
@@ -158,6 +159,7 @@ const GeneratePage: React.FC = () => {
} = useGenerateVideo({
titleSettings,
selectedTemplate,
sourceEditPlanId,
selectedMaterials,
materialMode,
smartSelectedIds,
@@ -6,6 +6,8 @@ import type { TitleSettings } from "../../types"
export interface UseGenerateVideoProps {
titleSettings: TitleSettings
selectedTemplate: string
/** 来源剪辑计划 ID,仅取 URL edit_plan_id,无则 null 让后端兜底 */
sourceEditPlanId?: string | null
selectedMaterials: string[]
materialMode: "manual" | "auto"
smartSelectedIds: string[]
@@ -539,7 +539,9 @@ export function useCanvasPlayer(
try {
await Promise.race([
decoder.flush(),
new Promise((_, reject) => setTimeout(() => reject(new Error("flush timeout 10s")), 10_000)),
new Promise((_, reject) =>
setTimeout(() => reject(new Error("flush timeout 10s")), 10_000),
),
])
console.log(`[useCanvasPlayer] Segment ${meta.assetId}: flush complete`)
} catch (e) {
@@ -82,6 +82,14 @@ export interface GenerateFormState {
editPlanId: string | null
planConfigStr: string | null
/**
* 传给后端的 source_edit_plan_id。
* 仅使用 URL 中的 edit_plan_id(从剪辑模板编辑器跳转时携带)。
* URL 没有时传 null,后端正式生成 API 会通过 template_id+user_id 兜底查找正确的 plan。
* 注意:selectedTemplate 是模板 ID,不是 edit_plan_id,不能作为此值传递。
*/
sourceEditPlanId: string | null
/* 预览弹窗 */
previewVideo: GeneratedVideo | null
setPreviewVideo: (v: GeneratedVideo | null) => void
@@ -93,6 +101,8 @@ export const useGenerateFormState = (): GenerateFormState => {
const [searchParams] = useSearchParams()
const editPlanId = searchParams.get("edit_plan_id")
const planConfigStr = searchParams.get("plan_config")
/* ── source_edit_plan_id:仅取 URL 参数,无则 null 让后端兜底 ── */
const sourceEditPlanId = editPlanId || null
/* ── 步骤状态 ── */
const [currentStep, setCurrentStep] = useState(1)
@@ -190,6 +200,7 @@ export const useGenerateFormState = (): GenerateFormState => {
bgm,
editPlanId,
planConfigStr,
sourceEditPlanId,
previewVideo,
setPreviewVideo,
previewModalOpen,
@@ -100,6 +100,7 @@ export function useGenerateVideo(props: UseGenerateVideoProps) {
custom_title: props.titleSettings?.title || "",
duration: props.duration || undefined,
video_ratio: props.videoRatio,
...(props.sourceEditPlanId ? { source_edit_plan_id: props.sourceEditPlanId } : {}),
...(props.titleSettings?.title
? {
title_config: {