diff --git a/components/ui/character-tab-content.tsx b/components/ui/character-tab-content.tsx index 4e14eb7..a5aba59 100644 --- a/components/ui/character-tab-content.tsx +++ b/components/ui/character-tab-content.tsx @@ -1,6 +1,6 @@ import React, { useState, useRef, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; -import { ImageUp, Library, Play, Pause, RefreshCw, Wand2, Users, Check, ReplaceAll, X, TriangleAlert, Loader2 } from 'lucide-react'; +import { ImageUp, Library, Play, Pause, RefreshCw, Wand2, Users, CircleX, ReplaceAll, X, TriangleAlert, Loader2 } from 'lucide-react'; import { cn } from '@/public/lib/utils'; import { CharacterEditor } from './character-editor'; import ImageBlurTransition from './ImageBlurTransition'; @@ -34,23 +34,31 @@ interface Role { } // Mock 数据 -const mockRole: Role = { - name: "青春女学生", - url: "/assets/3dr_chihiro.png", - sound: "", - soundDescription: "", - roleDescription: "一位充满活力和梦想的高中女生,蓝色长发随风飘扬,眼神中透露着对未来的憧憬。她身着整洁的校服,举止优雅而不失活力。", - age: 16, - gender: 'female', - ethnicity: '亚洲人', - appearance: { - hairStyle: "鲜艳蓝色长发", - skinTone: "白皙", - facialFeatures: "大眼睛,清秀五官", - bodyType: "苗条" - }, - tags: ['高中生', '校服', '蓝色长发', '大眼睛', '清秀五官', '苗条'] -}; +const mockReplaceVideoData = { + count: 10, + completed: 2, // 已完成个数 + data: [ + { + id: '1', + name: '替换视频1', + videoUrl: ['https://video-base-imf.oss-ap-southeast-7.aliyuncs.com/uploads/FJ1_76a6cd5d-e4dd-4bed-8d5f-65306f146caf-20250812112433.mp4'], + status: 1 + }, { + id: '2', + name: '替换视频1', + videoUrl: [], + status: 2 + }, + { id: '3', name: '替换视频1', videoUrl: [], status: 0 }, + { id: '4', name: '替换视频1', videoUrl: [], status: 0 }, + { id: '5', name: '替换视频1', videoUrl: [], status: 0 }, + { id: '6', name: '替换视频1', videoUrl: [], status: 0 }, + { id: '7', name: '替换视频1', videoUrl: [], status: 0 }, + { id: '8', name: '替换视频1', videoUrl: [], status: 0 }, + { id: '9', name: '替换视频1', videoUrl: [], status: 0 }, + { id: '10', name: '替换视频1', videoUrl: [], status: 0 }, + ] +} interface CharacterTabContentProps { taskSketch: any[]; @@ -63,7 +71,7 @@ export function CharacterTabContent({ taskSketch, currentRoleIndex, onSketchSelect, - roles = [mockRole] + roles = [] }: CharacterTabContentProps) { const [isReplacePanelOpen, setIsReplacePanelOpen] = useState(false); const [replacePanelKey, setReplacePanelKey] = useState(0); @@ -394,6 +402,56 @@ export function CharacterTabContent({ + {/* 替换视频进度 预览区域 */} + +
+
+ 替换视频进度 + + {mockReplaceVideoData.completed}/{mockReplaceVideoData.count} + +
+ + {}} + > + {mockReplaceVideoData.data.map((shot) => ( +
+ {shot.status === 0 && ( +
+ +
+ )} + {shot.status === 1 && ( +
+ ))} +
+
+