diff options
Diffstat (limited to 'UI source code/dns_mapping_ui-master/src/layout/index.vue')
| -rw-r--r-- | UI source code/dns_mapping_ui-master/src/layout/index.vue | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/UI source code/dns_mapping_ui-master/src/layout/index.vue b/UI source code/dns_mapping_ui-master/src/layout/index.vue new file mode 100644 index 0000000..6e83e5c --- /dev/null +++ b/UI source code/dns_mapping_ui-master/src/layout/index.vue @@ -0,0 +1,118 @@ +<template> + <div :class="classObj" class="app-wrapper"> + <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" /> + <sidebar v-if="menuInLeft" class="sidebar-container" /> + <div :class="{hasTagsView:needTagsView,'main-container':menuInLeft}" class="main-container"> + <div :class="{'fixed-header':fixedHeader}"> + <!-- <navbar /> --> + <HeadNavbar v-if="!menuInLeft" /> + <!-- <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, HeadNavbar } 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, + RightPanel, + HeadNavbar, + 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, + menuInLeft: state => state.settings.menuInLeft + }), + 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"; + + .rapper { + @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> |
