index.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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">mdi-close-circle</v-icon>
  5. </div>
  6. <v-window v-model="window" show-arrows @update:model-value="val => window = val">
  7. <v-window-item v-for="val in list" :key="val">
  8. <!-- <v-img v-if="isImage || checkIsImage(val)" width="900" height="800" :src="val"></v-img> -->
  9. <div v-if="isImage || checkIsImage(val)" style="width: 70vw; height: 90vh;margin: auto;">
  10. <img :src="val" alt="" style="object-fit: scale-down;width: 100%; height: 100%;">
  11. </div>
  12. <video v-else :src="val" controls height="800" width="1000" preload="preload" :showPlay="true"></video>
  13. </v-window-item>
  14. </v-window>
  15. </v-overlay>
  16. </template>
  17. <script setup>
  18. defineOptions({ name: 'preview-img'})
  19. import { ref } from 'vue'
  20. import { checkIsImage } from '@/utils'
  21. const emits = defineEmits(['close'])
  22. const props = defineProps({
  23. list: {
  24. type: Array,
  25. default: () => []
  26. },
  27. current: {
  28. type: Number,
  29. default: 0
  30. },
  31. isImage: {
  32. type: Boolean,
  33. default: false
  34. }
  35. })
  36. const overlay = ref(true)
  37. const window = ref(0)
  38. if (props.current) window.value = props.current
  39. const handleChange = (e) => {
  40. if (!e) emits('close')
  41. }
  42. </script>
  43. <style scoped lang="scss">
  44. .close {
  45. position: absolute;
  46. right: -60px;
  47. top: 0;
  48. cursor: pointer;
  49. }
  50. </style>