feat(web): migrate student academic insights

Add React exam and invigilation schedules, student transcript metrics and score breakdowns, and academic warning acknowledgement with support follow-up timelines. Connect role-aware navigation and dashboard links.
This commit is contained in:
biss authored and biss committed 2026-10-03 21:38:14 +08:00
1 parent e926dd00f2
commit f657290e71
9 files changed
+217 -5

No files matched your search

+3
View File
@@ -10,5 +10,8 @@
| `/users` | 用户与权限 | SuperAdmin | 列表、筛选、分页、创建、启停、重置密码、角色范围、Excel | verification | | `/users` | 用户与权限 | SuperAdmin | 列表、筛选、分页、创建、启停、重置密码、角色范围、Excel | verification |
| `/notifications` | 通知中心 | 已登录用户 | 收件箱筛选、游标分页、已读回执、权限范围/筛选/指定收件人群发、已发送 | verification | | `/notifications` | 通知中心 | 已登录用户 | 收件箱筛选、游标分页、已读回执、权限范围/筛选/指定收件人群发、已发送 | verification |
| `/my-timetable` | 我的课表 | Student、Teacher | 当前学期周视图、考试/实验融合、Excel/PDF/ICS、订阅启停与密钥轮换 | verification | | `/my-timetable` | 我的课表 | Student、Teacher | 当前学期周视图、考试/实验融合、Excel/PDF/ICS、订阅启停与密钥轮换 | verification |
| `/exams` | 考试/监考安排 | Student、Teacher | 已发布个人安排、考场、座位、监考教师、历史区分 | verification |
| `/grades` | 我的成绩 | Student | 学期筛选、成绩构成、学分绩点、学业指标和排名 | verification |
| `/warnings` | 我的学业预警 | Student | 预警确认、确认备注、帮扶与复核进度 | verification |
后续从 `web/src/router/index.ts` 逐条补全。只有关键合同和各状态验收完整后,状态才能更新为 `complete`。 后续从 `web/src/router/index.ts` 逐条补全。只有关键合同和各状态验收完整后,状态才能更新为 `complete`。
+3 -1
View File
@@ -31,6 +31,8 @@ npm.cmd run build
- 完整迁移 `/users` 的分页筛选、Excel、账号、角色、状态和密码管理流程。 - 完整迁移 `/users` 的分页筛选、Excel、账号、角色、状态和密码管理流程。
- 迁移 `/notifications` 的收件箱、已读回执、权限范围/筛选/指定收件人群发和已发送记录; - 迁移 `/notifications` 的收件箱、已读回执、权限范围/筛选/指定收件人群发和已发送记录;
- 迁移 `/my-timetable` 的周视图、考试与实验融合、Excel/PDF/ICS 导出和日历订阅管理。 - 迁移 `/my-timetable` 的周视图、考试与实验融合、Excel/PDF/ICS 导出和日历订阅管理。
- 迁移 `/exams` 的学生考试与教师监考安排;
- 迁移学生 `/grades` 成绩单、绩点排名,以及 `/warnings` 预警确认和帮扶进度。
## 迁移纪律 ## 迁移纪律
@@ -45,7 +47,7 @@ npm.cmd run build
| 批次 | 内容 | 状态 | | 批次 | 内容 | 状态 |
| --- | --- | --- | | --- | --- | --- |
| 0 | 工程、主题、会话、登录、应用外壳 | 进行中 | | 0 | 工程、主题、会话、登录、应用外壳 | 进行中 |
| 1 | Dashboard、Users、Account、Notifications、个人课表、移动端代表页 | 已实现,进入联调验收 | | 1 | Dashboard、Users、Account、Notifications、个人课表、考试、学生成绩与预警、移动端代表页 | 已实现,进入联调验收 |
| 2 | 标准 CRUD 与基础数据模块 | 未开始 | | 2 | 标准 CRUD 与基础数据模块 | 未开始 |
| 3 | 学生、教师与审批工作台 | 未开始 | | 3 | 学生、教师与审批工作台 | 未开始 |
| 4 | 选课、排课、成绩、实验等复杂模块 | 未开始 | | 4 | 选课、排课、成绩、实验等复杂模块 | 未开始 |
+6
View File
@@ -11,6 +11,9 @@ const AccountPage = lazy(() => import('../pages/AccountPage'))
const UsersPage = lazy(() => import('../pages/UsersPage')) const UsersPage = lazy(() => import('../pages/UsersPage'))
const NotificationsPage = lazy(() => import('../pages/NotificationsPage')) const NotificationsPage = lazy(() => import('../pages/NotificationsPage'))
const MyTimetablePage = lazy(() => import('../pages/MyTimetablePage')) const MyTimetablePage = lazy(() => import('../pages/MyTimetablePage'))
const ExamsPage = lazy(() => import('../pages/ExamsPage'))
const StudentGradesPage = lazy(() => import('../pages/StudentGradesPage'))
const StudentWarningsPage = lazy(() => import('../pages/StudentWarningsPage'))
const SsoCallbackPage = lazy(() => import('../pages/SsoCallbackPage')) const SsoCallbackPage = lazy(() => import('../pages/SsoCallbackPage'))
const SsoBindPage = lazy(() => import('../pages/SsoBindPage')) const SsoBindPage = lazy(() => import('../pages/SsoBindPage'))
const AppShell = lazy(() => import('../layout/AppShell')) const AppShell = lazy(() => import('../layout/AppShell'))
@@ -56,6 +59,9 @@ function AppRoutes() {
<Route path="/users" element={<UsersPage />} /> <Route path="/users" element={<UsersPage />} />
<Route path="/notifications" element={<NotificationsPage />} /> <Route path="/notifications" element={<NotificationsPage />} />
<Route path="/my-timetable" element={<MyTimetablePage />} /> <Route path="/my-timetable" element={<MyTimetablePage />} />
<Route path="/exams" element={<ExamsPage />} />
<Route path="/grades" element={<StudentGradesPage />} />
<Route path="/warnings" element={<StudentWarningsPage />} />
<Route path="/" element={<Navigate to="/dashboard" replace />} /> <Route path="/" element={<Navigate to="/dashboard" replace />} />
</Route> </Route>
<Route path="*" element={<Navigate to="/dashboard" replace />} /> <Route path="*" element={<Navigate to="/dashboard" replace />} />
Loaded 3 of 9 files, more files were not shown because too many files have changed in this diff. Show more