forked from 77media/video-flow
处理页面
This commit is contained in:
parent
724bbc6c8f
commit
4445c39e78
@ -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
|
||||
});
|
||||
};
|
||||
|
||||
@ -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}`);
|
||||
}
|
||||
|
||||
@ -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}`);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user