index.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <v-overlay v-model="overlay" class="align-center justify-center" @update:model-value="handleChange">
  3. <div class="close" @click="overlay = false; handleChange(false)">
  4. <v-icon color="#fff" size="60" class="mr-15" @click.stop="emits('download')">mdi-arrow-down-bold-box-outline</v-icon>
  5. <v-icon color="#fff" size="60">mdi-close-circle</v-icon>
  6. <!-- <v-btn class="ml-3" color="primary" variant="outlined" prepend-icon="mdi-arrow-down-bold-box-outline" @click="handleDownloadImage" style="width: 133px">保存到本地</v-btn> -->
  7. </div>
  8. <v-window v-model="window" show-arrows @update:model-value="val => window = val">
  9. <v-window-item v-for="val in list" :key="val">
  10. <!-- <v-img v-if="isImage || checkIsImage(val)" width="900" height="800" :src="val"></v-img> -->
  11. <div v-if="isImage || checkIsImage(val)" style="width: 50vw; height: 90vh;margin: auto;">
  12. <img :src="val" alt="" style="object-fit: scale-down;width: 100%; height: 100%;">
  13. </div>
  14. <video v-else :src="val" controls height="800" width="1000" preload="preload" :showPlay="true"></video>
  15. </v-window-item>
  16. </v-window>
  17. </v-overlay>
  18. </template>
  19. <script setup>
  20. defineOptions({ name: 'preview-img'})
  21. import { ref } from 'vue'
  22. import { checkIsImage } from '@/utils'
  23. const emits = defineEmits(['download', 'close'])
  24. const props = defineProps({
  25. list: {
  26. type: Array,
  27. default: () => []
  28. },
  29. current: {
  30. type: Number,
  31. default: 0
  32. },
  33. isImage: {
  34. type: Boolean,
  35. default: false
  36. }
  37. })
  38. const overlay = ref(true)
  39. const window = ref(0)
  40. if (props.current) window.value = props.current
  41. const handleChange = (e) => {
  42. if (!e) emits('close')
  43. }
  44. </script>
  45. <style scoped lang="scss">
  46. .close {
  47. position: absolute;
  48. right: -190px;
  49. top: 0;
  50. cursor: pointer;
  51. }
  52. </style>