import { getMonthDays } from "@/data/mockData"; const MonthView = ({ currentDate, events, onDateClick, onEventClick, selectedDate, }) => { const year = currentDate.getFullYear(); const month = currentDate.getMonth(); const days = getMonthDays(year, month); const weekDays = ["日", "一", "二", "三", "四", "五", "六"]; // 获取指定日期的事件 const getEventsForDate = (date, month, year) => { if (!events || events.length === 0) return []; const dateString = `${year}-${(month + 1) .toString() .padStart(2, "0")}-${date.toString().padStart(2, "0")}`; return events.filter((event) => { const eventDate = event.startTime.split(" ")[0]; return eventDate === dateString; }); }; const handleDateClick = (day) => { if (onDateClick) { const clickedDate = new Date(day.year, day.month, day.date); onDateClick(clickedDate); } }; const isSelected = (day) => { if (!selectedDate) return false; return ( selectedDate.getFullYear() === day.year && selectedDate.getMonth() === day.month && selectedDate.getDate() === day.date ); }; const renderEventItem = (event, index, dayEvents) => { const maxVisible = 3; // 每个日期最多显示3个事件 if ( index >= maxVisible - 1 && index === maxVisible - 1 && dayEvents.length > maxVisible ) { // 显示"更多"指示器 const remainingCount = dayEvents.length - maxVisible + 1; return (
+{remainingCount}更多
); } if (index >= maxVisible) return null; return (
{ e.stopPropagation(); if (onEventClick) { onEventClick(event); } else { } }} > {event.title}
); }; return (
{/* 星期标题 */}
{weekDays.map((day) => (
{day}
))}
{/* 日期网格 */}
{days.map((day, index) => { const dayEvents = getEventsForDate(day.date, day.month, day.year); const isToday = day.isToday; const isCurrentMonth = day.isCurrentMonth; const isSelectedDate = isSelected(day); return (
handleDateClick(day)} >
{day.date}
{dayEvents.map((event, eventIndex) => renderEventItem(event, eventIndex, dayEvents) )}
); })}
); }; export default MonthView;