diff --git a/main.py b/main.py index ddca02a..d2129f4 100644 --- a/main.py +++ b/main.py @@ -193,6 +193,7 @@ async def save_answers(request: SaveAnswersRequest): question_id = answer.get('questionId') or answer.get('question_id', '') question_text = answer.get('questionText') or answer.get('question_text', '') question_type = answer.get('questionType') or answer.get('question_type', '') + options = answer.get('options', {}) # 获取选项数据 is_correct = user_answer == correct_answer score = answer.get('score', 0) if is_correct else 0 @@ -205,7 +206,8 @@ async def save_answers(request: SaveAnswersRequest): 'userAnswer': user_answer, 'correctAnswer': correct_answer, 'isCorrect': is_correct, - 'score': score + 'score': score, + 'options': options # 保存选项数据 }) # 将整个答题数据保存为JSON @@ -524,49 +526,40 @@ async def get_quiz_results(session_id: str): # 合并题目数据和答题结果 detailed_results = [] for i, answer in enumerate(answers_data): - # 找到对应的题目 - question = None - for q in selected_questions: - if q['questionId'] == answer['questionId']: - question = q - break + # 优先使用保存的选项数据 + options = answer.get('options', {}) - # 如果找不到完整题目数据,使用答题数据中的基本信息 - if not question: - detailed_results.append({ - 'questionNumber': i + 1, - 'questionText': answer['questionText'], - 'questionType': answer['questionType'], - 'options': {}, # 空选项,因为没有完整题目数据 - 'userAnswer': answer['userAnswer'], - 'correctAnswer': answer['correctAnswer'], - 'isCorrect': answer['isCorrect'], - 'score': answer['score'], - 'questionId': answer['questionId'] - }) - else: - # 获取所有选项 - options = {} - labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] - for label in labels: - for key in question: - # 使用正则表达式来匹配选项键 - import re - if re.sub(r'\s+', '', key).find(f'选项{label}') != -1: - options[label] = question[key] - break + # 如果保存的选项数据为空,尝试从Excel数据中获取 + if not options: + # 找到对应的题目 + question = None + for q in selected_questions: + if q['questionId'] == answer['questionId']: + question = q + break - detailed_results.append({ - 'questionNumber': i + 1, - 'questionText': question['题干'], - 'questionType': question['questionType'], - 'options': options, - 'userAnswer': answer['userAnswer'], - 'correctAnswer': answer['correctAnswer'], - 'isCorrect': answer['isCorrect'], - 'score': answer['score'], - 'questionId': answer['questionId'] - }) + if question: + # 获取所有选项 + labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] + for label in labels: + for key in question: + # 使用正则表达式来匹配选项键 + import re + if re.sub(r'\s+', '', key).find(f'选项{label}') != -1: + options[label] = question[key] + break + + detailed_results.append({ + 'questionNumber': i + 1, + 'questionText': answer['questionText'], + 'questionType': answer['questionType'], + 'options': options, # 使用保存的选项数据或重新获取的数据 + 'userAnswer': answer['userAnswer'], + 'correctAnswer': answer['correctAnswer'], + 'isCorrect': answer['isCorrect'], + 'score': answer['score'], + 'questionId': answer['questionId'] + }) conn.close() @@ -684,8 +677,13 @@ async def quiz_results_page(session_id: str, request: Request): raise HTTPException(status_code=404, detail="会话不存在") # 生成答题结果页面 - html_content = generate_quiz_results_page(session_data, session_id) - return Response(content=html_content, media_type="text/html; charset=utf-8") + return templates.TemplateResponse("quiz-results.html", { + "request": request, + "session_id": session_id, + "student_name": session_data['name'], + "school": session_data['school'], + "grade": session_data['grade'] + }) except HTTPException: raise @@ -715,802 +713,25 @@ async def quiz_page(session_id: str, request: Request): # 检查会话状态 if session_data['status'] in ['completed', 'can_regenerate']: # 显示完成状态页面 - html_content = generate_completion_page(session_data, session_id) + return templates.TemplateResponse("completion.html", { + "request": request, + "session_id": session_id, + "student_name": session_data['name'], + "school": session_data['school'], + "grade": session_data['grade'], + "total_score": session_data['total_score'] or 0, + "completed_at": session_data['completed_at'] or '未知时间' + }) else: # 显示答题页面 - html_content = generate_quiz_page(session_data, session_id) - - return Response(content=html_content, media_type="text/html; charset=utf-8") + return templates.TemplateResponse("quiz.html", { + "request": request, + "session_id": session_id, + "student_name": session_data['name'], + "school": session_data['school'], + "grade": session_data['grade'] + }) -def generate_quiz_page(session_data: sqlite3.Row, session_id: str) -> str: - """生成答题页面HTML""" - questions_config = json.loads(session_data['questions_config']) - student_name = session_data['name'] - school = session_data['school'] - grade = session_data['grade'] - - return f''' - -
- - -请认真回答以下问题
-查看每道题的答题情况和正确答案
-查看每道题的答题情况和正确答案
+请认真回答以下问题
+