# Next_Edu 项目概览 > 本文档是项目的入口概览,基于源码与架构影响地图(004/005)维护。 > 详细模块/函数/路由/表结构请查阅 [004 架构影响地图](./004_architecture_impact_map.md) 与 [005 架构数据](./005_architecture_data.json)。 --- ## 一、项目定位与目标 **Next_Edu** 是一个面向 K12 场景的**智慧教务管理系统**,旨在将传统学校的教务流程数字化、智能化。 核心目标: 1. **多角色协同**:6 种角色(管理员、教师、学生、家长、年级组长、教研组长)在同一平台协作,各角色有独立的仪表盘和功能入口 2. **AI 赋能教学**:集成大语言模型(智谱/OpenAI/Gemini),支持 AI 自动生成试卷、AI 重写题目、AI 对话辅导 3. **全流程闭环**:从教材管理 → 题库建设 → 试卷组卷 → 考试/作业发布 → 学生作答 → 教师批改 → 数据分析,覆盖教学评估全链路 4. **知识体系结构化**:教材章节与知识点树形关联,知识点与题目双向链接,支撑精准教学与学情诊断 --- ## 二、技术栈 | 层次 | 技术选型 | 版本 | |------|---------|------| | 框架 | Next.js (App Router) | 16 | | 语言 | TypeScript (strict) | 5 | | 前端 | React | 19 | | 样式 | Tailwind CSS + shadcn/ui | v4 | | 状态 | Zustand + nuqs (URL) + React Hook Form | — | | 数据库 | MySQL | — | | ORM | Drizzle ORM | 0.45 | | 认证 | NextAuth v5 (JWT strategy) | beta | | 校验 | Zod | 4 | | AI | OpenAI SDK (多 provider) | — | | 富文本 | TipTap | 3 | | 图表 | Recharts | 3 | | 测试 | Vitest + Playwright | — | | 部署 | Docker (standalone output) | — | --- ## 三、系统角色与权限模型 ### 角色定义 | 角色 | 路由前缀 | 核心职责 | |------|---------|---------| | **Admin** | `/admin/*` | 学校管理、年级/班级/部门配置、用户管理、全局设置、审计日志、排课、选修课 | | **Teacher** | `/teacher/*` | 教材管理、题库建设、试卷组卷、作业发布与批改、班级管理、考勤、成绩录入、学情诊断 | | **Student** | `/student/*` | 课程学习、作业作答、教材阅读、课表查看、成绩查询、选课、学情诊断 | | **Parent** | `/parent/*` | 子女学情查看、成绩/考勤/课表、消息沟通 | | **Grade Head** (年级组长) | 映射为 `/teacher/*` | 年级管理、年级作业洞察、学情诊断 | | **Teaching Head** (教研组长) | 映射为 `/teacher/*` | 教研管理、学情诊断 | ### 权限控制机制 ``` 请求 → NextAuth Middleware (proxy.ts) → 检查 session 是否存在 → 无则重定向 /login → 解析 JWT 中的 role/permissions 字段 → 按路由前缀校验角色与权限点匹配 → 不匹配则重定向到角色首页 ``` - **权限点**:共 **54 个权限点**(`exam:create`、`homework:grade`、`announcement:manage`、`file:upload`、`grade_record:manage`、`attendance:manage`、`message:send`、`schedule:auto`、`elective:select`、`exam:proctor`、`diagnostic:manage` 等),定义于 `src/shared/types/permissions.ts` - **角色-权限映射**:`ROLE_PERMISSIONS` 常量(`src/shared/lib/permissions.ts`),6 角色到权限列表的映射 - **角色解析**:`grade_head` 和 `teaching_head` 在路由层映射为 `teacher`;多角色用户取优先级 `admin > teacher > parent > student` - **用户-角色**:多对多关系(`users_to_roles` 表),支持一人多角色 - **数据范围控制(DataScope)**:6 种行级权限类型 — `all` / `owned` / `class_taught` / `grade_managed` / `class_members` / `children` - **导航隔离**:`NAV_CONFIG` 按角色定义侧边栏菜单,不同角色看到完全不同的功能入口 --- ## 四、数据模型 ### 核心实体关系 ``` School ──1:N──→ Grade ──1:N──→ Class ──1:N──→ ClassEnrollment ←──N:1── User(student) │ │ │ ├── ClassSubjectTeacher (班级-科目-教师) │ ├── ClassSchedule (课表) │ └── AttendanceRecords (考勤) │ ├── Department ├── Classroom └── AcademicYear User ──M:N──→ Role (RBAC) ──→ Permissions (54 个权限点) User ──M:N──→ ParentStudentRelation (家长-子女) Textbook ──1:N──→ Chapter (树形嵌套) ──1:N──→ KnowledgePoint (树形嵌套) │ Question ──M:N──→ KnowledgePoint │ │ │ ├── 支持类型: single_choice / multiple_choice │ │ / text / judgment / composite │ └── 支持无限嵌套 (parentId 自引用) │ │ Exam ──M:N──→ Question (exam_questions) │ ├── ExamSubmission ──1:N──→ SubmissionAnswer │ ├── structure (JSON 层级结构) │ └── ExamProctoringEvent (监考事件) │ │ HomeworkAssignment ──M:N──→ Question │ ├── sourceExamId → Exam (作业源自试卷) │ ├── HomeworkAssignmentTarget (指定学生) │ └── HomeworkSubmission ──1:N──→ HomeworkAnswer │ │ GradeRecord (成绩) ──→ Student/Class/Subject/Exam │ CoursePlan ──1:N──→ CoursePlanItem (课程计划) │ │ Announcement (公告) ──→ Grade/Class 定向发布 │ Message (站内消息) ──→ MessageNotification │ AuditLog / LoginLog / DataChangeLog (审计日志) │ │ ElectiveCourse ──1:N──→ CourseSelection (选课) │ LearningDiagnosticReport (学情诊断报告) │ KnowledgePointMastery (知识点掌握度) │ │ AIProvider (zhipu / openai / gemini / custom) │ └── apiKeyEncrypted (AES 加密存储) │ ``` ### 数据库规模 - **54 张表**,覆盖用户认证、RBAC、学校管理、教学资源、考试系统、作业系统、AI 配置、审计日志、公告、文件、成绩、课程计划、消息、考勤、排课、选修课、学情诊断、监考 - **ID 策略**:CUID2(`@paralleldrive/cuid2`),128 位 varchar - **索引策略**:所有外键和查询字段均有索引,支持级联删除 - **Schema 文件**:`src/shared/db/schema.ts`(单文件,54 张表定义) --- ## 五、架构设计 ### 架构原则 1. **分层架构**:`app → modules → shared`,三层单向依赖 - `src/app/`:Next.js App Router 路由层,负责路由分发、页面组装、Suspense/error 边界 - `src/modules/`:业务模块层,每个模块是一个独立的业务领域 - `src/shared/`:共享基础设施层,提供数据库、工具函数、权限系统、UI 基础组件 2. **模块化**:每个模块对应一个业务领域,包含 `components/`、`hooks/`、`actions.ts`、`data-access.ts`、`types.ts`、`schema.ts` 3. **权限校验**:所有 Server Action 必须使用 `requirePermission()` 或 `requireAuth()` 进行权限校验,前端组件使用 `usePermission().hasPermission()` 条件渲染(禁止 `role === "xxx"` 硬编码) 4. **数据访问**:通过 `data-access.ts` 层访问数据库,Server Action 不直接调用 Drizzle ORM 5. **类型安全**:TypeScript strict 模式,Zod schema 校验输入,`ActionState` 统一返回结构 6. **行级权限**:`DataScope` 提供 6 种数据范围类型,data-access 层按 scope 过滤数据 ### 分层架构 ``` ┌─────────────────────────────────────────────────┐ │ App Router (src/app/) │ │ ├── Route Groups: (auth) / (dashboard) │ │ ├── Server Components (默认) │ │ ├── loading.tsx (Suspense 边界) │ │ └── error.tsx (错误边界) │ ├─────────────────────────────────────────────────┤ │ Feature Modules (src/modules/) — 25 个模块 │ │ ├── auth/ 认证模块 │ │ ├── exams/ 考试模块 │ │ ├── homework/ 作业模块 │ │ ├── questions/ 题库模块 │ │ ├── textbooks/ 教材模块 │ │ ├── classes/ 班级模块 │ │ ├── school/ 学校管理模块 │ │ ├── dashboard/ 仪表盘模块 │ │ ├── layout/ 布局与导航 │ │ ├── settings/ 设置模块 │ │ ├── users/ 用户管理模块 │ │ ├── audit/ 审计日志模块 │ │ ├── announcements/ 公告模块 │ │ ├── files/ 文件管理模块 │ │ ├── grades/ 成绩管理模块 │ │ ├── course-plans/ 课程计划模块 │ │ ├── messaging/ 站内消息模块 │ │ ├── notifications/ 通知模块 │ │ ├── attendance/ 考勤模块 │ │ ├── scheduling/ 排课模块 │ │ ├── diagnostic/ 学情诊断模块 │ │ ├── elective/ 选课模块 │ │ ├── proctoring/ 考试监考模块 │ │ ├── parent/ 家长端模块 │ │ ├── student/ 学生端模块 │ │ 每个模块: │ │ ├── components/ UI 组件 │ │ ├── hooks/ 自定义 Hook │ │ ├── actions.ts Server Actions │ │ ├── data-access.ts 数据访问层 │ │ ├── schema.ts Zod 校验 Schema │ │ └── types.ts 类型定义 │ ├─────────────────────────────────────────────────┤ │ Shared (src/shared/) │ │ ├── components/ui/ shadcn/ui 基础组件 (30+) │ │ ├── hooks/ 通用 Hook │ │ ├── lib/ 工具函数 (auth-guard/ai/ │ │ │ excel/file-storage/ │ │ │ rate-limit/password-policy)│ │ ├── db/ 数据库 (schema/relations) │ │ └── types/ 公共类型 (permissions/ │ │ action-state) │ ├─────────────────────────────────────────────────┤ │ API Routes (src/app/api/) │ │ ├── auth/[...nextauth] NextAuth 端点 │ │ ├── ai/chat AI 对话 │ │ ├── upload / files 文件上传与管理 │ │ ├── search 全局全文检索 │ │ ├── export / import Excel 导入导出 │ │ └── onboarding/* 用户引导 │ └─────────────────────────────────────────────────┘ ``` ### 数据流 ``` 用户操作 → Client Component → Server Action (actions.ts) → requirePermission() 权限校验 → 数据访问层 (data-access.ts) 按 DataScope 过滤 → Drizzle ORM (db/index.ts) → MySQL Server Action 返回 → ActionState → { success, message, data?, errors? } → Client 端 toast 反馈 ``` ### AI 集成架构 ``` 教师操作 → AI Provider 选择 (支持多 provider) → API Key AES 加密存储 (ai_providers 表) → Server Action 调用 AI Pipeline ├── 试卷生成: 输入源文本 → AI 解析 → 结构化题目 ├── 题目重写: 输入原题 + 指令 → AI 重写 → 更新题目 └── AI 对话: /api/ai/chat → 流式响应 → PQueue 并发控制 (最多 3 个后台任务) ``` --- ## 六、核心业务流程 ### 1. 试卷组卷流程 ``` 手动模式: 选择科目/年级 → 填写考试信息 → 创建草稿 → 进入试卷构建器 → 从题库选题 AI 模式: 选择 AI Provider → 粘贴试卷源文本 → AI 解析生成 → 预览/编辑 → 确认创建 ``` ### 2. 作业发布与批改流程 ``` 教师: 从已有试卷创建作业 → 选择目标学生 → 设置截止时间 → 发布 学生: 查看作业列表 → 作答 → 提交 教师: 查看提交列表 → 批改评分 → 填写反馈 ``` ### 3. 教材与知识体系流程 ``` 教师: 创建教材 → 添加章节(树形) → 编写内容(Markdown/富文本) → 从文本选中创建知识点 → 知识点自动关联章节 → 从知识点创建题目 → 题目关联知识点 学生: 选择章节阅读 → 知识点高亮链接 → 查看知识图谱 ``` ### 4. 用户注册与引导流程 ``` 注册 → 默认 student 角色 → OnboardingGate 检查 → 未引导: 强制填写角色/学校/班级信息 → 已引导: 进入角色仪表盘 ``` ### 5. 学情诊断流程 ``` 教师/管理员: 基于作业/考试数据 → 生成知识点掌握度 → 生成诊断报告 ├── 个人报告: 学生知识点雷达图 + 强项/弱项 └── 班级报告: 知识点热力图 + 需重点关注学生 学生: 查看本人学情诊断报告 ``` --- ## 七、路由清单 ### 路由分布 | 角色域 | 路由前缀 | 主要页面 | |--------|---------|---------| | **认证** | `/login`, `/register`, `/privacy`, `/terms` | 登录、注册、隐私政策、用户协议 | | **Admin** | `/admin/*` | 仪表盘、学校管理(学校/年级/部门/班级/学年)、审计日志、公告、文件、课程计划、考勤、用户导入、排课(规则/自动/调课)、选修课 | | **Teacher** | `/teacher/*` | 仪表盘、考试(列表/创建/构建)、题库、教材(列表/阅读)、班级(我的/课表/学生/详情)、作业(列表/创建/详情/提交/批改)、成绩(列表/录入/统计)、课程计划、考勤(列表/点名/统计)、调课申请、学情诊断(列表/学生/班级)、选修课 | | **Student** | `/student/*` | 仪表盘、学习(作业/课程/教材)、课表、成绩、考勤、学情诊断、选课 | | **Parent** | `/parent/*` | 仪表盘、子女详情、成绩、考勤 | | **Management** | `/management/*` | 年级班级管理、年级作业洞察(年级组长) | | **共享** | `/dashboard`, `/profile`, `/settings`, `/announcements`, `/messages/*` | 角色路由分发、个人资料、设置、公告列表、消息(列表/详情/写消息) | ### API 路由 | 路由 | 方法 | 用途 | |------|------|------| | `/api/auth/[...nextauth]` | GET/POST | NextAuth 认证端点 | | `/api/ai/chat` | POST | AI 对话(流式响应) | | `/api/upload` | POST | 文件上传 | | `/api/files/[id]` | GET/DELETE | 文件元数据查询/删除 | | `/api/files/batch-delete` | POST | 批量删除文件 | | `/api/search` | GET | 全局全文检索 | | `/api/export` | POST | Excel 导出 | | `/api/import` | POST | Excel 解析预览 | | `/api/onboarding/*` | GET/POST | 用户引导 | --- ## 八、部署与运维 - **构建模式**: `output: "standalone"` — 适配 Docker 容器化部署 - **数据库迁移**: Drizzle Kit (`db:generate` / `db:migrate`) - **数据填充**: `db:seed` 脚本 + `@faker-js/faker` - **CI/CD**: `.gitea/workflows/ci.yml` — Gitea Actions(构建/部署/测试) - **安全扫描**: `.gitea/workflows/security.yml` — npm audit + Snyk + Trivy + OWASP ZAP - **数据备份**: `.gitea/workflows/ci.yml` scheduled-backup — 每日全量备份 + 异地同步 - **灾备演练**: `.gitea/workflows/dr-drill.yml` — 每周一 DR 演练 - **测试**: 单元测试 (Vitest) + 集成测试 + E2E (Playwright) --- ## 九、项目状态 > 详细功能清单与差距审计请查阅 [006 功能清单](./006_k12_feature_checklist.md) 与 [007 差距审计报告](./007_gap_audit_report.md)。 ### 优先级完成情况 | 优先级 | 状态 | 说明 | |--------|------|------| | **P0** (MVP 必须) | ✅ 已完成 | 核心业务、平台基础、合规安全 P0 项已全部实现 | | **P1** (上线前推荐) | ✅ 已完成 | 站内消息、家长仪表盘、考勤、排课、成绩分析、Excel 导入导出、密码安全、数据变更日志等 P1 项已实现 | | **P2** (迭代优化) | 🔄 8/14 完成 (57%) | 已完成:选课管理、考试监考、学情诊断、漏洞扫描、灾备方案、视觉回归测试等;剩余:国际化、多租户、AI 批改/学情/备课等 | ### 主要模块完成情况 - ✅ 用户与权限(6 角色、54 权限点、DataScope 行级权限) - ✅ 学校管理(学校/年级/班级/部门/学年/学科) - ✅ 教务排课(课程计划、排课规则、自动排课、调课审批、冲突检测) - ✅ 教材资源(教材/章节/知识点树形结构、知识图谱) - ✅ 题库与试卷(5 种题型、手动/AI 组卷、试卷预览) - ✅ 作业与考试(作业发布/作答/批改、统计分析) - ✅ 成绩分析(录入/查询/统计报表/趋势/对比/导出) - ✅ 家校沟通(公告、站内消息、家长仪表盘) - ✅ AI 赋能(AI 对话、AI 出题、多模型配置、API Key 加密) - ✅ 考勤管理(学生考勤、考勤规则、统计) - ✅ 日志审计(操作日志、登录日志、数据变更日志) - ✅ 文件管理(上传/预览/删除、StorageProvider 抽象) - ✅ 学情诊断(知识点掌握度、个人/班级诊断报告) - ✅ 选课管理(选修课、选课/退选、抽签模式) - ✅ 平台基础(全局搜索、Excel 导入导出、通知偏好、深色主题) --- ## 十、项目规模统计 | 维度 | 数量 | |------|------| | 数据库表 | 54 | | 业务模块 | 25 | | UI 基础组件 | 30+ | | 路由页面 | 60+ | | API 路由 | 9 | | Server Actions | 80+ | | 用户角色 | 6 (admin/teacher/student/parent/grade_head/teaching_head) | | 权限点 | 54 | --- ## 相关文档 | 文档 | 用途 | |------|------| | [004 架构影响地图](./004_architecture_impact_map.md) | 全模块·全函数·全参数级别架构图 | | [005 架构数据](./005_architecture_data.json) | AI 友好的结构化架构数据 | | [006 功能清单](./006_k12_feature_checklist.md) | 企业级 K12 标准功能模块清单 | | [007 差距审计报告](./007_gap_audit_report.md) | 功能差距审计与补齐路线图 |