站点 Logo 展示:优先显示图片,无 URL 或加载失败时回退为站点名称首字母。
This commit is contained in:
parent
3e06241c9c
commit
c556af99eb
36
src/components/SiteLogoMark.vue
Normal file
36
src/components/SiteLogoMark.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<!--
|
||||
站点 Logo 展示:优先显示图片,无 URL 或加载失败时回退为站点名称首字母。
|
||||
用于 layout、login、register 等页面;src 不传则使用 siteStore.siteLogo。
|
||||
-->
|
||||
<template>
|
||||
<img
|
||||
v-if="showSiteLogoImg"
|
||||
:src="siteLogo"
|
||||
:class="imgClass"
|
||||
alt="Logo"
|
||||
@error="handleLogoError"
|
||||
/>
|
||||
<div v-else :class="iconClass" :style="iconStyle">{{ fallbackLetter }}</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useSiteLogo } from '@/composables/useSiteLogo'
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
/** 自定义 Logo 地址,默认取 siteStore.siteLogo */
|
||||
src?: string
|
||||
/** 图片模式下的 class */
|
||||
imgClass?: string
|
||||
/** 首字母 fallback 模式下的 class */
|
||||
iconClass?: string
|
||||
/** 首字母 fallback 的内联样式 */
|
||||
iconStyle?: Record<string, string>
|
||||
}>(), {
|
||||
imgClass: 'logo-img',
|
||||
iconClass: 'logo-icon',
|
||||
})
|
||||
|
||||
const { siteLogo, showSiteLogoImg, fallbackLetter, handleLogoError } = useSiteLogo(
|
||||
() => props.src
|
||||
)
|
||||
</script>
|
||||
Loading…
Reference in New Issue
Block a user