sync-docs-and-fixes
All checks were successful
CI / build-deploy (push) Successful in 4m39s

This commit is contained in:
SpecialX
2026-03-03 17:32:26 +08:00
parent 538805bad0
commit eb08c0ab68
73 changed files with 2218 additions and 422 deletions

View File

@@ -136,10 +136,10 @@ This release extends the Classes domain to support school-level sorting and per-
#### 2.2 Table: `class_subject_teachers`
* **Action**: `CREATE TABLE`
* **Primary Key**: (`class_id`, `subject`)
* **Primary Key**: (`class_id`, `subject_id`)
* **Columns**:
* `class_id` (varchar(128), FK -> `classes.id`, cascade delete)
* `subject` (enum: `语文/数学/英语/美术/体育/科学/社会/音乐`)
* `subject_id` (varchar(128), FK -> `subjects.id`, cascade delete)
* `teacher_id` (varchar(128), FK -> `users.id`, set null on delete)
* `created_at`, `updated_at`
* **Reason**: Maintain a stable default “subject list” per class while allowing admin/teacher to assign the actual teacher per subject.

View File

@@ -240,3 +240,20 @@ Seed 脚本已覆盖班级相关数据,以便在开发环境快速验证页面
- **移除 Insights**: 经评估,`src/app/(dashboard)/teacher/classes/insights` 模块功能冗余,已全量移除。
- **保留核心数据**: 保留 `data-access.ts` 中的 `getClassHomeworkInsights` 函数,继续服务于班级详情页的统计卡片与图表。
- **导航更新**: 从 `NAV_CONFIG` 中移除 Insights 入口。
---
## 9. 教师加入班级学科分配逻辑修复 (2026-03-03)
**日期**: 2026-03-03
**范围**: 教师通过邀请码加入班级(含学科选择)的校验与分配
### 9.1 行为调整
- 教师已在班级中但选择学科加入时,不再直接返回成功,继续执行学科占用校验。
- 班级未创建该学科映射时,先补齐映射再分配,避免误报“该班级不提供该学科”。
- 学科已被其他老师占用时,返回明确提示。
### 9.2 影响代码
- [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts)

View File

