You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
5.3 KiB
Vue

<template>
<div>
<div class="title">智慧物联监控平台</div>
<div>
<div v-if="isIndex" :class="`menu ${nowMenu==='1'? 'menuClick' :''}`" style="left: 2%"
@click="toLink('index','1')">
<span>
监控主页
</span>
</div>
<div :class="`menu ${nowMenu==='2'? 'menuClick' :''}`" style="left: 9%">
<el-dropdown trigger="click" @command="dropdownLink">
<span class="el-dropdown-link">
{{ name }} <i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="i in selectSecnesList" :key="i.sceneId"
:command="{router:i.router,name:i.sceneName,sceneId:i.sceneId}">{{
i.sceneName
}}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div :class="`menu ${nowMenu==='3'? 'menuClick' :''}`" style="left: 16%" @click="toLink('equipment','3')">
<span>
设备监测
</span>
</div>
<div :class="`menu ${nowMenu==='4'? 'menuClick' :''}`" style="left: 23%"
@click="toLink('equipmentMonitoring','4')">
<span>
传感器汇总
</span>
</div>
</div>
<div class="right">
<span>
管 理
</span>
</div>
<div class="rightImg" @click="toIndex">
</div>
</div>
</template>
<script>
import {
selectSecnes
} from '@/api/board/nav'
export default {
name: 'BoardTopNav',
data() {
return {
selectSecnesList: [],
name: '智慧场景',
isIndex: true,
sceneId: this.$store.getters.sceneId,
nowMenu: '1'
}
},
// props: {
// nowMenu: {
// type: String,
// default: '1'
// },
// },
async mounted() {
if (this.$route.name === 'SmartScene' || this.$route.name === 'GPS' || this.$route.name === 'index' || this.$store.getters.sceneId) {
} else {
if (this.$store.state.user.permissions.includes('business:monitor:index') || this.$store.state.user.permissions.includes('*:*:*')) {
await this.$router.replace({path: "/board/index"});
} else {
await this.$router.replace({path: "/board/smartScene"});
this.$router.push({path: '/board/smartScene'})
}
}
await this.setSelectSecnes()
if (this.$route.name === 'SmartScene' || this.$route.name === 'GPS') {
if (this.$route.query?.name) {
this.name = this.$route.query?.name
} else {
let routerData = this.selectSecnesList.find(e => e.sceneId === this.sceneId)
await this.$router.push({
path: "/board/" + (routerData.router || 'smartScene'),
query: {name: routerData.sceneName}
});
}
}
if (this.$store.state.user.permissions.includes('business:monitor:index') || this.$store.state.user.permissions.includes('*:*:*')) {
this.isIndex = true
} else {
this.isIndex = false
}
},
methods: {
async setSelectSecnes() {
const {data} = await selectSecnes()
this.selectSecnesList = data
if (!this.$store.getters.sceneId) {
this.sceneId = data.find(e => e.defaultFlag === '1').sceneId
this.name = data.find(e => e.defaultFlag === '1').sceneName
}
if (this.$route.query.name) {
this.sceneId = data.find(e => e.sceneName === this.$route.query.name).sceneId
this.name = data.find(e => e.sceneName === this.$route.query.name).sceneName
}
if (this.name === '智慧场景' && this.$store.getters.sceneId) {
this.name = data.find(e => e.sceneId === this.$store.getters.sceneId).sceneName
}
await this.$store.dispatch('app/setSceneId', this.sceneId)
},
toLink(e, nowMenu) {
this.nowMenu = nowMenu
this.$router.replace({path: "/board/" + e});
},
async dropdownLink(e,) {
this.nowMenu = '2'
await this.$store.dispatch('app/setSceneId', e.sceneId)
this.name = e.name
await this.$router.replace({path: "/board/" + (e.router || 'smartScene'), query: {name: e.name}});
},
toIndex() {
this.$router.replace({path: "/index"});
}
}
};
</script>
<style lang="less" scoped>
.menu {
background-image: url("~@/assets/board/common/subheadClick1.png");
background-repeat: no-repeat;
background-size: 100% 100%;
position: absolute;
width: 8vw;
height: 1.66vw;
top: 3.8%;
line-height: 1.66vw;
font-size: 0.8vw;
color: #d4d4d4;
text-align: center;
}
.menu .el-dropdown {
font-size: 0.8vw;
color: #d4d4d4;
}
.menuClick {
background-image: url("~@/assets/board/common/subheadClick.png");
color: #f3f3f3;
}
.title {
position: absolute;
top: 3%;
left: 50%;
font-size: 2vw;
letter-spacing: 12px;
transform: translate(-50%, -50%);
color: #f6f6f6;
}
.rightImg {
transform: rotateX(180deg);
background-image: url('~@/assets/board/common/subheadClick1.png');
background-repeat: no-repeat;
background-size: 100% 100%;
position: absolute;
width: 8vw;
height: 1.66vw;
top: 3.8%;
left: 71%;
}
.right {
position: absolute;
width: 8vw;
height: 1.66vw;
top: 3.8%;
left: 71%;
line-height: 1.66vw;
font-size: 0.8vw;
color: #d4d4d4;
text-align: center;
}
</style>