photo-wall.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <el-upload
  3. v-model:file-list="fileList"
  4. action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
  5. list-type="picture-card"
  6. :on-preview="handlePictureCardPreview"
  7. :on-remove="handleRemove"
  8. >
  9. <el-icon><Plus /></el-icon>
  10. </el-upload>
  11. <el-dialog v-model="dialogVisible">
  12. <img w-full :src="dialogImageUrl" alt="Preview Image" />
  13. </el-dialog>
  14. </template>
  15. <script lang="ts" setup>
  16. import { ref } from 'vue'
  17. import { Plus } from '@element-plus/icons-vue'
  18. import type { UploadProps, UploadUserFile } from 'element-plus'
  19. const fileList = ref<UploadUserFile[]>([
  20. {
  21. name: 'food.jpeg',
  22. url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
  23. },
  24. {
  25. name: 'plant-1.png',
  26. url: '/images/plant-1.png',
  27. },
  28. {
  29. name: 'food.jpeg',
  30. url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
  31. },
  32. {
  33. name: 'plant-2.png',
  34. url: '/images/plant-2.png',
  35. },
  36. {
  37. name: 'food.jpeg',
  38. url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
  39. },
  40. {
  41. name: 'figure-1.png',
  42. url: '/images/figure-1.png',
  43. },
  44. {
  45. name: 'food.jpeg',
  46. url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
  47. },
  48. {
  49. name: 'figure-2.png',
  50. url: '/images/figure-2.png',
  51. },
  52. ])
  53. const dialogImageUrl = ref('')
  54. const dialogVisible = ref(false)
  55. const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
  56. console.log(uploadFile, uploadFiles)
  57. }
  58. const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
  59. dialogImageUrl.value = uploadFile.url!
  60. dialogVisible.value = true
  61. }
  62. </script>