feat(P2): 实现选课管理、考试监考、学情诊断三大功能模块

## 新增功能模块

### 1. 选课管理(elective)
- 新增表:electiveCourses、courseSelections
- 新增权限:ELECTIVE_MANAGE/ELECTIVE_READ/ELECTIVE_SELECT
- 支持先到先得 + 抽签两种选课模式
- admin/teacher/student 三端页面

### 2. 考试监考(proctoring)
- exams 表扩展:examMode/durationMinutes/antiCheatEnabled 等字段
- 新增表:examProctoringEvents
- 新增权限:EXAM_PROCTOR/EXAM_PROCTOR_READ
- 教师监考面板 + 学生端防作弊监控
- API:/api/proctoring/event 接收事件上报

### 3. 学情诊断报告(diagnostic)
- 新增表:knowledgePointMastery、learningDiagnosticReports
- 新增权限:DIAGNOSTIC_MANAGE/DIAGNOSTIC_READ
- 基于提交答案自动计算知识点掌握度
- 生成个人/班级诊断报告(强项/弱项/建议)
- 雷达图可视化

## 其他改动
- 项目规则:单文件行数限制从 300 行调整为企业级规范(组件≤500/Actions≤800/硬上限1000)
- scripts/seed.ts:消除全部 any 类型,定义内部类型,0 lint 错误
- 架构文档 004/005 同步更新三个新模块
- 迁移文件 0001_heavy_sage.sql 生成

## 验证
- npx tsc --noEmit:0 错误
- npm run lint:0 错误 0 警告
This commit is contained in:
SpecialX
2026-06-17 19:12:51 +08:00
parent baf8f679bf
commit b86255f0ea
46 changed files with 13234 additions and 80 deletions

View File

@@ -2,6 +2,52 @@
## 2026-06-17
### P2 功能扩展类实现(功能扩展 + 质量保障首批)
#### 1. 选课管理模块elective
- 新增 schema 表:`electiveCourses`(选修课程)、`courseSelections`(选课记录)
- 新增权限:`ELECTIVE_MANAGE``ELECTIVE_READ``ELECTIVE_SELECT`
- 模块文件:`src/modules/elective/`types/schema/data-access×3/actions/components×3
- 路由admin/teacher/student 三端 elective 页面
- 支持:先到先得 + 抽签两种选课模式,容量控制,退选
#### 2. 考试监考模块proctoring
- 新增 schema`exams` 表扩展 examMode/durationMinutes/antiCheatEnabled 等字段;新增 `examProctoringEvents`
- 新增权限:`EXAM_PROCTOR``EXAM_PROCTOR_READ`
- 模块文件:`src/modules/proctoring/`types/data-access/actions/components×3
- API 路由:`/api/proctoring/event` 接收学生端上报
- 页面:教师监考面板 + 学生端防作弊监控tab切换/复制粘贴/右键/开发者工具/全屏退出/空闲超时检测)
#### 3. 学情诊断报告模块diagnostic
- 新增 schema`knowledgePointMastery`(知识点掌握度)、`learningDiagnosticReports`(诊断报告)
- 新增权限:`DIAGNOSTIC_MANAGE``DIAGNOSTIC_READ`
- 模块文件:`src/modules/diagnostic/`types/data-access×2/actions/components×4
- 功能:基于提交答案自动计算知识点掌握度,生成个人/班级诊断报告(强项/弱项/建议),雷达图可视化
- 页面teacher 诊断管理 + 学生查看自己报告
#### 4. 项目规则更新
- `.trae/rules/project_rules.md` 单文件行数限制从 300 行调整为企业级规范:
- React 组件 ≤ 500 行(复杂场景可放宽至 800
- Server Actions / Data Access ≤ 800 行
- 硬性上限 1000 行
#### 5. 种子脚本 lint 修复
- `scripts/seed.ts` 消除全部 `any` 类型17 个 error → 0
- 定义内部类型SeedQuestion/SeedQuestionBank/SeedGradeRecord/SeedAttendanceRecord
- 移除未使用参数,函数签名精简
#### 6. 架构文档同步
- `docs/architecture/004_architecture_impact_map.md` 新增 elective/proctoring/diagnostic 三个模块章节
- `docs/architecture/005_architecture_data.json` 同步权限点、角色映射、dbTables、modules、dependencyMatrix、routes
#### 验证
- `npx tsc --noEmit`0 错误
- `npm run lint`0 错误 0 警告
---
### 前序工作(同日早些时候)
### 1. Next.js 16 Proxy 修复
- `src/proxy.ts` 导出函数从 `middleware` 重命名为 `proxy`Next.js 16 要求)
- 修复 `getToken()` 在 edge 运行时缺少 `secret` 导致的 `MissingSecret` 错误