|
|
|
|
<template>
|
|
|
|
|
<div :class="classObj" class="app__wrap">
|
|
|
|
|
<!-- Classic -->
|
|
|
|
|
<div
|
|
|
|
|
class="sidebar__wrap"
|
|
|
|
|
:class="{'sidebar__wrap--collapsed': collapsed}"
|
|
|
|
|
>
|
|
|
|
|
<logo
|
|
|
|
|
v-if="showLogo && layout === 'Classic'"
|
|
|
|
|
:collapsed="collapsed"
|
|
|
|
|
/>
|
|
|
|
|
<sider :layout="layout" mode="vertical" />
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
class="main__wrap"
|
|
|
|
|
:class="{
|
|
|
|
|
'main__wrap--collapsed': collapsed
|
|
|
|
|
}"
|
|
|
|
|
>
|
|
|
|
|
<el-scrollbar
|
|
|
|
|
class="main__wrap--content"
|
|
|
|
|
:class="{
|
|
|
|
|
'main__wrap--fixed--all': fixedHeader && showNavbar && showTags,
|
|
|
|
|
'main__wrap--fixed--nav': fixedHeader && showNavbar && !showTags,
|
|
|
|
|
'main__wrap--fixed--tags': fixedHeader && !showNavbar && showTags
|
|
|
|
|
}"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="header__wrap"
|
|
|
|
|
:class="{
|
|
|
|
|
'header__wrap--fixed': fixedHeader,
|
|
|
|
|
'header__wrap--collapsed': fixedHeader && collapsed
|
|
|
|
|
}"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
v-if="showNavbar"
|
|
|
|
|
class="navbar__wrap"
|
|
|
|
|
>
|
|
|
|
|
<hamburger
|
|
|
|
|
v-if="showHamburger"
|
|
|
|
|
:collapsed="collapsed"
|
|
|
|
|
class="hover-container"
|
|
|
|
|
@toggleClick="setCollapsed"
|
|
|
|
|
/>
|
|
|
|
|
<breadcrumb v-if="showBreadcrumb" />
|
|
|
|
|
<div v-if="showScreenfull || showUserInfo" class="navbar__wrap--right">
|
|
|
|
|
<screenfull v-if="showScreenfull" class="hover-container screenfull-container" />
|
|
|
|
|
<user-info v-if="showUserInfo" class="hover-container user-container" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
v-if="showTags"
|
|
|
|
|
class="tags__wrap"
|
|
|
|
|
>
|
|
|
|
|
<tags-view />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<app-main />
|
|
|
|
|
</el-scrollbar>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- setting -->
|
|
|
|
|
<setting />
|
|
|
|
|
<!-- setting -->
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script lang="ts">
|
|
|
|
|
import { defineComponent, computed } from 'vue'
|
|
|
|
|
import { appStore } from '_p/index/store/modules/app'
|
|
|
|
|
|
|
|
|
|
import AppMain from '../components/AppMain.vue'
|
|
|
|
|
import TagsView from '_c/TagsView/index.vue'
|
|
|
|
|
import Logo from '_c/Logo/index.vue'
|
|
|
|
|
import Sider from '_c/Sider/index.vue'
|
|
|
|
|
import Hamburger from '_c/Hamburger/index.vue'
|
|
|
|
|
import Breadcrumb from '_c/Breadcrumb/index.vue'
|
|
|
|
|
import Screenfull from '_c/Screenfull/index.vue'
|
|
|
|
|
import UserInfo from '_c/UserInfo/index.vue'
|
|
|
|
|
|
|
|
|
|
import Setting from '_c/Setting/index.vue'
|
|
|
|
|
export default defineComponent({
|
|
|
|
|
name: 'Classic',
|
|
|
|
|
components: {
|
|
|
|
|
Sider,
|
|
|
|
|
Hamburger,
|
|
|
|
|
Breadcrumb,
|
|
|
|
|
Screenfull,
|
|
|
|
|
UserInfo,
|
|
|
|
|
AppMain,
|
|
|
|
|
TagsView,
|
|
|
|
|
Logo,
|
|
|
|
|
Setting
|
|
|
|
|
},
|
|
|
|
|
setup() {
|
|
|
|
|
const layout = computed(() => appStore.layout)
|
|
|
|
|
const collapsed = computed(() => appStore.collapsed)
|
|
|
|
|
const showLogo = computed(() => appStore.showLogo)
|
|
|
|
|
const showTags = computed(() => appStore.showTags)
|
|
|
|
|
const showBreadcrumb = computed(() => appStore.showBreadcrumb)
|
|
|
|
|
const showHamburger = computed(() => appStore.showHamburger)
|
|
|
|
|
const showScreenfull = computed(() => appStore.showScreenfull)
|
|
|
|
|
const showUserInfo = computed(() => appStore.showUserInfo)
|
|
|
|
|
const showNavbar = computed(() => appStore.showNavbar)
|
|
|
|
|
// const fixedNavbar = computed(() => appStore.fixedNavbar)
|
|
|
|
|
// const fixedTags = computed(() => appStore.fixedTags)
|
|
|
|
|
const fixedHeader = computed(() => appStore.fixedHeader)
|
|
|
|
|
|
|
|
|
|
const classObj = computed(() => {
|
|
|
|
|
const obj = {}
|
|
|
|
|
obj[`app__wrap--${layout.value}`] = true
|
|
|
|
|
return obj
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
function setCollapsed(collapsed: boolean): void {
|
|
|
|
|
appStore.SetCollapsed(collapsed)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
classObj,
|
|
|
|
|
layout,
|
|
|
|
|
collapsed,
|
|
|
|
|
showLogo,
|
|
|
|
|
showTags,
|
|
|
|
|
showBreadcrumb,
|
|
|
|
|
showHamburger,
|
|
|
|
|
showScreenfull,
|
|
|
|
|
showUserInfo,
|
|
|
|
|
showNavbar,
|
|
|
|
|
fixedHeader,
|
|
|
|
|
// fixedNavbar,
|
|
|
|
|
// fixedTags,
|
|
|
|
|
setCollapsed
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
.app__wrap {
|
|
|
|
|
position: relative;
|
|
|
|
|
height: 100%;
|
|
|
|
|
width: 100%;
|
|
|
|
|
.sidebar__wrap {
|
|
|
|
|
position: fixed;
|
|
|
|
|
width: @menuWidth;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
height: 100%;
|
|
|
|
|
transition: width 0.2s;
|
|
|
|
|
}
|
|
|
|
|
.sidebar__wrap--collapsed {
|
|
|
|
|
width: @menuMinWidth;
|
|
|
|
|
@{deep}(.anticon-item) {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.main__wrap {
|
|
|
|
|
position: absolute;
|
|
|
|
|
width: calc(~"100% - @{menuWidth}");
|
|
|
|
|
height: 100%;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: @menuWidth;
|
|
|
|
|
transition: all 0.2s;
|
|
|
|
|
z-index: 1;
|
|
|
|
|
.header__wrap {
|
|
|
|
|
transition: all 0.2s;
|
|
|
|
|
.navbar__wrap {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
height: @navbarHeight;
|
|
|
|
|
padding: 0 20px 0 15px;
|
|
|
|
|
position: relative;
|
|
|
|
|
background: @contentBg;
|
|
|
|
|
&:after {
|
|
|
|
|
content: "";
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 1px;
|
|
|
|
|
border-top: 1px solid #d8dce5;
|
|
|
|
|
position: absolute;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
}
|
|
|
|
|
@{deep}(.hover-container) {
|
|
|
|
|
transition: background 0.2s;
|
|
|
|
|
height: 100%;
|
|
|
|
|
line-height: @navbarHeight + 5px;
|
|
|
|
|
padding: 0 5px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
&:hover {
|
|
|
|
|
background: #f6f6f6;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.navbar__wrap--right {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
height: @navbarHeight;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0;
|
|
|
|
|
right: 20px;
|
|
|
|
|
@{deep}(.screenfull-container),
|
|
|
|
|
@{deep}(.user-container) {
|
|
|
|
|
line-height: @navbarHeight !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// content样式
|
|
|
|
|
.main__wrap--content {
|
|
|
|
|
height: 100%;
|
|
|
|
|
@{deep}(.el-scrollbar__wrap) {
|
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// content样式
|
|
|
|
|
}
|
|
|
|
|
.main__wrap--collapsed {
|
|
|
|
|
width: calc(~"100% - @{menuMinWidth}");
|
|
|
|
|
left: @menuMinWidth;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 经典模式
|
|
|
|
|
.app__wrap--Classic {
|
|
|
|
|
.main__wrap--fixed--all {
|
|
|
|
|
margin-top: @navbarHeight + @tagsViewHeight !important;
|
|
|
|
|
height: calc(~"100% - @{navbarHeight} - @{tagsViewHeight}") !important;
|
|
|
|
|
}
|
|
|
|
|
.main__wrap--fixed--nav {
|
|
|
|
|
margin-top: @navbarHeight !important;
|
|
|
|
|
height: calc(~"100% - @{navbarHeight}") !important;
|
|
|
|
|
}
|
|
|
|
|
.main__wrap--fixed--tags {
|
|
|
|
|
margin-top: @tagsViewHeight !important;
|
|
|
|
|
height: calc(~"100% - @{tagsViewHeight}") !important;
|
|
|
|
|
}
|
|
|
|
|
.header__wrap--fixed {
|
|
|
|
|
position: fixed !important;
|
|
|
|
|
width: calc(~"100% - @{menuWidth}") !important;
|
|
|
|
|
top: 0 !important;
|
|
|
|
|
left: @menuWidth !important;
|
|
|
|
|
z-index: 200;
|
|
|
|
|
}
|
|
|
|
|
.header__wrap--collapsed {
|
|
|
|
|
width: calc(~"100% - @{menuMinWidth}") !important;
|
|
|
|
|
left: @menuMinWidth !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|