UploadChunk.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <div v-if="visible">
  3. <a-alert type="info" class="jeecg-comment-files" style="margin: 0">
  4. <template #message>
  5. <span class="j-icon">
  6. <a-upload multiple v-model:file-list="selectFileList" :showUploadList="false" :before-upload="beforeUpload">
  7. <span class="inner-button"><upload-outlined />上传</span>
  8. </a-upload>
  9. </span>
  10. </template>
  11. </a-alert>
  12. <!-- 正在上传的文件 -->
  13. <div class="selected-file-warp" v-if="selectFileList && selectFileList.length > 0">
  14. <div class="selected-file-list">
  15. <div class="item" v-for="item in selectFileList">
  16. <div class="complex">
  17. <div class="content">
  18. <!-- 图片 -->
  19. <div v-if="isImage(item)" class="content-top" style="height: 100%">
  20. <div class="content-image" :style="{'height':'100%', 'backgroundImage': 'url('+getImageSrc(item)+')'}">
  21. <!-- <img style="height: 100%;" :src="getImageSrc(item)">-->
  22. </div>
  23. </div>
  24. <!-- 文件 -->
  25. <template v-else>
  26. <div class="content-top">
  27. <div class="content-icon" :style="{ background: 'url(' + getBackground(item) + ') no-repeat' }"></div>
  28. </div>
  29. <div class="content-bottom" :title="item.name">
  30. <span>{{ item.name }}</span>
  31. </div>
  32. </template>
  33. </div>
  34. <div class="layer" :class="{'layer-image':isImage(item)}">
  35. <div class="next" @click="viewImage(item)">
  36. <div class="text">{{ item.name }} </div>
  37. </div>
  38. <div class="buttons">
  39. <div class="opt-icon">
  40. <Tooltip title="删除">
  41. <delete-outlined @click="handleRemove(item)" />
  42. </Tooltip>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div> <div class="item empty"></div><div class="item empty"></div><div class="item empty"></div>
  49. </div>
  50. </div>
  51. </div>
  52. </template>
  53. <script lang="ts">
  54. import { toRaw, watch } from 'vue';
  55. import { useFileList } from './useComment';
  56. import { Tooltip } from 'ant-design-vue';
  57. import { UploadOutlined, FolderOutlined, DownloadOutlined, PaperClipOutlined, DeleteOutlined } from '@ant-design/icons-vue';
  58. import {useModal} from "/@/components/Modal";
  59. export default {
  60. name: 'UploadChunk',
  61. components: {
  62. Tooltip,
  63. UploadOutlined,
  64. FolderOutlined,
  65. DownloadOutlined,
  66. PaperClipOutlined,
  67. DeleteOutlined,
  68. },
  69. props: {
  70. visible: {
  71. type: Boolean,
  72. default: false,
  73. },
  74. },
  75. emits:['select'],
  76. setup(_p, {emit}) {
  77. const { selectFileList, beforeUpload, handleRemove, getBackground, isImage, getImageSrc, viewImage } = useFileList();
  78. const [registerModel, { openModal }] = useModal();
  79. function getUploadFileList() {
  80. let list = toRaw(selectFileList.value);
  81. console.log(list);
  82. return list;
  83. }
  84. function clear(){
  85. selectFileList.value = [];
  86. }
  87. watch(()=>selectFileList.value, (arr)=>{
  88. if(arr && arr.length>0){
  89. let name = arr[0].name;
  90. if(name){
  91. emit('select', name)
  92. }
  93. }
  94. });
  95. function showFileModal() {
  96. openModal(true, {})
  97. }
  98. function onSelectFileOk(temp) {
  99. let arr = selectFileList.value;
  100. arr.push({
  101. ...temp,
  102. exist: true
  103. })
  104. selectFileList.value = arr;
  105. }
  106. return {
  107. selectFileList,
  108. beforeUpload,
  109. handleRemove,
  110. getBackground,
  111. getUploadFileList,
  112. clear,
  113. isImage,
  114. getImageSrc,
  115. viewImage,
  116. registerModel,
  117. showFileModal,
  118. onSelectFileOk
  119. };
  120. },
  121. };
  122. </script>
  123. <style lang="less" scoped>
  124. @import 'comment.less';
  125. </style>