import { BookOpen, UserX } from "lucide-react" import { getTranslations } from "next-intl/server" import { getTextbooksWithScope } from "@/modules/textbooks/data-access" import { TextbookCard } from "@/modules/textbooks/components/textbook-card" import { TextbookFilters } from "@/modules/textbooks/components/textbook-filters" import { getCurrentStudentUser } from "@/modules/users/data-access" import { getGradeNameById } from "@/modules/school/data-access" import { EmptyState } from "@/shared/components/ui/empty-state" export const dynamic = "force-dynamic" type SearchParams = { [key: string]: string | string[] | undefined } const getParam = (params: SearchParams, key: string): string | undefined => { const v = params[key] return Array.isArray(v) ? v[0] : v } export default async function StudentTextbooksPage({ searchParams, }: { searchParams: Promise }) { const t = await getTranslations("textbooks") const [student, sp] = await Promise.all([getCurrentStudentUser(), searchParams]) if (!student) { return (
) } const q = getParam(sp, "q") const subject = getParam(sp, "subject") const grade = getParam(sp, "grade") // P1-1 数据范围过滤:学生端强制按学生所在年级过滤 // student.gradeId 是 grades 表 id,需通过 getGradeNameById 解析为年级名称(如 "Grade 7"), // 才能与 textbooks.grade 字符串字段匹配 const studentGradeName = student.gradeId ? await getGradeNameById(student.gradeId) : null const textbooks = await getTextbooksWithScope(q, subject, grade, { grade: studentGradeName ?? undefined, }) const hasFilters = Boolean(q || (subject && subject !== "all") || (grade && grade !== "all")) return (

{t("student.list.title")}

{t("student.list.subtitle")}

{textbooks.length === 0 ? ( ) : (
{textbooks.map((textbook) => ( ))}
)}
) }