import { useEffect } from 'react'; import { Container, Title, Text, Stack, Paper, Group, Button, ActionIcon, Box, } from '@mantine/core'; import { IconArrowLeft, IconRotateClockwise, IconTrash, IconArchive } from '@tabler/icons-react'; import { useNavigate } from 'react-router-dom'; import { useAppStore } from '../stores'; import type { Event } from '../types'; /** * 格式化日期显示,根据是否有时间选择显示格式 */ function formatArchiveDate(dateStr: string): string { const date = new Date(dateStr); const hours = date.getHours(); const minutes = date.getMinutes(); const hasExplicitTime = hours !== 0 || minutes !== 0; if (hasExplicitTime) { return date.toLocaleString('zh-CN', { month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit', hour12: false, }); } else { return date.toLocaleString('zh-CN', { month: 'numeric', day: 'numeric', }); } } export function ArchivePage() { const navigate = useNavigate(); const events = useAppStore((state) => state.events); const fetchEvents = useAppStore((state) => state.fetchEvents); const updateEventById = useAppStore((state) => state.updateEventById); const deleteEventById = useAppStore((state) => state.deleteEventById); // 页面加载时获取数据 useEffect(() => { const isAuthenticated = useAppStore.getState().isAuthenticated; if (!isAuthenticated) { navigate('/login', { replace: true }); } else { fetchEvents(); } }, [navigate, fetchEvents]); // 获取已归档的提醒(已过期且已勾选的) const archivedReminders = events.filter((e) => { if (e.type !== 'reminder' || !e.is_completed) return false; if (!e.date) return false; // 跳过无日期的 const eventDate = new Date(e.date); const now = new Date(); return eventDate < now; // 仅已过期的 }).sort((a, b) => { if (!a.date || !b.date) return 0; return new Date(b.date).getTime() - new Date(a.date).getTime(); }); const handleRestore = async (event: Event) => { await updateEventById(event.id, { is_completed: false }); }; const handleDelete = async (event: Event) => { await deleteEventById(event.id); }; return ( {/* Header */} 归档 {/* Content */} {archivedReminders.length === 0 ? ( 暂无已归档的提醒 完成的提醒会自动归档到这里 ) : ( {archivedReminders.map((event) => ( {event.title} {formatArchiveDate(event.date)} {event.content && ( {event.content} )} handleRestore(event)} style={{ color: '#666' }} title="恢复" > handleDelete(event)} style={{ color: '#999' }} title="删除" > ))} )} ); }