import { useState, useMemo } from 'react'; import { PageHeader } from '@/components/layout/PageHeader'; import { Card } from '@/components/common/Card'; import type { CalendarDay } from '@/types'; import dayjs from 'dayjs'; import styles from './HealthCalendarPage.module.css'; const MARKER_COLORS: Record = { medication_taken: '#10B981', medication_missed: '#EF4444', follow_up: '#F59E0B', measurement: '#2563EB', }; export function HealthCalendarPage() { const [currentDate, setCurrentDate] = useState(dayjs()); const calendarDays = useMemo(() => { const startOfMonth = currentDate.startOf('month'); const endOfMonth = currentDate.endOf('month'); const startDay = startOfMonth.day(); const days: CalendarDay[] = []; const today = dayjs().format('YYYY-MM-DD'); for (let i = startDay - 1; i >= 0; i--) { const d = startOfMonth.subtract(i + 1, 'day'); days.push({ date: d.format('YYYY-MM-DD'), year: d.year(), month: d.month() + 1, day: d.date(), isCurrentMonth: false, isToday: d.format('YYYY-MM-DD') === today, markers: [], }); } for (let d = startOfMonth; d.isBefore(endOfMonth) || d.isSame(endOfMonth, 'day'); d = d.add(1, 'day')) { const dateStr = d.format('YYYY-MM-DD'); const markers: CalendarDay['markers'] = []; // Calendar markers would be populated from real API data days.push({ date: dateStr, year: d.year(), month: d.month() + 1, day: d.date(), isCurrentMonth: true, isToday: dateStr === today, markers, }); } return days; }, [currentDate]); const weeks: CalendarDay[][] = []; for (let i = 0; i < calendarDays.length; i += 7) { weeks.push(calendarDays.slice(i, i + 7)); } return (
{currentDate.format('YYYY年 M月')}
{['日', '一', '二', '三', '四', '五', '六'].map((w) => ( {w} ))}
{weeks.map((week, wi) => (
{week.map((day) => (
{day.day}
{day.markers.slice(0, 3).map((m, i) => ( ))}
))}
))}
图例
测量日 已服药 漏服药 复查日
); }