99 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
| <template>
 | |
|   <div :class="classObj" class="app-wrapper">
 | |
|     <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
 | |
|     <sidebar class="sidebar-container" />
 | |
|     <div :class="{hasTagsView:needTagsView}" class="main-container">
 | |
|       <div :class="{'fixed-header':fixedHeader}">
 | |
|         <navbar />
 | |
|         <tags-view v-if="needTagsView" />
 | |
|       </div>
 | |
|       <app-main />
 | |
|     </div>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import { Navbar, Sidebar, AppMain, TagsView } from './components'
 | |
| import ResizeMixin from './mixin/ResizeHandler'
 | |
| 
 | |
| export default {
 | |
|   name: 'Layout',
 | |
|   components: {
 | |
|     Navbar,
 | |
|     Sidebar,
 | |
|     AppMain,
 | |
|     TagsView
 | |
|   },
 | |
|   mixins: [ResizeMixin],
 | |
|   computed: {
 | |
|     sidebar() {
 | |
|       return this.$store.state.app.sidebar
 | |
|     },
 | |
|     device() {
 | |
|       return this.$store.state.app.device
 | |
|     },
 | |
|     fixedHeader() {
 | |
|       return this.$store.state.settings.fixedHeader
 | |
|     },
 | |
|     needTagsView() {
 | |
|       return this.$store.state.settings.tagsView
 | |
|     },
 | |
|     classObj() {
 | |
|       return {
 | |
|         hideSidebar: !this.sidebar.opened,
 | |
|         openSidebar: this.sidebar.opened,
 | |
|         withoutAnimation: this.sidebar.withoutAnimation,
 | |
|         mobile: this.device === 'mobile'
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     handleClickOutside() {
 | |
|       this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| @import "~@/styles/mixin.scss";
 | |
| @import "~@/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% - #{$sideBarWidth});
 | |
|   transition: width 0.28s;
 | |
| }
 | |
| 
 | |
| .hideSidebar .fixed-header {
 | |
|   width: calc(100% - 54px);
 | |
| }
 | |
| 
 | |
| .mobile .fixed-header {
 | |
|   width: 100%;
 | |
| }
 | |
| </style>
 |