diff --git a/web/src/pages/ExamAnswerView.tsx b/web/src/pages/ExamAnswerView.tsx index 180c0a3..8cc93c8 100644 --- a/web/src/pages/ExamAnswerView.tsx +++ b/web/src/pages/ExamAnswerView.tsx @@ -4,7 +4,6 @@ import { Card, Button, Typography, - Tag, Space, Spin, Row, @@ -13,17 +12,14 @@ import { message } from 'antd' import { - FileTextOutlined, - HomeOutlined, - CheckCircleOutlined, - CloseCircleOutlined + HomeOutlined } from '@ant-design/icons' import * as examApi from '../api/exam' import type { Question } from '../types/question' import type { GetExamResponse } from '../types/exam' import styles from './ExamAnswerView.module.less' -const { Text, Paragraph } = Typography +const { Text } = Typography // 题型名称映射 const TYPE_NAME: Record = { @@ -60,7 +56,7 @@ const ExamAnswerView: React.FC = () => { // 处理打印功能 const handlePrint = () => { // 设置打印标题 - document.title = `${examData?.exam?.title || '试卷答案'}_打印版` + document.title = `试卷答案_打印版` // 触发打印 window.print() @@ -115,29 +111,8 @@ const ExamAnswerView: React.FC = () => { return null } - - // 格式化答案显示 - const formatAnswer = (answer: any, type: string): string => { - if (answer === null || answer === undefined || answer === '') { - return '未设置答案' - } - - if (Array.isArray(answer)) { - if (answer.length === 0) return '未设置答案' - return answer.filter(a => a !== null && a !== undefined && a !== '').join('、') - } - - if (type === 'true-false') { - // 处理判断题:支持字符串和布尔值 - const answerStr = String(answer).toLowerCase() - return answerStr === 'true' ? '正确' : '错误' - } - - return String(answer) - } - // 渲染答案详情 - const renderAnswerDetail = (question: Question, index: number, type: string) => { + const renderAnswerDetail = (question: Question, index: number) => { // 格式化答案显示 const formatAnswer = (answer: any, type: string): string => { if (answer === null || answer === undefined || answer === '') { @@ -232,7 +207,7 @@ const ExamAnswerView: React.FC = () => { - {examData.exam?.title || '试卷答案'} + 试卷答案 @@ -274,7 +249,7 @@ const ExamAnswerView: React.FC = () => {
{qs.map((q, index) => (
- {renderAnswerDetail(q, index, type)} + {renderAnswerDetail(q, index)}
))}
@@ -289,7 +264,7 @@ const ExamAnswerView: React.FC = () => { const globalIndex = rowIndex * 5 + colIndex; return ( - {renderAnswerDetail(q, globalIndex, type)} + {renderAnswerDetail(q, globalIndex)} ); })} diff --git a/web/src/pages/ExamOnline.tsx b/web/src/pages/ExamOnline.tsx index 33b4caf..f5220d7 100644 --- a/web/src/pages/ExamOnline.tsx +++ b/web/src/pages/ExamOnline.tsx @@ -195,7 +195,7 @@ const ExamOnline: React.FC = () => { // 清除进度 localStorage.removeItem(`exam_progress_${examId}`) // 跳转到成绩页,传递提交结果 - navigate(`/exam/result/${res.data.record_id}`, { + navigate(`/exam/result/${res.data?.record_id}`, { state: { submitResult: res.data } }) } else { @@ -223,14 +223,14 @@ const ExamOnline: React.FC = () => { const blankCount = question.content ? (question.content.match(/\*{4,}/g) || []).length : answers.length // 处理题目内容,将 **** 替换为输入框占位符 - const renderQuestionContent = (content: string, questionId: number) => { + const renderQuestionContent = (content: string) => { if (!content) return content let processedContent = content let inputIndex = 0 // 将所有的 **** 替换为输入框标识 - processedContent = processedContent.replace(/\*{4,}/g, (match) => { + processedContent = processedContent.replace(/\*{4,}/g, () => { const id = `blank_${inputIndex}` inputIndex++ return `[INPUT:${id}]` @@ -241,7 +241,7 @@ const ExamOnline: React.FC = () => { // 渲染包含输入框的题目内容 const renderContentWithInputs = () => { - const processedContent = renderQuestionContent(question.content || '', question.id) + const processedContent = renderQuestionContent(question.content || '') const parts = processedContent.split(/\[INPUT:([^\]]+)\]/) return ( diff --git a/web/src/pages/ExamPrint.tsx b/web/src/pages/ExamPrint.tsx index d65c6f5..e19bc5d 100644 --- a/web/src/pages/ExamPrint.tsx +++ b/web/src/pages/ExamPrint.tsx @@ -188,7 +188,7 @@ const ExamPrint: React.FC = () => { const totalBlanks = (content.match(/\*{4,}/g) || []).length // 将所有的 **** 替换为连续的下划线 - processedContent = processedContent.replace(/\*{4,}/g, (match) => { + processedContent = processedContent.replace(/\*{4,}/g, () => { const width = calculateUnderscoreWidth(blankIndex, totalBlanks) blankIndex++ return `` diff --git a/web/src/types/exam.ts b/web/src/types/exam.ts index ed94dbf..5dd1f46 100644 --- a/web/src/types/exam.ts +++ b/web/src/types/exam.ts @@ -116,12 +116,14 @@ export interface StartExamResponse { // 提交试卷响应 export interface SubmitExamResponse { - score: number - total_score: number - is_passed: boolean - time_spent: number - answers: ExamAnswer[] - detailed_results: Record