- Add Tiptap-based rich text editor with custom extensions (dotted-mark, blank-node, image-node, group-block, question-block) for exam creation - Add AI auto-marking action to convert pasted exam text to structured editor doc - Add resizable split-panel layout for editor + live preview - Add student scan upload (photo of paper answers) with drag-drop and reorder - Add scan image viewer with zoom/rotate/fullscreen for teachers - Add scan grading view with side-by-side questions and scan images - Add /teacher/exams/new and /teacher/homework/submissions/[id]/scan-grading routes - Fix getScansAction to support both teacher (HOMEWORK_GRADE) and student (HOMEWORK_SUBMIT) permission scopes - Add i18n keys for rich editor, scan upload, and scan grading (zh-CN/en) - Sync architecture diagrams (004/005) with new modules, routes, and deps
19 lines
634 B
TypeScript
19 lines
634 B
TypeScript
import type { JSX } from "react"
|
|
import { getTranslations } from "next-intl/server"
|
|
import { ExamRichForm } from "@/modules/exams/components/exam-rich-form"
|
|
|
|
export const dynamic = "force-dynamic"
|
|
|
|
export default async function NewExamPage(): Promise<JSX.Element> {
|
|
const t = await getTranslations("examHomework")
|
|
return (
|
|
<div className="mx-auto w-full max-w-[1400px] space-y-6 p-6">
|
|
<div>
|
|
<h1 className="text-2xl font-bold tracking-tight">{t("exam.richEditor.title")}</h1>
|
|
<p className="text-muted-foreground">{t("exam.richEditor.description")}</p>
|
|
</div>
|
|
<ExamRichForm />
|
|
</div>
|
|
)
|
|
}
|