import React, { useState, useEffect } from 'react'; import { Heart, Camera, Film, Scissors } from 'lucide-react'; import { motion } from 'framer-motion'; import Scriptwriter from './scriptwriter'; import StoryboardArtist from './storyboard-artist'; import VisualDirector from './visual-director'; import Editor from './editor'; import { scriptwriterData, storyboardData, productionData, editorData } from './mock-data'; interface Stage { id: string; title: string; icon: React.ElementType; color: string; profession: string; } const stages: Stage[] = [ { id: 'script', title: 'Scriptwriter', icon: Heart, color: '#8b5cf6', profession: 'Scriptwriter' }, { id: 'storyboard', title: 'Storyboard artist', icon: Camera, color: '#06b6d4', profession: 'Storyboard artist' }, { id: 'production', title: 'Visual director', icon: Film, color: '#10b981', profession: 'Visual director' }, { id: 'editing', title: 'Editor', icon: Scissors, color: '#f59e0b', profession: 'Editor' } ]; const actionsText = [ 'is thinking...', 'is drawing...', 'is directing...', 'is editing...' ] // 思考指示器组件 const ThinkingDots = ({ show, text, color }: { show: boolean; text: string; color: string }) => { if (!show) return null; return (
{[0, 1, 2].map((i) => ( ))}
{text}
); }; interface WorkOfficeProps { initialStage?: number; roles: any[]; } const WorkOffice: React.FC = ({ initialStage = 0 }) => { const [currentStage, setCurrentStage] = useState(initialStage); const [isPlaying, setIsPlaying] = useState(false); const [currentContent, setCurrentContent] = useState>(scriptwriterData); const [thinkingText, setThinkingText] = useState(`${stages[0].profession} ${actionsText[0]}`); useEffect(() => { // currentStage 更新 重新渲染当前工作台组件 setCurrentStage(initialStage); }, [initialStage]); // 根据当前阶段加载对应数据 useEffect(() => { let data: Record = {}; switch (currentStage) { case 0: data = scriptwriterData; break; case 1: data = storyboardData; break; case 2: data = productionData; break; case 3: data = editorData; break; } setIsPlaying(true); setCurrentContent(data); setThinkingText(`${stages[currentStage].profession} ${actionsText[currentStage]}`); }, [currentStage]); // 渲染当前工作台组件 const renderCurrentWorkstation = () => { switch (currentStage) { case 0: return ; case 1: return ; case 2: return ; case 3: return ; default: return null; } }; return (
{/* 正在加载的部分 文字显示 */}
{/* 工作台内容区域 */}
{renderCurrentWorkstation()}
); }; export default WorkOffice;