import Link from "next/link" import { AlertTriangle, Bell, CalendarCheck, PenTool } from "lucide-react" import { Card } from "@/shared/components/ui/card" import { cn } from "@/shared/lib/utils" import type { ParentDashboardData } from "@/modules/parent/types" type AttentionItem = { id: string label: string count: number href: string variant: "danger" | "warning" | "info" icon: typeof AlertTriangle } const buildAttentionItems = (data: ParentDashboardData): AttentionItem[] => { const items: AttentionItem[] = [] const totalOverdue = data.children.reduce((sum, c) => sum + c.homeworkSummary.overdueCount, 0) if (totalOverdue > 0) { // 找到第一个有逾期作业的子女,直接跳转其详情页 homework tab const childWithOverdue = data.children.find((c) => c.homeworkSummary.overdueCount > 0) items.push({ id: "overdue-homework", label: "Overdue homework", count: totalOverdue, href: childWithOverdue ? `/parent/children/${childWithOverdue.basicInfo.id}?tab=homework` : "/parent/dashboard", variant: "danger", icon: PenTool, }) } const totalPending = data.children.reduce((sum, c) => sum + c.homeworkSummary.pendingCount, 0) if (totalPending > 0) { const childWithPending = data.children.find((c) => c.homeworkSummary.pendingCount > 0) items.push({ id: "pending-homework", label: "Pending homework", count: totalPending, href: childWithPending ? `/parent/children/${childWithPending.basicInfo.id}?tab=homework` : "/parent/dashboard", variant: "warning", icon: PenTool, }) } items.push({ id: "attendance", label: "Attendance", count: data.children.length, href: "/parent/attendance", variant: "info", icon: CalendarCheck, }) items.push({ id: "announcements", label: "Announcements", count: 0, href: "/announcements", variant: "info", icon: Bell, }) return items } const VARIANT_STYLES: Record = { danger: "border-destructive/30 bg-destructive/5 text-destructive", warning: "border-warning/30 bg-warning/5 text-warning-foreground", info: "border-border bg-muted/40 text-foreground", } /** * 仪表盘顶部"需要关注"横幅。 * 聚合所有子女的异常项(逾期作业、待办、考勤、公告),让家长一眼定位异常。 */ export function ParentAttentionBanner({ data }: { data: ParentDashboardData }) { const items = buildAttentionItems(data) const hasUrgent = items.some((i) => i.variant === "danger" && i.count > 0) if (items.length === 0) return null return (
{hasUrgent ? ( ) : ( )} {hasUrgent ? "Needs attention" : "Nothing urgent"}
{items.map((item) => { const Icon = item.icon const isUrgent = item.variant === "danger" && item.count > 0 return ( {item.label} {item.count} ) })}
) }