🎯 试卷管理模块完整优化方案(布局+交互+算法+数据模型)
从前端布局、交互逻辑、后端算法、数据模型四个维度,完善试卷管理模块的落地实现,让组卷、编辑、发布全流程更高效、更可靠。
一、📋 前端布局与交互优化(现有基础上升级)
1. 试卷列表页(核心入口)
✅ 现有功能保留
- 筛选区:科目下拉、状态下拉、名称搜索
- 操作列:详情、停用、编辑、删除
- 顶部按钮:手动组卷、自动组卷
✅ 新增优化项
| 优化点 | 说明 | 价值 |
|---|---|---|
| 列表列扩展 | 新增「组卷方式」「试题数量」列,直观展示试卷结构(如"手动组卷 / 10题") | 一眼识别试卷类型,减少点击详情的次数 |
| 批量操作 | 新增「批量发布/取消发布」「批量导出试卷」按钮,支持多试卷批量处理 | 提升管理员效率,避免重复操作 |
| 状态可视化 | 用颜色标签标识状态(草稿-灰色、已发布-绿色、已停用-橙色),醒目清晰 | 快速区分试卷状态,定位目标试卷 |
| 快捷预览 | 在列表行添加「预览试卷」按钮,弹出弹窗展示试题结构(题型、分值、难度分布) | 无需进入详情页,快速确认试卷内容 |
🎨 优化后列表布局示意
┌───────────────────────────────────────────────────────────────────────────────────┐
│ 顶部:手动组卷(蓝) + 自动组卷(绿) + 批量操作(批量发布/导出) + 筛选区 │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 列表:ID | 试卷名称 | 科目 | 总分 | 时长 | 组卷方式 | 试题数量 | 状态 | 创建人 | 操作 │
│ ├──────┼──────────┼──────┼──────┼──────┼──────────┼──────────┼──────┼────────┼──────┤
│ │ 153 │ spring cloud试卷 │ Java │ 36 │ 60 │ 手动组卷 │ 10 │ 🟢已发布 │ 李Java老师 │ 详情/停用/编辑/删除/预览 │
│ └──────┴──────────┴──────┴──────┴──────┴──────────┴──────────┴──────┴────────┴──────┘
└───────────────────────────────────────────────────────────────────────────────────┘
2. 手动组卷弹窗(核心优化)
✅ 现有问题
- 试卷总分手动输入,易与实际选中试题总分不符;
- 添加试题后无即时校验,总分错误需返回修改;
- 试题列表仅显示题干,缺少题型、难度等关键信息。
✅ 优化点
| 优化点 | 说明 | 价值 |
|---|---|---|
| 总分自动计算 | 选中试题后自动累加分值,同步更新「试卷总分」输入框(禁止手动修改,仅可通过添加/删除试题调整) | 彻底避免总分错误,减少校验成本 |
| 试题预览增强 | 添加试题后,列表显示「题型、难度、分值、知识点」,支持拖拽排序(调整试题顺序) | 直观了解试卷结构,灵活调整试题顺序 |
| 知识点覆盖统计 | 新增「知识点覆盖进度条」,显示当前选中试题覆盖的知识点占比(如"已覆盖8/10个核心知识点") | 确保试卷知识点分布合理,避免考点遗漏 |
| 分值校验预警 | 当选中试题总分与设置的「考试时长」不匹配时(如总分100但时长30分钟),弹出预警提示 | 提前发现不合理设置,避免考试时出现问题 |
🎨 优化后弹窗布局示意
┌───────────────────────────────────────────────────────────────────────────────────┐
│ 顶部:手动组卷 + 关闭按钮 │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 基本信息区:试卷名称(必填) + 所属科目(必填) + 考试时长(必填) + 试卷总分(自动计算) │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 知识点覆盖区:进度条(8/10) + 未覆盖知识点提示(如"缺少「Nacos配置」知识点试题") │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 试题列表区:序号 | 题干 | 题型 | 难度 | 分值 | 知识点 | 操作(删除/上移/下移) │
│ ├────────┼─────────────────────┼──────┼──────┼──────┼──────────┼────────┤
│ │ 1 │ Spring Cloud基于哪个框架? │ 单选 | 简单 | 2 │ 基础概念 | 删除/上移/下移 │
│ └────────┴─────────────────────┴──────┴──────┴──────┴──────────┴────────┘
├───────────────────────────────────────────────────────────────────────────────────┤
│ 底部:添加试题(蓝) + 保存(蓝) + 取消(灰) │
└───────────────────────────────────────────────────────────────────────────────────┘
3. 自动组卷弹窗(核心优化)
✅ 现有问题
- 难度分布为固定比例,不能按知识点、题型难度精准筛选;
- 生成后无预览,直接保存,无法调整试题;
- 试题数量不足时无提示,生成的试卷不符合要求。
✅ 优化点
| 优化点 | 说明 | 价值 |
|---|---|---|
| 灵活筛选条件 | 新增「知识点范围」下拉、「题型难度组合」设置(如"单选题-简单:5题,多选题-中等:3题"),替代固定比例 | 精准匹配组卷需求,适配不同考试场景 |
| 生成预览 | 生成试卷后先展示试题列表预览,支持调整(添加/删除试题、修改分值),确认后再保存 | 避免生成不符合要求的试卷,提升组卷成功率 |
| 冲突校验 | 当筛选条件下试题数量不足时,弹出提示并推荐替代试题(如"简单单选题不足5题,推荐使用中等难度单选题补充") | 提前解决试题不足的问题,减少组卷失败率 |
| 模板保存 | 支持将当前组卷设置保存为模板(如"期中试卷模板"),后续组卷直接复用 | 减少重复设置,提升组卷效率 |
🎨 优化后弹窗布局示意
┌───────────────────────────────────────────────────────────────────────────────────┐
│ 顶部:自动组卷 + 关闭按钮 │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 基本信息区:试卷名称(必填) + 所属科目(必填) + 考试时长(必填) + 试卷总分(必填) │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 筛选设置区: │
│ ┌──────────┬──────────┬──────────┐
│ │ 题型 │ 数量 │ 难度 │
│ ├──────────┼──────────┼──────────┤
│ │ 单选题 │ 5 │ 简单 │
│ │ 多选题 │ 3 │ 中等 │
│ └──────────┴──────────┴──────────┘
│ 知识点范围:[下拉选择,如"Spring Cloud 基础概念"] │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 模板区:保存为模板(输入模板名称) + 加载模板(下拉选择已保存模板) │
├───────────────────────────────────────────────────────────────────────────────────┤
│ 底部:生成预览(蓝) + 保存(蓝) + 取消(灰) │
└───────────────────────────────────────────────────────────────────────────────────┘
4. 试卷详情/编辑页(核心优化)
✅ 现有问题
- 试题列表无排序、筛选功能,查看和编辑不方便;
- 编辑时只能删除试题,不能调整顺序或替换;
- 缺少操作日志,无法追溯试卷变更历史。
✅ 优化点
| 优化点 | 说明 | 价值 |
|---|---|---|
| 试题列表增强 | 支持按「题型、难度、知识点」筛选,支持拖拽排序,支持「替换试题」按钮(点击后弹出试题选择弹窗,替换当前试题) | 灵活调整试卷结构,满足精细化编辑需求 |
| 分值统计可视化 | 顶部新增「题型分值分布饼图」(如"单选题30%,多选题40%"),直观展示试卷结构 | 快速识别分值分布是否合理,辅助调整 |
| 操作日志模块 | 新增「操作日志」模块,记录试卷的创建、编辑、发布、停用历史(操作人、时间、内容) | 满足审计需求,追溯试卷变更过程 |
| 关联考试提示 | 显示该试卷已关联的考试列表(如"已关联「SC考试」「Spring Cloud考试」"),禁止删除已关联的试卷 | 避免误删导致考试数据丢失,保障系统稳定性 |
二、⚙️ 后端算法与数据模型优化
1. 核心表结构(基于优化后的设计)
| 表名 | 核心字段 | 用途 |
|---|---|---|
paper(试卷主表) |
id, name, subject_id, total_score, duration, group_type(手动/自动), status, create_user_id, create_time |
存储试卷基本信息 |
paper_question(试卷试题关联表) |
id, paper_id, question_id, sort_num(顺序号), score(试卷中该题的分值), is_original_score(是否保留原分值) |
存储试卷与试题的关联关系,支持自定义分值和顺序 |
paper_template(组卷模板表) |
id, name, subject_id, config(JSON存储筛选条件), create_user_id, create_time |
存储自动组卷的模板设置,支持复用 |
2. 手动组卷算法
java
// 手动组卷核心逻辑
@PostMapping("/manualGroup")
public Result manualGroup(@RequestBody PaperManualRequest request) {
// 1. 校验基本信息(必填项、时长与总分匹配)
// 2. 计算选中试题的总分,与request.totalScore校验(不匹配则返回错误)
// 3. 插入paper表,生成试卷ID
// 4. 批量插入paper_question表,记录试题关联关系和顺序号
// 5. 返回试卷ID,前端跳转到详情页
return Result.success(paperId);
}
3. 自动组卷算法
java
// 自动组卷核心逻辑
@PostMapping("/autoGroup")
public Result autoGroup(@RequestBody PaperAutoRequest request) {
// 1. 解析筛选条件(题型难度组合、知识点范围)
// 2. 从question表中随机抽取符合条件的试题(保证难度、题型、知识点符合要求)
// 3. 校验抽取的试题总分是否与request.totalScore匹配(不匹配则调整试题数量或分值)
// 4. 生成预览数据,返回给前端;用户确认后插入paper和paper_question表
// 5. 支持保存为模板(若request.saveTemplate为true,插入paper_template表)
return Result.success(previewData);
}
4. 试卷状态流转算法
java
// 发布试卷核心逻辑
@PostMapping("/publish")
public Result publish(@RequestParam Long paperId) {
// 1. 校验试卷状态(仅草稿可发布)
// 2. 更新paper表的status为「已发布」,记录发布时间和操作人
// 3. 推送通知给关联的考生/老师(通过WebSocket)
// 4. 刷新试卷列表页状态
return Result.success("试卷已成功发布");
}
// 删除试卷核心逻辑
@DeleteMapping("/delete")
public Result delete(@RequestParam Long paperId) {
// 1. 校验试卷是否已关联考试(关联则禁止删除,返回提示)
// 2. 删除paper和paper_question表的记录
// 3. 刷新试卷列表页
return Result.success("试卷已成功删除");
}
三、🔄 交互逻辑闭环(完整流程)
1. 手动组卷流程
后端 前端 管理员 后端 前端 管理员 点击「手动组卷」 弹出手动组卷弹窗 填写基本信息 + 添加试题 提交组卷请求(含试题ID列表) 计算总分 + 校验 + 插入数据库 返回试卷ID 跳转到试卷详情页
2. 自动组卷流程
后端 前端 管理员 后端 前端 管理员 点击「自动组卷」 弹出自动组卷弹窗 设置筛选条件 + 点击「生成预览」 提交组卷请求(含筛选条件) 抽取试题 + 校验 + 生成预览数据 返回预览数据 调整试题(可选) + 点击「保存」 提交保存请求 插入数据库(可选保存为模板) 返回试卷ID 跳转到试卷详情页
四、✨ 优化价值总结
- 体验提升:自动计算总分、拖拽排序、生成预览等功能,减少手动错误,提升组卷效率。
- 功能完善:组卷模板、操作日志、冲突校验等功能,满足复杂组卷场景和审计需求。
- 数据一致:关联表结构确保试卷与试题的关系清晰,统计和查询效率更高。
- 业务适配:灵活的筛选条件和模板功能,适配不同考试场景(期中/期末/模拟考)。
- 风险防控:关联考试校验、状态流转日志,避免误操作导致的数据丢失。