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