济菏高速业务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

339 lines
8.9 KiB

1 year ago
<template>
1 year ago
<div>
<template v-if="sideTheme == 'theme-dark'|| sideTheme == 'theme-light'">
<div :class="classObj" class="app-wrapper">
<div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
<template v-if="topNav == false">
<sidebar class="sidebar-container" />
<div :class="{hasTagsView:needTagsView}" class="main-container" :style="topNav?'':'height:100vh;'">
<div :class="{'fixed-header':fixedHeader}">
<navbar />
<tags-view v-if="needTagsView" />
</div>
<app-main />
<right-panel>
<settings />
</right-panel>
</div>
</template>
<template v-else>
<div class="topNav_head" style="height:72px;">
<div class="screen_view_top_l_left" style="width: 10%;height:100%;">{{ timeDate2 }}</div>
<sidebar class="sidebar-container index_menu blue_index_menu" style="width: 80% !important;height:100%;position: relative;box-shadow:unset;" />
<navbar :class="sideTheme=='theme-light'?'theme-light-navbar':'theme-dark-navbar'" style="width: 10%!important;height:100%;" />
<div class="nav_top_img" style="width:24vw;height:100%;">
<div class="screen_view_top_c_img">
<img class="screen_view_top_c_img_log" src="@/assets/images/screen/log.png" alt="">
<img class="screen_view_top_c_img_txt" src="@/assets/images/screen/toptxt.png" alt="">
</div>
</div>
</div>
1 year ago
<div :class="{hasTagsView:needTagsView}" class="main-container" :style="topNav?'margin-left:0;height:92.4vh;':''">
1 year ago
<div :class="{'fixed-header':fixedHeader}"></div>
<!-- 面包屑导航 -->
<!-- <breadcrumb ref="Breadcrumb" id="breadcrumb-container" class="breadcrumb-container" style="margin-left:20px;" /> -->
<app-main />
<right-panel>
<settings />
</right-panel>
</div>
</template>
1 year ago
</div>
1 year ago
</template>
<template v-else>
<div :class="classObj" class="app-wrapper">
<div class="topNavHeadBlue" :style="'background-image:url('+navBg+');'">
<sidebarblue class="sidebar-container index_menu blue_index_menu" :style="is_weather == 'true'?'width: 90% !important;':'width: 90% !important;'" />
<navbar class="theme-blue-navbar" style="width: 10%!important;height:78px;" />
</div>
<div :class="{hasTagsView:needTagsView}" class="main-container" style="margin-left:0;">
<div :class="{'fixed-header':fixedHeader}"></div>
<breadcrumb ref="Breadcrumb" id="breadcrumb-container" class="breadcrumb-container" style="margin-top:20px;margin-left:20px;" />
<app-main style="min-height: calc(100vh - 125px);" />
<right-panel>
<settings />
</right-panel>
</div>
</div>
</template>
1 year ago
</div>
</template>
<script>
1 year ago
import Breadcrumb from '@/components/Breadcrumb'
1 year ago
import RightPanel from '@/components/RightPanel'
1 year ago
import TopNav from '@/components/TopNav'
import { AppMain, Navbar, Settings, Sidebar, TagsView, Sidebarblue } from './components'
1 year ago
import ResizeMixin from './mixin/ResizeHandler'
import { mapState } from 'vuex'
import variables from '@/assets/styles/variables.scss'
1 year ago
import axios from 'axios'
import navBg from '@/assets/images/nav_bg.png'
1 year ago
export default {
name: 'Layout',
components: {
1 year ago
Sidebarblue,
Breadcrumb,
1 year ago
AppMain,
Navbar,
RightPanel,
Settings,
Sidebar,
1 year ago
TagsView,
TopNav
},
data() {
return {
// 天气
weather_weather: '',
// 天气图标
weather_weatherimg: '',
navBg: navBg,
is_weather: null,
timeDate1: '',
timeDate2: '',
timer: ''
}
1 year ago
},
mixins: [ResizeMixin],
computed: {
...mapState({
theme: state => state.settings.theme,
sideTheme: state => state.settings.sideTheme,
sidebar: state => state.app.sidebar,
device: state => state.app.device,
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'
}
},
variables() {
1 year ago
return variables
},
topNav() {
return this.$store.state.settings.topNav
}
},
created() {
this.currentTime()
},
beforeDestroy() {
if (this.timer) {
clearInterval(this.timer)
1 year ago
}
},
methods: {
1 year ago
getWeather() {
let city = 'city=济南'
let word = 'tianqi'
const key = 'key=0c7ebab2461621aeb2c34b3a82e4c702'
const header = 'http://api.tianapi.com/txapi'
const url = `${header}/${word}/?${key}&${city}`
axios.get(url).then(res => {
const data = res.data.newslist[0]
this.weather_weather = data.area + ':' + data.weather + data.lowest + data.wind + data.windsc
this.weather_weatherimg = require('@/assets/weather/' + data.weatherimg + '')
})
},
1 year ago
handleClickOutside() {
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
1 year ago
},
// 动态实时获取当前时间
getTimeFn() {
// const time = +new Date() // 获取当前时间戳
// 传入时间
const date = new Date()
const Y = date.getFullYear() // 年
const M = date.getMonth() + 1 // 月
const D = date.getDate() // 日
const h = date.getHours() // 小时
const m = date.getMinutes() // 分钟
const s = date.getSeconds() // 秒数
this.timeDate1 = Y + '-' + getZero(M) + '-' + getZero(D)
this.timeDate2 = getZero(h) + ': ' + getZero(m) + ': ' + getZero(s)
function getZero(num) {
// 个位数前补0
if (parseInt(num) < 10) {
num = '0' + num
}
return num
}
},
currentTime() {
this.timer = setInterval(this.getTimeFn, 1000)
1 year ago
}
},
watch: {
sideTheme(val) {
1 year ago
document.getElementsByTagName('body')[0].className = val
1 year ago
}
},
mounted() {
1 year ago
//this.getWeather()
document.getElementsByTagName('body')[0].className = this.sideTheme
this.is_weather = systemConfig.navBarShow(systemConfig.systemType)['weather']
//console.log(this.is_weather,'1231232131312312');
}
1 year ago
}
</script>
<style lang="scss" scoped>
1 year ago
@import '~@/assets/styles/mixin.scss';
@import '~@/assets/styles/variables.scss';
// 区分不同主题下导航栏颜色
.theme-light-navbar {
background-color: white;
}
.theme-dark-navbar {
background-color: #1d58a9;
}
.app-wrapper {
@include clearfix;
position: relative;
height: 100%;
width: 100%;
1 year ago
// background-color: #11232a;
1 year ago
// overflow: hidden;
&.mobile.openSidebar {
1 year ago
position: fixed;
top: 0;
}
1 year ago
}
1 year ago
1 year ago
.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% - #{$base-sidebar-width});
transition: width 0.28s;
}
1 year ago
1 year ago
.hideSidebar .fixed-header {
width: calc(100% - 54px);
}
.mobile .fixed-header {
width: 100%;
}
.index_menu {
display: flex;
height: 78px;
position: relative;
box-shadow: unset;
}
.blue_index_menu {
}
.theme-dark .topNav_head {
display: flex;
background-image: url('~@/assets/images/screen/screenTop.png') !important;
background-size: 100% 100%;
background-repeat: no-repeat;
background-position: center;
position: relative;
z-index: 1;
}
.theme-light .topNav_head {
display: flex;
background-color: #ffffff;
}
.topNavHeadBlue {
display: flex;
box-shadow: 2px 0 6px rgb(0 21 41 / 35%);
background-size: 100% 100%;
}
.topNavHeadBlue .index_menu .theme-blue {
background-color: unset !important;
}
.theme-blue-navbar {
box-shadow: unset;
}
.theme-blue-navbar {
background: unset;
}
.weather p {
color: white;
height: 78px;
line-height: 78px;
text-indent: 10px;
white-space: nowrap;
font-size: 14px;
}
.weather img {
width: 25px;
height: 25px;
}
.weather {
display: flex;
justify-content: center;
align-items: center;
width: 15%;
}
.theme-blue-box {
height: 100%;
}
.theme-light,
.theme-dark {
.weather {
margin-right: 2%;
}
}
.theme-light {
.weather {
margin-right: 2%;
p {
color: #000000;
}
1 year ago
}
1 year ago
}
.nav_top_img {
position: absolute;
left: 50%;
top: 0%;
transform: translateX(-50%);
}
.screen_view_top_c_img {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.screen_view_top_c_img_log {
width: 3rem;
height: 2.25rem;
}
.screen_view_top_c_img_txt {
width: 23.2644rem;
height: 1.4825rem;
margin-left: 0.5rem;
}
.screen_view_top_l_left {
width: 25%;
height: 100%;
display: flex;
align-items: center;
color: #fff;
font-size: 1.25rem;
padding-left: 2vw;
}
1 year ago
</style>