9.0 KiB
9.0 KiB
试卷考核功能设计文档
日期: 2026-05-10 状态: 已批准 模块: 考察与训练 - 试卷考核子功能
一、功能概述
在现有「考察与训练」模块中新增 试卷考核 主标签页,为用户提供完整的考试流程:接收考试 → 答题 → 批改 → 查看成绩 → 错题练习。同时保留用户自行生成测试卷的能力。
二、模块架构
2.1 改造后的标签页结构
考察与训练 (exam)
├── 🤖 AI出题 (generate) — exam:ai — 管理员/有权限
├── 📚 题库管理 (bank) — exam:bank — 管理员/有权限
├── 📋 智能组卷 (paper) — exam:paper — 管理员专用(可编辑+发布)
├── 📝 试卷考核 (exam) — exam:exam — 全员(答题+错题+自测)
└── 🎯 互动训练 (train) — exam:train — 全员(闯关+每日一练)
2.2 试卷考核子标签页
试卷考核 [exam]
├── 📋 待考试 (pending) — 管理员发布的待完成试卷列表
├── ✏️ 答题中 (taking) — 全屏答题界面(当前正在答的试卷)
├── 📊 成绩单 (results) — 已完成的试卷批改结果
├── ❌ 错题本 (wrong) — 调用 wrong-questions/list API
└── 🔧 自测组卷 (selftest) — 用户自行生成试卷(只生成不编辑,直接做题)
三、权限模型
3.1 新增权限代码
在 permission.js 的 permissionCodeToModule 中新增:
'exam:exam': 'exam', // 试卷考核 - 查看、答题、成绩、错题
'exam:exam:selftest': 'exam', // 自测组卷 - 用户自行生成试卷
3.2 数据库新增权限记录
需在 permission 表中插入:
| permissionCode | permissionName | parentId(=exam节点ID) |
|---|---|---|
exam:exam |
试卷考核 | [exam父节点ID] |
3.3 角色分配建议
| 角色 | 可见标签页 |
|---|---|
| 超级管理员/管理员 | 全部5个(含智能组卷编辑发布) |
| 普通员工 | AI出题 + 试卷考核 + 互动训练 |
3.4 前端权限控制变量
const canShowExam = computed(() =>
hasChildPermission('exam:exam') || hasChildPermission('exam')
)
四、核心功能详细设计
4.1 待考试列表 (pending)
功能: 展示管理员通过「智能组卷」发布后、用户尚未完成的试卷。
数据来源: GET /api/exam/my/papers (§15.1)
展示字段:
- 试卷标题 (paper_title)
- 出卷人/来源
- 题目数量 (question_count)
- 总分 (total_score)
- 发布时间 (generated_at)
- 状态标签:
待考试
交互: 点击卡片 → 进入全屏答题页面
空状态: "暂无待考试试卷,请等待管理员发布"
4.2 答题页面 (taking)
功能: 全屏沉浸式答题界面,支持5种题型的答案输入。
触发: 从待考试列表点击进入 / 从自测组卷生成后自动进入
界面布局:
┌─────────────────────────────────────────────┐
│ ⬅ 返回 📝 《试卷名称》 倒计时 ⏱️ │
├─────────────────────────────────────────────┤
│ │
│ 第 1/13 题 [单选题] ★ 5分 │
│ ─────────────────────────────────────── │
│ 根据公司考勤制度,迟到15分钟以内的处罚是? │
│ │
│ ○ A. 口头警告 │
│ ○ B. 扣款50元 │
│ ● C. 扣款100元 │
│ ○ D. 视为旷工 │
│ │
├─────────────────────────────────────────────┤
│ < 上一题 下一题 > 提交试卷 │
└─────────────────────────────────────────────┘
题型渲染规则:
| question_type | 控件 | 答案格式 |
|---|---|---|
| single_choice | Radio 单选 | 字符串 "A" |
| multiple_choice | Checkbox 多选 | 数组 ["A","C"] |
| true_false | Radio 是/否 | 字符串 "true"/"false" |
| fill_blank | Input 输入框 | 字符串 |
| subjective | Textarea 文本域 | 字符串 |
状态管理:
const currentTakingPaper = ref(null) // 当前正在答的试卷
const currentQuestionIndex = ref(0) // 当前题目索引
const takingAnswers = ref({}) // { questionId: answer }
const isSubmitting = ref(false) // 提交中状态
提交逻辑:
- 收集所有答案 → 构建
answers数组 - 调用
POST /api/exam/grade(§14.3) - 收到批改结果 → 自动跳转到成绩单视图
- 错题自动标记 → 可在错题本中查看
4.3 成绩单 (results)
功能: 展示已完成的试卷批改结果。
数据来源: 提交批改时的响应 + POST /api/exam/answers/query (§14.4)
展示内容:
- 总分 / 得分 / 得分率
- 每道题的对错状态、得分、反馈
- 用时统计
- 操作按钮: 「查看解析」「重做错题」
4.4 错题本 (wrong)
功能: 展示用户的错题记录,支持查看解析和重做。
数据来源: POST /api/wrong-questions/list (§18.1)
操作:
- 查看解析: 显示标准答案 + AI反馈 + 选项高亮
- 重做: 调用
POST /api/wrong-questions/redo(§18.3) → 进入答题模式 - 收藏: 调用
POST /api/wrong-questions/collection/toggle(§18.2)
与互动训练错题本的关系:
- 互动训练的错题本是前端本地缓存(闯关/每日一练的错题)
- 试卷考核的错题本调用后端API,是持久化的真实错题数据
- 两者独立存在,互不影响
4.5 自测组卷 (selftest)
功能: 用户自行配置参数生成测试卷,生成后直接进入答题。
API: POST /api/exam/paper/generate (§14.1) — 用户版
与智能组卷的区别:
| 维度 | 智能组卷(管理员) | 自测组卷(用户) |
|---|---|---|
| API | 同一个接口 | 同一个接口 |
| 生成后行为 | 进入编辑预览 | 直接进入答题 |
| 可编辑题目 | ✅ 编辑题干/选项/答案 | ❌ |
| 可发布给他人 | ✅ 发布按钮 | ❌ 仅自己使用 |
| 保存到试卷列表 | ✅ 存入后端 | ❌ 前端暂存 |
| 权限要求 | exam:paper |
exam:exam:selftest |
交互流程:
- 配置参数(题型数量、难度)→ 可选关联制度文件
- 点击「开始测试」→ 调用 generatePaper API
- 生成成功 → 自动切换到答题页面(taking)
- 答题 → 提交批改 → 显示成绩
五、智能组卷改造(管理员增强)
5.1 新增能力
在现有的智能组卷功能上增加:
-
编辑题目: 在预览弹窗中点击题目旁的「编辑」按钮
- 可修改: 题干(stem)、选项(options)、答案(answer)、分值(score)
- 使用已有的
showEditQuestionModal逻辑
-
发布试卷: 在预览弹窗底部增加「发布试卷」按钮
- 调用后端发布接口(如需要新增接口则后续补充)
- 发布成功后有
exam:exam权限的用户可在「试卷考核-待考试」中看到
-
试卷列表: 增加本地已生成试卷的管理面板
- 显示所有已生成的试卷(草稿/已发布)
- 支持预览、编辑草稿、发布、删除
5.2 权限隔离
// 只有拥有 exam:paper 权限的用户才能看到编辑和发布按钮
const canEditAndPublish = computed(() => hasChildPermission('exam:paper'))
六、API 接口清单
| 功能 | 方法 | 路径 | 文档章节 |
|---|---|---|---|
| 生成试卷(共用) | POST | /api/exam/paper/generate |
§14.1 |
| 批改答案 | POST | /api/exam/grade |
§14.3 |
| 查询答题记录 | POST | /api/exam/answers/query |
§14.4 |
| 我的试卷列表 | GET | /api/exam/my/papers |
§15.1 |
| 试卷详情 | GET | /api/exam/paper/{paperId} |
§15.2 |
| 错题列表 | POST | /api/wrong-questions/list |
§18.1 |
| 收藏错题 | POST | /api/wrong-questions/collection/toggle |
§18.2 |
| 重做错题 | POST | /api/wrong-questions/redo |
§18.3 |
七、文件变更清单
| 文件 | 变更类型 | 说明 |
|---|---|---|
src/utils/permission.js |
修改 | 新增 exam:exam 权限映射 |
src/api/exam.js |
已完成 | 所有API方法已在之前添加 |
src/components/ExamModule.vue |
大幅修改 | 新增试卷考核标签页及全部子功能 |
| 数据库 permission 表 | 新增记录 | INSERT exam:exam 权限 |