<template> <!-- :class="classObj" --> <div class="app-wrapper" :style="{ '--current-color': theme }"> <div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside" /> <sidebar v-if="!sidebar.hide" class="sidebar-container" /> <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container"> <div :class="{ 'fixed-header': fixedHeader }" class="tags-view-class"> <tags-view v-if="needTagsView" /> </div> <app-main /> <right-panel> <settings /> </right-panel> <div class="dibutishi"><span>主办单位:</span>中共太仓市委网信办 <span class="kongge"></span> <span>技术支持单位:</span>杭州安恒信息技术股份有限公司 </div> </div> </div> </template> <script> import RightPanel from '@/components/RightPanel' import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components' import ResizeMixin from './mixin/ResizeHandler' import { mapState, mapGetters } from 'vuex' import variables from '@/assets/styles/variables.scss' export default { name: 'Layout', components: { AppMain, Navbar, RightPanel, Settings, Sidebar, TagsView, }, mixins: [ResizeMixin], computed: { ...mapState({ theme: state => state.settings.theme, sideTheme: state => state.settings.sideTheme, sidebar: state => state.app.sidebar, device: state => state.app.device, needTagsView: state => state.settings.tagsView, fixedHeader: state => state.settings.fixedHeader, }), ...mapGetters([ 'avatar', ]), // classObj() { // return { // hideSidebar: !this.sidebar.opened, // openSidebar: this.sidebar.opened, // withoutAnimation: this.sidebar.withoutAnimation, // mobile: this.device === 'mobile' // } // }, variables() { return variables; } }, methods: { handleClickOutside() { this.$store.dispatch('app/closeSideBar', { withoutAnimation: false }) }, async logout() { this.$confirm('确定注销并退出系统吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$store.dispatch('LogOut').then(() => { location.href = '/index'; }) }).catch(() => { }); } } } </script> <style lang="scss" scoped> @import "~@/assets/styles/mixin.scss"; @import "~@/assets/styles/variables.scss"; .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; } .fixed-header { position: fixed; top: 0; right: 0; z-index: 9; width: calc(100% - #{$base-sidebar-width}); transition: width 0.28s; } .tags-view-class { display: flex; align-items: center; } .hideSidebar .fixed-header { width: calc(100% - 54px); } .sidebarHide .fixed-header { width: 100%; } .mobile .fixed-header { width: 100%; } .dibutishi { font-size: 14px; margin-top: 3px; color: #909399; .kongge { margin: 0 10px; } span { color: #909399; } } </style>