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.
 
 
 
 

122 lines
3.5 KiB

<template>
<div v-loading.fullscreen.lock="loading" :element-loading-text="$t('loading')" :class="['aui-wrapper', { 'aui-sidebar--fold': $store.state.sidebarFold }]">
<template v-if="!loading">
<main-navbar :is-dev="isDev" />
<main-sidebar />
<div class="aui-content__wrapper">
<main-content v-if="!$store.state.contentIsNeedRefresh" />
</div>
</template>
</div>
</template>
<script>
import MainNavbar from './main-navbar'
import MainSidebar from './main-sidebar'
import MainContent from './main-content'
import debounce from 'lodash/debounce'
import { isURL } from '@/utils/validate'
export default {
provide() {
return {
// 刷新
refresh() {
this.$store.state.contentIsNeedRefresh = true
this.$nextTick(() => {
this.$store.state.contentIsNeedRefresh = false
})
}
}
},
components: {
MainNavbar,
MainSidebar,
MainContent
},
data() {
return {
loading: true,
isDev: false
}
},
watch: {
$route: 'routeHandle'
},
created() {
this.isDev = window.SITE_CONFIG['apiURL'].includes('47')
this.windowResizeHandle()
this.routeHandle(this.$route)
Promise.all([
this.getUserInfo(),
this.getPermissions()
]).then(() => {
this.loading = false
})
},
methods: {
// 窗口改变大小.
windowResizeHandle() {
this.$store.state.sidebarFold = document.documentElement.clientWidth <= 992 || false
window.addEventListener('resize', debounce(() => {
this.$store.state.sidebarFold = document.documentElement.clientWidth <= 992 || false
}, 150))
},
// 路由, 监听
routeHandle(route) {
if (!route.meta.isTab) {
return false
}
let tab = {}
let routeName = route.name
const routeMeta = route.meta
if (route.name === 'iframe') {
const url = route.query.url || ''
if (!isURL(url)) {
return false
}
const key = route.query.key || new Date().getTime()
routeName = `${routeName}_${key}`
routeMeta.title = key.toString()
routeMeta.menuId = route.query.menuId || ''
routeMeta.iframeURL = url
}
tab = this.$store.state.contentTabs.filter(item => item.name === routeName)[0]
if (!tab) {
tab = {
...window.SITE_CONFIG.contentTabDefault,
...routeMeta,
name: routeName,
params: { ...route.params },
query: { ...route.query }
}
this.$store.state.contentTabs = this.$store.state.contentTabs.concat(tab)
}
this.$store.state.sidebarMenuActiveName = tab.menuId
this.$store.state.contentTabsActiveName = tab.name
},
// 获取当前登录用户信息
getUserInfo() {
return this.$http.get('/sys/user/info').then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$store.state.user = { ...res.data, name: res.data.realName }
}).catch(() => {})
},
// 获取权限
getPermissions() {
return this.$http.get('/sys/menu/permissions', {
params: {
drgsName: window.localStorage.getItem('identity')
}
}).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
window.SITE_CONFIG.permissions = res.data
}).catch(() => {})
}
}
}
</script>