<template>
|
<div class="topMenu">
|
<div class="topHeader"></div>
|
<div class="headerTitle">
|
<!-- <p class="textp1">管道基础大数据平台</p>
|
<p class="textp2">Pipeline basic big data platform</p> -->
|
</div>
|
<div class="rightWrapper">
|
<!-- <div class="rightMenu">
|
|
</div>
|
<div class="rightUser">
|
<div
|
@click="logOut"
|
class="topdiv topUser"
|
>
|
<div class="userImage user1"></div>
|
<div class="userText">
|
<span>{{ this.$store.state.uname }}</span>
|
<el-link class="elLink">{{ $t('common.logout') }}</el-link>
|
</div>
|
</div>
|
<div
|
@click="switchLang"
|
class="topdiv botLingo"
|
>
|
<div class="userImage user2"></div>
|
<div class="userText">Language</div>
|
</div>
|
<color-change></color-change>
|
</div> -->
|
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { logout, selectMenuRecursive } from '@/api/api';
|
import { removeToken, getToken } from '@/utils/auth';
|
import customElMenu from '../components/customElMenu.vue';
|
import { queryMenuTree, getPerms } from '../api/api';
|
import colorChange from '../views/maintenance/colorChange.vue';
|
import { containsCoordinate } from 'ol/extent';
|
import Vue from 'vue';
|
export default {
|
name: 'navMenu',
|
//import引入的组件需要注入到对象中才能使用
|
components: {
|
customElMenu,
|
colorChange,
|
},
|
data() {
|
return {
|
themeColor: true,
|
oriData: [], //原始树数据
|
dirData: [], //el树数据
|
newData: [], //拖动后数据
|
lang: 'zh',
|
activeIndex: '/',
|
menuList: [],
|
editTitle: '',
|
showPopover: false,
|
showEditInfoWrapper: false,
|
showEdit: false,
|
editMenu: false,
|
editCatalogue: false,
|
editUnit: false,
|
itemdetail: {},
|
formLabelWidth: '70px',
|
count: 5,
|
changeSelectStyle: null,
|
changeliSelect: null,
|
changeSelectdiv: false,
|
listMenu: [],
|
showFlag: null,
|
};
|
},
|
created() { },
|
mounted() {
|
this.getMenuTree();
|
},
|
computed: {},
|
methods: {
|
async getCookies() {
|
var boolean = this.getTimeCookies();
|
if (boolean != true) {
|
this.$router.push('/login');
|
return;
|
}
|
if (this.$store.state.permsEntity.length == 0) {
|
const data = await getPerms();
|
this.$store.state.permsEntity = data.result;
|
}
|
this.$store.state.uname = JSON.parse(
|
localStorage.getItem('LFToken')
|
).uname;
|
this.$router.push('/');
|
},
|
getTimeCookies() {
|
var time1 = new Date(JSON.parse(localStorage.getItem('LFToken')).time);
|
var time2 = new Date();
|
if (time2 > time1) {
|
return false;
|
} else {
|
return true;
|
}
|
},
|
//主题切换
|
setThemeColors() { },
|
closeAllChildren() {
|
for (var i in this.listMenu) {
|
let newItem = this.listMenu[i];
|
newItem.show = false;
|
Vue.set(this.listMenu, i, newItem);
|
}
|
},
|
//鼠标移入菜单事件
|
setMenuMove(index, item) {
|
this.closeAllChildren();
|
if (item.perms != null) {
|
this.$router.push(item.url);
|
if (this.showFlag != null) {
|
this.setShowFalseDiv(false);
|
this.changeliSelect = '%%';
|
this.showFlag = null;
|
}
|
} else {
|
if (this.showFlag != index) {
|
this.showFlag = index;
|
this.setShowFalseDiv(true);
|
} else {
|
let newItem = this.listMenu[index];
|
newItem.show = !newItem.show;
|
Vue.set(this.listMenu, index, newItem);
|
}
|
}
|
|
this.changeSelectStyle = index;
|
},
|
|
setShowFalseDiv(bolean) {
|
var index = this.showFlag;
|
let newItem = this.listMenu[index];
|
newItem.show = bolean;
|
Vue.set(this.listMenu, index, newItem);
|
},
|
setLiClick(res) {
|
this.changeliSelect = res.cnName;
|
if (res.url.indexOf('http') != -1) {
|
if (this.$store.reporturl == null) {
|
this.$store.reporturl = res.url;
|
this.$router.push('/WareInspection');
|
} else {
|
this.$bus.$emit('changeNaveUrl', res.url);
|
}
|
} else {
|
this.$store.reporturl = null;
|
this.$router.push(res.url);
|
this.$store.commit('currentPerms', res.perms);
|
}
|
this.closeAllChildren();
|
},
|
async getMenuTree() {
|
this.getCookies();
|
const data = await queryMenuTree();
|
var that = this;
|
if (data.code == 200) {
|
if (data.result.length != 0) {
|
let menuLists = data.result.filter((value) => {
|
return value.pid == 1;
|
});
|
|
that.menuList = menuLists;
|
|
that.setMenuTree(menuLists);
|
} else {
|
alert('暂无菜单栏数据');
|
}
|
}
|
},
|
async setMenuTree(res) {
|
|
for (var i in res) {
|
res[i].checkClass = res[i].css + '1';
|
res[i].show = false; //控制显隐
|
if (res[i].perms == null) {
|
const result = await selectMenuRecursive({ name: res[i].cnName });
|
res[i].children = result.result.filter((value) => {
|
return value.pid == res[i].id;
|
});
|
this.listMenu.push(res[i]);
|
this.changeSelectStyle = this.listMenu.length - 1;
|
// var strartMneu = res[i].children[0];
|
// this.$store.commit('currentPerms', strartMneu.perms);
|
// this.changeliSelect = strartMneu.cnName;
|
// this.$bus.$emit('currentPerms', strartMneu.perms);
|
} else {
|
this.listMenu.push(res[i]);
|
}
|
}
|
},
|
treeData(source) {
|
let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
|
// console.log(cloneData);
|
if (cloneData.length != 0) {
|
return cloneData.filter((father) => {
|
// 循环所有项
|
let branchArr = cloneData.filter((child) => father.id == child.pid); // 对比ID,分别上下级菜单,并返回数据
|
branchArr.length > 0 ? (father.children = branchArr) : ''; // 给父级添加一个children属性,并赋值
|
// 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 a.c.d 也是=2;
|
// 由此循环多次后,就能形成相应的树形数据结构
|
return father.pid == 1; // 返回一级菜单
|
});
|
} else {
|
alert('暂无菜单栏数据');
|
}
|
},
|
logOut() {
|
this.$confirm('确认是否退出登录?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(async () => {
|
const data = await logout({ token: getToken() });
|
// console.log(data);
|
if (data.code != 200) {
|
return this.$message.error('退出登录失败');
|
}
|
removeToken();
|
this.$router.push('/login');
|
this.$message({
|
message: '退出登录成功',
|
type: 'success',
|
});
|
})
|
.catch(() => {
|
this.$message({
|
type: 'info',
|
message: '已取消',
|
});
|
});
|
},
|
switchLang() {
|
//当前en
|
if (this.lang == 'en') {
|
//语言换成zh
|
this.lang = 'zh';
|
//菜单换为zh
|
this.$store.commit('changeLang', 'zh');
|
//i18换成zh
|
this.$i18n.locale = this.lang;
|
}
|
//当前zh
|
else {
|
this.lang = 'en';
|
this.$i18n.locale = this.lang;
|
this.$store.commit('changeLang', 'en'); //传递点击的节点
|
}
|
},
|
handleselect(index, indexPath, e) {
|
// console.log(e.$attrs.perms);
|
this.$store.commit('currentPerms', e.$attrs.perms.perms);
|
if (Window.ws != null) {
|
Window.ws.close();
|
Window.ws.onclose = () => {
|
console.log('服务器关闭');
|
};
|
Window.ws = null;
|
}
|
|
if (index.indexOf('http') != -1) {
|
this.$router.push('/databaseMonitoring');
|
this.$store.commit('getIframe', index);
|
} else if (isNaN(Number(index))) {
|
this.$router.push(index);
|
}
|
},
|
},
|
watch: {
|
$route() {
|
let str = this.$route.path;
|
if (str[0] == '/') {
|
this.activeIndex = str.slice(1);
|
}
|
},
|
},
|
created() {
|
this.$store.reporturl = null;
|
let str = this.$route.path;
|
if (str[0] == '/') {
|
this.activeIndex = str.slice(1);
|
}
|
},
|
};
|
</script>
|
<style lang="less" scoped>
|
//@import url(); 引入公共css类
|
.topMenu {
|
width: 100%;
|
height: 100%;
|
background-image: linear-gradient(rgb(34, 33, 33), rgb(27, 31, 78));
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
// .logo {
|
// width: 80px;
|
// height: 80px;
|
// // margin-left: 30px;
|
// // margin-top: 33px;
|
// // background: url('../assets/img/图层 34.png') no-repeat 100% 100%;
|
// }
|
// .rightWrapper {
|
// width: 70%;
|
// height: 100%;
|
// display: flex;
|
// .menu {
|
// height: 100%;
|
// width: 80%;
|
// background-color: rgb(120, 121, 120);
|
// ul {
|
// display: flex;
|
// justify-content: space-around;
|
// li {
|
// width: 120px;
|
// height: 120px;
|
// background: #bfa;
|
// }
|
// }
|
// }
|
|
// .userInfo {
|
// background-color: pink;
|
|
// // width: 138px;
|
// font-size: 16px;
|
// font-family: Microsoft YaHei;
|
// font-weight: 400;
|
// color: #fcfcfc;
|
// // display: flex;
|
// // justify-content: space-between;
|
// // align-items: center;
|
// // cursor: pointer;
|
// }
|
|
.headerTitle {
|
position: absolute;
|
width: 323px;
|
height: 70px;
|
border: 1px solid red;
|
// background: url("../assets/img/LOGO.png") no-repeat center;
|
// .textp1 {
|
// font-size: 36px;
|
// font-family: Microsoft YaHei;
|
// font-weight: bold;
|
// color: #ffffff;
|
// background: linear-gradient(0deg, #79a8ff 0%, #ffffff 100%);
|
// -webkit-background-clip: text;
|
// -webkit-text-fill-color: transparent;
|
// }
|
// .textp2 {
|
// font-size: 9px;
|
// font-family: Microsoft YaHei;
|
// font-weight: 300;
|
// color: #ffffff;
|
// display: flex;
|
// background: linear-gradient(0deg, #79a8ff 0%, #ffffff 100%);
|
// -webkit-background-clip: text;
|
// -webkit-text-fill-color: transparent;
|
// }
|
}
|
.rightWrapper {
|
border: 1px solid red;
|
height: 80px;
|
position: absolute;
|
// .rightMenu {
|
// height: 100%;
|
// float: left;
|
// margin-right: 40px;
|
|
// .menu_ul {
|
// list-style: none;
|
// }
|
// .menu_ul li {
|
// float: left;
|
// margin-right: 70px;
|
// }
|
// .menulabel {
|
// font-size: 19px;
|
// font-family: Source Han Sans CN;
|
// font-weight: 500;
|
// color: #ffffff;
|
// }
|
// .changeStyle {
|
// color: #fec801;
|
// }
|
// .menuImage {
|
// width: 70px;
|
// height: 70px;
|
// }
|
|
// }
|
// .rightUser {
|
// height: 100%;
|
// float: left;
|
// min-width: 130px;
|
// display: flex;
|
// flex-direction: column;
|
// .topdiv {
|
// width: 100%;
|
// height: 30px;
|
|
// margin-top: 10px;
|
// line-height: 30px;
|
// .userImage {
|
// width: 30px;
|
// height: 30px;
|
// float: left;
|
// margin-right: 10px;
|
// }
|
// .user1 {
|
// background: url("../assets/img/user.png") no-repeat;
|
// background-size: 100% 100%;
|
// }
|
// .user2 {
|
// background: url("../assets/img/EN.png") no-repeat;
|
// background-size: 100% 100%;
|
// }
|
// .userText {
|
// font-size: 15px;
|
// width: 150px;
|
// font-family: Microsoft YaHei;
|
// font-weight: 400;
|
// color: #ffffff;
|
// text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.35);
|
// }
|
// }
|
// .topUser {
|
// flex-shrink: 0;
|
// }
|
// .botLingo {
|
// flex-shrink: 1;
|
// }
|
// }
|
}
|
.elLink {
|
margin-left: 5px;
|
font-size: 15px;
|
margin-bottom: 4px;
|
}
|
/deep/.el-link.el-link--default:hover {
|
color: #409eff !important;
|
}
|
/deep/ .el-link.el-link--default {
|
color: white !important;
|
}
|
/deep/ ul.el-menu-vertical-demo.el-menu {
|
// 添加背景颜色
|
background-image: rgba(255, 255, 255, 0.1) !important;
|
}
|
|
/deep/ li.el-menu-item.is-active {
|
// 添加样式,只针对导航栏首菜单
|
background-color: transparent;
|
}
|
.el-submenu /deep/.el-submenu__title:hover {
|
color: #2e95fb !important;
|
background: linear-gradient(#112f57, #122344) !important;
|
}
|
.secondMenuDiv {
|
position: absolute;
|
z-index: 1024;
|
margin-top: 10px;
|
border: 1px solid white;
|
border-radius: 5px;
|
div {
|
line-height: 30px;
|
background: #303030;
|
padding: 10px;
|
font-size: 18px;
|
font-family: Microsoft YaHei;
|
font-weight: 400;
|
color: #ffffff;
|
line-height: 49px;
|
width: 100px;
|
}
|
|
.changeLiStyle {
|
color: #fec801;
|
background: linear-gradient(180deg, #002992, #080472);
|
}
|
}
|
}
|
</style>
|