import React, { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { FileText, Image, Loader2 } from 'lucide-react'; interface ContentGeneratorProps { content?: string; images?: string[]; speed?: number; } const ContentGenerator: React.FC = ({ content = "正在生成会展策划方案内容...", images = [], speed = 35 }) => { const [displayedContent, setDisplayedContent] = useState(''); const [currentIndex, setCurrentIndex] = useState(0); const [loadingImages, setLoadingImages] = useState>(new Set()); useEffect(() => { if (currentIndex < content.length) { const timeout = setTimeout(() => { setDisplayedContent(prev => prev + content[currentIndex]); setCurrentIndex(prev => prev + 1); }, speed); return () => clearTimeout(timeout); } }, [currentIndex, content, speed]); const handleImageLoad = (index: number) => { setLoadingImages(prev => { const newSet = new Set(prev); newSet.delete(index); return newSet; }); }; return (
{/* Text Content */}
生成中...
{displayedContent} {currentIndex < content.length && ( )}
{/* Images */} {images.length > 0 && (
相关图片
{images.map((src, index) => ( {loadingImages.has(index) && (
)} {`Generated handleImageLoad(index)} onLoadStart={() => setLoadingImages(prev => new Set(prev).add(index))} />
))}
)} {/* Stats */}
字符: {displayedContent.length} 速度: {speed}字/秒 进度: {Math.round((currentIndex / content.length) * 100)}%
); }; export default ContentGenerator;