import React from 'react'; import { Mark } from '../mock/collection'; import './modal.css'; interface DetailModalProps { visible: boolean; data: Mark | null; onClose: () => void; } export const DetailModal: React.FC = ({ visible, data, onClose }) => { if (!visible || !data) return null; return (
e.stopPropagation()}>

详情信息

基本信息

{data.title}
{data.markType}
{data.uname}
{data.config.visibility === 'public' ? '公开' : data.config.visibility === 'private' ? '私有' : '受限'}

描述

{data.description}

标签

{data.tags.map((tag, index) => ( {tag} ))}

时间信息

{new Date(data.markedAt).toLocaleString('zh-CN')}
{new Date(data.createdAt).toLocaleString('zh-CN')}
{new Date(data.updatedAt).toLocaleString('zh-CN')}
v{data.version}
{data.fileList.length > 0 && (

附件文件 ({data.fileList.length})

{data.fileList.map((file, index) => (
{file.name} {formatFileSize(file.size)}
{file.type}
))}
)}

数据摘要

{data.data.summary || data.summary}

{data.config.allowComments !== undefined && (

权限设置

{data.config.allowComments ? '是' : '否'}
{data.config.allowDownload ? '是' : '否'}
{data.config.expiredAt && (
{new Date(data.config.expiredAt).toLocaleString('zh-CN')}
)}
)}
); }; // 格式化文件大小 function 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(1)) + ' ' + sizes[i]; }