WritePreview.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <!-- eslint-disable vue/no-v-html -->
  2. <template>
  3. <div class="write-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 class="article-content" v-html="sanitizeHTML(data.article)"></div>
  9. <div
  10. v-if="isEnable(data.property.is_enable_description)"
  11. class="description"
  12. v-html="sanitizeHTML(data.description)"
  13. ></div>
  14. <el-input
  15. v-model="user_answer.text"
  16. rows="3"
  17. type="textarea"
  18. placeholder="请输入内容"
  19. :maxlength="data.property.word_num"
  20. show-word-limit
  21. @input="handleInput"
  22. />
  23. <template v-if="isEnable(data.property.is_enable_upload_accessory)">
  24. <!-- 上传附件 -->
  25. <UploadFiles
  26. :fille-number="999"
  27. file-type-name="文件"
  28. :upload-type="'*'"
  29. :file-id-list="user_answer.accessory_file_id"
  30. upload-title="上传附件:"
  31. @upload="handleUpload"
  32. @deleteFile="handleDelete"
  33. />
  34. </template>
  35. <template v-if="isEnable(data.property.is_enable_sample_text) && isShowRightAnswer">
  36. <el-divider content-position="center"
  37. ><span
  38. :class="['sample-text', show_sample_text ? 'sample-show' : 'sample-hide']"
  39. @click="show_sample_text = !show_sample_text"
  40. >{{ show_sample_text ? '隐藏范文' : '查看范文' }}</span
  41. ></el-divider
  42. >
  43. <div v-if="show_sample_text" class="article-content" v-html="sanitizeHTML(data.sample_text)"></div>
  44. </template>
  45. </div>
  46. </template>
  47. <script>
  48. import PreviewMixin from './components/PreviewMixin';
  49. import UploadFiles from './components/common/UploadFiles.vue';
  50. export default {
  51. name: 'WritePreview',
  52. components: {
  53. UploadFiles,
  54. },
  55. mixins: [PreviewMixin],
  56. data() {
  57. return {
  58. show_sample_text: false,
  59. user_answer: {
  60. text: '', // 用户文章
  61. accessory_file_id: [], // 上传文件列表
  62. },
  63. };
  64. },
  65. created() {},
  66. methods: {
  67. // 文件上传成功
  68. handleUpload(fileId) {
  69. this.user_answer.accessory_file_id.push(fileId);
  70. },
  71. // 删除文件
  72. handleDelete(fileId) {
  73. this.user_answer.accessory_file_id.splice(this.user_answer.accessory_file_id.indexOf(fileId), 1);
  74. },
  75. handleInput(value) {
  76. if (value.length >= this.data.property.word_num) {
  77. this.$message.warning(`字数达到${value.length}字!`);
  78. }
  79. },
  80. },
  81. };
  82. </script>
  83. <style lang="scss" scoped>
  84. @use '@/styles/mixin.scss' as *;
  85. .write-preview {
  86. @include preview;
  87. .el-divider--horizontal {
  88. margin: 12px 0;
  89. }
  90. .sample-text {
  91. font-size: 14px;
  92. font-weight: 400;
  93. line-height: 30px;
  94. color: #000;
  95. cursor: pointer;
  96. &.sample-show {
  97. color: $light-main-color;
  98. }
  99. }
  100. .article-content,
  101. .description {
  102. :deep p {
  103. margin: 0;
  104. }
  105. }
  106. :deep .el-textarea .el-input__count {
  107. background-color: #f2f3f5;
  108. }
  109. }
  110. </style>