question-parse.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <template>
  2. <view v-if="(isReadOnly) || (!isReadOnly && question.showParse)" class="mt-40">
  3. <!-- 主观题的答案在这里显示,其他题型在 question-result 面板显示 -->
  4. <view v-if="isOnlySubjective" class="mb-20">
  5. <view class="text-30 text-fore-title font-bold">答案</view>
  6. <view class="mt-10 text-26 text-fore-light">
  7. <mp-html :content="decodeHtmlEntities(question.answer2 || '略')" />
  8. </view>
  9. </view>
  10. <view class="text-30 text-fore-title font-bold">解析</view>
  11. <view class="mt-10 text-26 text-fore-light">
  12. <mp-html :content="decodeHtmlEntities(question.parse || '暂无解析')" />
  13. </view>
  14. </view>
  15. </template>
  16. <script lang="ts" setup>
  17. import { EnumQuestionType, EnumReviewMode } from '@/common/enum';
  18. import { useExam, decodeHtmlEntities } from '@/composables/useExam';
  19. import { Study, Transfer } from '@/types';
  20. import { EXAM_DATA, EXAM_PAGE_OPTIONS } from '@/types/injectionSymbols';
  21. const examPageOptions = inject(EXAM_PAGE_OPTIONS) || {} as Transfer.ExamAnalysisPageOptions;
  22. const examData = inject(EXAM_DATA) || {} as ReturnType<typeof useExam>;
  23. const { practiceSettings } = examData;
  24. const props = defineProps<{
  25. question: Study.Question;
  26. }>();
  27. const isReadOnly = computed(() => {
  28. const { readonly } = examPageOptions;
  29. if (readonly) {
  30. return true;
  31. }
  32. // 练习模式下,需要背题模式且题目已经做过且解析过
  33. if (practiceSettings.value.reviewMode === EnumReviewMode.DURING_ANSWER && props.question.hasParsed) {
  34. return true;
  35. }
  36. return false;
  37. });
  38. const isOnlySubjective = computed(() => {
  39. // 除了单选、判断、多选题,其他题型都是主观题
  40. return ![EnumQuestionType.SINGLE_CHOICE, EnumQuestionType.JUDGMENT, EnumQuestionType.MULTIPLE_CHOICE].includes(props.question.typeId);
  41. });
  42. </script>
  43. <style lang="scss" scoped></style>