custom-thumbnail.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <el-upload action="#" list-type="picture-card" :auto-upload="false">
  3. <el-icon><Plus /></el-icon>
  4. <template #file="{ file }">
  5. <div>
  6. <img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
  7. <span class="el-upload-list__item-actions">
  8. <span
  9. class="el-upload-list__item-preview"
  10. @click="handlePictureCardPreview(file)"
  11. >
  12. <el-icon><zoom-in /></el-icon>
  13. </span>
  14. <span
  15. v-if="!disabled"
  16. class="el-upload-list__item-delete"
  17. @click="handleDownload(file)"
  18. >
  19. <el-icon><Download /></el-icon>
  20. </span>
  21. <span
  22. v-if="!disabled"
  23. class="el-upload-list__item-delete"
  24. @click="handleRemove(file)"
  25. >
  26. <el-icon><Delete /></el-icon>
  27. </span>
  28. </span>
  29. </div>
  30. </template>
  31. </el-upload>
  32. <el-dialog v-model="dialogVisible">
  33. <img w-full :src="dialogImageUrl" alt="Preview Image" />
  34. </el-dialog>
  35. </template>
  36. <script lang="ts" setup>
  37. import { ref } from 'vue'
  38. import { Delete, Download, Plus, ZoomIn } from '@element-plus/icons-vue'
  39. import type { UploadFile } from 'element-plus'
  40. const dialogImageUrl = ref('')
  41. const dialogVisible = ref(false)
  42. const disabled = ref(false)
  43. const handleRemove = (file: UploadFile) => {
  44. console.log(file)
  45. }
  46. const handlePictureCardPreview = (file: UploadFile) => {
  47. dialogImageUrl.value = file.url!
  48. dialogVisible.value = true
  49. }
  50. const handleDownload = (file: UploadFile) => {
  51. console.log(file)
  52. }
  53. </script>