|
<template> |
|
<el-container class="app-wrapper" :class="{ mobile: isMobile }"> |
|
<div v-show="isMobile && !hideSidebar" class="drawer-bg" @click="hideSidebar = true"></div> |
|
<el-aside width="230px" class="sidebar-container" :class="{ 'hide-sidebar': hideSidebar }"> |
|
<div class="logo-container"> |
|
<router-link to="/"> |
|
<img class="sidebar-logo" src="../assets/logo.svg" width="100" alt="logo"/> |
|
<h1 class="sidebar-title">SVS SYSTEM</h1> |
|
</router-link> |
|
</div> |
|
<div class="version">v1.0.0</div> |
|
|
|
<SideBar></SideBar> |
|
</el-aside> |
|
<el-main> |
|
<el-button |
|
v-show="isMobile" |
|
class="menu-button" |
|
icon="Fold" |
|
@click="hideSidebar = false" |
|
></el-button> |
|
<keep-alive> |
|
<router-view></router-view> |
|
</keep-alive> |
|
</el-main> |
|
</el-container> |
|
</template> |
|
|
|
<script> |
|
import SideBar from './SideBar.vue' |
|
export default { |
|
name: 'LayoutFrame', |
|
components: { |
|
SideBar |
|
}, |
|
data() { |
|
return { |
|
isMobile: false, |
|
hideSidebar: true |
|
} |
|
}, |
|
mounted() { |
|
window.addEventListener('resize', this.onResize) |
|
this.onResize() |
|
}, |
|
beforeUnmount() { |
|
window.removeEventListener('resize', this.onResize) |
|
}, |
|
methods: { |
|
onResize() { |
|
this.isMobile = document.body.clientWidth <= 992 |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style> |
|
html { |
|
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', |
|
'\5FAE \8F6F \96C5 \9ED1 ', '微软雅黑', Arial, sans-serif; |
|
} |
|
|
|
html, |
|
body, |
|
#app, |
|
.app-wrapper, |
|
.sidebar-container { |
|
height: 100%; |
|
} |
|
|
|
body { |
|
margin: 0; |
|
background-color: #f6f8fa; |
|
} |
|
|
|
a, |
|
a:focus, |
|
a:hover { |
|
text-decoration: none; |
|
} |
|
|
|
.drawer-bg { |
|
background: #000; |
|
opacity: 0.3; |
|
width: 100%; |
|
top: 0; |
|
height: 100%; |
|
position: absolute; |
|
z-index: 999; |
|
} |
|
|
|
.sidebar-container { |
|
background-color: #304156; |
|
overflow: hidden; |
|
} |
|
|
|
.app-wrapper.mobile .sidebar-container { |
|
position: fixed; |
|
top: 0; |
|
left: 0; |
|
transition-duration: 0.3s; |
|
z-index: 1001; |
|
} |
|
|
|
.app-wrapper.mobile .sidebar-container.hide-sidebar { |
|
pointer-events: none; |
|
transition-duration: 0.3s; |
|
transform: translate3d(-230px, 0, 0); |
|
} |
|
|
|
.logo-container { |
|
width: 100%; |
|
height: 50px; |
|
line-height: 50px; |
|
background: #2b2f3a; |
|
text-align: center; |
|
} |
|
|
|
.sidebar-logo { |
|
width: 32px; |
|
height: 32px; |
|
vertical-align: middle; |
|
margin-right: 12px; |
|
} |
|
|
|
.sidebar-title { |
|
display: inline-block; |
|
margin: 0; |
|
color: #fff; |
|
font-weight: 600; |
|
line-height: 50px; |
|
font-size: 14px; |
|
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; |
|
vertical-align: middle; |
|
} |
|
|
|
.sidebar-container .version { |
|
height: 30px; |
|
background: #2b2f3a; |
|
color: #aaa; |
|
font-weight: 600; |
|
line-height: 30px; |
|
font-size: 14px; |
|
vertical-align: middle; |
|
text-align: center; |
|
} |
|
|
|
.sidebar-container .is-horizontal { |
|
display: none; |
|
} |
|
</style> |
|
|