猫妈狗爸伴宠师小程序前端代码
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.

150 lines
4.9 KiB

2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
  1. import dayjs from "dayjs";
  2. // 判断题目是否为多选题
  3. export function isMultipleChoice(question) {
  4. // 只有选择题才有多选/单选的概念
  5. if (question.typeAnswer !== 0) return false;
  6. if (!question.answerList || !question.answerList.length) return false;
  7. const correctAnswers = question.answerList.filter(option => option.isTrue === 1 || option.isTrue === true);
  8. return correctAnswers.length > 1;
  9. }
  10. // 判断选项是否被选中
  11. export function isOptionSelected(question, optionId) {
  12. // 只有选择题才有选项的概念
  13. if (question.typeAnswer !== 0) return false;
  14. if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return false;
  15. return question.userAnswerBaseList.some(answer => answer.answerId === optionId);
  16. }
  17. // 判断答案是否正确
  18. export function isAnswerCorrect(question) {
  19. if (question.typeAnswer === 0) {
  20. // 选择题逻辑
  21. if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return false;
  22. // 获取所有正确答案的ID
  23. const correctOptionIds = question.answerList
  24. .filter(option => option.isTrue === 1 || option.isTrue === true)
  25. .map(option => option.id);
  26. // 获取用户选择的答案ID
  27. const userAnswerIds = [...new Set(question.userAnswerBaseList.map(answer => answer.answerId))];
  28. // 判断用户选择的答案数量是否与正确答案数量相同
  29. if (userAnswerIds.length !== correctOptionIds.length) {
  30. return false;
  31. }
  32. // 判断用户选择的答案是否都是正确的
  33. return userAnswerIds.every(answerId => correctOptionIds.includes(answerId));
  34. } else if (question.typeAnswer === 1) {
  35. // 填空题逻辑
  36. if (!question.userAppletAnswerTrain || !question.userAppletAnswerTrain.answer) return false;
  37. // 如果有标准答案,进行比较
  38. if (question.answer) {
  39. // 简单的字符串比较,可以根据实际需求调整比较逻辑
  40. return question.userAppletAnswerTrain.answer.trim().toLowerCase() === question.answer.trim().toLowerCase();
  41. }
  42. // 如果没有标准答案,只要有内容就认为是正确的
  43. return question.userAppletAnswerTrain.answer.trim() !== '';
  44. }
  45. return false;
  46. }
  47. export function isQuestionAnswered(question) {
  48. if (question.typeAnswer === 1) {
  49. // 填空题:检查是否有答案且答案不为空
  50. return question.userAppletAnswerTrain &&
  51. question.userAppletAnswerTrain.answer &&
  52. question.userAppletAnswerTrain.answer.trim() !== '';
  53. } else if (question.typeAnswer === 0) {
  54. // 选择题:检查是否有选择的答案
  55. if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return false;
  56. // 对于多选题和单选题,都要求至少有一个答案
  57. return question.userAnswerBaseList.length > 0;
  58. }
  59. return false;
  60. }
  61. // 获取题目的用户答案数组(支持单选和多选)
  62. export function getUserAnswerIds(question) {
  63. // 只有选择题才有answerId的概念
  64. if (question.typeAnswer !== 0) return [];
  65. if (!question.userAnswerBaseList || !question.userAnswerBaseList.length) return [];
  66. return [...new Set(question.userAnswerBaseList.map(answer => answer.answerId))];
  67. }
  68. // 获取题目的正确答案数组
  69. export function getCorrectAnswerIds(question) {
  70. // 只有选择题才有answerId的概念
  71. if (question.typeAnswer !== 0) return [];
  72. if (!question.answerList || !question.answerList.length) return [];
  73. return question.answerList
  74. .filter(option => option.isTrue === 1 || option.isTrue === true)
  75. .map(option => option.id);
  76. }
  77. // 获取填空题的用户答案
  78. export function getUserTextAnswer(question) {
  79. if (question.typeAnswer !== 1) return '';
  80. if (!question.userAppletAnswerTrain || !question.userAppletAnswerTrain.answer) return '';
  81. return question.userAppletAnswerTrain.answer.trim();
  82. }
  83. // 获取填空题的正确答案
  84. export function getCorrectTextAnswer(question) {
  85. if (question.typeAnswer !== 1) return '';
  86. return question.answer || '';
  87. }
  88. // 判断全部题目答案是否达到指定的准确率(只判断选择题)
  89. export function isSuccessPrecision(list, number = 100){
  90. let errNumber = 0
  91. let totalChoiceQuestions = 0
  92. for (var index = 0; index < list.length; index++) {
  93. var question = list[index];
  94. // 只判断选择题(typeAnswer === 0),无论是基本题还是培训题
  95. if (question.typeAnswer === 0) {
  96. totalChoiceQuestions++
  97. if (!isAnswerCorrect(question)) {
  98. errNumber++
  99. }
  100. }
  101. }
  102. // 如果没有选择题,返回true
  103. if (totalChoiceQuestions === 0) {
  104. console.log('没有选择题需要判断');
  105. return true
  106. }
  107. const accuracy = (totalChoiceQuestions - errNumber) / totalChoiceQuestions * 100
  108. console.log('选择题总数:', totalChoiceQuestions, '答错题目数:', errNumber, '正确率:', accuracy);
  109. if(accuracy < number){
  110. return false
  111. }
  112. return true
  113. }
  114. export default {
  115. isMultipleChoice,
  116. isOptionSelected,
  117. isAnswerCorrect,
  118. isQuestionAnswered,
  119. getUserAnswerIds,
  120. getCorrectAnswerIds,
  121. getUserTextAnswer,
  122. getCorrectTextAnswer,
  123. isSuccessPrecision,
  124. }