UpLoadFile.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <el-upload
  3. name="upload"
  4. class="avatar-file-uploader"
  5. action="/api/meeting/upload/file/"
  6. drag
  7. :headers="Authorization"
  8. :show-file-list="false"
  9. :on-success="handleAvatarSuccess"
  10. :before-upload="beforeAvatarUpload">
  11. <div v-if="imageUrl" class="upload-img-box">
  12. <img :src="imageUrl"/>
  13. <p>{{fileName}}</p>
  14. </div>
  15. <div v-else class="upload-btn-box">
  16. <div>
  17. <div class="upload-btn">+</div>
  18. <div slot="tip" class="el-upload__tip">PDF/WORD/PPT</div>
  19. </div>
  20. </div>
  21. </el-upload>
  22. </template>
  23. <script>
  24. import { getToken } from "@/utils/auth";
  25. export default {
  26. data(){
  27. return {
  28. imageUrl: "",
  29. fileName: '',
  30. Authorization: {},
  31. }
  32. },
  33. methods: {
  34. handleAvatarSuccess(res, file) {
  35. // console.log('上传成功',res)
  36. // console.log('上传成功',file)
  37. this.$emit('getFileUrl', res.data);
  38. this.fileName = file.name;
  39. var fileStr = /\.(docx|doc|pdf|pptx|ppt|DOCX|DOC|PDF|PPTX|PPT)$/;
  40. const isTargetFile = fileStr.test(file.name);
  41. if (!isTargetFile) {
  42. this.$message.error("Upload file can only be in WORD/PDF/PPT format!");
  43. }
  44. let suffixTxt = '';
  45. var startIndex = file.name.lastIndexOf(".");
  46. if(startIndex != -1){
  47. suffixTxt = file.name.substring(startIndex+1, file.name.length)
  48. }
  49. if(suffixTxt == 'doc' || suffixTxt == 'docx' || suffixTxt == 'DOC' || suffixTxt == 'DOCX') {
  50. this.imageUrl = require('@/assets/img/conference/word.png');
  51. }else if(suffixTxt == 'pdf' || suffixTxt == 'PDF'){
  52. this.imageUrl = require('@/assets/img/conference/pdf.png');
  53. }else if(suffixTxt == 'ppt' || suffixTxt == 'pptx' || suffixTxt == 'PPT' || suffixTxt == 'PPTX'){
  54. this.imageUrl = require('@/assets/img/conference/pdf.png');
  55. }
  56. return isTargetFile;
  57. },
  58. beforeAvatarUpload(file) {
  59. this.Authorization.Authorization = 'Bearer ' + getToken();
  60. return true;
  61. },
  62. }
  63. }
  64. </script>
  65. <style scoped>
  66. .avatar-file-uploader{
  67. width: 100%;
  68. height: 100%;
  69. text-align: center;
  70. }
  71. .avatar-file-uploader .el-upload {
  72. border: 1px dashed #000;
  73. border-radius: 6px;
  74. cursor: pointer;
  75. position: relative;
  76. overflow: hidden;
  77. }
  78. .avatar-file-uploader .el-upload:hover {
  79. border-color: #409eff;
  80. }
  81. .avatar-file-uploader-icon {
  82. display: inline-block;
  83. width: 160px;
  84. height: 220px;
  85. overflow: hidden;
  86. border: 1px dashed #aaa;
  87. }
  88. .avatar {
  89. width: 160px;
  90. height: 220px;
  91. display: inline-block;
  92. }
  93. .upload-img-box {
  94. width: 100%;
  95. height: 200px;
  96. }
  97. .upload-img-box img{
  98. max-width: 100%;
  99. max-height: 100%;
  100. }
  101. .upload-img-box p{
  102. margin: 0;
  103. font-size: 14px;
  104. color: #666;
  105. line-height: 100%;
  106. width: 100%;
  107. overflow: hidden;
  108. text-overflow: ellipsis;
  109. white-space: nowrap;
  110. }
  111. .upload-btn-box {
  112. display: table;
  113. height: 100%;
  114. width: 100%;
  115. }
  116. .upload-btn-box>div {
  117. display: table-cell;
  118. vertical-align: middle;
  119. }
  120. .upload-btn{
  121. display: inline-block;
  122. width: 30px;
  123. height: 30px;
  124. text-align: center;
  125. line-height: 24px;
  126. font-size: 40px;
  127. border: 3px solid #666;
  128. color: #666;
  129. border-radius: 6px;
  130. }
  131. .el-upload__tip {
  132. line-height: 20px;
  133. }
  134. .avatar-file-uploader /deep/ .el-upload{
  135. width: 100%;
  136. height: 100%;
  137. }
  138. .avatar-file-uploader /deep/ .el-upload-dragger{
  139. width: 100%;
  140. height: 270px;
  141. }
  142. </style>