gaoluyang
3 天以前 a88eab39f6b2f5c33913d51fac4e885c052ed4a1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<template>
    <div class="sidebar-logo-container" :class="{ 'collapse': collapse }">
        <transition name="sidebarLogoFade">
            <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
                <img v-if="logo" :src="logo" class="sidebar-logo" />
                <h1 v-else class="sidebar-title">{{ title }}</h1>
            </router-link>
            <router-link v-else key="expand" class="sidebar-logo-link" to="/">
                <img v-if="logo" :src="logo" class="sidebar-logo" />
                <h1 class="sidebar-title">{{ title }}</h1>
            </router-link>
        </transition>
    </div>
</template>
 
<script setup>
import logo from '@/assets/logo/logo.png'
import useSettingsStore from '@/store/modules/settings'
import variables from '@/assets/styles/variables.module.scss'
 
defineProps({
    collapse: {
        type: Boolean,
        required: true
    }
})
 
const title = import.meta.env.VITE_APP_TITLE
const settingsStore = useSettingsStore()
const sideTheme = computed(() => settingsStore.sideTheme)
 
// 获取Logo背景色
const getLogoBackground = computed(() => {
    if (settingsStore.isDark) {
        return 'var(--sidebar-bg)'
    }
    return sideTheme.value === 'theme-dark' ? variables.menuBg : variables.menuLightBg
})
 
// 获取Logo文字颜色
const getLogoTextColor = computed(() => {
    if (settingsStore.isDark) {
        return 'var(--sidebar-text)'
    }
    return sideTheme.value === 'theme-dark' ? '#fff' : variables.menuLightText
})
</script>
 
<style lang="scss" scoped>
@import '@/assets/styles/variables.module.scss';
 
.sidebarLogoFade-enter-active {
    transition: opacity 1.5s;
}
 
.sidebarLogoFade-enter,
.sidebarLogoFade-leave-to {
    opacity: 0;
}
 
.sidebar-logo-container {
    position: relative;
    width: 100%;
    height: 50px;
    line-height: 50px;
    background: v-bind(getLogoBackground);
    text-align: center;
    overflow: hidden;
    
    & .sidebar-logo-link {
        height: 100%;
        width: 100%;
        
        & .sidebar-logo {
            height: 32px;
            vertical-align: middle;
            margin-right: 12px;
        }
        
        & .sidebar-title {
            display: inline-block;
            margin: 0;
            color: v-bind(getLogoTextColor);
            font-weight: 600;
            line-height: 50px;
            font-size: 14px;
            font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
            vertical-align: middle;
        }
    }
    
    &.collapse {
        .sidebar-logo {
            margin-right: 0px;
        }
    }
}
</style>