2026-07-19 19:45:32 +08:00

79 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Link from "next/link";
import { MedicationForm, MemoForm, TaskActions, TaskForm } 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 CarePage({ searchParams }: PageProps<"/care">) {
const caregiver = await requireCaregiverSession("/care");
const workspace = await requireFamilyWorkspace(caregiver.id);
const tab = String((await searchParams).tab || "tasks");
const deviceUuid = workspace.elderProfile.elderDevice.deviceUuid;
return (
<PanelShell currentPath="/care" title="共同照护" description="家人分工、老人确认、结果共享" caregiverLabel={getCaregiverDisplayName(caregiver)} caregiverId={caregiver.id}>
<div className="segment">
<Link className={tab === "tasks" ? "active" : ""} href="/care?tab=tasks"></Link>
<Link className={tab === "medications" ? "active" : ""} href="/care?tab=medications"></Link>
<Link className={tab === "memos" ? "active" : ""} href="/care?tab=memos"></Link>
</div>
{tab === "medications" ? (
<>
<MedicationForm deviceUuid={deviceUuid} />
<section>
<div className="section-title"><h2></h2><span></span></div>
<div className="card">
{workspace.medicationPlans.length ? workspace.medicationPlans.map((plan) => (
<article className="timeline-item" key={plan.id}>
<div className="timeline-top strong">{plan.name}<span className="tag">{plan.active ? "进行中" : "已暂停"}</span></div>
<p className="timeline-body"> {plan.dosage} · {JSON.parse(plan.timesJson).join("、")}{plan.instructions ? ` · ${plan.instructions}` : ""}</p>
<p className="row-meta">{plan.source === "PRESCRIPTION" ? "医生处方" : plan.source === "PACKAGE_LABEL" ? "药盒标签" : "家属录入"}</p>
</article>
)) : <div className="empty"></div>}
</div>
</section>
</>
) : tab === "memos" ? (
<>
<MemoForm deviceUuid={deviceUuid} />
<section>
<div className="section-title"><h2></h2></div>
<div className="card">
{workspace.memos.length ? workspace.memos.map((memo) => (
<article className="timeline-item" key={memo.id}>
<div className="timeline-top strong">{memo.title}<span className="tag">{memo.priority === "PINNED" ? "长期置顶" : memo.priority === "IMPORTANT" ? "重要" : "普通"}</span></div>
<p className="timeline-body">{memo.content}</p>
<p className="row-meta">{memo.visibility === "FAMILY_ONLY" ? "仅家人可见" : "可由数字人告诉长辈"}</p>
</article>
)) : <div className="empty"></div>}
</div>
</section>
</>
) : (
<>
<TaskForm deviceUuid={deviceUuid} />
<section>
<div className="section-title"><h2></h2><span></span></div>
<div className="card">
{workspace.tasks.length ? workspace.tasks.map((task) => (
<article className="timeline-item" key={task.id}>
<div className="timeline-top strong">{task.title}<span className="timeline-time">{task.dueAt ? formatDateTime(task.dueAt) : "未设期限"}</span></div>
<p className="timeline-body">{task.description || "等待家人认领"}</p>
<p className="row-meta">{task.assignedTo ? `负责人:${task.assignedTo.nickname || task.assignedTo.username || "家人"}` : "尚未认领"}</p>
<TaskActions taskId={task.id} status={task.status} />
</article>
)) : <div className="empty"></div>}
</div>
</section>
</>
)}
</PanelShell>
);
}