import { useEffect } from "react"; import Portal from "@/components/Portal"; const EventDetailModal = ({ isOpen, event, onClose }) => { // ESC键关闭模态框 useEffect(() => { const handleEscKey = (e) => { if (e.key === "Escape" && isOpen) { onClose(); } }; if (isOpen) { document.addEventListener("keydown", handleEscKey); } return () => { document.removeEventListener("keydown", handleEscKey); }; }, [isOpen, onClose]); // 如果未打开或无事件数据,不渲染 if (!isOpen || !event) { return null; } // 事件类型映射 const eventTypeNames = { class: "课程", meeting: "会议", lab: "实验", exam: "考试", }; // 处理遮罩层点击 const handleOverlayClick = (e) => { if (e.target === e.currentTarget) { onClose(); } }; // 处理关闭按钮点击 const handleCloseClick = () => { onClose(); }; // 格式化时间显示 const formatTimeRange = (startTime, endTime) => { const startDate = new Date(startTime.replace(" ", "T")); const endDate = new Date(endTime.replace(" ", "T")); const formatTime = (date) => { return date.toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit", hour12: false, }); }; const formatDate = (date) => { return date.toLocaleDateString("zh-CN", { year: "numeric", month: "long", day: "numeric", weekday: "long", }); }; return { date: formatDate(startDate), timeRange: `${formatTime(startDate)} - ${formatTime(endDate)}`, }; }; const { date, timeRange } = formatTimeRange(event.startTime, event.endTime); return (
{/* 模态框头部 */}

事件详情

{/* 模态框内容 */}
{/* 事件标题 */}
事件标题
{event.title}
{/* 事件类型 */}
事件类型
{eventTypeNames[event.type] || event.type}
{/* 日期 */}
日期
{date}
{/* 时间 */}
时间
{timeRange}
{/* 详细描述 */} {event.description && (
详细描述
{event.description}
)}
); }; export default EventDetailModal;