13 changed files with 535 additions and 386 deletions
			
			
		- 
					5.editorconfig
 - 
					2src/App.vue
 - 
					25src/api/system/menu.js
 - 
					117src/layout/index.vue
 - 
					16src/main.js
 - 
					26src/router/index.js
 - 
					49src/router/routers.js
 - 
					5src/store/index.js
 - 
					8src/store/modules/api.js
 - 
					82src/store/modules/permission.js
 - 
					18src/utils/permission.js
 - 
					18src/utils/request.js
 - 
					20src/views/login.vue
 
@ -0,0 +1,117 @@ | 
			
		|||||
 | 
				<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 /> | 
			
		||||
 | 
				      <right-panel v-if="showSettings"> | 
			
		||||
 | 
				        <settings /> | 
			
		||||
 | 
				      </right-panel> | 
			
		||||
 | 
				    </div> | 
			
		||||
 | 
				    <!--  防止刷新后主题丢失  --> | 
			
		||||
 | 
				    <Theme v-show="false" ref="theme" /> | 
			
		||||
 | 
				  </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' | 
			
		||||
 | 
				import Theme from '@/components/ThemePicker' | 
			
		||||
 | 
				import Cookies from 'js-cookie' | 
			
		||||
 | 
				export default { | 
			
		||||
 | 
				  name: 'Layout', | 
			
		||||
 | 
				  components: { | 
			
		||||
 | 
				    AppMain, | 
			
		||||
 | 
				    Navbar, | 
			
		||||
 | 
				    RightPanel, | 
			
		||||
 | 
				    Settings, | 
			
		||||
 | 
				    Sidebar, | 
			
		||||
 | 
				    TagsView, | 
			
		||||
 | 
				    Theme | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  }, | 
			
		||||
 | 
				  mixins: [ResizeMixin], | 
			
		||||
 | 
				  computed: { | 
			
		||||
 | 
				    ...mapState({ | 
			
		||||
 | 
				      sidebar: state => state.app.sidebar, | 
			
		||||
 | 
				      device: state => state.app.device, | 
			
		||||
 | 
				      showSettings: state => state.settings.showSettings, | 
			
		||||
 | 
				      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' | 
			
		||||
 | 
				      } | 
			
		||||
 | 
				    } | 
			
		||||
 | 
				  }, | 
			
		||||
 | 
				  mounted () { | 
			
		||||
 | 
				    if (Cookies.get('theme')) { | 
			
		||||
 | 
				      this.$refs.theme.theme = Cookies.get('theme') | 
			
		||||
 | 
				      this.$store.dispatch('settings/changeSetting', { | 
			
		||||
 | 
				        key: 'theme', | 
			
		||||
 | 
				        value: Cookies.get('theme') | 
			
		||||
 | 
				      }) | 
			
		||||
 | 
				    } | 
			
		||||
 | 
				  }, | 
			
		||||
 | 
				  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; | 
			
		||||
 | 
				  padding: 0; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				.hideSidebar .fixed-header { | 
			
		||||
 | 
				  width: calc(100% - 54px); | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				.mobile .fixed-header { | 
			
		||||
 | 
				  width: 100%; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				</style> | 
			
		||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue