yyb
20 小时以前 5470429a79313630a7ddef601de1d89e7dada754
src/layout/components/Sidebar/Logo.vue
@@ -4,7 +4,7 @@
      <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
        <img :src="faviconUrl" class="sidebar-logo sidebar-favicon" alt="站点图标" />
      </router-link>
      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
      <router-link v-else key="expand" class="sidebar-logo-link" :style="expandLogoLinkStyle" to="/">
        <img v-if="logoUrl" :src="logoUrl" class="sidebar-logo" @error="handleImageError" alt="公司Logo" />
        <h1 v-if="!logoUrl" class="sidebar-title">{{ title }}</h1>
      </router-link>
@@ -35,6 +35,14 @@
})
const logoUrl = ref('')
const expandLogoLinkStyle = computed(() => {
  if (!logoUrl.value) {
    return { '--logo-bg-image': 'none' }
  }
  const escaped = String(logoUrl.value).replace(/"/g, '\\"')
  return { '--logo-bg-image': `url("${escaped}")` }
})
const updateLogoUrl = () => {
  if (!cleanFactoryName.value) {
@@ -82,32 +90,63 @@
.sidebar-logo-container {
  position: relative;
  width: 100% !important;
  height: 56px !important;
  line-height: 56px;
  background: rgba(255, 255, 255, 0.78);
  border: 1px solid var(--surface-border);
  border-radius: 22px;
  text-align: center;
  height: 78px !important;
  line-height: 78px;
  background: transparent;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  text-align: left;
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  box-shadow: none;
  backdrop-filter: none;
  transition: all 0.3s ease;
  .sidebar-logo-link {
    position: relative;
    isolation: isolate;
    height: 100%;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 18px 0 14px;
    padding: 0;
    &::before {
      content: "";
      position: absolute;
      inset: 0;
      background-image: var(--logo-bg-image);
      background-size: cover;
      background-position: center;
      opacity: 0.26;
      filter: blur(8px) saturate(0.9);
      transform: scale(1.06);
      pointer-events: none;
      z-index: 0;
    }
    &::after {
      content: "";
      position: absolute;
      inset: 0;
      background: linear-gradient(180deg, rgba(16, 49, 89, 0.18), rgba(16, 49, 89, 0.08));
      pointer-events: none;
      z-index: 0;
    }
  }
  .sidebar-logo {
    width: auto;
    max-width: 250px;
    max-height: 50px;
    height: auto;
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    padding: 6px 10px;
    vertical-align: middle;
    object-fit: contain;
    object-position: center;
    filter: none;
    display: block;
    position: relative;
    z-index: 1;
  }
  .sidebar-title {
@@ -119,23 +158,40 @@
    font-size: 14px;
    font-family: "Segoe UI", "PingFang SC", sans-serif;
    vertical-align: middle;
    position: relative;
    z-index: 1;
  }
  &.collapse {
    .sidebar-logo-link {
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 0;
      &::before,
      &::after {
        display: none;
      }
    }
    .sidebar-logo {
      max-width: 30px;
      max-height: 30px;
      width: calc(100% - 8px);
      height: calc(100% - 8px);
      max-width: none;
      max-height: none;
      padding: 4px;
      margin: 0 auto;
      filter: none;
      object-fit: contain;
      object-position: center;
    }
    .sidebar-favicon {
      width: 24px;
      height: 24px;
      max-width: 24px;
      max-height: 24px;
      width: calc(100% - 8px);
      height: calc(100% - 8px);
      max-width: none;
      max-height: none;
    }
  }
}