EssayQuestionPreview.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <!-- eslint-disable vue/no-v-html -->
  2. <template>
  3. <div class="essayquestion-preview" v-if="show_preview">
  4. <div class="stem">
  5. <span class="question-number">{{ data.property.question_number }}.</span>
  6. <span v-html="sanitizeHTML(data.stem)"></span>
  7. </div>
  8. <div v-if="isEnable(data.property.is_enable_description)" class="description">{{ data.description }}</div>
  9. <el-input
  10. v-model="answer.answer_list[0].text"
  11. rows="12"
  12. resize="none"
  13. type="textarea"
  14. placeholder="请输入"
  15. :maxlength="1000"
  16. show-word-limit
  17. @input="handleInput"
  18. :readonly="isJudgingRightWrong"
  19. />
  20. <SoundRecordPreview
  21. :disabled="isJudgingRightWrong"
  22. :wav-blob.sync="answer.answer_list[0].audio_file_id"
  23. position="center"
  24. />
  25. <UploadFiles
  26. :fille-number="999"
  27. file-type-name="文件"
  28. :upload-type="'*'"
  29. :file-id-list="answer.answer_list[0].accessory_file_id_list"
  30. upload-title="上传附件:"
  31. @upload="handleUpload"
  32. @deleteFile="handleDelete"
  33. :disabled="isJudgingRightWrong"
  34. />
  35. <div v-if="isEnable(data.property.is_enable_reference_answer) && isShowRightAnswer" class="reference-box">
  36. <h5 class="reference-title">参考答案</h5>
  37. <span class="reference-answer" v-html="sanitizeHTML(data.reference_answer)"></span>
  38. </div>
  39. </div>
  40. </template>
  41. <script>
  42. import PreviewMixin from './components/PreviewMixin';
  43. import SoundRecordPreview from './components/common/SoundRecordPreview.vue';
  44. import UploadFiles from './components/common/UploadFiles.vue';
  45. export default {
  46. name: 'EssayQuestionPreview',
  47. components: {
  48. SoundRecordPreview,
  49. UploadFiles,
  50. },
  51. mixins: [PreviewMixin],
  52. data() {
  53. return {
  54. show_preview: false,
  55. };
  56. },
  57. watch: {
  58. data: {
  59. handler(val) {
  60. if (!val || this.data.type !== 'essay_question') return;
  61. this.handleData();
  62. },
  63. deep: true,
  64. immediate: true,
  65. },
  66. },
  67. created() {},
  68. methods: {
  69. // 初始化数据
  70. handleData() {
  71. if (!this.isJudgingRightWrong) {
  72. let obj = {
  73. audio_file_id: '',
  74. text: '',
  75. accessory_file_id_list: [],
  76. };
  77. this.answer.answer_list.push(obj);
  78. }
  79. this.show_preview = true;
  80. },
  81. // 文件上传成功
  82. handleUpload(fileId) {
  83. this.answer.answer_list[0].accessory_file_id_list.push(fileId);
  84. },
  85. // 删除文件
  86. handleDelete(fileId) {
  87. this.answer.answer_list[0].accessory_file_id_list.splice(
  88. this.answer.answer_list[0].accessory_file_id_list.indexOf(fileId),
  89. 1,
  90. );
  91. },
  92. handleInput(value) {
  93. if (value.length >= 1000) {
  94. this.$message.warning(`字数达到1000字!`);
  95. }
  96. },
  97. },
  98. };
  99. </script>
  100. <style lang="scss" scoped>
  101. @use '@/styles/mixin.scss' as *;
  102. .essayquestion-preview {
  103. @include preview;
  104. :deep .sound-record-wrapper {
  105. justify-content: center;
  106. }
  107. .reference-box {
  108. padding: 12px;
  109. background: #f9f8f9;
  110. .reference-title {
  111. margin: 0 0 10px;
  112. font-size: 14px;
  113. font-weight: 400;
  114. line-height: 32px;
  115. color: #4e5969;
  116. }
  117. }
  118. }
  119. </style>