import dayjs from "dayjs";
|
|
|
|
// 判断题目是否为多选题
|
|
export function isMultipleChoice(question) {
|
|
// 只有选择题才有多选/单选的概念
|
|
if (question.typeAnswer !== 0) return false;
|
|
if (!question.answerList || !question.answerList.length) return false;
|
|
const correctAnswers = question.answerList.filter(option => option.isTrue === 1 || option.isTrue === true);
|
|
return correctAnswers.length > 1;
|
|
}
|
|
|
|
// 判断选项是否被选中
|
|
export function isOptionSelected(question, optionId) {
|
|
// 只有选择题才有选项的概念
|
|
if (question.typeAnswer !== 0) return false;
|
|
if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return false;
|
|
return question.userAnswerBaseList.some(answer => answer.answerId === optionId);
|
|
}
|
|
|
|
// 判断答案是否正确
|
|
export function isAnswerCorrect(question) {
|
|
if (question.typeAnswer === 0) {
|
|
// 选择题逻辑
|
|
if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return false;
|
|
|
|
// 获取所有正确答案的ID
|
|
const correctOptionIds = question.answerList
|
|
.filter(option => option.isTrue === 1 || option.isTrue === true)
|
|
.map(option => option.id);
|
|
|
|
// 获取用户选择的答案ID
|
|
const userAnswerIds = [...new Set(question.userAnswerBaseList.map(answer => answer.answerId))];
|
|
|
|
// 判断用户选择的答案数量是否与正确答案数量相同
|
|
if (userAnswerIds.length !== correctOptionIds.length) {
|
|
return false;
|
|
}
|
|
|
|
// 判断用户选择的答案是否都是正确的
|
|
return userAnswerIds.every(answerId => correctOptionIds.includes(answerId));
|
|
} else if (question.typeAnswer === 1) {
|
|
// 填空题逻辑
|
|
if (!question.userAppletAnswerTrain || !question.userAppletAnswerTrain.answer) return false;
|
|
|
|
// 如果有标准答案,进行比较
|
|
if (question.answer) {
|
|
// 简单的字符串比较,可以根据实际需求调整比较逻辑
|
|
return question.userAppletAnswerTrain.answer.trim().toLowerCase() === question.answer.trim().toLowerCase();
|
|
}
|
|
|
|
// 如果没有标准答案,只要有内容就认为是正确的
|
|
return question.userAppletAnswerTrain.answer.trim() !== '';
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
export function isQuestionAnswered(question) {
|
|
if (question.typeAnswer === 1) {
|
|
// 填空题:检查是否有答案且答案不为空
|
|
return question.userAppletAnswerTrain &&
|
|
question.userAppletAnswerTrain.answer &&
|
|
question.userAppletAnswerTrain.answer.trim() !== '';
|
|
} else if (question.typeAnswer === 0) {
|
|
// 选择题:检查是否有选择的答案
|
|
if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return false;
|
|
|
|
// 对于多选题和单选题,都要求至少有一个答案
|
|
return question.userAnswerBaseList.length > 0;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// 获取题目的用户答案数组(支持单选和多选)
|
|
export function getUserAnswerIds(question) {
|
|
// 只有选择题才有answerId的概念
|
|
if (question.typeAnswer !== 0) return [];
|
|
if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return [];
|
|
return [...new Set(question.userAnswerBaseList.map(answer => answer.answerId))];
|
|
}
|
|
|
|
// 获取题目的正确答案数组
|
|
export function getCorrectAnswerIds(question) {
|
|
// 只有选择题才有answerId的概念
|
|
if (question.typeAnswer !== 0) return [];
|
|
if (!question.answerList || !question.answerList.length) return [];
|
|
return question.answerList
|
|
.filter(option => option.isTrue === 1 || option.isTrue === true)
|
|
.map(option => option.id);
|
|
}
|
|
|
|
// 获取填空题的用户答案
|
|
export function getUserTextAnswer(question) {
|
|
if (question.typeAnswer !== 1) return '';
|
|
if (!question.userAppletAnswerTrain || !question.userAppletAnswerTrain.answer) return '';
|
|
return question.userAppletAnswerTrain.answer.trim();
|
|
}
|
|
|
|
// 获取填空题的正确答案
|
|
export function getCorrectTextAnswer(question) {
|
|
if (question.typeAnswer !== 1) return '';
|
|
return question.answer || '';
|
|
}
|
|
|
|
// 判断全部题目答案是否达到指定的准确率(只判断选择题)
|
|
export function isSuccessPrecision(list, number = 100){
|
|
|
|
let errNumber = 0
|
|
let totalChoiceQuestions = 0
|
|
|
|
for (var index = 0; index < list.length; index++) {
|
|
var question = list[index];
|
|
|
|
// 只判断选择题(typeAnswer === 0),无论是基本题还是培训题
|
|
if (question.typeAnswer === 0) {
|
|
totalChoiceQuestions++
|
|
if (!isAnswerCorrect(question)) {
|
|
errNumber++
|
|
}
|
|
}
|
|
}
|
|
|
|
// 如果没有选择题,返回true
|
|
if (totalChoiceQuestions === 0) {
|
|
console.log('没有选择题需要判断');
|
|
return true
|
|
}
|
|
|
|
const accuracy = (totalChoiceQuestions - errNumber) / totalChoiceQuestions * 100
|
|
|
|
console.log('选择题总数:', totalChoiceQuestions, '答错题目数:', errNumber, '正确率:', accuracy);
|
|
|
|
if(accuracy < number){
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
export default {
|
|
isMultipleChoice,
|
|
isOptionSelected,
|
|
isAnswerCorrect,
|
|
isQuestionAnswered,
|
|
getUserAnswerIds,
|
|
getCorrectAnswerIds,
|
|
getUserTextAnswer,
|
|
getCorrectTextAnswer,
|
|
isSuccessPrecision,
|
|
}
|