UploadChunk.vue 3.7 KB

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