ExtImage.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div class="demo-image__preview">
  3. <el-image
  4. :z-index="99999"
  5. style="width: 60px; height: 60px"
  6. :src="state.url"
  7. :zoom-rate="1.2"
  8. :max-scale="7"
  9. :min-scale="0.2"
  10. :preview-src-list="state.previewList"
  11. :initial-index="4"
  12. fit="cover"
  13. :preview-teleported="true"
  14. />
  15. <!-- <el-dialog
  16. v-model="state.visible"
  17. fullscreen
  18. draggable
  19. destroy-on-close
  20. :close-on-click-modal="false"
  21. @close="state.visible=false">
  22. <el-image-viewer
  23. :url-list="state.previewList"
  24. @close="close"
  25. />
  26. </el-dialog>-->
  27. </div>
  28. </template>
  29. <script lang="ts" setup>
  30. import {onMounted, reactive, watch} from 'vue';
  31. import u from "/@/utils/u";
  32. const props = defineProps({
  33. srcList: {
  34. type: Array < String >,
  35. default: () => {
  36. return []
  37. }
  38. }
  39. })
  40. const open = () => {
  41. state.visible = true;
  42. }
  43. const close = () => {
  44. state.visible = false;
  45. }
  46. const state = reactive({
  47. visible: false,
  48. url: '',
  49. previewList: []
  50. })
  51. watch(() => props.srcList, (nv, ov) => {
  52. if (nv) {
  53. state.previewList = [];
  54. if (Array.isArray(nv)) {
  55. nv.forEach((item: any) => {
  56. state.previewList.push(u.fmt.fmtUrl(item));
  57. })
  58. state.url = state.previewList[0]
  59. } else {
  60. state.previewList = [u.fmt.fmtUrl(nv)];
  61. state.url = state.previewList[0]
  62. }
  63. console.log(state.previewList)
  64. }
  65. }, {immediate: true, deep: true})
  66. defineExpose(
  67. open
  68. )
  69. </script>
  70. <style scoped>
  71. .demo-image__error .image-slot {
  72. font-size: 30px;
  73. }
  74. .demo-image__error .image-slot .el-icon {
  75. font-size: 30px;
  76. }
  77. .demo-image__error .el-image {
  78. width: 100%;
  79. height: 100px;
  80. }
  81. </style>