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