前端项目初始化提交
This commit is contained in:
393
出题做题生成流程示意图.md
Normal file
393
出题做题生成流程示意图.md
Normal file
@@ -0,0 +1,393 @@
|
||||
# 出题做题生成流程示意图
|
||||
|
||||
> **版本**: v2.0 (2026-05-10 更新)
|
||||
> **状态**: 与代码实现已对齐
|
||||
|
||||
---
|
||||
|
||||
## 一、模块总览
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 考察与训练 (ExamModule) │
|
||||
├──────────┬──────────┬──────────────┬──────────────┬────────────────┤
|
||||
│ 🤖 AI出题 │ 📚 题库管理 │ 📋 智能组卷 │ 📝 试卷考核 │ 🎯 互动训练 │
|
||||
│ (管理员) │ (管理员) │ (管理员) │ (全员) │ (全员) │
|
||||
│ exam:ai │ exam:bank│ exam:paper │ exam:exam │ exam:train │
|
||||
└──────────┴──────────┴──────────────┴──────────────┴────────────────┘
|
||||
```
|
||||
|
||||
### 各模块功能说明
|
||||
|
||||
| 模块 | 权限码 | 功能描述 | 目标用户 |
|
||||
|-----|--------|---------|---------|
|
||||
| AI出题 | `exam:ai` | 选择文档→AI生成题目 | 管理员/有权限用户 |
|
||||
| 题库管理 | `exam:bank` | 题目审核/编辑/删除 | 管理员 |
|
||||
| 智能组卷 | `exam:paper` | 配置参数→生成试卷→**编辑+发布** | 管理员 |
|
||||
| 试卷考核 | `exam:exam` | 待考试/答题/成绩/错题本/**自测组卷** | 全员 |
|
||||
| 互动训练 | `exam:train` | 闯关模式/每日一练/错题本(本地) | 全员 |
|
||||
|
||||
---
|
||||
|
||||
## 二、题目生成流程(AI出题)
|
||||
|
||||
```
|
||||
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
|
||||
│ 上传文档 │ ──→│ 文件向量化处理 │ ──→│ AI题目生成 │ ──→│ 题目预览 │
|
||||
│ │ │ │ │ │ │ │
|
||||
└──────────┘ └──────────────┘ └──────────────┘ └────┬─────┘
|
||||
│
|
||||
┌─────────────────────────────────────────┘
|
||||
↓
|
||||
┌──────────────┐
|
||||
│ 管理员审核操作 │
|
||||
└──────┬───────┘
|
||||
│
|
||||
┌──────────┼──────────┐
|
||||
↓ ↓ ↓
|
||||
┌────────┐ ┌────────┐ ┌────────┐
|
||||
│ 采纳通过 │ │ 编辑修改 │ │ 删除丢弃 │
|
||||
└───┬────┘ └───┬────┘ └────────┘
|
||||
↓ ↓
|
||||
┌────────┐ ┌────────┐
|
||||
│ 进入题库 │→ │ 进入题库 │
|
||||
└────────┘ └────────┘
|
||||
```
|
||||
|
||||
### 相关API接口
|
||||
|
||||
| 序号 | 接口路径 | 方法 | 说明 |
|
||||
|-----|---------|------|------|
|
||||
| 1 | `/api/file/upload` | POST | 上传制度文件 |
|
||||
| 2 | `/api/collections/{name}/vectorize` | POST | 文件向量化处理 |
|
||||
| 3 | `/api/exam/generate` | POST | AI智能出题接口 |
|
||||
| 4 | `/api/question/review/{questionId}` | PUT | 审核题目(采纳/拒绝) |
|
||||
|
||||
---
|
||||
|
||||
## 三、试卷生成流程(双路径)
|
||||
|
||||
### 路径A:管理员 — 智能组卷(可编辑 + 可发布)
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ 选择关联文档 │ ──→│ 配置试卷参数 │ ──→│ 调用组卷API │ ──→│ 预览编辑试卷 │
|
||||
│ (可选) │ │ │ │ │ │ │
|
||||
└──────────────┘ └──────────────┘ └──────────────┘ └──────┬───────┘
|
||||
│
|
||||
┌────────────────────────────────┘
|
||||
↓
|
||||
┌──────────────────────┐
|
||||
│ 管理员操作面板 │
|
||||
│ ├─ 编辑题目(题干/选项) │
|
||||
│ ├─ 调整分值/顺序 │
|
||||
│ └─ 发布试卷给指定用户 │
|
||||
└──────────┬───────────┘
|
||||
│
|
||||
┌───────────────┼───────────────┐
|
||||
↓ ↓ ↓
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ 保存草稿 │ │ 发布试卷 │ │ 删除试卷 │
|
||||
└──────────┘ └────┬─────┘ └──────────┘
|
||||
│
|
||||
↓ 用户收到通知
|
||||
┌──────────────────────┐
|
||||
│ 试卷考核-待考试列表 │
|
||||
└──────────────────────┘
|
||||
```
|
||||
|
||||
### 路径B:用户 — 自测组卷(仅生成,直接答题)
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ 配置参数 │ ──→│ 调用组卷API │ ──→│ 生成成功 │ ──→│ 直接进入答题 │
|
||||
│ (题型/难度) │ │ │ │ │ │ (不可编辑) │
|
||||
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
### 两条路径对比
|
||||
|
||||
| 维度 | 路径A:管理员智能组卷 | 路径B:用户自测组卷 |
|
||||
|-----|-------------------|------------------|
|
||||
| 入口 | 「智能组卷」标签页 | 「试卷考核→自测组卷」子标签 |
|
||||
| API | `POST /api/exam/paper/generate` | 同一接口 |
|
||||
| 可选文件 | ✅ 关联制度文件筛选 | ✅ 可选关联 |
|
||||
| 生成后行为 | 进入编辑预览 | **直接进入答题页面** |
|
||||
| 编辑题目 | ✅ 题干/选项/答案/分值 | ❌ 不支持 |
|
||||
| 发布功能 | ✅ 发布给指定部门/用户 | ❌ 仅自己使用 |
|
||||
| 数据持久化 | ✅ 存入后端试卷表 | ❌ 前端暂存,关闭即失 |
|
||||
| 权限要求 | `exam:paper` | `exam:exam` |
|
||||
|
||||
### 相关API接口
|
||||
|
||||
| 序号 | 接口路径 | 方法 | 说明 |
|
||||
|-----|---------|------|------|
|
||||
| 1 | `/api/exam/paper/generate` | POST | 从题库动态生成试卷 |
|
||||
| 2 | `/admin/exam/paper/{paperId}/publish` | POST | 管理员发布试卷(含deadline/target) |
|
||||
| 3 | `/api/exam/my/papers` | GET | 获取我的试卷列表 |
|
||||
| 4 | `/api/exam/paper/{paperId}` | GET | 获取试卷详情 |
|
||||
|
||||
---
|
||||
|
||||
## 四、答题考试流程(试卷考核)
|
||||
|
||||
### 核心流程图
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ 获取待考试 │ ────→ │ 选择试卷 │ ────→ │ 启动考试记录 │
|
||||
│ 列表 │ │ │ │ /record/start│
|
||||
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
|
||||
│ │ │
|
||||
↓ ↓ ↓
|
||||
┌──────────────┐ ┌──────────────────────────────────────────┐
|
||||
│ GET │ │ 答题界面 │
|
||||
│ /my/papers │ │ ┌─────────────────────────────────────┐ │
|
||||
└──────────────┘ │ │ 第 N 题 [题型] ★ 分值 │ │
|
||||
│ │ 题目内容 │ │
|
||||
│ │ ○ A. 选项内容 │ │
|
||||
│ │ ○ B. 选项内容 │ │
|
||||
│ │ ○ C. 选项内容 │ │
|
||||
│ │ ○ D. 选项内容 │ │
|
||||
│ └─────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [上一题] ●●●○●● [下一题] [提交试卷] │
|
||||
└──────────────┬───────────────────────────┘
|
||||
│
|
||||
┌───────────────────┼───────────────────┐
|
||||
↓ ↓ ↓
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ 自动保存 │ │ 提交试卷 │ │ 退出确认 │
|
||||
│ /save │ │ /submit │ │ │
|
||||
└──────────┘ └────┬─────┘ └──────────┘
|
||||
│
|
||||
↓
|
||||
┌──────────────────────┐
|
||||
│ 后端AI批改处理 │
|
||||
│ (自动触发) │
|
||||
└──────────┬───────────┘
|
||||
│
|
||||
↓
|
||||
┌──────────────────────┐
|
||||
│ 显示成绩单 │
|
||||
│ 总分/得分率/每题详情 │
|
||||
└──────────┬───────────┘
|
||||
│
|
||||
↓
|
||||
┌──────────────────────┐
|
||||
│ 错题自动收集入库 │
|
||||
│ → 错题本可查看/重做 │
|
||||
└──────────────────────┘
|
||||
```
|
||||
|
||||
### 答题流程详细步骤与API对应关系
|
||||
|
||||
| 步骤 | 操作 | API接口 | 方法 | 说明 |
|
||||
|-----|------|---------|------|------|
|
||||
| 1 | 获取待考试列表 | `/api/exam/my/papers` | GET | 返回当前用户的已发布试卷 |
|
||||
| 2 | 选择并进入试卷 | - | 前端切换视图 | 加载试卷数据到答题组件 |
|
||||
| 3 | **启动考试记录** | `/api/exam/record/{recordId}/start` | POST | 创建考试记录,开始计时 |
|
||||
| 4 | 答题中(自动保存) | `/api/exam/record/{recordId}/save` | PUT | 定期保存当前答案进度 |
|
||||
| 5 | 提交试卷 | `/api/exam/record/{recordId}/submit` | POST | 提交最终答案,触发后端AI批改 |
|
||||
| 6 | 查看成绩结果 | `/api/exam/record/{recordId}/result` | GET | 获取AI批改后的成绩和错题信息 |
|
||||
| 7 | 错题自动收集 | 后端自动处理 | - | 批改后自动将错题录入错题库 |
|
||||
|
||||
> **注意**:当后端尚未实现 record 系列 API 时,前端会优雅降级:
|
||||
> - start/save 失败时继续前端答题模式
|
||||
> - submit 失败时降级为直接调用 `/exam/grade` 进行批改
|
||||
|
||||
### 支持的题型及答题方式
|
||||
|
||||
| 题型 | question_type | 答题控件 | 答案格式 |
|
||||
|-----|--------------|---------|---------|
|
||||
| 单选题 | `single_choice` | Radio单选框 | 字符串 `"A"` |
|
||||
| 多选题 | `multiple_choice` | Checkbox多选框 | 数组 `["A","C"]` |
|
||||
| 判断题 | `true_false` | 是/否双选 | 字符串 `"true"`/`"false"` |
|
||||
| 填空题 | `fill_blank` | 文本输入框 | 字符串 |
|
||||
| 简答题 | `subjective` | 多行文本域 | 字符串 |
|
||||
|
||||
---
|
||||
|
||||
## 五、错题系统(两套独立机制)
|
||||
|
||||
### 架构对比
|
||||
|
||||
```
|
||||
┌─────────────────────┐ ┌─────────────────────┐
|
||||
│ 互动训练-错题本 │ │ 试卷考核-错题本 │
|
||||
│ (trainTab='wrong') │ │ (examTab='wrong') │
|
||||
├─────────────────────┤ ├─────────────────────┤
|
||||
│ 数据来源: 前端缓存 │ │ 数据来源: 后端API │
|
||||
│ 存储位置: trainingData│ │ 存储位置: 数据库表 │
|
||||
│ .wrongQuestions │ │ wrong_questions │
|
||||
│ │ │ │
|
||||
│ 触发场景: │ │ 触发场景: │
|
||||
│ • 闯关模式答错 │ │ • 试卷考核提交后 │
|
||||
│ • 每日一练答错 │ │ • 后端自动收集 │
|
||||
│ │ │ │
|
||||
│ 操作能力: │ │ 操作能力: │
|
||||
│ • 查看解析(前端mock) │ │ • 查看解析(API数据) │
|
||||
│ • 重做(重置关卡) │ │ • 重做(/redo API) │
|
||||
│ • 无持久化 │ │ • 收藏(/toggle API) │
|
||||
└─────────────────────┘ └─────────────────────┘
|
||||
```
|
||||
|
||||
### 试卷考核错题本API
|
||||
|
||||
| 操作 | API | 方法 | 说明 |
|
||||
|-----|-----|------|------|
|
||||
| 获取错题列表 | `/api/wrong-questions/list` | POST | 分页查询,支持collection过滤 |
|
||||
| 收藏/取消收藏 | `/api/wrong-questions/collection/toggle` | POST | 传入question_id |
|
||||
| 重做错题 | `/api/wrong-questions/redo` | POST | 传入question_ids数组 |
|
||||
|
||||
---
|
||||
|
||||
## 六、互动训练流程
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 互动训练 (exam:train) │
|
||||
├──────────┬──────────┬──────────────────────────────────────┤
|
||||
│ 🏆 闯关 │ 📅 每日一练│ ❌ 错题本(本地缓存) │
|
||||
│ checkpoint│ daily │ wrong │
|
||||
└──────────┴──────────┴──────────────────────────────────────┘
|
||||
|
||||
闯关模式流程:
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ 选择关卡 │ → │ 组卷API │ → │ 答题提交 │ → │ 批改评分 │
|
||||
│ (5个预设) │ │ generate │ │ grade │ │ 更新关卡 │
|
||||
└──────────┘ └──────────┘ └──────────┘ └──────────┘
|
||||
│
|
||||
┌──────────┴──────────┐
|
||||
↓ ↓
|
||||
┌──────────┐ ┌──────────┐
|
||||
│ 通过升级 │ │ 错题缓存 │
|
||||
│ 下一关 │ │ 本地存储 │
|
||||
└──────────┘ └──────────┘
|
||||
```
|
||||
|
||||
### 互动训练关卡配置(预设固定关卡)
|
||||
|
||||
| 关卡ID | 名称 | 难度 | 单选 | 多选 | 判断 | 简答 | 状态 |
|
||||
|-------|------|------|------|------|------|------|------|
|
||||
| 1 | 入门挑战 | ⭐ | 3 | 0 | 2 | 0 | in-progress |
|
||||
| 2 | 基础巩固 | ⭐⭐ | 4 | 2 | 2 | 0 | pending |
|
||||
| 3 | 进阶提升 | ⭐⭐⭐ | 4 | 3 | 3 | 0 | pending |
|
||||
| 4 | 高级挑战 | ⭐⭐⭐⭐ | 3 | 3 | 2 | 2 | pending |
|
||||
| 5 | 大师试炼 | ⭐⭐⭐⭐⭐ | 4 | 4 | 2 | 2 | pending |
|
||||
|
||||
---
|
||||
|
||||
## 七、完整API接口清单
|
||||
|
||||
### 7.1 题目管理
|
||||
|
||||
| 接口 | 路径 | 方法 | 权限 | 说明 |
|
||||
|-----|------|------|------|------|
|
||||
| AI出题 | `/api/exam/generate` | POST | exam:ai | 根据文档生成题目 |
|
||||
| 审核题目 | `/api/question/review/{id}` | PUT | exam:bank | 采纳/拒绝题目 |
|
||||
|
||||
### 7.2 试卷管理
|
||||
|
||||
| 接口 | 路径 | 方法 | 权限 | 说明 |
|
||||
|-----|------|------|------|------|
|
||||
| 生成试卷 | `/api/exam/paper/generate` | POST | exam:paper 或 exam:exam | 从题库动态组卷 |
|
||||
| 我的试卷 | `/api/exam/my/papers` | GET | exam:exam | 获取用户试卷列表 |
|
||||
| 试卷详情 | `/api/exam/paper/{paperId}` | GET | exam:paper 或 exam:exam | 获取试卷完整内容 |
|
||||
| 发布试卷 | `/admin/exam/paper/{paperId}/publish` | POST | exam:paper | 管理员发布试卷 |
|
||||
|
||||
### 7.3 答题考试(record-based)
|
||||
|
||||
| 接口 | 路径 | 方法 | 权限 | 说明 |
|
||||
|-----|------|------|------|------|
|
||||
| 启动考试 | `/api/exam/record/{recordId}/start` | POST | exam:exam | 开始考试计时 |
|
||||
| 保存答案 | `/api/exam/record/{recordId}/save` | PUT | exam:exam | 答题中途自动保存 |
|
||||
| 提交试卷 | `/api/exam/record/{recordId}/submit` | POST | exam:exam | 提交最终答案 |
|
||||
| 成绩查询 | `/api/exam/record/{recordId}/result` | GET | exam:exam | 获取批改成绩和错题 |
|
||||
|
||||
### 7.4 批改与查询
|
||||
|
||||
| 接口 | 路径 | 方法 | 权限 | 说明 |
|
||||
|-----|------|------|------|------|
|
||||
| 批改答案 | `/api/exam/grade` | POST | exam:exam | AI批改(降级备用) |
|
||||
| 查询答题记录 | `/api/exam/answers/query` | POST | exam:exam | 按paperId/sessionId查询 |
|
||||
|
||||
### 7.5 错题管理
|
||||
|
||||
| 接口 | 路径 | 方法 | 权限 | 说明 |
|
||||
|-----|------|------|------|------|
|
||||
| 错题列表 | `/api/wrong-questions/list` | POST | exam:exam | 分页获取错题 |
|
||||
| 收藏切换 | `/api/wrong-questions/collection/toggle` | POST | exam:exam | 收藏/取消收藏错题 |
|
||||
| 重做错题 | `/api/wrong-questions/redo` | POST | exam:exam | 重新练习错题 |
|
||||
|
||||
---
|
||||
|
||||
## 八、数据库核心表结构
|
||||
|
||||
### exam_paper(试卷表)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|-------|------|------|
|
||||
| id | BIGINT | 主键 |
|
||||
| uuid | VARCHAR(36) | UUID唯一标识 |
|
||||
| title | VARCHAR(200) | 试卷标题 |
|
||||
| total_score | INT | 总分 |
|
||||
| question_count | INT | 题目数量 |
|
||||
| difficulty | INT | 整体难度(1-5) |
|
||||
| status | TINYINT | 状态(0=草稿,1=已发布,2=已归档) |
|
||||
| creator_id | BIGINT | 创建者(管理员) |
|
||||
| created_at | DATETIME | 创建时间 |
|
||||
| updated_at | DATETIME | 更新时间 |
|
||||
|
||||
### exam_record(考试记录表)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|-------|------|------|
|
||||
| id | BIGINT | 主键 |
|
||||
| uuid | VARCHAR(36) | UUID唯一标识 |
|
||||
| paper_id | BIGINT | 关联试卷ID |
|
||||
| user_id | BIGINT | 考试用户ID |
|
||||
| status | TINYINT | 状态(0=未开始,1=进行中,2=已交卷,3=已批改) |
|
||||
| score | DECIMAL(5,2) | 得分 |
|
||||
| max_score | INT | 满分 |
|
||||
| started_at | DATETIME | 开始时间 |
|
||||
| submitted_at | DATETIME | 提交时间 |
|
||||
| graded_at | DATETIME | 批改完成时间 |
|
||||
|
||||
### wrong_questions(错题表)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|-------|------|------|
|
||||
| id | BIGINT | 主键 |
|
||||
| question_id | BIGINT | 关联题目ID |
|
||||
| user_id | BIGINT | 用户ID |
|
||||
| student_answer | TEXT | 学生答案 |
|
||||
| correct_answer | TEXT | 正确答案 |
|
||||
| is_correct | TINYINT | 是否正确(0=错误) |
|
||||
| error_count | INT | 错误次数 |
|
||||
| last_wrong_at | DATETIME | 最近错误时间 |
|
||||
|
||||
---
|
||||
|
||||
## 九、管理员 vs 用户 功能矩阵
|
||||
|
||||
| 功能 | 管理员 | 普通用户 |
|
||||
|-----|:-----:|:-------:|
|
||||
| AI出题 | ✅ | ✅(有权限) |
|
||||
| 题库审核 | ✅ | ❌ |
|
||||
| 智能组卷(生成) | ✅ | ❌ |
|
||||
| 智能组卷(编辑) | ✅ | ❌ |
|
||||
| 智能组卷(发布) | ✅ | ❌ |
|
||||
| 试卷考核-待考试 | ❌ | ✅ |
|
||||
| 试卷考核-答题 | ✅(测试) | ✅ |
|
||||
| 试卷考核-成绩单 | ✅ | ✅ |
|
||||
| 试卷考核-错题本(API) | ✅ | ✅ |
|
||||
| 试卷考核-自测组卷 | ✅ | ✅ |
|
||||
| 互动训练-闯关 | ✅ | ✅ |
|
||||
| 互动训练-每日一练 | ✅ | ✅ |
|
||||
| 互动训练-错题本(本地) | ✅ | ✅ |
|
||||
|
||||
---
|
||||
|
||||
*文档更新日期: 2026-05-10*
|
||||
*与 ExamModule.vue v2.0 + exam.js v2.0 对齐*
|
||||
Reference in New Issue
Block a user