kboss/f/web-kboss/src/layout/index.vue
2025-07-16 14:27:17 +08:00

120 lines
2.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>
</div>
</template>
<script>
import RightPanel from '@/components/RightPanel'
import {AppMain, Navbar, Settings, Sidebar, TagsView} from './components'
import FloatingBox from '../components/FloatingBox/FloatingBox.vue'; // 导入悬浮框组件
import ResizeMixin from './mixin/ResizeHandler'
import {mapState} from 'vuex'
export default {
name: 'Layout',
components: {
AppMain,
Navbar,
RightPanel,
Settings,
Sidebar,
TagsView
},
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'
}
}
},
watch: {
'$route': { // $route可以用引号也可以不用引号
handler(to, from) {
// console.log(this.$route),'=====================';
// console.log('*******************************')
// console.log(this.$store.getters.permission_routes)
// console.log(this.$router)
// console.log('*******************************')
},
deep: true, // 深度监听
immediate: true, // 第一次初始化渲染就可以监听到
}
},
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%;
background-color: #f0f2f5;
&.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>