43 lines
867 B
Vue
43 lines
867 B
Vue
<template>
|
|
<img
|
|
:src="refinedSrc"
|
|
:alt="alt"
|
|
:width="width"
|
|
:height="height"
|
|
/>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { withTrailingSlash, withLeadingSlash, joinURL } from 'ufo'
|
|
import { useRuntimeConfig, computed, resolveComponent } from '#imports'
|
|
|
|
const props = defineProps({
|
|
src: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
alt: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
width: {
|
|
type: [String, Number],
|
|
default: undefined
|
|
},
|
|
height: {
|
|
type: [String, Number],
|
|
default: undefined
|
|
}
|
|
})
|
|
|
|
const refinedSrc = computed(() => {
|
|
if (props.src?.startsWith('/') && !props.src.startsWith('//')) {
|
|
const _base = withLeadingSlash(withTrailingSlash(useRuntimeConfig().app.baseURL))
|
|
if (_base !== '/' && !props.src.startsWith(_base)) {
|
|
return joinURL(_base, props.src)
|
|
}
|
|
}
|
|
return props.src
|
|
})
|
|
</script>
|