第二期:企业信任风 UI + 打卡科目分类 + 英语语法学习模块

- 全站按 Corporate Trust 设计规范重做:靛蓝/紫罗兰渐变、Plus Jakarta Sans
  自托管字体、带色阴影、卡片悬浮、氛围光斑
- 打卡任务增加科目分类(语文/数学/英语/运动/其他),孩子端按科目分组
- 英语语法自学模块:线性解锁课程 + 课后/周/月测验引擎,测验达标
  自动联动当日英语打卡;家长概览显示语法进度
- 课程内容:A1→B1 完整大纲,9 周 54 课 + 9 周测 + 2 月测,讲解/例句/
  练习/测验均原创,仅参考两份语法书的主题编排

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
jacobxu666
2026-08-03 01:20:04 +08:00
co-authored by Claude Opus 4.8
parent b08f6649be
commit 6ed4d5a61e
45 changed files with 5824 additions and 92 deletions
+28 -8
View File
@@ -1,6 +1,7 @@
"use client";
import { logout } from "@/app/login/actions";
import { BackgroundBlobs } from "@/components/background-blobs";
import { Button } from "@/components/ui/button";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { DevicesTab } from "./devices-tab";
@@ -13,10 +14,11 @@ export type OverviewData = {
name: string;
streak: number;
today: { done: number; total: number };
grammar: { done: number; total: number };
week: {
date: string;
isToday: boolean;
tasks: { id: number; title: string; status: "pending" | "done"; isMakeup: boolean }[];
tasks: { id: number; title: string; subject: string; status: "pending" | "done"; isMakeup: boolean }[];
}[];
}[];
};
@@ -25,7 +27,7 @@ export type TemplatesData = {
kids: {
id: number;
name: string;
items: { id: number; dow: number; title: string; requiresPhoto: boolean }[];
items: { id: number; dow: number; title: string; subject: string; requiresPhoto: boolean }[];
}[];
};
@@ -52,9 +54,12 @@ export function ParentDashboard({
const kids = overview.kids.map((k) => ({ id: k.id, name: k.name }));
return (
<main className="mx-auto max-w-2xl space-y-5 p-4 pb-10">
<main className="relative mx-auto max-w-2xl space-y-5 p-4 pb-10">
<BackgroundBlobs />
<header className="flex items-center justify-between">
<h1 className="text-2xl font-bold">家长端</h1>
<h1 className="text-2xl font-extrabold tracking-tight">
家长<span className="text-gradient">中心</span>
</h1>
<form action={logout}>
<Button type="submit" variant="outline" size="sm">
退出登录
@@ -63,10 +68,25 @@ export function ParentDashboard({
</header>
<Tabs defaultValue="overview">
<TabsList className="grid w-full grid-cols-3">
<TabsTrigger value="overview">今日概览</TabsTrigger>
<TabsTrigger value="templates">任务模板</TabsTrigger>
<TabsTrigger value="devices">设备管理</TabsTrigger>
<TabsList className="grid w-full grid-cols-3 bg-slate-100/80">
<TabsTrigger
value="overview"
className="data-[state=active]:bg-white data-[state=active]:text-indigo-600 data-[state=active]:shadow-soft"
>
今日概览
</TabsTrigger>
<TabsTrigger
value="templates"
className="data-[state=active]:bg-white data-[state=active]:text-indigo-600 data-[state=active]:shadow-soft"
>
任务模板
</TabsTrigger>
<TabsTrigger
value="devices"
className="data-[state=active]:bg-white data-[state=active]:text-indigo-600 data-[state=active]:shadow-soft"
>
设备管理
</TabsTrigger>
</TabsList>
<TabsContent value="overview" className="mt-4">
<OverviewTab data={overview} />