import React, { useState, useEffect } from 'react'; const API_BASE = 'http://localhost:8000/api'; function MemoryModal({ lobsterId, lobsterName, onClose }) { const [dates, setDates] = useState([]); const [selectedDate, setSelectedDate] = useState(''); const [content, setContent] = useState(''); const [currentMonth, setCurrentMonth] = useState(new Date()); // 加载有日记的日期 useEffect(() => { fetch(`${API_BASE}/lobsters/${lobsterId}/memory/dates/`) .then(r => r.json()) .then(data => { setDates(data.dates); if (data.dates.length > 0) { setSelectedDate(data.dates[0]); } }); }, [lobsterId]); // 加载选中日期的日记 useEffect(() => { if (selectedDate) { fetch(`${API_BASE}/lobsters/${lobsterId}/memory/${selectedDate}/`) .then(r => r.json()) .then(data => { if (data.content) { setContent(data.content); } }); } }, [selectedDate, lobsterId]); // 渲染日历 const renderCalendar = () => { const year = currentMonth.getFullYear(); const month = currentMonth.getMonth(); const firstDay = new Date(year, month, 1); const lastDay = new Date(year, month + 1, 0); const daysInMonth = lastDay.getDate(); const startWeekday = firstDay.getDay(); const days = []; // 空白格子 for (let i = 0; i < startWeekday; i++) { days.push(
); } // 日期格子 for (let day = 1; day <= daysInMonth; day++) { const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`; const hasMemory = dates.includes(dateStr); const isSelected = selectedDate === dateStr; days.push(
hasMemory && setSelectedDate(dateStr)} > {day}
); } return days; }; const changeMonth = (delta) => { setCurrentMonth(new Date(currentMonth.setMonth(currentMonth.getMonth() + delta))); }; return (
e.stopPropagation()}>

📔 {lobsterName} - 工作日记

{/* 日记内容 */}
{content ? (

📅 {selectedDate}

{content}
) : (

这一天还没有日记

)}
{/* 日历 */}
{currentMonth.getFullYear()}年 {currentMonth.getMonth() + 1}月
{['日', '一', '二', '三', '四', '五', '六'].map(day => (
{day}
))} {renderCalendar()}
● 有日记 ○ 无日记
); } export default MemoryModal;