UploadControlPreview.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <div class="upload-preview" :style="getAreaStyle()">
  3. <SerialNumberPosition v-if="isEnable(data.property.sn_display_mode)" :property="data.property" />
  4. <div class="main">
  5. <UploadFile
  6. v-if="data.answer.answer_list.length === 0"
  7. :change-fill-id="changeFillId"
  8. :accept="acceptFileType"
  9. :fille-number="1"
  10. :file-list="data.file_list"
  11. />
  12. <div v-else class="preview-box">
  13. <template
  14. v-if="
  15. data.answer.answer_list[0].file_name.indexOf('png') !== -1 ||
  16. data.answer.answer_list[0].file_name.indexOf('jpg') !== -1 ||
  17. data.answer.answer_list[0].file_name.indexOf('jpeg') !== -1
  18. "
  19. >
  20. <el-image
  21. style="width: 100%; height: 260px"
  22. :src="data.answer.answer_list[0].file_url"
  23. :fit="'contain'"
  24. :preview-src-list="[data.answer.answer_list[0].file_url]"
  25. />
  26. </template>
  27. <template v-else>
  28. <iframe
  29. id="ifm"
  30. :src="data.answer.answer_list[0].newpath"
  31. width="100%"
  32. height="260px"
  33. frameborder="0"
  34. ></iframe>
  35. </template>
  36. <div class="dv">
  37. <div class="remove" :class="[isJudgingRightWrong ? 'notAllow' : '']" @click="remove">
  38. <img src="@/assets/red_remove.png" alt="" />
  39. </div>
  40. <div class="remove zoom-in" @click="showIframe = true">
  41. <i class="el-icon-zoom-in"></i>
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. <el-dialog
  47. v-if="showIframe"
  48. :visible.sync="showIframe"
  49. :show-close="true"
  50. :close-on-click-modal="false"
  51. :modal-append-to-body="false"
  52. width="1000px"
  53. class="login-dialog"
  54. >
  55. <iframe id="ifms" :src="data.answer.answer_list[0].newpath" width="100%" height="600px" frameborder="0"></iframe>
  56. </el-dialog>
  57. </div>
  58. </template>
  59. <script>
  60. import PreviewMixin from '../common/PreviewMixin';
  61. import UploadFile from './components/UploadView.vue';
  62. import { getUploadControlData } from '@/views/book/courseware/data/uploadControl';
  63. const Base64 = require('js-base64').Base64;
  64. import { getConfig } from '@/utils/auth';
  65. export default {
  66. name: 'UploadControlPreview',
  67. components: { UploadFile },
  68. mixins: [PreviewMixin],
  69. data() {
  70. return {
  71. data: getUploadControlData(),
  72. acceptFileType: '.png,.jpg,.jpeg,.txt,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.mp3,.wma,.mp4,.mov,.zip,.rar',
  73. file_preview_url: getConfig() ? getConfig().doc_preview_service_address : '',
  74. showIframe: false,
  75. };
  76. },
  77. methods: {
  78. changeFillId(fileList) {
  79. this.data.answer.answer_list = [fileList[0].response.file_info_list[0]];
  80. let path = `${this.file_preview_url}onlinePreview?url=${Base64.encode(fileList[0].response.file_info_list[0].file_url)}`;
  81. this.data.answer.answer_list[0].newpath = path;
  82. this.$forceUpdate();
  83. },
  84. remove() {
  85. if (!this.isJudgingRightWrong) {
  86. if (this.data.answer.answer_list.length > 0) {
  87. this.data.answer.answer_list = [];
  88. this.$message.success('删除成功');
  89. this.$forceUpdate();
  90. }
  91. }
  92. },
  93. },
  94. };
  95. </script>
  96. <style lang="scss" scoped>
  97. @use '@/styles/mixin.scss' as *;
  98. .upload-preview {
  99. @include preview-base;
  100. }
  101. .preview-box {
  102. display: flex;
  103. }
  104. .dv {
  105. display: flex;
  106. flex-flow: wrap;
  107. align-items: center;
  108. width: 72px;
  109. padding: 60px 0;
  110. .remove {
  111. box-sizing: border-box;
  112. display: flex;
  113. align-items: center;
  114. justify-content: center;
  115. width: 40px;
  116. height: 39px;
  117. margin-left: 32px;
  118. cursor: pointer;
  119. background: #fff;
  120. border: 1px solid rgba(0, 0, 0, 10%);
  121. border-radius: 8px;
  122. &.notAllow {
  123. cursor: not-allowed;
  124. }
  125. img {
  126. width: 24px;
  127. height: 24px;
  128. }
  129. }
  130. }
  131. </style>