fix(答案处理): 改进多答案字符串的分割逻辑

处理类似"同创造,共分享,齐飞扬"格式的答案字符串,统一使用逗号分割并去除空格
This commit is contained in:
2026-01-23 18:14:29 +08:00
parent eec3ea2238
commit abfe6e95f9
9 changed files with 743 additions and 695 deletions

View File

@@ -116,9 +116,16 @@ export class QuizController {
userAnsList = answer.userAnswer;
} else if (typeof answer.userAnswer === 'string') {
try {
userAnsList = JSON.parse(answer.userAnswer);
const parsed = JSON.parse(answer.userAnswer);
if (Array.isArray(parsed)) {
userAnsList = parsed;
} else {
// 尝试按逗号分割(处理如"同创造,共分享,齐飞扬"格式)
userAnsList = answer.userAnswer.split(',').map(item => item.trim());
}
} catch (e) {
userAnsList = [answer.userAnswer];
// JSON解析失败尝试按逗号分割
userAnsList = answer.userAnswer.split(',').map(item => item.trim());
}
}
@@ -128,10 +135,15 @@ export class QuizController {
} else if (typeof question.answer === 'string') {
try {
const parsed = JSON.parse(question.answer);
if (Array.isArray(parsed)) correctAnsList = parsed;
else correctAnsList = [question.answer];
if (Array.isArray(parsed)) {
correctAnsList = parsed;
} else {
// 尝试按逗号分割(处理如"同创造,共分享,齐飞扬"格式)
correctAnsList = question.answer.split(',').map(item => item.trim());
}
} catch {
correctAnsList = [question.answer];
// JSON解析失败尝试按逗号分割
correctAnsList = question.answer.split(',').map(item => item.trim());
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -6,8 +6,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>宝来威考试平台</title>
<meta name="description" content="功能完善的在线问卷调查系统,支持多种题型、随机抽题、免注册答题等特性" />
<script type="module" crossorigin src="/assets/index-38e9e7a4.js"></script>
<link rel="stylesheet" href="/assets/index-acd65452.css">
<script type="module" crossorigin src="/assets/index-af8cb0cc.js"></script>
<link rel="stylesheet" href="/assets/index-f369cdf2.css">
</head>
<body>
<div id="root"></div>

18
package-lock.json generated
View File

@@ -188,6 +188,7 @@
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@@ -1539,6 +1540,7 @@
"integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.2.2"
@@ -2028,6 +2030,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -2793,6 +2796,7 @@
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
"integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.21.0"
},
@@ -2808,7 +2812,8 @@
"version": "1.11.19",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
"integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/debug": {
"version": "4.4.3",
@@ -3938,6 +3943,7 @@
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -4944,6 +4950,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -5877,6 +5884,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -5889,6 +5897,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
@@ -5909,6 +5918,7 @@
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
"integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/use-sync-external-store": "^0.0.6",
"use-sync-external-store": "^1.4.0"
@@ -6040,7 +6050,8 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/redux-thunk": {
"version": "3.1.0",
@@ -6941,6 +6952,7 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@@ -7014,6 +7026,7 @@
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "~0.27.0",
"get-tsconfig": "^4.7.5"
@@ -7705,6 +7718,7 @@
"integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.18.10",
"postcss": "^8.4.27",

View File

@@ -379,8 +379,28 @@ const QuizPage = () => {
if (!userAnswer) return false;
if (question.type === 'multiple') {
const correctAnswers = Array.isArray(question.answer) ? question.answer : [question.answer];
const userAnswers = Array.isArray(userAnswer) ? userAnswer : [userAnswer];
// 处理正确答案
let correctAnswers: string[] = [];
if (Array.isArray(question.answer)) {
correctAnswers = question.answer;
} else if (typeof question.answer === 'string') {
// 尝试按逗号分割(处理如"同创造,共分享,齐飞扬"格式)
correctAnswers = question.answer.split(',').map(item => item.trim());
} else {
correctAnswers = [String(question.answer)];
}
// 处理用户答案
let userAnswers: string[] = [];
if (Array.isArray(userAnswer)) {
userAnswers = userAnswer;
} else if (typeof userAnswer === 'string') {
// 尝试按逗号分割(处理如"同创造,共分享,齐飞扬"格式)
userAnswers = userAnswer.split(',').map(item => item.trim());
} else {
userAnswers = [String(userAnswer)];
}
return correctAnswers.length === userAnswers.length &&
correctAnswers.every(answer => userAnswers.includes(answer));
} else {

View File

@@ -142,9 +142,11 @@ const ResultPage = () => {
try {
const parsed = JSON.parse(ans);
if (Array.isArray(parsed)) return parsed;
return [ans];
// 尝试按逗号分割(处理如"同创造,共分享,齐飞扬"格式)
return String(ans).split(',').map(item => item.trim());
} catch {
return [ans];
// JSON解析失败尝试按逗号分割
return String(ans).split(',').map(item => item.trim());
}
};