feat(parent,auth,onboarding,files,notifications,adaptive-practice,ai): add module updates

parent:

- Add parent-student-attendance-detail component

auth:

- Add actions, data-access, schema, services, types

onboarding:

- Add parent-children-form and hooks directory

files:

- Add actions, schema, hooks directory

notifications:

- Add schema and schema test

adaptive-practice:

- Add answer-input, answer-result, practice-result-view, practice-starter-with-nav

- Add question-card, question-content, lib and services directories

ai:

- Add context/create-ai-client-service, hooks/use-drag-position, hooks/use-position-persistence
This commit is contained in:
SpecialX
2026-07-03 10:26:12 +08:00
parent f3c223d914
commit e9a5264fe7
84 changed files with 6060 additions and 2530 deletions

View File

@@ -1,7 +1,5 @@
"use client"
import { CalendarCheck, CalendarX, Clock, TrendingUp } from "lucide-react"
import { useTranslations } from "next-intl"
import { getTranslations } from "next-intl/server"
import { Card } from "@/shared/components/ui/card"
import { cn } from "@/shared/lib/utils"
@@ -50,15 +48,17 @@ const TONE_STYLES: Record<"good" | "warn" | "bad", string> = {
}
/**
* 家长考勤页顶部的出勤率汇总卡片。
* 家长考勤页顶部的出勤率汇总卡片RSC
* 聚合所有子女的出勤率、缺勤、迟到总数,让家长一眼掌握整体情况。
*
* P2-8 修复:从 client component 降级为 RSC使用 `getTranslations`。
*/
export function ParentAttendanceRateCard({
export async function ParentAttendanceRateCard({
summaries,
}: {
summaries: ParentStudentAttendanceSummary[]
}) {
const t = useTranslations("attendance")
const t = await getTranslations("attendance")
const stats = aggregateStats(summaries)
if (stats.totalStudents === 0) return null