import React, { useState, useCallback, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { X, Check, ChevronDown } from 'lucide-react'; import * as Popover from '@radix-ui/react-popover'; import { mockSceneOptions, mockCharacterOptions } from '@/app/model/enums'; import { Button } from './button'; import { Input } from './input'; import { useScriptService } from '@/app/service/Interaction/ScriptService'; const ScriptTabContent: React.FC = () => { // 获取当前项目ID(这里需要根据实际项目路由或上下文获取) const projectId = 'current-project-id'; // TODO: 从路由或上下文获取实际项目ID const { scriptSlices, userPrompt, loading, error, updateUserPrompt, fetchScriptData, setFocusedSlice, updateScriptSliceText, resetScript, applyScript, fetchProjectScript } = useScriptService(); // 组件挂载时获取项目剧本数据 useEffect(() => { const initializeScript = async () => { try { await fetchProjectScript(projectId); } catch (error) { console.error('初始化剧本数据失败:', error); } }; initializeScript(); }, [projectId, fetchProjectScript]); // 处理AI生成按钮点击 const handleAiGenerate = useCallback(async () => { if (!userPrompt.trim()) return; try { await fetchScriptData(userPrompt); } catch (error) { console.error('生成剧本失败:', error); } }, [userPrompt, fetchScriptData]); // 处理重置按钮点击 const handleReset = useCallback(() => { resetScript(); }, [resetScript]); // 处理确认按钮点击 const handleConfirm = useCallback(async () => { try { await applyScript(); } catch (error) { console.error('应用剧本失败:', error); } }, [applyScript]); // 处理提示词输入变化 const handlePromptChange = useCallback((value: string) => { updateUserPrompt(value); }, [updateUserPrompt]); // 处理剧本片段文本变化 const handleScriptSliceChange = useCallback((sliceId: string, text: string) => { setFocusedSlice(sliceId); updateScriptSliceText(text); }, [setFocusedSlice, updateScriptSliceText]); return (
{/* 标题 */}

Edit Script

{/* 内容区域 */} {/* 剧本片段渲染区域 */} {error && (

{error}

)} {/* 剧本片段列表 */}
{scriptSlices.map((slice, index) => ( handleScriptSliceChange(slice.id, e.target.value)} placeholder={`输入${slice.type}内容...`} className="w-full bg-white/50 dark:bg-[#5b75ac20] border border-gray-200 dark:border-gray-600 focus:ring-2 focus:ring-blue-500/20 transition-all duration-200" />
{slice.type}
))}
{/* 加载状态 */} {loading && (
正在生成剧本...
)} {/* 修改建议输入区域 */}
handlePromptChange(e.target.value)} placeholder="输入提示词,然后点击AI生成按钮..." className="outline-none box-shadow-none bg-white/50 dark:bg-[#5b75ac20] border-0 focus:ring-2 focus:ring-blue-500/20 transition-all duration-200" disabled={loading} />
{/* 底部按钮 */}
); }; export default ScriptTabContent;