import { AlertTriangle, CheckCircle2, HeartPulse, PhoneCall } from "lucide-react"; import { AlertActions, CheckInButton } from "@/components/family-guard-actions"; import { PanelShell } from "@/components/panel-shell"; import { requireFamilyWorkspace } from "@/lib/family-page"; import { formatDateTime } from "@/lib/panel-format"; import { requireCaregiverSession } from "@/lib/page-auth"; import { getCaregiverDisplayName } from "@/lib/session"; export const dynamic = "force-dynamic"; export default async function GuardPage() { const caregiver = await requireCaregiverSession("/guard"); const workspace = await requireFamilyWorkspace(caregiver.id); const elder = workspace.elderProfile; const device = elder.elderDevice; const lastSeenAt = device.lastSeenAt; const isOnline = Boolean(lastSeenAt); const openAlerts = workspace.alerts.filter((alert) => alert.status === "OPEN" || alert.status === "ACKNOWLEDGED"); const today = new Date().toDateString(); const todayDoses = workspace.medicationPlans.flatMap((plan) => plan.doses).filter((dose) => dose.scheduledFor.toDateString() === today); const doneDoses = todayDoses.filter((dose) => dose.status === "TAKEN").length; const openTasks = workspace.tasks.filter((task) => task.status !== "COMPLETED" && task.status !== "CANCELLED"); const pendingCheckIns = workspace.checkIns.filter((checkIn) => checkIn.status === "PENDING"); const dutyNames = workspace.memberships .filter((membership) => membership.emergencyPush) .map((membership) => membership.caregiver.nickname || membership.caregiver.username || "家人"); return (
{elder.preferredName.slice(0, 1)} {elder.preferredName} {isOnline ? "在线" : "离线"} {isOnline ? `最近与数字人互动 · ${device.displayName || "长辈终端"}` : `最近在线:${formatDateTime(lastSeenAt)} · ${device.displayName || "长辈终端"}`}
{openAlerts.length}待处理提醒
{doneDoses}/{todayDoses.length}今日用药
{openTasks.length}照护事项
{pendingCheckIns.length}待报平安

风险提醒

人工确认后再处置
{workspace.alerts.length ? workspace.alerts.map((alert) => (
{alert.title} {formatDateTime(alert.createdAt)}

{alert.summary}

{alert.claimedBy ? `已由 ${alert.claimedBy.nickname || alert.claimedBy.username || "家人"} 接手` : "尚未认领"}

)) : (

当前没有待处理的风险提醒
)}

今日状态

设备最近在线{formatDateTime(lastSeenAt)}

仅根据终端在线和主动交互记录展示,不代表生命体征状态。

家庭值守

{dutyNames.length ? `${dutyNames.join("、")}已开启紧急推送` : "尚未设置家庭值守"}

); }