5.9 KiB
5.9 KiB
题目格式问题修复完整说明
🔍 问题分析
问题现象
- ❌ 所有新试卷的题目判断为错误
- ❌ 成绩详情显示"正确答案:暂无"
- ✅ 旧试卷(修改前的)正常工作
- ❌ 新试卷(修改后的)不工作
根本原因
在题目编辑页面中,选项和答案保存格式错误:
错误格式(修改后):
{
"options": "[\"A. 选项内容1\", \"B. 选项内容2\", \"C. 选项内容3\"]",
"correctAnswer": "A. 选项内容1"
}
正确格式(应该是):
{
"options": "[\"选项内容1\", \"选项内容2\", \"选项内容3\"]",
"correctAnswer": "A"
}
为什么旧试卷正常
旧试卷保存的格式是正确的,没有 "A. " 前缀。
✅ 已修复的代码
1. questionEdit.vue - 单选题label
位置: 第44行
修改前:
<el-radio :label="option">
修改后:
<el-radio :label="String.fromCharCode(65 + index)">
2. questionEdit.vue - 多选题label
位置: 第59行
修改前:
<el-checkbox :label="option">
修改后:
<el-checkbox :label="String.fromCharCode(65 + index)">
3. questionEdit.vue - 选项保存格式
位置: buildOptionsPayload 方法
修改: 去除选项的 "A. "、"B. " 前缀
const list = this.optionsList.map(item => {
if (!item) return '';
const trimmed = item.trim();
// 去除 "A. "、"B. " 前缀
const prefixPattern = /^[A-F]\.\s*/;
return trimmed.replace(prefixPattern, '');
}).filter(item => item);
4. questionEdit.vue - 答案格式化
位置: formatCorrectAnswer 方法
修改: 确保单选题只保存字母(A、B、C)
5. StudyScoreController.java - 答案判断
位置: normalizeSingleAnswer 方法
修改: 支持去除 "A. " 前缀,只比较字母
🚀 修复步骤
步骤1:重新编译前端UI(后台管理系统)
cd C:\Users\Administrator\Desktop\Project\ry_study-v_03\Study-Vue-redis\ry-study-ui
npm run build:prod
# 或开发模式
npm run dev
步骤2:重新编译后端
cd C:\Users\Administrator\Desktop\Project\ry_study-v_03\Study-Vue-redis
mvn clean package -DskipTests
# 重启后端服务
步骤3:修复已有的错误数据
执行 SQL:log/Sql/fix_question_format.sql
重要步骤:
3.1 查看有问题的题目
SELECT
id,
question_type,
options,
correct_answer
FROM study_question
WHERE options LIKE '%"A. %' OR options LIKE '%"B. %';
3.2 批量修复(谨慎!先备份!)
-- 备份
CREATE TABLE study_question_backup_20251205 AS
SELECT * FROM study_question;
-- 修复考试14的题目
UPDATE study_question
SET
options = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
options,
'"A. ', '"'),
'"B. ', '"'),
'"C. ', '"'),
'"D. ', '"'),
'"E. ', '"'),
'"F. ', '"'),
correct_answer = CASE
WHEN correct_answer LIKE 'A. %' THEN 'A'
WHEN correct_answer LIKE 'B. %' THEN 'B'
WHEN correct_answer LIKE 'C. %' THEN 'C'
WHEN correct_answer LIKE 'D. %' THEN 'D'
ELSE correct_answer
END
WHERE exam_id = 14 AND question_type IN ('single', 'multiple');
3.3 验证修复结果
SELECT
id,
options,
correct_answer
FROM study_question
WHERE exam_id = 14;
应该看到:
options: ["选项内容1","选项内容2"] ✅
correctAnswer: A ✅
步骤4:重新做题测试
- 登录App
- 做修复后的试卷
- 提交
- 查看成绩详情
- 检查:
- ✅ 答对的题目显示绿色
- ✅ 答错的题目显示红色
- ✅ 正确答案正常显示
📋 测试清单
测试1:新建题目
- 在后台管理系统新建一个试卷
- 添加题目(单选、多选、判断)
- 保存
- 执行SQL查看数据格式:
SELECT options, correct_answer FROM study_question WHERE id = {新建的题目ID}; - 预期结果:
- options:
["选项1","选项2"]✅ - correctAnswer:
A✅
- options:
测试2:编辑题目
- 编辑一个已有题目
- 修改选项和答案
- 保存
- 检查格式是否正确
测试3:App端答题
- 在App做题
- 提交
- 查看成绩详情
- 预期结果:
- 答案判断正确 ✅
- 显示正确答案 ✅
⚠️ 注意事项
1. 数据迁移
已有的错误数据需要手动修复,不会自动更新。
2. 备份重要
修复数据前务必备份:
CREATE TABLE study_question_backup AS SELECT * FROM study_question;
3. 多选题答案顺序
多选题答案会自动排序(A,B,C),不影响判断。
4. 判断题
判断题不受影响,使用 "正确"/"错误"。
🔧 如果还有问题
问题A:修复后还是不对
检查:
- 是否重新编译了前端UI?
- 是否执行了SQL修复数据?
- 是否清除了浏览器缓存?
问题B:旧试卷也出问题了
原因: 可能误修复了旧数据
解决: 从备份恢复
问题C:答案还是显示"暂无"
检查: 数据库中 correct_answer 字段是否为空
SQL:
SELECT id, correct_answer FROM study_question WHERE correct_answer IS NULL;
📊 数据格式对比
正确格式
{
"id": 149,
"questionType": "single",
"questionContent": "这是题干",
"options": "[\"选项1\",\"选项2\",\"选项3\"]",
"correctAnswer": "A"
}
错误格式(已修复)
{
"id": 149,
"questionType": "single",
"questionContent": "这是题干",
"options": "[\"A. 选项1\",\"B. 选项2\",\"C. 选项3\"]",
"correctAnswer": "A. 选项1"
}
✅ 完成标志
当看到以下结果时,说明修复成功:
- ✅ 后台题目保存后,SQL查询显示正确格式
- ✅ App端答题后,判断结果正确
- ✅ 成绩详情显示正确答案
- ✅ 答对的题目显示绿色,答错的显示红色