jdcProject_front/src/layouts/LeftTopMode.vue

112 lines
2.5 KiB
Vue
Raw Normal View History

2023-07-06 13:02:52 +08:00
<script lang="ts" setup>
import { computed } from "vue"
import { storeToRefs } from "pinia"
import { useAppStore } from "@/store/modules/app"
import { useSettingsStore } from "@/store/modules/settings"
import { AppMain, NavigationBar, Sidebar, TagsView, Logo } from "./components"
const appStore = useAppStore()
const settingsStore = useSettingsStore()
const { showTagsView, showLogo } = storeToRefs(settingsStore)
/** 定义计算属性 layoutClasses用于控制布局的类名 */
const layoutClasses = computed(() => {
return {
hideSidebar: !appStore.sidebar.opened
}
})
</script>
<template>
<div :class="layoutClasses" class="app-wrapper">
<!-- 头部导航栏和标签栏 -->
<div class="fixed-header layout-header">
<Logo v-if="showLogo" :collapse="false" class="logo" />
<div class="content">
<NavigationBar />
<TagsView v-show="showTagsView" />
</div>
</div>
<!-- 主容器 -->
<div :class="{ hasTagsView: showTagsView }" class="main-container">
<!-- 左侧边栏 -->
<Sidebar class="sidebar-container" />
<!-- 页面主体内容 -->
<AppMain class="app-main" />
</div>
</div>
</template>
<style lang="scss" scoped>
@import "@/styles/mixins.scss";
$transition-time: 0.35s;
.app-wrapper {
@extend %clearfix;
2023-07-06 13:02:52 +08:00
width: 100%;
}
.fixed-header {
position: fixed;
top: 0;
z-index: 1002;
width: 100%;
display: flex;
.logo {
width: var(--v3-sidebar-width);
}
.content {
flex: 1;
position: relative;
2023-07-06 13:02:52 +08:00
}
}
.layout-header {
2023-07-19 09:05:55 +08:00
background-color: var(--v3-header-bg-color);
2024-03-28 21:34:24 +08:00
box-shadow: var(--v3-header-box-shadow);
border-bottom: var(--v3-header-border-bottom);
2023-07-06 13:02:52 +08:00
}
.main-container {
min-height: 100%;
}
.sidebar-container {
transition: width $transition-time;
width: var(--v3-sidebar-width) !important;
height: 100%;
position: fixed;
left: 0;
z-index: 1001;
overflow: hidden;
border-right: var(--v3-sidebar-border-right);
2023-07-06 13:02:52 +08:00
padding-top: var(--v3-navigationbar-height);
}
.app-main {
transition: padding-left $transition-time;
padding-top: var(--v3-navigationbar-height);
padding-left: var(--v3-sidebar-width);
height: 100vh;
overflow: auto;
}
.hideSidebar {
.sidebar-container {
width: var(--v3-sidebar-hide-width) !important;
}
.app-main {
padding-left: var(--v3-sidebar-hide-width);
}
}
.hasTagsView {
.sidebar-container {
padding-top: var(--v3-header-height);
}
.app-main {
padding-top: var(--v3-header-height);
}
}
</style>