处理页面

This commit is contained in:
Xin Wang 2025-07-01 20:53:07 +08:00
parent 724bbc6c8f
commit 4445c39e78
3 changed files with 29 additions and 25 deletions

View File

@ -5,12 +5,16 @@ import { ApiResponse } from './common';
// 剧本转分镜头请求接口
export interface ScriptToSceneRequest {
script: string;
episode_id: number;
script_id: number;
project_type: ProjectTypeEnum.SCRIPT_TO_VIDEO;
}
// 视频转分镜头请求接口
export interface VideoToSceneRequest {
video_url: string;
episode_id: number;
script_id: number;
project_type: ProjectTypeEnum.VIDEO_TO_VIDEO;
}
@ -46,10 +50,14 @@ export const convertScenePrompt = async (
* @returns Promise<ConvertScenePromptResponse>
*/
export const convertScriptToScene = async (
script: string
script: string,
episode_id: number,
script_id: number
): Promise<ConvertScenePromptResponse> => {
return convertScenePrompt({
script,
episode_id,
script_id,
project_type: ProjectTypeEnum.SCRIPT_TO_VIDEO
});
};
@ -60,10 +68,14 @@ export const convertScriptToScene = async (
* @returns Promise<ConvertScenePromptResponse>
*/
export const convertVideoToScene = async (
video_url: string
video_url: string,
episode_id: number,
script_id: number
): Promise<ConvertScenePromptResponse> => {
return convertScenePrompt({
video_url,
episode_id,
script_id,
project_type: ProjectTypeEnum.VIDEO_TO_VIDEO
});
};

View File

@ -4,7 +4,7 @@ import { useState, useEffect, useRef } from 'react';
import { Card } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { ArrowLeft, ChevronDown, ChevronUp, Video, ListOrdered, Play, Loader2, Pause, MoreHorizontal, Edit2, Check, X, RefreshCw, Lightbulb, Package, Crown, ArrowUp } from 'lucide-react';
import { useRouter } from 'next/navigation';
import { useRouter, useSearchParams } from 'next/navigation';
import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger, SheetClose } from "@/components/ui/sheet";
import { Input } from "@/components/ui/input";
import { Textarea } from "@/components/ui/textarea";
@ -17,7 +17,6 @@ import type { MenuProps } from 'antd';
import Image from 'next/image';
import dynamic from 'next/dynamic';
import { ProjectTypeEnum, ModeEnum, ResolutionEnum } from "@/api/enums";
import { createScriptProject, CreateScriptProjectRequest } from "@/api/script_project";
import { createScriptEpisode, CreateScriptEpisodeRequest } from "@/api/script_episode";
import { getUploadTokenWithDomain, uploadToQiniu } from "@/api/common";
import { convertScriptToScene, convertVideoToScene } from "@/api/video_flow";
@ -57,6 +56,8 @@ const ideaText = 'a cute capybara with an orange on its head, staring into the d
export function CreateToVideo2() {
const router = useRouter();
const searchParams = useSearchParams();
const projectId = searchParams.get('projectId');
const [isClient, setIsClient] = useState(false);
const [isExpanded, setIsExpanded] = useState(false);
const [videoUrl, setVideoUrl] = useState('');
@ -69,6 +70,7 @@ export function CreateToVideo2() {
const [script, setInputText] = useState('');
const editorRef = useRef<HTMLDivElement>(null);
const [runTour, setRunTour] = useState(true);
const [episodeId, setEpisodeId] = useState<number>(0);
const handleUploadVideo = async () => {
console.log('upload video');
@ -114,41 +116,31 @@ export function CreateToVideo2() {
alert('请输入剧本内容');
return;
}
convertResponse = await convertScriptToScene(script);
convertResponse = await convertScriptToScene(script, episodeId);
} else {
// 视频模式调用convertVideoToScene (第56-69行)
if (!videoUrl) {
alert('请先上传视频');
return;
}
convertResponse = await convertVideoToScene(videoUrl);
if (!episodeId) {
alert('Episode ID not available');
return;
}
convertResponse = await convertVideoToScene(videoUrl, episodeId);
}
// 检查转换结果
if (convertResponse.code === 0) {
if (convertResponse.successful) {
console.log('转换成功:', convertResponse.data);
console.log('任务ID:', convertResponse.data.task_id);
console.log('预估时间:', convertResponse.data.estimated_time, '秒');
// 确定项目类型
const projectType = activeTab === 'script' ? ProjectTypeEnum.SCRIPT_TO_VIDEO : ProjectTypeEnum.VIDEO_TO_VIDEO;
// 构建项目数据并调用API
const projectData: CreateScriptProjectRequest = {
project_type: projectType,
mode: selectedMode,
resolution: selectedResolution
};
const projectResponse = await createScriptProject(projectData);
if (projectResponse.code === 0 && projectResponse.data.id) {
const projectId = projectResponse.data.id;
// 创建剧集数据
const episodeData: CreateScriptEpisodeRequest = {
title: "episode 1",
script_id: projectId,
script_id: projectId ? parseInt(projectId) : 1,
status: 1,
summary: script
};
@ -158,13 +150,11 @@ export function CreateToVideo2() {
if (episodeResponse.code === 0) {
// 成功创建后跳转到work-flow页面
setEpisodeId(episodeResponse.data.id);
router.push('/create/work-flow');
} else {
alert(`创建剧集失败: ${episodeResponse.message}`);
}
} else {
alert(`创建项目失败: ${projectResponse.message}`);
}
} else {
alert(`转换失败: ${convertResponse.message}`);
}

View File

@ -64,6 +64,8 @@ export function HomePage2() {
if (projectResponse.code === 0 && projectResponse.data.id) {
const projectId = projectResponse.data.id;
setCreatedProjectId(projectId);
// projectId 作为参数传递给 work-flow 页面
router.push(`/create/work-flow?projectId=${projectId}`);
} else {
alert(`创建项目失败: ${projectResponse.message}`);
}