import type { JSX } from "react" import Link from "next/link" import { EmptyState } from "@/shared/components/ui/empty-state" import { Badge } from "@/shared/components/ui/badge" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/shared/components/ui/table" import { ListPagination, computePagination, paginate } from "@/shared/components/ui/list-pagination" import { formatDate } from "@/shared/lib/utils" import { type SearchParams } from "@/shared/lib/search-params" import { getHomeworkAssignmentReviewList } from "@/modules/homework/data-access" import { Inbox } from "lucide-react" import { getTeacherIdForMutations } from "@/modules/classes/data-access" export const dynamic = "force-dynamic" const PAGE_SIZE = 10 export default async function SubmissionsPage({ searchParams }: { searchParams: Promise }): Promise { const sp = await searchParams const creatorId = await getTeacherIdForMutations() const assignments = await getHomeworkAssignmentReviewList({ creatorId }) const hasAssignments = assignments.length > 0 // 分页计算 const { page } = computePagination(sp, PAGE_SIZE) const total = assignments.length const totalPages = Math.max(1, Math.ceil(total / PAGE_SIZE)) const currentPage = Math.min(page, totalPages) const pagedAssignments = paginate(assignments, currentPage, PAGE_SIZE) return (

作业提交

按作业查看提交与批改进度。

{!hasAssignments ? ( ) : (
作业 状态 截止时间 应交 已交 已批 提交率 {pagedAssignments.map((a) => { const submissionRate = a.targetCount > 0 ? (a.submittedCount / a.targetCount) * 100 : 0 return ( {a.title} {a.sourceExamTitle ? (
{a.sourceExamTitle}
) : (
快速作业
)}
{a.status} {a.dueAt ? formatDate(a.dueAt) : "-"} {a.targetCount} {a.submittedCount} {a.gradedCount} {a.targetCount > 0 ? `${submissionRate.toFixed(0)}%` : "-"}
) })}
)}
) }