From 21142f9b99ac798df096221464434d993b769973 Mon Sep 17 00:00:00 2001
From: SpecialX <47072643+wangxiner55@users.noreply.github.com>
Date: Fri, 3 Jul 2026 10:26:25 +0800
Subject: [PATCH] feat(app): add error/loading boundaries across all dashboard
routes and new routes
- Add error.tsx and loading.tsx boundaries for admin, parent, student, teacher routes
- Add admin announcements edit, audit-logs overview, curriculum-map, invitation-codes, permissions, questions, roles routes
- Add admin elective detail and components, files, course-plans, users, scheduling boundaries
- Add messages group-compose route
- Add parent course-plans, elective, grades report-card, practice routes
- Add student course-plans, elective detail, error-book dialogs, grades report-card, learning study-path, leave, schedule boundaries
- Add teacher attendance report, classes boundaries, course-plans boundaries, elective, exams analytics/edit-rich/all/create/new, grades report-card, homework boundaries, leave, lesson-plans calendar
- Add auth loading, onboarding loading, api cron
---
src/app/(auth)/layout.tsx | 18 +-
src/app/(auth)/loading.tsx | 19 ++
src/app/(auth)/register/page.tsx | 156 +----------------
.../admin/announcements/[id]/edit/page.tsx | 50 ++++++
.../admin/announcements/[id]/page.tsx | 42 ++---
.../admin/announcements/loading.tsx | 39 +----
.../(dashboard)/admin/attendance/error.tsx | 21 +--
src/app/(dashboard)/admin/attendance/page.tsx | 86 ++++++---
.../admin/audit-logs/data-changes/error.tsx | 26 +++
.../admin/audit-logs/data-changes/loading.tsx | 16 ++
.../admin/audit-logs/data-changes/page.tsx | 27 +--
.../(dashboard)/admin/audit-logs/error.tsx | 26 +++
.../(dashboard)/admin/audit-logs/loading.tsx | 16 ++
.../admin/audit-logs/login-logs/error.tsx | 26 +++
.../admin/audit-logs/login-logs/loading.tsx | 16 ++
.../admin/audit-logs/login-logs/page.tsx | 21 ++-
.../admin/audit-logs/overview/error.tsx | 26 +++
.../admin/audit-logs/overview/loading.tsx | 40 +++++
.../admin/audit-logs/overview/page.tsx | 40 +++++
src/app/(dashboard)/admin/audit-logs/page.tsx | 23 ++-
.../admin/course-plans/[id]/edit/error.tsx | 20 +++
.../admin/course-plans/[id]/edit/loading.tsx | 28 +++
.../admin/course-plans/[id]/edit/page.tsx | 14 +-
.../admin/course-plans/[id]/error.tsx | 20 +++
.../admin/course-plans/[id]/loading.tsx | 27 +++
.../admin/course-plans/[id]/page.tsx | 8 +-
.../admin/course-plans/create/error.tsx | 20 +++
.../admin/course-plans/create/loading.tsx | 28 +++
.../admin/course-plans/create/page.tsx | 11 +-
.../(dashboard)/admin/course-plans/error.tsx | 20 +++
.../admin/course-plans/loading.tsx | 21 +++
.../(dashboard)/admin/course-plans/page.tsx | 15 +-
.../admin/curriculum-map/error.tsx | 20 +++
.../admin/curriculum-map/loading.tsx | 20 +++
.../(dashboard)/admin/curriculum-map/page.tsx | 59 +++++++
.../admin/elective/[id]/loading.tsx | 38 ++++
.../(dashboard)/admin/elective/[id]/page.tsx | 47 +++++
.../_components/course-list-loader.tsx | 34 ++++
.../_components/stats-cards-loader.tsx | 12 ++
src/app/(dashboard)/admin/elective/error.tsx | 6 +-
.../(dashboard)/admin/elective/loading.tsx | 74 ++++++--
src/app/(dashboard)/admin/elective/page.tsx | 35 ++--
src/app/(dashboard)/admin/error-book/page.tsx | 49 ++++--
src/app/(dashboard)/admin/files/error.tsx | 33 ++++
src/app/(dashboard)/admin/files/loading.tsx | 54 ++++++
.../admin/invitation-codes/error.tsx | 25 +++
.../admin/invitation-codes/loading.tsx | 42 +++++
.../admin/invitation-codes/page.tsx | 32 ++++
.../admin/lesson-plans/[planId]/view/page.tsx | 27 ++-
.../(dashboard)/admin/lesson-plans/page.tsx | 33 ++--
.../(dashboard)/admin/permissions/error.tsx | 22 +++
.../(dashboard)/admin/permissions/loading.tsx | 30 ++++
.../(dashboard)/admin/permissions/page.tsx | 37 ++++
src/app/(dashboard)/admin/questions/error.tsx | 29 ++++
.../(dashboard)/admin/questions/loading.tsx | 29 ++++
src/app/(dashboard)/admin/questions/page.tsx | 138 +++++++++++++++
.../(dashboard)/admin/roles/[id]/error.tsx | 22 +++
.../(dashboard)/admin/roles/[id]/loading.tsx | 34 ++++
src/app/(dashboard)/admin/roles/[id]/page.tsx | 94 ++++++++++
src/app/(dashboard)/admin/roles/error.tsx | 22 +++
src/app/(dashboard)/admin/roles/loading.tsx | 35 ++++
src/app/(dashboard)/admin/roles/page.tsx | 37 ++++
.../(dashboard)/admin/school/classes/page.tsx | 7 +-
.../(dashboard)/admin/school/grades/error.tsx | 16 +-
.../admin/school/grades/insights/error.tsx | 11 +-
.../admin/school/grades/insights/loading.tsx | 3 +-
.../admin/school/grades/loading.tsx | 3 +-
src/app/(dashboard)/admin/users/error.tsx | 22 +++
src/app/(dashboard)/admin/users/loading.tsx | 41 +++++
src/app/(dashboard)/admin/users/page.tsx | 11 +-
.../(dashboard)/announcements/[id]/page.tsx | 28 +--
src/app/(dashboard)/announcements/loading.tsx | 36 +---
src/app/(dashboard)/announcements/page.tsx | 130 +++++---------
src/app/(dashboard)/dashboard/page.tsx | 2 +-
src/app/(dashboard)/layout.tsx | 29 +---
.../management/grade/dashboard/page.tsx | 93 +++++-----
.../management/grade/practice/error.tsx | 28 ++-
src/app/(dashboard)/messages/[id]/page.tsx | 28 ++-
src/app/(dashboard)/messages/compose/page.tsx | 30 +++-
.../messages/group-compose/error.tsx | 24 +++
.../messages/group-compose/loading.tsx | 40 +++++
.../messages/group-compose/page.tsx | 52 ++++++
src/app/(dashboard)/messages/page.tsx | 59 ++++++-
.../(dashboard)/parent/attendance/error.tsx | 21 +--
.../(dashboard)/parent/attendance/page.tsx | 51 +++++-
.../parent/course-plans/[id]/error.tsx | 20 +++
.../parent/course-plans/[id]/loading.tsx | 23 +++
.../parent/course-plans/[id]/page.tsx | 45 +++++
.../(dashboard)/parent/course-plans/error.tsx | 20 +++
.../parent/course-plans/loading.tsx | 17 ++
.../(dashboard)/parent/course-plans/page.tsx | 45 +++++
src/app/(dashboard)/parent/dashboard/page.tsx | 65 ++++++-
.../(dashboard)/parent/diagnostic/error.tsx | 8 +-
.../(dashboard)/parent/diagnostic/page.tsx | 10 +-
src/app/(dashboard)/parent/elective/error.tsx | 24 +++
.../(dashboard)/parent/elective/loading.tsx | 31 ++++
src/app/(dashboard)/parent/elective/page.tsx | 81 +++++++++
.../(dashboard)/parent/error-book/page.tsx | 133 +++++++-------
src/app/(dashboard)/parent/grades/error.tsx | 11 +-
src/app/(dashboard)/parent/grades/loading.tsx | 3 +-
src/app/(dashboard)/parent/grades/page.tsx | 38 ++--
.../parent/grades/report-card/error.tsx | 35 ++++
.../parent/grades/report-card/loading.tsx | 12 ++
.../parent/grades/report-card/page.tsx | 116 +++++++++++++
src/app/(dashboard)/parent/leave/page.tsx | 136 ++++++++++-----
.../lesson-plans/[planId]/view/page.tsx | 44 +++--
.../(dashboard)/parent/lesson-plans/page.tsx | 41 +++--
src/app/(dashboard)/parent/practice/error.tsx | 30 ++++
.../(dashboard)/parent/practice/loading.tsx | 33 ++++
src/app/(dashboard)/parent/practice/page.tsx | 127 ++++++++++++++
src/app/(dashboard)/profile/page.tsx | 24 +--
src/app/(dashboard)/settings/page.tsx | 5 +-
.../(dashboard)/student/attendance/error.tsx | 21 +--
.../(dashboard)/student/attendance/page.tsx | 8 +-
.../student/course-plans/[id]/error.tsx | 20 +++
.../student/course-plans/[id]/loading.tsx | 23 +++
.../student/course-plans/[id]/page.tsx | 42 +++++
.../student/course-plans/error.tsx | 20 +++
.../student/course-plans/loading.tsx | 17 ++
.../(dashboard)/student/course-plans/page.tsx | 41 +++++
.../(dashboard)/student/diagnostic/page.tsx | 2 +-
.../student/elective/[id]/loading.tsx | 28 +++
.../student/elective/[id]/page.tsx | 47 +++++
.../_components/available-courses-loader.tsx | 51 ++++++
.../_components/my-selections-loader.tsx | 17 ++
.../(dashboard)/student/elective/error.tsx | 4 +-
.../(dashboard)/student/elective/loading.tsx | 50 +++++-
src/app/(dashboard)/student/elective/page.tsx | 43 ++---
.../add-error-book-dialog-with-questions.tsx | 32 ++++
.../(dashboard)/student/error-book/page.tsx | 64 +++----
.../student-error-book-list-client.tsx | 120 +++++++++++++
src/app/(dashboard)/student/grades/error.tsx | 3 +-
.../(dashboard)/student/grades/loading.tsx | 3 +-
src/app/(dashboard)/student/grades/page.tsx | 19 +-
.../student/grades/report-card/error.tsx | 38 ++++
.../student/grades/report-card/loading.tsx | 15 ++
.../student/grades/report-card/page.tsx | 96 ++++++++++
.../assignments/[assignmentId]/page.tsx | 2 +-
.../[assignmentId]/result/error.tsx | 28 +++
.../[assignmentId]/result/loading.tsx | 22 +++
.../[assignmentId]/result/page.tsx | 3 +-
.../student/learning/assignments/error.tsx | 28 +++
.../student/learning/assignments/page.tsx | 2 +-
.../learning/courses/[classId]/error.tsx | 13 ++
.../learning/courses/[classId]/page.tsx | 12 ++
.../student/learning/courses/error.tsx | 13 ++
.../student/learning/courses/page.tsx | 12 ++
.../(dashboard)/student/learning/error.tsx | 13 ++
.../(dashboard)/student/learning/loading.tsx | 34 ++++
src/app/(dashboard)/student/learning/page.tsx | 14 +-
.../student/learning/study-path/error.tsx | 13 ++
.../student/learning/study-path/loading.tsx | 30 ++++
.../student/learning/study-path/page.tsx | 50 ++++++
.../student/learning/textbooks/[id]/error.tsx | 22 +--
.../learning/textbooks/[id]/loading.tsx | 7 +-
.../student/learning/textbooks/[id]/page.tsx | 7 +-
.../student/learning/textbooks/error.tsx | 22 +--
.../student/learning/textbooks/loading.tsx | 25 ++-
.../student/learning/textbooks/page.tsx | 7 +-
src/app/(dashboard)/student/leave/error.tsx | 7 +
src/app/(dashboard)/student/leave/loading.tsx | 25 +++
src/app/(dashboard)/student/leave/page.tsx | 87 ++++++++++
.../lesson-plans/[planId]/view/page.tsx | 44 +++--
.../(dashboard)/student/lesson-plans/page.tsx | 41 +++--
.../student/practice/[sessionId]/page.tsx | 9 +-
src/app/(dashboard)/student/practice/page.tsx | 41 +++--
.../(dashboard)/student/schedule/error.tsx | 13 ++
src/app/(dashboard)/student/schedule/page.tsx | 12 ++
.../(dashboard)/teacher/attendance/error.tsx | 21 +--
.../(dashboard)/teacher/attendance/page.tsx | 15 +-
.../teacher/attendance/report/error.tsx | 7 +
.../teacher/attendance/report/loading.tsx | 35 ++++
.../teacher/attendance/report/page.tsx | 77 ++++++++
.../teacher/attendance/sheet/error.tsx | 7 +
.../teacher/attendance/sheet/page.tsx | 3 +
.../teacher/attendance/stats/error.tsx | 7 +
.../teacher/attendance/stats/page.tsx | 45 +++--
.../teacher/classes/my/[id]/error.tsx | 13 ++
.../teacher/classes/my/[id]/loading.tsx | 41 +++++
.../teacher/classes/my/[id]/page.tsx | 81 +++++----
.../(dashboard)/teacher/classes/my/error.tsx | 13 ++
.../(dashboard)/teacher/classes/my/page.tsx | 15 +-
.../teacher/classes/schedule/error.tsx | 13 ++
.../teacher/classes/schedule/page.tsx | 32 +++-
.../teacher/classes/students/error.tsx | 13 ++
.../teacher/classes/students/page.tsx | 36 ++--
.../teacher/course-plans/[id]/error.tsx | 20 +++
.../teacher/course-plans/[id]/loading.tsx | 27 +++
.../teacher/course-plans/[id]/page.tsx | 11 +-
.../teacher/course-plans/error.tsx | 20 +++
.../teacher/course-plans/loading.tsx | 21 +++
.../(dashboard)/teacher/course-plans/page.tsx | 31 ++--
.../diagnostic/class/[classId]/error.tsx | 8 +-
.../diagnostic/class/[classId]/page.tsx | 31 +++-
.../(dashboard)/teacher/diagnostic/error.tsx | 8 +-
.../(dashboard)/teacher/diagnostic/page.tsx | 63 ++++---
.../diagnostic/student/[studentId]/error.tsx | 8 +-
.../diagnostic/student/[studentId]/page.tsx | 12 +-
.../teacher/elective/[id]/edit/loading.tsx | 27 +++
.../teacher/elective/[id]/edit/page.tsx | 52 ++++++
.../teacher/elective/create/loading.tsx | 27 +++
.../teacher/elective/create/page.tsx | 36 ++++
.../(dashboard)/teacher/elective/error.tsx | 6 +-
src/app/(dashboard)/teacher/elective/page.tsx | 4 +-
.../(dashboard)/teacher/error-book/page.tsx | 132 ++++++++------
.../teacher/exams/[id]/analytics/error.tsx | 24 +++
.../teacher/exams/[id]/analytics/loading.tsx | 22 +++
.../teacher/exams/[id]/analytics/page.tsx | 3 +
.../teacher/exams/[id]/build/page.tsx | 39 +----
.../teacher/exams/[id]/edit-rich/error.tsx | 24 +++
.../teacher/exams/[id]/edit-rich/loading.tsx | 16 ++
.../teacher/exams/[id]/edit-rich/page.tsx | 80 +++++++++
.../teacher/exams/[id]/proctoring/page.tsx | 8 +-
.../(dashboard)/teacher/exams/all/error.tsx | 24 +++
.../(dashboard)/teacher/exams/all/page.tsx | 7 +-
.../teacher/exams/create/error.tsx | 24 +++
.../(dashboard)/teacher/exams/create/page.tsx | 3 +
.../(dashboard)/teacher/exams/new/error.tsx | 24 +++
.../(dashboard)/teacher/exams/new/loading.tsx | 16 ++
.../(dashboard)/teacher/exams/new/page.tsx | 3 +
.../teacher/grades/analytics/loading.tsx | 3 +-
.../teacher/grades/analytics/page.tsx | 149 +++++++++-------
.../teacher/grades/entry/loading.tsx | 3 +-
.../(dashboard)/teacher/grades/entry/page.tsx | 12 +-
src/app/(dashboard)/teacher/grades/error.tsx | 11 +-
.../(dashboard)/teacher/grades/loading.tsx | 3 +-
src/app/(dashboard)/teacher/grades/page.tsx | 49 +++---
.../teacher/grades/report-card/error.tsx | 35 ++++
.../teacher/grades/report-card/loading.tsx | 12 ++
.../teacher/grades/report-card/page.tsx | 116 +++++++++++++
.../teacher/grades/stats/loading.tsx | 3 +-
.../(dashboard)/teacher/grades/stats/page.tsx | 24 +--
.../homework/assignments/[id]/page.tsx | 53 ++++--
.../assignments/[id]/submissions/page.tsx | 7 +-
.../homework/assignments/create/page.tsx | 12 +-
.../teacher/homework/assignments/error.tsx | 28 +++
.../teacher/homework/assignments/loading.tsx | 27 +++
.../teacher/homework/assignments/page.tsx | 5 +-
.../(dashboard)/teacher/homework/error.tsx | 28 +++
.../(dashboard)/teacher/homework/loading.tsx | 17 ++
.../submissions/[submissionId]/error.tsx | 28 +++
.../submissions/[submissionId]/loading.tsx | 30 ++++
.../submissions/[submissionId]/page.tsx | 42 +----
.../[submissionId]/scan-grading/error.tsx | 28 +++
.../[submissionId]/scan-grading/loading.tsx | 24 +++
.../[submissionId]/scan-grading/page.tsx | 3 +
.../teacher/homework/submissions/error.tsx | 28 +++
.../teacher/homework/submissions/loading.tsx | 24 +++
.../teacher/homework/submissions/page.tsx | 33 ++--
src/app/(dashboard)/teacher/leave/error.tsx | 7 +
src/app/(dashboard)/teacher/leave/loading.tsx | 26 +++
src/app/(dashboard)/teacher/leave/page.tsx | 80 +++++++++
.../edit/ai-content-generator-slot.tsx | 27 +++
.../lesson-plans/[planId]/edit/page.tsx | 57 ++----
.../teacher/lesson-plans/calendar/error.tsx | 20 +++
.../teacher/lesson-plans/calendar/loading.tsx | 35 ++++
.../teacher/lesson-plans/calendar/page.tsx | 34 ++++
.../teacher/lesson-plans/new/page.tsx | 4 +
.../(dashboard)/teacher/lesson-plans/page.tsx | 6 +-
.../(dashboard)/teacher/practice/error.tsx | 28 ++-
src/app/(dashboard)/teacher/practice/page.tsx | 21 +--
.../(dashboard)/teacher/questions/error.tsx | 29 ++++
.../(dashboard)/teacher/questions/page.tsx | 89 +++++-----
.../teacher/textbooks/[id]/error.tsx | 22 +--
.../teacher/textbooks/[id]/loading.tsx | 75 ++++----
.../(dashboard)/teacher/textbooks/error.tsx | 22 +--
.../(dashboard)/teacher/textbooks/loading.tsx | 7 +-
src/app/(onboarding)/loading.tsx | 42 +++++
src/app/(onboarding)/onboarding/page.tsx | 29 ++--
src/app/api/ai/chat/route.ts | 164 +++++++++++++++++-
src/app/api/ai/chat/stream/route.ts | 2 +-
src/app/api/cron/audit-cleanup/route.ts | 78 +++++++++
src/app/api/export/route.ts | 7 +-
src/app/api/files/[id]/route.ts | 73 ++++----
src/app/api/files/batch-delete/route.ts | 49 +++---
src/app/api/notifications/stream/route.ts | 13 +-
src/app/api/rate-limit-test/route.ts | 4 +-
src/app/api/upload/route.ts | 128 ++++----------
src/app/globals.css | 64 +++++++
src/app/layout.tsx | 19 +-
280 files changed, 7137 insertions(+), 1855 deletions(-)
create mode 100644 src/app/(auth)/loading.tsx
create mode 100644 src/app/(dashboard)/admin/announcements/[id]/edit/page.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/data-changes/error.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/data-changes/loading.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/error.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/loading.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/login-logs/error.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/login-logs/loading.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/overview/error.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/overview/loading.tsx
create mode 100644 src/app/(dashboard)/admin/audit-logs/overview/page.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/[id]/edit/error.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/[id]/edit/loading.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/[id]/error.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/create/error.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/create/loading.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/error.tsx
create mode 100644 src/app/(dashboard)/admin/course-plans/loading.tsx
create mode 100644 src/app/(dashboard)/admin/curriculum-map/error.tsx
create mode 100644 src/app/(dashboard)/admin/curriculum-map/loading.tsx
create mode 100644 src/app/(dashboard)/admin/curriculum-map/page.tsx
create mode 100644 src/app/(dashboard)/admin/elective/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/admin/elective/[id]/page.tsx
create mode 100644 src/app/(dashboard)/admin/elective/_components/course-list-loader.tsx
create mode 100644 src/app/(dashboard)/admin/elective/_components/stats-cards-loader.tsx
create mode 100644 src/app/(dashboard)/admin/files/error.tsx
create mode 100644 src/app/(dashboard)/admin/files/loading.tsx
create mode 100644 src/app/(dashboard)/admin/invitation-codes/error.tsx
create mode 100644 src/app/(dashboard)/admin/invitation-codes/loading.tsx
create mode 100644 src/app/(dashboard)/admin/invitation-codes/page.tsx
create mode 100644 src/app/(dashboard)/admin/permissions/error.tsx
create mode 100644 src/app/(dashboard)/admin/permissions/loading.tsx
create mode 100644 src/app/(dashboard)/admin/permissions/page.tsx
create mode 100644 src/app/(dashboard)/admin/questions/error.tsx
create mode 100644 src/app/(dashboard)/admin/questions/loading.tsx
create mode 100644 src/app/(dashboard)/admin/questions/page.tsx
create mode 100644 src/app/(dashboard)/admin/roles/[id]/error.tsx
create mode 100644 src/app/(dashboard)/admin/roles/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/admin/roles/[id]/page.tsx
create mode 100644 src/app/(dashboard)/admin/roles/error.tsx
create mode 100644 src/app/(dashboard)/admin/roles/loading.tsx
create mode 100644 src/app/(dashboard)/admin/roles/page.tsx
create mode 100644 src/app/(dashboard)/admin/users/error.tsx
create mode 100644 src/app/(dashboard)/admin/users/loading.tsx
create mode 100644 src/app/(dashboard)/messages/group-compose/error.tsx
create mode 100644 src/app/(dashboard)/messages/group-compose/loading.tsx
create mode 100644 src/app/(dashboard)/messages/group-compose/page.tsx
create mode 100644 src/app/(dashboard)/parent/course-plans/[id]/error.tsx
create mode 100644 src/app/(dashboard)/parent/course-plans/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/parent/course-plans/[id]/page.tsx
create mode 100644 src/app/(dashboard)/parent/course-plans/error.tsx
create mode 100644 src/app/(dashboard)/parent/course-plans/loading.tsx
create mode 100644 src/app/(dashboard)/parent/course-plans/page.tsx
create mode 100644 src/app/(dashboard)/parent/elective/error.tsx
create mode 100644 src/app/(dashboard)/parent/elective/loading.tsx
create mode 100644 src/app/(dashboard)/parent/elective/page.tsx
create mode 100644 src/app/(dashboard)/parent/grades/report-card/error.tsx
create mode 100644 src/app/(dashboard)/parent/grades/report-card/loading.tsx
create mode 100644 src/app/(dashboard)/parent/grades/report-card/page.tsx
create mode 100644 src/app/(dashboard)/parent/practice/error.tsx
create mode 100644 src/app/(dashboard)/parent/practice/loading.tsx
create mode 100644 src/app/(dashboard)/parent/practice/page.tsx
create mode 100644 src/app/(dashboard)/student/course-plans/[id]/error.tsx
create mode 100644 src/app/(dashboard)/student/course-plans/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/student/course-plans/[id]/page.tsx
create mode 100644 src/app/(dashboard)/student/course-plans/error.tsx
create mode 100644 src/app/(dashboard)/student/course-plans/loading.tsx
create mode 100644 src/app/(dashboard)/student/course-plans/page.tsx
create mode 100644 src/app/(dashboard)/student/elective/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/student/elective/[id]/page.tsx
create mode 100644 src/app/(dashboard)/student/elective/_components/available-courses-loader.tsx
create mode 100644 src/app/(dashboard)/student/elective/_components/my-selections-loader.tsx
create mode 100644 src/app/(dashboard)/student/error-book/add-error-book-dialog-with-questions.tsx
create mode 100644 src/app/(dashboard)/student/error-book/student-error-book-list-client.tsx
create mode 100644 src/app/(dashboard)/student/grades/report-card/error.tsx
create mode 100644 src/app/(dashboard)/student/grades/report-card/loading.tsx
create mode 100644 src/app/(dashboard)/student/grades/report-card/page.tsx
create mode 100644 src/app/(dashboard)/student/learning/assignments/[assignmentId]/result/error.tsx
create mode 100644 src/app/(dashboard)/student/learning/assignments/[assignmentId]/result/loading.tsx
create mode 100644 src/app/(dashboard)/student/learning/assignments/error.tsx
create mode 100644 src/app/(dashboard)/student/learning/courses/[classId]/error.tsx
create mode 100644 src/app/(dashboard)/student/learning/courses/error.tsx
create mode 100644 src/app/(dashboard)/student/learning/error.tsx
create mode 100644 src/app/(dashboard)/student/learning/loading.tsx
create mode 100644 src/app/(dashboard)/student/learning/study-path/error.tsx
create mode 100644 src/app/(dashboard)/student/learning/study-path/loading.tsx
create mode 100644 src/app/(dashboard)/student/learning/study-path/page.tsx
create mode 100644 src/app/(dashboard)/student/leave/error.tsx
create mode 100644 src/app/(dashboard)/student/leave/loading.tsx
create mode 100644 src/app/(dashboard)/student/leave/page.tsx
create mode 100644 src/app/(dashboard)/student/schedule/error.tsx
create mode 100644 src/app/(dashboard)/teacher/attendance/report/error.tsx
create mode 100644 src/app/(dashboard)/teacher/attendance/report/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/attendance/report/page.tsx
create mode 100644 src/app/(dashboard)/teacher/attendance/sheet/error.tsx
create mode 100644 src/app/(dashboard)/teacher/attendance/stats/error.tsx
create mode 100644 src/app/(dashboard)/teacher/classes/my/[id]/error.tsx
create mode 100644 src/app/(dashboard)/teacher/classes/my/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/classes/my/error.tsx
create mode 100644 src/app/(dashboard)/teacher/classes/schedule/error.tsx
create mode 100644 src/app/(dashboard)/teacher/classes/students/error.tsx
create mode 100644 src/app/(dashboard)/teacher/course-plans/[id]/error.tsx
create mode 100644 src/app/(dashboard)/teacher/course-plans/[id]/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/course-plans/error.tsx
create mode 100644 src/app/(dashboard)/teacher/course-plans/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/elective/[id]/edit/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/elective/[id]/edit/page.tsx
create mode 100644 src/app/(dashboard)/teacher/elective/create/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/elective/create/page.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/[id]/analytics/error.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/[id]/analytics/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/[id]/edit-rich/error.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/[id]/edit-rich/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/[id]/edit-rich/page.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/all/error.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/create/error.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/new/error.tsx
create mode 100644 src/app/(dashboard)/teacher/exams/new/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/grades/report-card/error.tsx
create mode 100644 src/app/(dashboard)/teacher/grades/report-card/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/grades/report-card/page.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/assignments/error.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/assignments/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/error.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/submissions/[submissionId]/error.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/submissions/[submissionId]/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/submissions/[submissionId]/scan-grading/error.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/submissions/[submissionId]/scan-grading/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/submissions/error.tsx
create mode 100644 src/app/(dashboard)/teacher/homework/submissions/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/leave/error.tsx
create mode 100644 src/app/(dashboard)/teacher/leave/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/leave/page.tsx
create mode 100644 src/app/(dashboard)/teacher/lesson-plans/[planId]/edit/ai-content-generator-slot.tsx
create mode 100644 src/app/(dashboard)/teacher/lesson-plans/calendar/error.tsx
create mode 100644 src/app/(dashboard)/teacher/lesson-plans/calendar/loading.tsx
create mode 100644 src/app/(dashboard)/teacher/lesson-plans/calendar/page.tsx
create mode 100644 src/app/(dashboard)/teacher/questions/error.tsx
create mode 100644 src/app/(onboarding)/loading.tsx
create mode 100644 src/app/api/cron/audit-cleanup/route.ts
diff --git a/src/app/(auth)/layout.tsx b/src/app/(auth)/layout.tsx
index fdcd0ae..9dc8933 100644
--- a/src/app/(auth)/layout.tsx
+++ b/src/app/(auth)/layout.tsx
@@ -1,5 +1,19 @@
import { AuthLayout } from "@/modules/auth/components/auth-layout"
+import { getBrandConfig } from "@/modules/settings/data-access-brand"
-export default function Layout({ children }: { children: React.ReactNode }) {
- return
{t("description.edit")}
+{t("description.edit")}
+{t("analytics.title")}
+{label}
+{value}
+{t("description.detail")}
++ {error.message} +
+ +{error.message}
+ +{error.message}
+ ++ All permission points defined in the system, grouped by module. +
+{t("subtitle")}
+{error.message}
+ +{role.description}
+ )} +{error.message}
+ ++ Create custom roles and manage permission assignments. +
+{t("classManagement.description")}
-{error.message}
+ +- {t("description.list")} -
++ {t("description.list")} +
+{t("grades.gradeDashboard.description")}
加载年级练习数据时发生错误
+{t("errors.pageErrorGrade")}
{t("description.compose")}
{t("description.groupCompose")}
+{t("parent.description")}
+- {t("error.loadFailed")} for {item.studentName}. + {t("error.childLoadFailed", { studentName: item.studentName })}
- {t("error.loadFailed")}. Please refresh the page or contact the school administrator if the problem persists. + {t("error.childLoadFailedDesc")}
+ {t("reportCard.errorDescription")} +
+{t("reportCard.loading")}
++ {t("reportCard.academicYearsCount", { + count: academicYears.length, + })} +
+{t("description.parent")}
+- {t("description")} -
+{t("description.parent")}
{t("parent.description")}
{t("parent.description")}
+{t("parent.description")}
+{t("description.student")}
{t("student.description")}
+{t("description.detail")}
+{t("description.student")}
+ {t("reportCard.errorDescription")} +
+{t("reportCard.loading")}
++ {t("reportCard.academicYearsCount", { + count: academicYears.length, + })} +
+{t("description")}
+{t("description.student")}
+{t("student.description")}
{t("page.description")}
-{t("page.description")}
{t("report.description")}
+{t("report.description")}
+{t("description.teacherStats")}
+{t("description.teacherStats")}
+- View your course teaching plans and weekly schedules. -
+{t("teacher.description")}
- Class-level knowledge point mastery overview and student attention list. + {t("title.teacherClassDesc")}
- View and manage diagnostic reports based on knowledge point mastery. + {t("title.teacherReportListDesc")}
- Knowledge point mastery analysis and diagnostic reports. + {t("title.teacherStudentDesc")}
{t("description.edit")}
+{t("description.create")}
+按学科、班级查看学生的错题统计与薄弱知识点。
+{t("teacher.descriptionShort")}
按学科、班级查看学生的错题统计与薄弱知识点。
+{t("teacher.descriptionShort")}
- 按学科、班级查看学生的错题统计与薄弱知识点,辅助精准教学。 + {t("teacher.description")}
Assemble questions for your exam.
+{t("description")}
{t("exam.richEditor.description")}
+Monitor student activity during the exam.
+{t("description")}
- 趋势分析、班级对比与分数分布。 -
+{t("page.analytics.description")}
- 趋势分析、班级对比与分数分布。 -
+{t("page.analytics.description")}
- 从试卷库选择试卷,按每题得分录入,像填 Excel 表格一样。 -
+{t("page.entry.description")}
管理学生成绩记录。
+{t("page.list.description")}
+ {t("reportCard.errorDescription")} +
+{t("reportCard.loading")}
++ {t("reportCard.academicYearsCount", { + count: academicYears.length, + })} +
+View class grade statistics and rankings.
+{t("page.stats.description")}
View class grade statistics and rankings.
+{t("page.stats.description")}
View class grade statistics and rankings.
+{t("page.stats.description")}
{assignment.description || "No description provided."}
+{assignment.description || t("homework.take.noDescription")}
快速发布文本作业或从考试派生。
+{t("homework.form.createDescription")}