From d6ca3d8896d9f86d5cc0aea7836fcd3544b38b6b Mon Sep 17 00:00:00 2001 From: 15945162479 <15945162479@qq.com> Date: Sat, 13 Dec 2025 14:46:13 +0800 Subject: [PATCH] Add File --- src/elderly/components/ScheduleReminder.tsx | 99 +++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/elderly/components/ScheduleReminder.tsx diff --git a/src/elderly/components/ScheduleReminder.tsx b/src/elderly/components/ScheduleReminder.tsx new file mode 100644 index 0000000..bd326a3 --- /dev/null +++ b/src/elderly/components/ScheduleReminder.tsx @@ -0,0 +1,99 @@ +import React, { useEffect } from 'react'; +import { Clock, CheckCircle, XCircle, Ban } from 'lucide-react'; +import * as scheduleService from '../services/scheduleService'; + +interface ScheduleReminderProps { + schedule: scheduleService.Schedule; + onComplete: () => void; + onSkip: () => void; + onDismiss: () => void; + onMissed: () => void; // 30分钟后自动标记为已错过 +} + +/** + * 日程提醒弹窗组件 + * 当日程到达执行时间时弹出的大字体提醒 + * 30分钟后自动标记为已错过并关闭弹窗 + */ +export const ScheduleReminder: React.FC = ({ + schedule, + onComplete, + onSkip, + onDismiss, + onMissed, +}) => { + const typeIcon = scheduleService.getScheduleTypeIcon(schedule.schedule_type || 'other'); + const typeLabel = scheduleService.getScheduleTypeLabel(schedule.schedule_type || 'other'); + const time = scheduleService.formatTime(schedule.schedule_time); + + // 30分钟后自动标记为已错过 + useEffect(() => { + const timer = setTimeout(() => { + console.log('提醒弹窗已显示30分钟无操作,自动标记为已错过'); + onMissed(); + }, 30 * 60 * 1000); // 30分钟 = 1800000毫秒 + + return () => clearTimeout(timer); + }, [onMissed]); + + return ( +
+
+ {/* 头部 - 大图标 */} +
+
{typeIcon}
+
+ + + {time} + +
+

{typeLabel}

+
+ + {/* 主要内容 */} +
+

+ {schedule.title} +

+ + {schedule.description && ( +

+ {schedule.description} +

+ )} + + {/* 操作按钮 */} +
+ {/* 第一行:标记完成 */} + + + {/* 第二行:推迟执行 和 忽略行程 */} +
+ + +
+
+
+
+
+ ); +};