2025-01-22 07:44:50 +00:00
|
|
|
<script setup>
|
|
|
|
import { showImagePreview } from 'vant';
|
|
|
|
const props = defineProps({
|
|
|
|
src: {
|
|
|
|
type: String,
|
|
|
|
default: ''
|
|
|
|
},
|
|
|
|
preview: {
|
|
|
|
type: Boolean,
|
|
|
|
default: true
|
2025-01-23 05:56:18 +00:00
|
|
|
},
|
|
|
|
// 用于控制图片尺寸
|
|
|
|
sizes: {
|
|
|
|
type: Array,
|
|
|
|
default: () => [320, 640, 768, 1024]
|
|
|
|
},
|
|
|
|
// 用于控制图片格式
|
|
|
|
format: {
|
|
|
|
type: String,
|
|
|
|
default: 'webp'
|
|
|
|
},
|
|
|
|
// 用于控制图片质量
|
|
|
|
quality: {
|
|
|
|
type: Number,
|
|
|
|
default: 80
|
2025-01-22 07:44:50 +00:00
|
|
|
}
|
|
|
|
})
|
2025-01-23 05:56:18 +00:00
|
|
|
|
2025-01-22 07:44:50 +00:00
|
|
|
const showImage = () => {
|
|
|
|
if (props.preview) {
|
|
|
|
showImagePreview([props.src]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
2025-01-23 05:56:18 +00:00
|
|
|
|
2025-01-22 07:44:50 +00:00
|
|
|
<template>
|
2025-01-23 08:34:34 +00:00
|
|
|
|
2025-01-23 05:56:18 +00:00
|
|
|
<nuxt-img
|
2025-01-23 08:34:34 +00:00
|
|
|
v-if="src"
|
2025-01-22 08:23:48 +00:00
|
|
|
loading="lazy"
|
2025-01-22 07:44:50 +00:00
|
|
|
v-bind="{ ...props, ...$attrs }"
|
2025-01-22 08:33:53 +00:00
|
|
|
style="object-fit: cover"
|
2025-01-22 07:44:50 +00:00
|
|
|
@click="showImage"
|
2025-01-23 05:56:18 +00:00
|
|
|
:src="src"
|
2025-01-23 12:02:20 +00:00
|
|
|
:modifiers="{ format: 'webp' }"
|
2025-01-23 05:56:18 +00:00
|
|
|
:sizes="sizes"
|
|
|
|
:format="format"
|
|
|
|
:quality="quality"
|
|
|
|
placeholder
|
|
|
|
/>
|
2025-01-23 08:34:34 +00:00
|
|
|
<van-empty v-else description="暂无" />
|
2025-01-22 07:44:50 +00:00
|
|
|
</template>
|
2025-01-23 05:56:18 +00:00
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
:deep(img) {
|
|
|
|
width: 100%;
|
|
|
|
height: 100%;
|
|
|
|
}
|
|
|
|
</style>
|