From 1a08bc47f48774a512f32fb28df0506c679ef17a Mon Sep 17 00:00:00 2001 From: tzy <1042411602@qq.com> Date: Sat, 6 Jun 2026 14:50:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AB=99=E7=82=B9=20Logo=20=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=EF=BC=9A=E4=BC=98=E5=85=88=E6=98=BE=E7=A4=BA=E5=9B=BE=E7=89=87?= =?UTF-8?q?=EF=BC=8C=E6=97=A0=20URL=20=E6=88=96=E5=8A=A0=E8=BD=BD=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=97=B6=E5=9B=9E=E9=80=80=E4=B8=BA=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E9=A6=96=E5=AD=97=E6=AF=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/composables/useSiteLogo.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/composables/useSiteLogo.ts diff --git a/src/composables/useSiteLogo.ts b/src/composables/useSiteLogo.ts new file mode 100644 index 0000000..4123ade --- /dev/null +++ b/src/composables/useSiteLogo.ts @@ -0,0 +1,30 @@ +import { computed, ref, watch } from 'vue' +import { useSiteStore } from '@/stores/site' + +/** + * 站点 Logo:图片加载失败时回退为站点名称首字母 + */ +export function useSiteLogo(src?: () => string | undefined) { + const siteStore = useSiteStore() + const siteName = computed(() => siteStore.siteName || 'MES系统') + const siteLogo = computed(() => src?.() ?? siteStore.siteLogo) + const logoLoadFailed = ref(false) + const showSiteLogoImg = computed(() => !!siteLogo.value && !logoLoadFailed.value) + const fallbackLetter = computed(() => siteName.value.charAt(0) || 'M') + + watch(siteLogo, () => { + logoLoadFailed.value = false + }) + + function handleLogoError() { + logoLoadFailed.value = true + } + + return { + siteName, + siteLogo, + showSiteLogoImg, + fallbackLetter, + handleLogoError, + } +}