"use client" import { useRouter, useSearchParams } from "next/navigation" import { useTranslations } from "next-intl" import { cn } from "@/shared/lib/utils" import { Badge } from "@/shared/components/ui/badge" import type { SubjectErrorOverview } from "@/modules/error-book/types" interface SubjectTabsProps { subjects: SubjectErrorOverview[] /** 当前选中的学科 ID(null 表示全部) */ currentSubjectId: string | null /** URL 参数名(默认 "subject") */ paramName?: string } /** * 学科切换 Tab(教师/管理员视图) * 显示每个学科的错题数概览,点击切换 */ export function SubjectTabs({ subjects, currentSubjectId, paramName = "subject", }: SubjectTabsProps) { const router = useRouter() const searchParams = useSearchParams() const t = useTranslations("error-book") const handleSelect = (subjectId: string | null) => { const params = new URLSearchParams(searchParams.toString()) if (subjectId === null) { params.delete(paramName) } else { params.set(paramName, subjectId) } router.push(`?${params.toString()}`, { scroll: false }) } if (subjects.length === 0) return null const totalErrors = subjects.reduce((sum, s) => sum + s.totalErrorItems, 0) return (
{subjects.map((subject) => { const isActive = currentSubjectId === subject.subjectId return ( ) })}
) }