"use client" import { AlertTriangle, Phone } from "lucide-react" import { useTranslations } from "next-intl" import { Card } from "@/shared/components/ui/card" import { cn } from "@/shared/lib/utils" import type { ParentStudentAttendanceSummary } from "@/modules/parent/types" type Warning = { studentId: string studentName: string message: string severity: "high" | "medium" } /** 翻译函数类型(与 `useTranslations("attendance")` 返回值兼容) */ type Translator = ReturnType /** * 构建考勤异常预警列表(纯函数,便于测试)。 */ export function buildWarnings( summaries: ParentStudentAttendanceSummary[], t: Translator, ): Warning[] { const warnings: Warning[] = [] for (const s of summaries) { const { stats, studentName, studentId } = s if (stats.absent >= 3) { warnings.push({ studentId, studentName, message: t("parent.absentHighSeverity", { count: stats.absent }), severity: "high", }) } else if (stats.absent >= 1) { warnings.push({ studentId, studentName, message: t("parent.absentWarning", { count: stats.absent }), severity: "medium", }) } if (stats.late >= 3) { warnings.push({ studentId, studentName, message: t("parent.lateWarning", { count: stats.late }), severity: "medium", }) } if (stats.presentRate < 90 && stats.total > 0) { warnings.push({ studentId, studentName, message: t("parent.lowRateWarning", { rate: stats.presentRate.toFixed(1) }), severity: "high", }) } } return warnings } /** * 家长视角的考勤异常预警横幅。 * 聚合所有子女的考勤异常(缺勤、迟到、低出勤率),提醒家长及时关注。 */ export function ParentAttendanceWarning({ summaries, }: { summaries: ParentStudentAttendanceSummary[] }) { const t = useTranslations("attendance") const warnings = buildWarnings(summaries, t) if (warnings.length === 0) return null return ( w.severity === "high") && "border-destructive/50", )} aria-label={t("parent.warningTitle")} >
{t("parent.warningTitle")}
    {warnings.map((w, idx) => (
  • {w.studentName}: {w.message}
  • ))}
{t("parent.contactHomeroom")}
) }