Skip to content

Commit 8796f3c

Browse files
committed
优化布局相关 CSS 变量处理逻辑
1 parent c5fa23e commit 8796f3c

File tree

2 files changed

+37
-50
lines changed

2 files changed

+37
-50
lines changed

src/layouts/components/Topbar/index.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script setup lang="ts">
22
import useSettingsStore from '@/store/modules/settings'
3+
import { useElementSize } from '@vueuse/core'
34
import Tabbar from './Tabbar/index.vue'
45
import Toolbar from './Toolbar/index.vue'
56
@@ -20,11 +21,10 @@ const enableToolbar = computed(() => {
2021
2122
const scrollTop = ref(0)
2223
const scrollOnHide = ref(false)
23-
const topbarHeight = computed(() => {
24-
const tabbarHeight = settingsStore.settings.tabbar.enable ? Number.parseInt(getComputedStyle(document.documentElement || document.body).getPropertyValue('--g-tabbar-height')) : 0
25-
const toolbarHeight = enableToolbar.value ? Number.parseInt(getComputedStyle(document.documentElement || document.body).getPropertyValue('--g-toolbar-height')) : 0
26-
return tabbarHeight + toolbarHeight
27-
})
24+
25+
const topbarRef = useTemplateRef('topbarRef')
26+
const { height: topbarHeight } = useElementSize(topbarRef)
27+
2828
onMounted(() => {
2929
window.addEventListener('scroll', onScroll)
3030
})
@@ -42,7 +42,7 @@ watch(scrollTop, (val, oldVal) => {
4242
<template>
4343
<FaSmartFixedBlock position="top" :class="{ 'absolute!': settingsStore.settings.topbar.mode === 'static' }">
4444
<div
45-
class="topbar-container transition-[transform,box-shadow]-300" :class="{
45+
ref="topbarRef" class="topbar-container transition-[transform,box-shadow]-300" :class="{
4646
[`topbar-${settingsStore.settings.topbar.mode}`]: true,
4747
mask: scrollTop,
4848
hide: scrollOnHide,

src/layouts/index.vue

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -22,51 +22,37 @@ const settingsStore = useSettingsStore()
2222
const keepAliveStore = useKeepAliveStore()
2323
const menuStore = useMenuStore()
2424
25-
// 头部当前实际高度
26-
const headerActualHeight = computed(() => {
27-
let actualHeight = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-header-height'))
28-
if (['single', 'side'].includes(settingsStore.settings.menu.mode) || settingsStore.mode === 'mobile') {
29-
actualHeight = 0
30-
}
31-
return actualHeight
25+
// 头部是否隐藏
26+
const isHeaderHide = computed(() => {
27+
return ['single', 'side'].includes(settingsStore.settings.menu.mode) || settingsStore.mode === 'mobile'
3228
})
3329
34-
// 侧边栏主导航当前实际宽度
35-
const mainSidebarActualWidth = computed(() => {
36-
let actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-main-sidebar-width'))
37-
if (settingsStore.settings.menu.mode === 'single' || (settingsStore.settings.menu.mode === 'head' && settingsStore.mode !== 'mobile')) {
38-
actualWidth = 0
39-
}
40-
return actualWidth
30+
// 侧边栏主导航是否隐藏
31+
const isMainSidebarHide = computed(() => {
32+
return settingsStore.settings.menu.mode === 'single'
33+
|| (settingsStore.settings.menu.mode === 'head' && settingsStore.mode !== 'mobile')
4134
})
4235
43-
// 侧边栏次导航当前实际宽度
44-
const subSidebarActualWidth = computed(() => {
45-
let actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-width'))
46-
if (settingsStore.settings.menu.subMenuCollapse && settingsStore.mode !== 'mobile') {
47-
actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-collapse-width'))
48-
}
49-
if (menuStore.sidebarMenus.every(item => item.meta?.menu === false)) {
50-
actualWidth = 0
51-
}
52-
return actualWidth
36+
// 侧边栏次导航是否隐藏
37+
const isSubSidebarHide = computed(() => {
38+
return (settingsStore.settings.menu.subMenuCollapse && settingsStore.mode !== 'mobile')
39+
|| menuStore.sidebarMenus.every(item => item.meta?.menu === false)
5340
})
5441
55-
// 顶栏当前实际高度
56-
const topbarActualHeight = computed(() => {
57-
let actualHeight = 0
58-
if (settingsStore.settings.tabbar.enable) {
59-
actualHeight += Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-tabbar-height'))
60-
}
61-
if (settingsStore.settings.toolbar.enable && Object.keys(settingsStore.settings.toolbar).some((key) => {
62-
if (settingsStore.settings.app.routeBaseOn === 'filesystem' && key === 'breadcrumb') {
63-
return false
64-
}
65-
return settingsStore.settings.toolbar[key as keyof typeof settingsStore.settings.toolbar]
66-
})) {
67-
actualHeight += Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-toolbar-height'))
68-
}
69-
return actualHeight
42+
// 标签栏是否隐藏
43+
const isTabbarHide = computed(() => {
44+
return !settingsStore.settings.tabbar.enable
45+
})
46+
47+
// 工具栏是否隐藏
48+
const isToolbarHide = computed(() => {
49+
return !settingsStore.settings.toolbar.enable
50+
|| !Object.keys(settingsStore.settings.toolbar).some((key) => {
51+
if (settingsStore.settings.app.routeBaseOn === 'filesystem' && key === 'breadcrumb') {
52+
return false
53+
}
54+
return settingsStore.settings.toolbar[key as keyof typeof settingsStore.settings.toolbar]
55+
})
7056
})
7157
7258
const isLink = computed(() => !!routeInfo.meta.link)
@@ -96,10 +82,11 @@ const enableAppSetting = import.meta.env.VITE_APP_SETTING
9682
<template>
9783
<div
9884
class="layout" :style="{
99-
'--g-header-actual-height': `${headerActualHeight}px`,
100-
'--g-main-sidebar-actual-width': `${mainSidebarActualWidth}px`,
101-
'--g-sub-sidebar-actual-width': `${subSidebarActualWidth}px`,
102-
'--g-topbar-actual-height': `${topbarActualHeight}px`,
85+
'--g-header-actual-height': isHeaderHide ? '0px' : 'var(--g-header-height)',
86+
'--g-main-sidebar-actual-width': isMainSidebarHide ? '0px' : 'var(--g-main-sidebar-width)',
87+
'--g-sub-sidebar-actual-width': isSubSidebarHide ? '0px' : (settingsStore.settings.menu.subMenuCollapse && settingsStore.mode !== 'mobile' ? 'var(--g-sub-sidebar-collapse-width)' : 'var(--g-sub-sidebar-width)'),
88+
'--g-tabbar-actual-height': isTabbarHide ? '0px' : 'var(--g-tabbar-height)',
89+
'--g-toolbar-actual-height': isToolbarHide ? '0px' : 'var(--g-toolbar-height)',
10390
}"
10491
>
10592
<div id="app-main">
@@ -214,7 +201,7 @@ const enableAppSetting = import.meta.env.VITE_APP_SETTING
214201
position: relative;
215202
flex: auto;
216203
height: 100%;
217-
margin: var(--g-topbar-actual-height) 0 0;
204+
margin: calc(var(--g-tabbar-actual-height) + var(--g-toolbar-actual-height)) 0 0;
218205
overflow: hidden;
219206
}
220207
}

0 commit comments

Comments
 (0)