jdcProject_front/src/layouts/LeftTopMode.vue

114 lines
2.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script lang="ts" setup>
import { useAppStore } from "@/store/modules/app"
import { useSettingsStore } from "@/store/modules/settings"
import { storeToRefs } from "pinia"
import { computed } from "vue"
import { AppMain, Logo, NavigationBar, Sidebar, TagsView } 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;
width: 100%;
}
.fixed-header {
position: fixed;
top: 0;
z-index: 1002;
width: 100%;
display: flex;
.logo {
flex: none;
width: var(--v3-sidebar-width);
}
.content {
flex: 1;
overflow: hidden;
}
}
.layout-header {
background-color: var(--v3-header-bg-color);
box-shadow: var(--v3-header-box-shadow);
border-bottom: var(--v3-header-border-bottom);
}
.main-container {
min-height: 100%;
}
.sidebar-container {
background-color: var(--el-menu-bg-color);
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);
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>