import React, { useState, useRef } from 'react'; import { Search, Plus, FileText, Upload, ArrowLeft, CloudUpload, File as FileIcon, X } from 'lucide-react'; import { Button, Input, TableHeader, TableRow, TableHead, TableCell, Card, Dialog } from '../components/UI'; import { mockKnowledgeBases } from '../services/mockData'; import { KnowledgeBase } from '../types'; export const KnowledgeBasePage: React.FC = () => { const [view, setView] = useState<'list' | 'detail'>('list'); const [selectedKb, setSelectedKb] = useState(null); const [searchTerm, setSearchTerm] = useState(''); const [kbs, setKbs] = useState(mockKnowledgeBases); const [isUploadOpen, setIsUploadOpen] = useState(false); const filteredKbs = kbs.filter(kb => kb.name.toLowerCase().includes(searchTerm.toLowerCase())); const handleSelect = (kb: KnowledgeBase) => { setSelectedKb(kb); setView('detail'); }; const handleImportClick = () => { setIsUploadOpen(true); }; if (view === 'detail' && selectedKb) { return ( <> setView('list')} onImport={handleImportClick} /> setIsUploadOpen(false)} /> ); } return (

知识库

setSearchTerm(e.target.value)} />
{filteredKbs.map(kb => (
handleSelect(kb)}>

{kb.name}

文档数量: {kb.documents.length}

创建人: {kb.creator}

创建时间: {kb.createdAt}

))} {/* Add New Placeholer */}
新建知识库
); }; const KnowledgeBaseDetail: React.FC<{ kb: KnowledgeBase; onBack: () => void; onImport: () => void; }> = ({ kb, onBack, onImport }) => { const [docSearch, setDocSearch] = useState(''); const filteredDocs = kb.documents.filter(d => d.name.toLowerCase().includes(docSearch.toLowerCase())); return (

{kb.name}

创建于 {kb.createdAt} · by {kb.creator}

文档列表

setDocSearch(e.target.value)} className="bg-black/20 border-transparent focus:bg-black/40" />
文档名称 大小 上传时间 操作 {filteredDocs.length > 0 ? filteredDocs.map(doc => ( {doc.name} {doc.size} {doc.uploadDate} )) : ( 暂无文档 )}
); }; const UploadModal: React.FC<{ isOpen: boolean; onClose: () => void }> = ({ isOpen, onClose }) => { const [dragActive, setDragActive] = useState(false); const [files, setFiles] = useState([]); const inputRef = useRef(null); const handleDrag = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.type === "dragenter" || e.type === "dragover") { setDragActive(true); } else if (e.type === "dragleave") { setDragActive(false); } }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(false); if (e.dataTransfer.files && e.dataTransfer.files[0]) { // Add new files to existing state setFiles(prev => [...prev, ...Array.from(e.dataTransfer.files)]); } }; const handleChange = (e: React.ChangeEvent) => { e.preventDefault(); if (e.target.files && e.target.files[0]) { setFiles(prev => [...prev, ...Array.from(e.target.files || [])]); } }; const removeFile = (idx: number) => { setFiles(prev => prev.filter((_, i) => i !== idx)); }; return ( } >
inputRef.current?.click()} >

点击上传 或将文件拖拽到此处

支持 PDF, DOCX, TXT (Max 10MB)

{files.length > 0 && (
{files.map((file, idx) => (
{file.name} ({(file.size / 1024).toFixed(1)} KB)
))}
)}
); };