小小儁爺
2025-03-06 e9a02d180b91ee7a383d25d5e19853630026b4b1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<template>
  <div :class="classObj" class="app-wrapper">
    <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
 
    <!--    <sidebar-->
    <!--      :class="$store.state.settings.menuIsHorizontal?-->
    <!--        'sidebar-container-sideBarWidthIsMenuHorizontal':-->
    <!--        !$store.state.settings.leftBackgroundColorValue&&sidebar.opened?-->
    <!--          'sidebar-container-leftBackgroundColorValue':-->
    <!--          'sidebar-container'"-->
    <!--    />-->
 
    <!--1.当为横向菜单时-->
    <sidebar
      v-if="$store.state.settings.menuIsHorizontal"
      class="sidebar-container-sideBarWidthIsMenuHorizontal"
    />
    <!--    2.当为竖向菜单且为深色背景色时-->
    <sidebar
      v-else-if="!$store.state.settings.menuIsHorizontal&&$store.state.settings.leftBackgroundColorValue"
      class="sidebar-container"
    />
    <!--    3.当为竖向菜单且为浅色背景色时-->
    <sidebar
      v-else-if="!$store.state.settings.menuIsHorizontal&&!$store.state.settings.leftBackgroundColorValue"
      :class="sidebar.opened?'sidebar-container-leftBackgroundColorValue':'sidebar-container sidebarContainer'"
    />
    <div
      :class="$store.state.settings.menuIsHorizontal?'main-container-sideBarWidthIsMenuHorizontal': '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 { Navbar, Sidebar, AppMain, TagsView, Settings } from './components'
import ResizeMixin from './mixin/ResizeHandler'
import RightPanel from '@/components/RightPanel'
 
export default {
  name: 'Layout',
  components: {
    Navbar,
    Sidebar,
    AppMain,
    TagsView,
    RightPanel,
    Settings
  },
  mixins: [ResizeMixin],
  computed: {
    needTagsView() {
      return this.$store.state.settings.tagsView
    },
    sidebar() {
      return this.$store.state.app.sidebar
    },
    device() {
      return this.$store.state.app.device
    },
    fixedHeader() {
      return this.$store.state.settings.fixedHeader
    },
    showSettings() {
      return this.$store.state.settings.showSettings
    },
    classObj() {
      return {
        hideSidebar: !this.sidebar.opened,
        openSidebar: this.sidebar.opened,
        withoutAnimation: this.sidebar.withoutAnimation,
        mobile: this.device === 'mobile'
      }
    }
  },
  methods: {
    handleClickOutside() {
      this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
    }
  }
}
</script>
 
<style lang="scss" scoped>
@import "~@/styles/mixin.scss";
@import "~@/styles/variables.scss";
 
//@import "~@/styles/element-variables.scss";
 
.sidebarContainer {
  background-color: #f8f8fa !important;
}
 
.app-wrapper {
  @include clearfix;
  position: relative;
  height: 100%;
  width: 100%;
  //color: #{$--color-primary};
  //background: #{$--color-primary};
 
  &.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>