question-result.vue 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <template>
  2. <view v-if="isReadOnly && question.isLeaf"
  3. class="question-result mt-40 rounded-8 pt-60 pb-40 flex items-center text-center relative">
  4. <ie-image v-if="question.isCorrect" src="/pagesStudy/static/image/icon-answer-correct.png"
  5. class="absolute top-0 left-1/2 -translate-x-1/2 w-222 h-64" :class="{ 'top-30': isOnlySubjective }" />
  6. <ie-image v-else-if="question.isNotAnswer" src="/pagesStudy/static/image/icon-answer-empty.png"
  7. class="absolute top-0 left-1/2 -translate-x-1/2 w-240 h-104" mode="heightFix" :class="{ 'top-20': isOnlySubjective }" />
  8. <ie-image v-else src="/pagesStudy/static/image/icon-answer-incorrect.png"
  9. class="absolute top-0 left-1/2 -translate-x-1/2 w-240 h-64" :class="{ 'top-30': isOnlySubjective }" />
  10. <view v-if="!isOnlySubjective" class="flex-1">
  11. <view class="text-34 text-[#2CC6A0] font-bold">{{ question.answer1 }}</view>
  12. <view class="mt-4 text-26">正确答案</view>
  13. </view>
  14. <view class="h-40 w-1 bg-back"></view>
  15. <view v-if="!isOnlySubjective" class="flex-1">
  16. <view class="text-34 font-bold" :class="[question.isCorrect ? 'text-[#2CC6A0]' : 'text-[#FF5B5C]']">
  17. {{ question.answers.join('') || (question.isNotKnow ? '不会' : '未作答') }}
  18. </view>
  19. <view class="mt-4 text-26">我的答案</view>
  20. </view>
  21. </view>
  22. </template>
  23. <script lang="ts" setup>
  24. import { EnumQuestionType, EnumReviewMode } from '@/common/enum';
  25. import { useExam } from '@/composables/useExam';
  26. import { Study, Transfer } from '@/types';
  27. import { EXAM_DATA, EXAM_PAGE_OPTIONS } from '@/types/injectionSymbols';
  28. const examPageOptions = inject(EXAM_PAGE_OPTIONS) || {} as Transfer.ExamAnalysisPageOptions;
  29. const examData = inject(EXAM_DATA) || {} as ReturnType<typeof useExam>;
  30. const { practiceSettings } = examData;
  31. const props = defineProps<{
  32. question: Study.Question;
  33. }>();
  34. const isReadOnly = computed(() => {
  35. const { readonly } = examPageOptions;
  36. if (readonly) {
  37. return true;
  38. }
  39. // 练习模式下,需要背题模式且题目已经做过且解析过
  40. if (practiceSettings.value.reviewMode === EnumReviewMode.DURING_ANSWER && props.question.hasParsed) {
  41. return true;
  42. }
  43. return false;
  44. });
  45. const isOnlySubjective = computed(() => {
  46. // 除了单选、判断、多选题,其他题型都是主观题
  47. return ![EnumQuestionType.SINGLE_CHOICE, EnumQuestionType.JUDGMENT, EnumQuestionType.MULTIPLE_CHOICE].includes(props.question.typeId);
  48. });
  49. </script>
  50. <style lang="scss" scoped>
  51. .question-result {
  52. box-shadow: 0 0 10px 0px rgba(0, 0, 0, 0.06);
  53. }
  54. </style>