ie-image.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <view class="overflow-hidden" :class="customClass" @click="handleClick"
  3. :style="{ borderRadius: round + 'px', backgroundColor: loaded ? 'transparent' : bgColor }">
  4. <image class="w-full h-full block mx-auto" :src="imageSrc" :mode="mode" :lazy-load="lazyLoad"
  5. :style="{ borderRadius: round + 'px' }" @load="onLoad"></image>
  6. </view>
  7. </template>
  8. <script lang="ts" setup>
  9. // @ts-ignore
  10. import config from '@/config';
  11. import { useImage} from '@/hooks/useImage';
  12. const { resolvePath } = useImage();
  13. const props = defineProps({
  14. src: {
  15. type: String,
  16. default: ''
  17. },
  18. isOss: {
  19. type: Boolean,
  20. default: false
  21. },
  22. mode: {
  23. type: String,
  24. default: 'widthFix'
  25. },
  26. lazyLoad: {
  27. type: Boolean,
  28. default: true
  29. },
  30. customClass: {
  31. type: String,
  32. default: ''
  33. },
  34. round: {
  35. type: Number,
  36. default: 0
  37. },
  38. bgColor: {
  39. type: String,
  40. default: ''
  41. }
  42. });
  43. const imageSrc = computed(() => {
  44. return props.src ? (props.isOss ? config.ossUrl + props.src : resolvePath(props.src)) : '';
  45. });
  46. const emit = defineEmits(['click']);
  47. const handleClick = (e: any) => {
  48. emit('click', e);
  49. }
  50. const loaded = ref(false);
  51. const onLoad = () => {
  52. loaded.value = true;
  53. }
  54. </script>