Files
jyls_front/src/components/Hamburger/index.vue

67 lines
1.4 KiB
Vue
Raw Normal View History

2025-12-05 10:17:26 +08:00
<template>
<div class="hamburger-wrapper" @click="toggleClick">
<div :class="['i-svg:collapse', { hamburger: true, 'is-active': isActive }, hamburgerClass]" />
</div>
</template>
<script setup lang="ts">
2025-12-11 17:13:37 +08:00
import { useSettingsStore } from '@/store'
import { ThemeMode, SidebarColor } from '@/enums/settings/theme-enum'
import { LayoutMode } from '@/enums/settings/layout-enum'
2025-12-05 10:17:26 +08:00
defineProps({
2025-12-11 17:13:37 +08:00
isActive: { type: Boolean, required: true }
})
2025-12-05 10:17:26 +08:00
2025-12-11 17:13:37 +08:00
const emit = defineEmits(['toggleClick'])
2025-12-05 10:17:26 +08:00
2025-12-11 17:13:37 +08:00
const settingsStore = useSettingsStore()
const layout = computed(() => settingsStore.layout)
2025-12-05 10:17:26 +08:00
const hamburgerClass = computed(() => {
// 如果暗黑主题
if (settingsStore.theme === ThemeMode.DARK) {
2025-12-11 17:13:37 +08:00
return 'hamburger--white'
2025-12-05 10:17:26 +08:00
}
// 如果是混合布局 && 侧边栏配色方案是经典蓝
if (
layout.value === LayoutMode.MIX &&
settingsStore.sidebarColorScheme === SidebarColor.CLASSIC_BLUE
) {
2025-12-11 17:13:37 +08:00
return 'hamburger--white'
2025-12-05 10:17:26 +08:00
}
// 默认返回空字符串
2025-12-11 17:13:37 +08:00
return ''
})
2025-12-05 10:17:26 +08:00
function toggleClick() {
2025-12-11 17:13:37 +08:00
emit('toggleClick')
2025-12-05 10:17:26 +08:00
}
</script>
<style scoped lang="scss">
.hamburger-wrapper {
display: flex;
align-items: center;
justify-content: center;
padding: 0 15px;
cursor: pointer;
.hamburger {
vertical-align: middle;
transform: scaleX(-1);
transition: transform 0.3s ease;
&--white {
color: #fff;
}
&.is-active {
transform: scaleX(1);
}
}
}
</style>