fix(teacher): 统一详情页返回路径与中英文文案 (P1-3+P2-1)

P1-3: empty-state 默认按钮 variant 改为 outline 并新增 variant prop;button.tsx 导出 ButtonProps;统一 5 个详情页返回路径为 ghost+ArrowLeft+文字标签;course-plan-detail raw a 改为 Link。P2-1: formatLongDate 默认 locale 改为 zh-CN,weekday 改为 short;返回按钮文案中文化;course-plan-detail 全量中文化;grades/analytics 标题中文化。验证:tsc 0 错误,lint 0 错误,架构图 004/005 已同步。
This commit is contained in:
SpecialX
2026-06-22 13:52:26 +08:00
parent c45b3488c5
commit 5ff7ab9e72
10 changed files with 152 additions and 112 deletions

View File

@@ -46,14 +46,14 @@ export default async function GradeAnalyticsPage({
return (
<div className="h-full flex-1 flex-col space-y-8 p-8 md:flex">
<div>
<h1 className="text-2xl font-bold tracking-tight">Grade Analytics</h1>
<h1 className="text-2xl font-bold tracking-tight"></h1>
<p className="text-muted-foreground">
Trend analysis, class comparisons, and score distributions.
</p>
</div>
<EmptyState
title="No classes"
description="You don't have any classes yet."
title="暂无班级"
description="您还没有任何班级。"
icon={BarChart3}
className="border-none shadow-none"
/>
@@ -98,15 +98,15 @@ export default async function GradeAnalyticsPage({
<div className="h-full flex-1 flex-col space-y-6 p-8 md:flex">
<div className="flex flex-col justify-between gap-4 md:flex-row md:items-center">
<div>
<h1 className="text-2xl font-bold tracking-tight">Grade Analytics</h1>
<h1 className="text-2xl font-bold tracking-tight"></h1>
<p className="text-muted-foreground">
Trend analysis, class comparisons, and score distributions.
</p>
</div>
<Button asChild variant="outline">
<Button asChild variant="ghost" size="sm">
<Link href="/teacher/grades">
<ArrowLeft className="mr-2 h-4 w-4" aria-hidden="true" />
Back to Grades
</Link>
</Button>
</div>

View File

@@ -7,7 +7,7 @@ import { HomeworkAssignmentQuestionErrorOverviewCard } from "@/modules/homework/
import { Badge } from "@/shared/components/ui/badge"
import { Button } from "@/shared/components/ui/button"
import { formatDate } from "@/shared/lib/utils"
import { ChevronLeft, Users, Calendar, BarChart3, CheckCircle2 } from "lucide-react"
import { ArrowLeft, Users, Calendar, BarChart3, CheckCircle2 } from "lucide-react"
export const dynamic = "force-dynamic"
@@ -25,14 +25,12 @@ export default async function HomeworkAssignmentDetailPage({ params }: { params:
<div className="border-b bg-background px-8 py-5">
<div className="flex flex-col gap-4 md:flex-row md:items-start md:justify-between">
<div className="min-w-0 flex flex-col gap-2">
<div className="flex items-center gap-2 text-sm text-muted-foreground mb-1">
<Link href="/teacher/homework/assignments" className="flex items-center hover:text-foreground transition-colors">
<ChevronLeft className="h-4 w-4 mr-1" aria-hidden="true" />
Assignments
<Button asChild variant="ghost" size="sm" className="w-fit">
<Link href="/teacher/homework/assignments">
<ArrowLeft className="mr-2 h-4 w-4" aria-hidden="true" />
</Link>
<span aria-hidden="true">/</span>
<span>Details</span>
</div>
</Button>
<div className="flex items-center gap-3">
<h1 className="text-2xl font-bold tracking-tight text-foreground line-clamp-2">{assignment.title}</h1>
<Badge variant={assignment.status === "published" ? "default" : "secondary"} className="capitalize">

View File

@@ -10,12 +10,13 @@ export default function NewLessonPlanPage(): JSX.Element {
return (
<div className="p-6">
<div className="mb-6 flex items-center gap-4">
<Button asChild variant="ghost" size="icon">
<Link href="/teacher/lesson-plans" aria-label="Back to lesson plans">
<ArrowLeft className="h-4 w-4" aria-hidden="true" />
<Button asChild variant="ghost" size="sm">
<Link href="/teacher/lesson-plans">
<ArrowLeft className="mr-2 h-4 w-4" aria-hidden="true" />
</Link>
</Button>
<h1 className="text-2xl font-bold tracking-tight">New Lesson Plan</h1>
<h1 className="text-2xl font-bold tracking-tight"></h1>
</div>
<TemplatePicker />
</div>

View File

@@ -31,9 +31,10 @@ export default async function TextbookDetailPage({
<div className="flex flex-col h-[calc(100vh-4rem)] overflow-hidden">
{/* Header / Nav (Fixed height) */}
<div className="flex items-center gap-4 py-4 border-b shrink-0 bg-background z-10">
<Button variant="ghost" size="icon" asChild>
<Link href="/teacher/textbooks" aria-label="Back to textbooks">
<ArrowLeft className="h-4 w-4" aria-hidden="true" />
<Button asChild variant="ghost" size="sm">
<Link href="/teacher/textbooks">
<ArrowLeft className="mr-2 h-4 w-4" aria-hidden="true" />
</Link>
</Button>
<div className="flex-1 min-w-0">