Layout.vue 2.61 KB
<template>
    <div :class="classObj" class="app-wrapper">
        <div class="nav-wrap">
            <div v-if="device !=='mobile'" :class="{isCollapse:isCollapse}" class="tit"> {{!isCollapse?'管理系统':''}} </div>
            <navbar class="nav" />
        </div>
        <div class="main-wrap">
            <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
            <sidebar class="sidebar-container" />
            <div class="main-container">
                <app-main />
            </div>
        </div>
    </div>
</template>

<script>
import { mapGetters } from 'vuex'
import { Navbar, Sidebar, AppMain } from './components'
import ResizeMixin from './mixin/ResizeHandler'

export default {
    name: 'Layout',
    components: {
        Navbar,
        Sidebar,
        AppMain
    },
    mixins: [ResizeMixin],
    computed: {
        sidebar() {
            return this.$store.state.app.sidebar
        },
        device() {
            return this.$store.state.app.device
        },
        classObj() {
            return {
                hideSidebar: !this.sidebar.opened,
                openSidebar: this.sidebar.opened,
                withoutAnimation: this.sidebar.withoutAnimation,
                mobile: this.device === 'mobile'
            }
        },
        isCollapse() {
            return !this.sidebar.opened
        }
    },
    methods: {
        handleClickOutside() {
            this.$store.dispatch('CloseSideBar', { withoutAnimation: false })
        }
    }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
@import 'src/styles/mixin.scss';
@import 'src/styles/variables.scss';

.nav-wrap {
    position: fixed;
    z-index: 999;
    width: 100%;
    height: 50px;
    background-color: #ffffff;
    display: flex;
    justify-content: flex-start;
    .tit {
        transition: width 0.28s;
        width: 210px;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        font-weight: bold;
        font-size: 24px;
        color: #555555;
        // background-color: $menuBg;
    }
    .isCollapse {
        transition: width 0.28s;
        width: 54px;
    }
    .nav {
        flex: 1;
    }
}

.main-wrap {
    padding-top: 50px;
}
.sidebar-container {
    margin-top: 50px;
}

.app-wrapper {
    @include clearfix;
    position: relative;
    height: 100%;
    width: 100%;
    &.mobile.openSidebar {
        position: fixed;
        top: 0;
    }
}
.drawer-bg {
    background: #000;
    opacity: 0.3;
    width: 100%;
    top: 0;
    height: 100%;
    position: absolute;
    z-index: 999;
}
</style>