import React from 'react'; import { Card, Button, Empty, Tag, Popconfirm, Space, Typography } from 'antd'; import { PlusOutlined, FolderOutlined, FileTextOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons'; import type { KnowledgeBase } from '../../api/knowledgeBaseApi'; const { Title, Text, Paragraph } = Typography; interface KnowledgeBaseListProps { knowledgeBases: KnowledgeBase[]; loading: boolean; onCreateClick: () => void; onEditClick: (kb: KnowledgeBase) => void; onDeleteClick: (kb: KnowledgeBase) => void; onSelectClick: (kb: KnowledgeBase) => void; } const KnowledgeBaseList: React.FC = ({ knowledgeBases, loading, onCreateClick, onEditClick, onDeleteClick, onSelectClick, }) => { const formatFileSize = (bytes: number): string => { if (bytes === 0) return '0 B'; const k = 1024; const sizes = ['B', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; }; const canCreateMore = knowledgeBases.length < 3; return (
{/* 标题和创建按钮 */}
我的知识库 已使用 {knowledgeBases.length}/3 个知识库
{/* 配额提示 */} {!canCreateMore && (
已达到知识库数量上限(3个)
)} {/* 知识库列表 */} {knowledgeBases.length === 0 ? ( ) : (
{knowledgeBases.map((kb) => ( onSelectClick(kb)} style={{ cursor: 'pointer' }} actions={[ , { e?.stopPropagation(); onDeleteClick(kb); }} okText="确认" cancelText="取消" okButtonProps={{ danger: true }} > , ]} >
} title={
{kb.name}
} description={
{kb.description || '暂无描述'}
{kb._count?.documents || kb.fileCount || 0} 个文档
总大小: {formatFileSize(kb.totalSizeBytes)}
创建于 {new Date(kb.createdAt).toLocaleDateString()}
} /> ))}
)} ); }; export default KnowledgeBaseList;