| 
									
										
										
										
											2019-10-08 09:14:38 +08:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2020-12-07 14:13:02 +08:00
										 |  |  |   <div :class="classObj" class="app-wrapper" :style="{'--current-color': theme}"> | 
					
						
							|  |  |  |     <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/> | 
					
						
							|  |  |  |     <sidebar class="sidebar-container" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBg : variables.menuLightBg }" /> | 
					
						
							| 
									
										
										
										
											2019-10-08 09:14:38 +08:00
										 |  |  |     <div :class="{hasTagsView:needTagsView}" class="main-container"> | 
					
						
							|  |  |  |       <div :class="{'fixed-header':fixedHeader}"> | 
					
						
							|  |  |  |         <navbar /> | 
					
						
							|  |  |  |         <tags-view v-if="needTagsView" /> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       <app-main /> | 
					
						
							| 
									
										
										
										
											2021-08-18 09:29:22 +00:00
										 |  |  |       <right-panel> | 
					
						
							| 
									
										
										
										
											2019-10-08 09:14:38 +08:00
										 |  |  |         <settings /> | 
					
						
							|  |  |  |       </right-panel> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | import RightPanel from '@/components/RightPanel' | 
					
						
							|  |  |  | import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components' | 
					
						
							|  |  |  | import ResizeMixin from './mixin/ResizeHandler' | 
					
						
							|  |  |  | import { mapState } from 'vuex' | 
					
						
							| 
									
										
										
										
											2020-12-07 14:13:02 +08:00
										 |  |  | import variables from '@/assets/styles/variables.scss' | 
					
						
							| 
									
										
										
										
											2019-10-08 09:14:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default { | 
					
						
							|  |  |  |   name: 'Layout', | 
					
						
							|  |  |  |   components: { | 
					
						
							|  |  |  |     AppMain, | 
					
						
							|  |  |  |     Navbar, | 
					
						
							|  |  |  |     RightPanel, | 
					
						
							|  |  |  |     Settings, | 
					
						
							|  |  |  |     Sidebar, | 
					
						
							|  |  |  |     TagsView | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   mixins: [ResizeMixin], | 
					
						
							|  |  |  |   computed: { | 
					
						
							|  |  |  |     ...mapState({ | 
					
						
							| 
									
										
										
										
											2020-12-07 14:13:02 +08:00
										 |  |  |       theme: state => state.settings.theme, | 
					
						
							|  |  |  |       sideTheme: state => state.settings.sideTheme, | 
					
						
							| 
									
										
										
										
											2019-10-08 09:14:38 +08:00
										 |  |  |       sidebar: state => state.app.sidebar, | 
					
						
							|  |  |  |       device: state => state.app.device, | 
					
						
							|  |  |  |       needTagsView: state => state.settings.tagsView, | 
					
						
							|  |  |  |       fixedHeader: state => state.settings.fixedHeader | 
					
						
							|  |  |  |     }), | 
					
						
							|  |  |  |     classObj() { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         hideSidebar: !this.sidebar.opened, | 
					
						
							|  |  |  |         openSidebar: this.sidebar.opened, | 
					
						
							|  |  |  |         withoutAnimation: this.sidebar.withoutAnimation, | 
					
						
							|  |  |  |         mobile: this.device === 'mobile' | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2020-12-07 14:13:02 +08:00
										 |  |  |     }, | 
					
						
							|  |  |  |     variables() { | 
					
						
							|  |  |  |       return variables; | 
					
						
							| 
									
										
										
										
											2019-10-08 09:14:38 +08:00
										 |  |  |     } | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   methods: { | 
					
						
							|  |  |  |     handleClickOutside() { | 
					
						
							|  |  |  |       this.$store.dispatch('app/closeSideBar', { withoutAnimation: false }) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | </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% - #{$sideBarWidth}); | 
					
						
							|  |  |  |     transition: width 0.28s; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .hideSidebar .fixed-header { | 
					
						
							|  |  |  |     width: calc(100% - 54px) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .mobile .fixed-header { | 
					
						
							|  |  |  |     width: 100%; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </style> |