@@ -130,3 +130,21 @@ type QuestionContent = {
### 6.6 校验
- `npm run lint`0 errors仓库其他位置仍存在 warnings
- `npm run typecheck`:通过
---
## 7. 实现更新2026-03-03
### 7.1 登录态与权限校验
- 题库创建/更新/知识点加载统一使用会话身份;缺失会话时回退到首个教师账号以保持演示可用。
- 主要修改:
- [actions.ts](file:///c:/Users/xiner/Desktop/CICD/src/modules/questions/actions.ts)
### 7.2 弹窗稳定性
- Create Question 弹窗在打开时仅在默认知识点变化时更新,避免重复 setState 造成循环更新。
- 主要修改:
- [create-question-dialog.tsx](file:///c:/Users/xiner/Desktop/CICD/src/modules/questions/components/create-question-dialog.tsx)
### 7.3 校验
- `npm run lint`:通过
- `npm run typecheck`:通过

View File

@@ -162,6 +162,12 @@ type ExamNode = {
## 7. 变更记录
**日期**2026-03-03
- **题库列表稳定性**:
- 题库卡片对题目 content/type 做解析兜底,避免异常数据导致运行时崩溃。
- 主要修改: [question-bank-list.tsx](file:///c:/Users/xiner/Desktop/CICD/src/modules/exams/components/assembly/question-bank-list.tsx)
**日期**2026-01-12 (当前)
- **列表页优化 (`/teacher/exams/all`)**:

View File

@@ -304,3 +304,18 @@
- 问题:`isCorrect` 字段可能为 `boolean | null`,直接用于 JSX 渲染导致 "Type 'unknown' is not assignable to type 'ReactNode'" 错误。
- 修复:增加显式布尔值检查 `opt.isCorrect === true`,确保 React 条件渲染接收到合法的 boolean 值。
---
## 14. 实现更新2026-03-03
### 14.1 学生作业状态修复
- 提交作业与学生列表查询改为使用真实登录用户,避免提交后仍显示未开始。
- 学生列表优先展示最近一次已提交/已评分记录,提升状态准确性。
- 主要修改:
- [actions.ts](file:///c:/Users/xiner/Desktop/CICD/src/modules/homework/actions.ts)
- [data-access.ts](file:///c:/Users/xiner/Desktop/CICD/src/modules/homework/data-access.ts)
### 14.2 校验
- `npm run lint`:通过
- `npm run typecheck`:通过

View File

@@ -0,0 +1,313 @@
# 教师端页面实现分析文档
**日期**: 2026-03-03
**范围**: Teacher 路由与页面实现(`src/app/(dashboard)/teacher`
---
## 1. 总览
教师端页面采用服务端组件为主、按页面聚合数据的方式实现,页面负责:
- 读取数据(模块 data-access
- 组装 UI模块 components
- 处理空状态与跳转
所有页面路由位于 `src/app/(dashboard)/teacher`,各业务能力落在 `src/modules/*` 中。
---
## 2. 路由总表
### 2.1 教师工作台
- `/teacher/dashboard`
实现:[dashboard/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/dashboard/page.tsx)
### 2.2 班级
- `/teacher/classes``/teacher/classes/my`
实现:[classes/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/page.tsx)
- `/teacher/classes/my`
实现:[classes/my/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/my/page.tsx)
- `/teacher/classes/my/[id]`
实现:[classes/my/[id]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/my/%5Bid%5D/page.tsx)
- `/teacher/classes/students`
实现:[classes/students/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/students/page.tsx)
- `/teacher/classes/schedule`
实现:[classes/schedule/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/schedule/page.tsx)
### 2.3 作业
- `/teacher/homework``/teacher/homework/assignments`
实现:[homework/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/page.tsx)
- `/teacher/homework/assignments`
实现:[homework/assignments/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/page.tsx)
- `/teacher/homework/assignments/create`
实现:[homework/assignments/create/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/create/page.tsx)
- `/teacher/homework/assignments/[id]`
实现:[homework/assignments/[id]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/%5Bid%5D/page.tsx)
- `/teacher/homework/assignments/[id]/submissions`
实现:[homework/assignments/[id]/submissions/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/%5Bid%5D/submissions/page.tsx)
- `/teacher/homework/submissions`
实现:[homework/submissions/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/submissions/page.tsx)
- `/teacher/homework/submissions/[submissionId]`
实现:[homework/submissions/[submissionId]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/submissions/%5BsubmissionId%5D/page.tsx)
### 2.4 考试
- `/teacher/exams``/teacher/exams/all`
实现:[exams/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/page.tsx)
- `/teacher/exams/all`
实现:[exams/all/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/all/page.tsx)
- `/teacher/exams/create`
实现:[exams/create/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/create/page.tsx)
- `/teacher/exams/[id]/build`
实现:[exams/[id]/build/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/%5Bid%5D/build/page.tsx)
- `/teacher/exams/grading``/teacher/homework/submissions`
实现:[exams/grading/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/grading/page.tsx)
- `/teacher/exams/grading/[submissionId]``/teacher/homework/submissions`
实现:[exams/grading/[submissionId]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/grading/%5BsubmissionId%5D/page.tsx)
### 2.5 题库
- `/teacher/questions`
实现:[questions/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/questions/page.tsx)
### 2.6 教材
- `/teacher/textbooks`
实现:[textbooks/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/textbooks/page.tsx)
- `/teacher/textbooks/[id]`
实现:[textbooks/[id]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/textbooks/%5Bid%5D/page.tsx)
---
## 3. 页面详解(逐页)
### 3.1 教师工作台 `/teacher/dashboard`
实现:[dashboard/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/dashboard/page.tsx)
- **目的**: 教师总览工作台,展示班级、课表、作业、提交、成绩趋势与教师姓名。
- **数据来源**:
- 班级与课表:`getTeacherClasses``getClassSchedule`
- 作业与提交:`getHomeworkAssignments``getHomeworkSubmissions`
- 教师姓名:`users` 表查询
- 成绩趋势:`getTeacherGradeTrends`
- **关键组件**: `TeacherDashboardView`
- **渲染策略**: `dynamic = "force-dynamic"`
### 3.2 班级入口 `/teacher/classes`
实现:[classes/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/page.tsx)
- **目的**: 跳转入口,统一导向“我的班级”。
- **行为**: `redirect("/teacher/classes/my")`
### 3.3 我的班级 `/teacher/classes/my`
实现:[classes/my/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/my/page.tsx)
- **目的**: 展示教师负责班级的卡片列表,并支持学科筛选/加入。
- **数据来源**:
- 班级:`getTeacherClasses`
- 学科选项:`getClassSubjects`
- **关键组件**: `MyClassesGrid`
- **渲染策略**: `dynamic = "force-dynamic"`
### 3.4 班级详情 `/teacher/classes/my/[id]`
实现:[classes/my/[id]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/my/%5Bid%5D/page.tsx)
- **目的**: 展示班级概览(作业趋势、学生、课表、作业摘要)。
- **数据来源**:
- 班级作业洞察:`getClassHomeworkInsights`
- 学生列表:`getClassStudents`
- 课表:`getClassSchedule`
- 学科成绩:`getClassStudentSubjectScoresV2`
- **关键组件**:
- `ClassHeader`
- `ClassOverviewStats`
- `ClassTrendsWidget`
- `ClassStudentsWidget`
- `ClassScheduleWidget`
- `ClassAssignmentsWidget`
- **空状态**: `insights` 缺失返回 `notFound()`
- **渲染策略**: `dynamic = "force-dynamic"`
### 3.5 学生列表 `/teacher/classes/students`
实现:[classes/students/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/students/page.tsx)
- **目的**: 按班级、关键词、状态筛选学生,并显示学科成绩。
- **数据来源**:
- 教师班级:`getTeacherClasses`
- 学生列表:`getClassStudents`
- 学科成绩:`getStudentsSubjectScores`
- **关键组件**:
- `StudentsFilters`
- `StudentsTable`
- `EmptyState` / `Skeleton`
- **筛选逻辑**: 未显式选择班级时默认第一班级
- **渲染策略**: `dynamic = "force-dynamic"`
### 3.6 课表 `/teacher/classes/schedule`
实现:[classes/schedule/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/schedule/page.tsx)
- **目的**: 按班级查看课表。
- **数据来源**:
- 班级:`getTeacherClasses`
- 课表:`getClassSchedule`
- **关键组件**:
- `ScheduleFilters`
- `ScheduleView`
- `EmptyState` / `Skeleton`
- **渲染策略**: `dynamic = "force-dynamic"`
### 3.7 作业入口 `/teacher/homework`
实现:[homework/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/page.tsx)
- **目的**: 统一导向作业列表。
- **行为**: `redirect("/teacher/homework/assignments")`
### 3.8 作业列表 `/teacher/homework/assignments`
实现:[homework/assignments/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/page.tsx)
- **目的**: 查看作业列表与状态,支持按班级筛选,提供创建入口。
- **数据来源**:
- 作业列表:`getHomeworkAssignments`
- 班级列表(用于显示名称):`getTeacherClasses`
- **关键组件**: `Table``Badge``EmptyState`
- **空状态**: 无作业时提示创建
- **渲染策略**: `dynamic = "force-dynamic"`
### 3.9 创建作业 `/teacher/homework/assignments/create`
实现:[homework/assignments/create/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/create/page.tsx)
- **目的**: 从 Exam 派发作业。
- **数据来源**:
- 可派发的 Exam`getExams`
- 班级列表:`getTeacherClasses`
- **关键组件**: `HomeworkAssignmentForm`
- **空状态**:
- 无 Exam提示先创建考试
- 无班级:提示先创建班级
### 3.10 作业详情 `/teacher/homework/assignments/[id]`
实现:[homework/assignments/[id]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/%5Bid%5D/page.tsx)
- **目的**: 展示作业详情、错题概览与试卷内容。
- **数据来源**: `getHomeworkAssignmentAnalytics`
- **关键组件**:
- `HomeworkAssignmentQuestionErrorOverviewCard`
- `HomeworkAssignmentExamContentCard`
- **空状态**: 查不到作业时 `notFound()`
### 3.11 作业提交列表 `/teacher/homework/assignments/[id]/submissions`
实现:[homework/assignments/[id]/submissions/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/assignments/%5Bid%5D/submissions/page.tsx)
- **目的**: 按作业查看提交与评分进度。
- **数据来源**:
- 作业信息:`getHomeworkAssignmentById`
- 提交列表:`getHomeworkSubmissions`
- **关键组件**: `Table``Badge`
- **空状态**: 作业不存在时 `notFound()`
### 3.12 全部提交 `/teacher/homework/submissions`
实现:[homework/submissions/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/submissions/page.tsx)
- **目的**: 按作业汇总查看所有提交与批改入口。
- **数据来源**:
- 教师身份:`getTeacherIdForMutations`
- 作业审阅列表:`getHomeworkAssignmentReviewList`
- **关键组件**: `Table``Badge``EmptyState`
### 3.13 提交批改 `/teacher/homework/submissions/[submissionId]`
实现:[homework/submissions/[submissionId]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/homework/submissions/%5BsubmissionId%5D/page.tsx)
- **目的**: 作业批改视图,按题打分与反馈。
- **数据来源**: `getHomeworkSubmissionDetails`
- **关键组件**: `HomeworkGradingView`
- **空状态**: 查不到提交时 `notFound()`
### 3.14 考试入口 `/teacher/exams`
实现:[exams/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/page.tsx)
- **目的**: 统一导向考试列表。
- **行为**: `redirect("/teacher/exams/all")`
### 3.15 考试列表 `/teacher/exams/all`
实现:[exams/all/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/all/page.tsx)
- **目的**: 列出考试并支持筛选、统计、创建入口。
- **数据来源**: `getExams`(按关键词/状态/难度过滤)
- **关键组件**:
- `ExamFilters`
- `ExamDataTable`
- `EmptyState` / `Skeleton`
- **统计**: 对列表结果进行状态数量统计draft/published/archived
### 3.16 创建考试 `/teacher/exams/create`
实现:[exams/create/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/create/page.tsx)
- **目的**: 创建考试基础信息。
- **关键组件**: `ExamForm`
### 3.17 组卷 `/teacher/exams/[id]/build`
实现:[exams/[id]/build/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/%5Bid%5D/build/page.tsx)
- **目的**: 从题库选择题目并构建考试结构。
- **数据来源**:
- 考试数据:`getExamById`
- 题库数据:`getQuestions`
- **关键组件**: `ExamAssembly`
- **关键逻辑**:
- 读取已选题并初始化 `initialSelected`
- 将题目数据映射为 `Question` 类型
- 归一化 `structure` 并保证节点 `id` 唯一
### 3.18 阅卷入口 `/teacher/exams/grading*`
实现:[exams/grading/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/grading/page.tsx)、[exams/grading/[submissionId]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/exams/grading/%5BsubmissionId%5D/page.tsx)
- **目的**: 统一重定向至作业批改视图。
- **行为**: `redirect("/teacher/homework/submissions")`
### 3.19 题库 `/teacher/questions`
实现:[questions/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/questions/page.tsx)
- **目的**: 题库管理与筛选。
- **数据来源**: `getQuestions`(按关键词/题型/难度过滤)
- **关键组件**:
- `QuestionFilters`
- `QuestionDataTable`
- `CreateQuestionButton`
- `EmptyState` / `Skeleton`
### 3.20 教材列表 `/teacher/textbooks`
实现:[textbooks/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/textbooks/page.tsx)
- **目的**: 教材管理与筛选,创建入口。
- **数据来源**: `getTextbooks`
- **关键组件**:
- `TextbookFilters`
- `TextbookCard`
- `TextbookFormDialog`
- `EmptyState`
- **渲染策略**: `dynamic = "force-dynamic"`
### 3.21 教材详情 `/teacher/textbooks/[id]`
实现:[textbooks/[id]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/textbooks/%5Bid%5D/page.tsx)
- **目的**: 教材章节与知识点结构阅读与维护。
- **数据来源**:
- 教材:`getTextbookById`
- 章节:`getChaptersByTextbookId`
- 知识点:`getKnowledgePointsByTextbookId`
- **关键组件**:
- `TextbookReader`
- `TextbookSettingsDialog`
- **空状态**: 教材不存在时 `notFound()`
---
## 4. 依赖模块清单
教师端页面主要依赖以下模块:
- 班级与排课:`src/modules/classes`
- 作业:`src/modules/homework`
- 考试:`src/modules/exams`
- 题库:`src/modules/questions`
- 教材:`src/modules/textbooks`
- 工作台:`src/modules/dashboard`

View File

@@ -0,0 +1,150 @@
# 功能实现对比文档(已实现 vs 规划)
**日期**: 2026-03-03
**范围**: 基于 PRD 与现有设计文档的功能落地对比
---
## 1. 依据与来源
本对比基于以下文档:
- 产品规划PRD`docs/product_requirements.md`
- 已实现模块:
- 教师仪表盘与班级管理:[002_teacher_dashboard_implementation.md](file:///e:/Desktop/CICD/docs/design/002_teacher_dashboard_implementation.md)
- 教材模块:[003_textbooks_module_implementation.md](file:///e:/Desktop/CICD/docs/design/003_textbooks_module_implementation.md)
- 题库模块:[004_question_bank_implementation.md](file:///e:/Desktop/CICD/docs/design/004_question_bank_implementation.md)
- 考试模块:[005_exam_module_implementation.md](file:///e:/Desktop/CICD/docs/design/005_exam_module_implementation.md)
- 作业模块:[006_homework_module_implementation.md](file:///e:/Desktop/CICD/docs/design/006_homework_module_implementation.md)
- 学校管理模块:[007_school_module_implementation.md](file:///e:/Desktop/CICD/docs/design/007_school_module_implementation.md)
---
## 2. 便利贴视图(按 Roles / Page / 功能)
> **🟨 Roles**
>
> - **教师Teacher**:备课、出卷、作业批改与班级管理
> - **学生Student**:作业完成与教材阅读(只读)
> - **管理端Admin/校长/年级主任/教研组长/班主任)**:规划中,未完全落地
> **🟨 Page**
>
> - **教师工作台**`/teacher/dashboard`
> - **班级**`/teacher/classes/*`
> - **作业**`/teacher/homework/*`
> - **考试**`/teacher/exams/*`
> - **题库**`/teacher/questions`
> - **教材**`/teacher/textbooks/*`
> **🟨 功能(规划目标)**
>
> - **权限与角色**:多角色矩阵 + RLS 行级隔离
> - **智能题库**:嵌套题、知识点关联
> - **知识图谱**:知识点树 + 题目/章节关联
> - **教材映射**:章节 ↔ 知识点
> - **组卷引擎**:筛选/分组/结构化试卷
> - **作业闭环**:派发-提交-批改-统计
> - **通知中心**:分级提醒策略
---
## 3. 已实现页面功能清单(简述)
> **🟨 教师工作台**
>
> - `/teacher/dashboard`
> 功能:汇总班级、课表、作业、提交与成绩趋势
> 目标:快速掌握教学全局
> **🟨 班级**
>
> - `/teacher/classes`
> 功能:班级入口重定向
> 目标:统一进入我的班级
> - `/teacher/classes/my`
> 功能:班级列表与学科选择
> 目标:管理所教班级
> - `/teacher/classes/my/[id]`
> 功能:班级详情概览、作业趋势、学生与课表
> 目标:掌握班级学习情况
> - `/teacher/classes/students`
> 功能:学生筛选与成绩查看
> 目标:定位学生画像与状态
> - `/teacher/classes/schedule`
> 功能:班级课表查看
> 目标:排课信息可视化
> **🟨 作业**
>
> - `/teacher/homework/assignments`
> 功能:作业列表与状态
> 目标:管理作业发布
> - `/teacher/homework/assignments/create`
> 功能:从考试派发作业
> 目标:快速生成作业
> - `/teacher/homework/assignments/[id]`
> 功能:作业详情与错题概览
> 目标:定位薄弱题型
> - `/teacher/homework/assignments/[id]/submissions`
> 功能:作业提交列表
> 目标:查看班级完成度
> - `/teacher/homework/submissions`
> 功能:所有作业提交汇总
> 目标:统一批改入口
> - `/teacher/homework/submissions/[submissionId]`
> 功能:作业批改与反馈
> 目标:完成评分与讲评
> **🟨 考试**
>
> - `/teacher/exams/all`
> 功能:考试列表与筛选
> 目标:管理考试资产
> - `/teacher/exams/create`
> 功能:创建考试基础信息
> 目标:建立试卷草稿
> - `/teacher/exams/[id]/build`
> 功能:题库选题与结构化组卷
> 目标:完成试卷构建
> **🟨 题库**
>
> - `/teacher/questions`
> 功能:题库检索与管理
> 目标:积累与复用题目
> **🟨 教材**
>
> - `/teacher/textbooks`
> 功能:教材管理与筛选
> 目标:组织课程资源
> - `/teacher/textbooks/[id]`
> 功能:章节与知识点维护
> 目标:构建教材结构
---
## 4. 差距清单(简述)
> **🟨 权限与治理**
>
> - 多角色 RBAC 细化权限未落地
> - RLS 数据隔离策略未落地
> **🟨 教学质量与推荐**
>
> - 章节 → 知识点 → 题库的自动推荐链路未落地
> - 知识点图谱深层能力未落地
> - 学科维度与权重/标签机制未落地
> **🟨 组卷与作业高级能力**
>
> - AB 卷与乱序策略未落地
> - 作业分层与交集筛选未落地
> - 学习画像/成长档案层的评估闭环尚未体现
> **🟨 通知与消息闭环**
>
> - 分级通知体系未落地

View File

@@ -4,6 +4,7 @@ import { users, exams, questions, knowledgePoints, examSubmissions, examQuestion
import { createId } from "@paralleldrive/cuid2"
import { faker } from "@faker-js/faker"
import { eq } from "drizzle-orm"
import { hash } from "bcryptjs"
/**
* Seed Script for Next_Edu
@@ -19,6 +20,7 @@ const DIFFICULTY = [1, 2, 3, 4, 5]
async function seed() {
console.log("🌱 Starting seed process...")
const passwordHash = await hash("123456", 10)
// 1. Create a Teacher User if not exists
const teacherEmail = "teacher@example.com"
@@ -36,6 +38,7 @@ async function seed() {
email: teacherEmail,
role: "teacher",
image: "https://api.dicebear.com/7.x/avataaars/svg?seed=Teacher",
password: passwordHash,
})
} else {
teacherId = existingTeacher.id
@@ -54,6 +57,7 @@ async function seed() {
email: faker.internet.email(),
role: "student",
image: `https://api.dicebear.com/7.x/avataaars/svg?seed=${sId}`,
password: passwordHash,
})
}

View File

@@ -1,5 +1,17 @@
# Work Log
## 2026-03-03
### 1. 教师加入班级学科分配逻辑修复
- 修复教师已在班级中但选择学科加入时被直接返回成功的问题。
- 班级未创建该学科映射时,先补齐映射再分配。
- 学科已被其他老师占用时,返回明确提示。
- 主要修改:
- [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts)
### 2. 验证
- 质量检查:`npm run lint``npm run typecheck` 均通过。
## 2026-03-02
### 1. 班级详情访问修复(基于会话身份)