import React, { useCallback, useState } from 'react'; import { Upload as UploadIcon, FileText, Image as ImageIcon, Folder } from 'lucide-react'; import { useLanguage } from '../contexts/LanguageContext'; interface DragDropUploadProps { onFilesSelected: (files: FileList) => void; isAdmin: boolean; globalMode?: boolean; // 新增属性,用于控制是否为全局模式 } export const DragDropUpload: React.FC = ({ onFilesSelected, isAdmin, globalMode = false }) => { const { t } = useLanguage(); const [isDragging, setIsDragging] = useState(false); const handleDragEnter = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.dataTransfer.items && e.dataTransfer.items.length > 0) { setIsDragging(true); } }, []); const handleDragLeave = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); // 只有当鼠标真正离开拖拽区域时才设置为false setTimeout(() => setIsDragging(false), 100); }, []); const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); e.dataTransfer.dropEffect = 'copy'; }, []); const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); if (e.dataTransfer.files && e.dataTransfer.files.length > 0) { onFilesSelected(e.dataTransfer.files); e.dataTransfer.clearData(); } }, [onFilesSelected]); const handleFileInput = (e: React.ChangeEvent) => { if (e.target.files && e.target.files.length > 0) { onFilesSelected(e.target.files); // Reset the input so the same file can be selected again e.target.value = ''; } }; if (!isAdmin) { return null; } // 根据模式决定CSS类 const containerClass = globalMode ? `fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 transition-opacity duration-300 ${isDragging ? 'opacity-100' : 'opacity-0 pointer-events-none'}` : `border-2 border-dashed rounded-xl p-8 text-center transition-all duration-200 cursor-pointer ${ isDragging ? 'border-blue-500 bg-blue-50 scale-[1.02] shadow-lg' : 'border-slate-300 bg-slate-50 hover:border-blue-400 hover:bg-blue-25' }`; const contentClass = globalMode ? "w-3/4 max-w-2xl" : ""; return (
document.getElementById('file-upload-input')?.click()} >

{t('dragDropUploadTitle')}

{t('dragDropUploadDesc')}

{t('supportedFormats')}
PDF, DOC, XLS, PPT, TXT, Images...
); };