feat: 前端对接确认生成 API (POST /tasks/{task_id}/confirm)
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 40s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 46s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 56s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 1m9s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 29s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 40s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m32s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m46s
AI Code Review / AI Code Review (pull_request) Failing after 2m14s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 1m59s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m29s
CI/CD Pipeline / CI Gate (pull_request) Failing after 6s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 930h15m39s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 930h15m40s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 930h15m40s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 930h15m40s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 930h15m40s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 930h15m41s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 930h15m41s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 930h18m21s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 930h18m23s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 930h19m3s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 930h19m9s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 930h19m5s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 930h19m11s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 930h19m11s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 930h51m47s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 930h52m31s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 930h52m35s

对接后端 PR #1308 新增的确认生成 API:

1. 新增 API 调用函数 confirm.ts
   - confirmGeneration(taskId, params) 调用 POST /tasks/{task_id}/confirm

2. 新增类型定义
   - ConfirmGenerationRequest: output_width, output_height, cover_url, custom_title
   - ConfirmGenerationResponse, ConfirmGenerationTaskItem

3. 修改 useGenerateVideo.ts
   - 有 previewTaskId 时使用新 API(确认生成流程)
   - 无 previewTaskId 时使用旧 API(向后兼容)
   - 传递 cover_url 和 custom_title 参数

前置条件:后端 PR #1308 同步到 develop 分支后此 PR 才可合并

关联:PR #1308 (后端确认生成 API)
This commit is contained in:
SaaS Frontend
2026-08-08 21:07:16 +08:00
parent 734508bea5
commit 13ca16b940
5 changed files with 84 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
import apiClient from "../client"
import type { ConfirmGenerationRequest, ConfirmGenerationResponse } from "./types"
/** 确认生成 — 基于预览任务创建正式生成任务 */
export const confirmGeneration = async (
taskId: string,
params: ConfirmGenerationRequest,
): Promise<ConfirmGenerationResponse> => {
const response = await apiClient.post<ConfirmGenerationResponse>(
`/tasks/${taskId}/confirm`,
params,
)
return response.data
}
+4
View File
@@ -3,6 +3,10 @@ export type {
CreatePreviewRequest,
CreatePreviewResponse,
PreviewTaskResponse,
ConfirmGenerationRequest,
ConfirmGenerationResponse,
ConfirmGenerationTaskItem,
} from "./types"
export { createPreview, getPreviewStatus } from "./preview"
export { confirmGeneration } from "./confirm"
+44
View File
@@ -45,3 +45,47 @@ export interface PreviewTaskResponse {
finished_at?: string
generate_duration?: number
}
/** 确认生成请求体 — 基于预览任务创建正式生成任务 */
export interface ConfirmGenerationRequest {
/** 输出视频宽度,默认 1080 */
output_width?: number
/** 输出视频高度,默认 1920 */
output_height?: number
/** 自定义封面图片 URL */
cover_url?: string
/** 自定义视频标题 */
custom_title?: string
}
/** 确认生成响应 */
export interface ConfirmGenerationResponse {
items: ConfirmGenerationTaskItem[]
total: number
}
/** 确认生成返回的任务项 */
export interface ConfirmGenerationTaskItem {
id: string
project_id: string
asset_library_id: string
strategy_id: string
voice_library_id: string
template_id: string
asset_ids: string[]
title_ids: string[]
voice_ids: string[]
source_edit_plan_id: string
asset_select_mode: string
batch_id: string
is_preview: boolean
source_task_id: string
output_width: number
output_height: number
cover_url: string
custom_title: string
status: string
progress: number
result_count: number
error_message: string
}
+2
View File
@@ -19,6 +19,8 @@ export interface UseGenerateVideoProps {
autoSubtitles: boolean
bgm: boolean
generateCount: number
/** 预览任务的 task_id(用于新确认生成 API) */
previewTaskId?: string
}
/** 生成阶段 */
+20
View File
@@ -6,6 +6,7 @@ import { useState, useCallback } from "react"
import { message } from "antd"
import type { GeneratedVideo } from "@/api/template-editor"
import { generateEditPlan, updateEditPlan, getEditPlan } from "@/api/template-editor"
import { confirmGeneration } from "@/api/generation"
import type { UseGenerateVideoProps } from "./generate-video/types"
import { getGenerationPhase } from "./generate-video/phase"
import { useGenerationPolling } from "./generate-video/useGenerationPolling"
@@ -55,6 +56,25 @@ export function useGenerateVideo(props: UseGenerateVideoProps) {
clearTimer()
try {
// 新流程:使用确认生成 API(基于预览任务)
if (props.previewTaskId) {
// 解析分辨率
const [widthStr, heightStr] = (props.videoRatio || "1080x1920").split("x")
const outputWidth = parseInt(widthStr, 10) || 1080
const outputHeight = parseInt(heightStr, 10) || 1920
await confirmGeneration(props.previewTaskId, {
output_width: outputWidth,
output_height: outputHeight,
cover_url: props.coverSettings.imageUrl || "",
custom_title: props.titleSettings.title || "",
})
startPolling()
return
}
// 旧流程:使用 EditPlan API(向后兼容)
const payload = buildEditPlanPayload(props)
// 获取或创建草稿