猫妈狗爸伴宠师小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

151 lines
4.9 KiB

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,
}