|
@@ -14,11 +14,12 @@
|
|
|
>
|
|
|
<b class="my-icon-home is"></b>
|
|
|
</li>
|
|
|
+ <!--
|
|
|
<li
|
|
|
@click="menuFoldHandle(1)"
|
|
|
v-bind:class="{ isOpened: opened === 'modelLibrary' }"
|
|
|
>
|
|
|
- <b class="my-icon-menuA"></b>
|
|
|
+ <b class="my-icon-model"></b>
|
|
|
</li>
|
|
|
<li
|
|
|
@click="menuFoldHandle(1)"
|
|
@@ -38,18 +39,20 @@
|
|
|
>
|
|
|
<b class="my-icon-menuD"></b>
|
|
|
</li>
|
|
|
- <!-- <li
|
|
|
- @click="menuFoldHandle(1)"
|
|
|
- v-bind:class="{ isOpened: opened === 'systemManagement' }"
|
|
|
- >
|
|
|
- <b class="my-icon-menuE"></b>
|
|
|
- </li>
|
|
|
<li
|
|
|
@click="menuFoldHandle(1)"
|
|
|
v-bind:class="{ isOpened: opened === 'systemManagement' }"
|
|
|
>
|
|
|
<b class="my-icon-menuF"></b>
|
|
|
- </li> -->
|
|
|
+ </li>
|
|
|
+ -->
|
|
|
+ <li
|
|
|
+ v-for="(item, i) in menuItems" :key="i"
|
|
|
+ @click="menuFoldHandle(1)"
|
|
|
+ :class="{ isOpened: opened === item.id }"
|
|
|
+ >
|
|
|
+ <b :class="item.icon"></b>
|
|
|
+ </li>
|
|
|
</ul>
|
|
|
|
|
|
<div class="menuList" v-show="!menuFold">
|
|
@@ -67,9 +70,11 @@
|
|
|
<i class="my-icon-home"></i>
|
|
|
<span>首页</span>
|
|
|
</el-menu-item>
|
|
|
+
|
|
|
+ <!--
|
|
|
<el-submenu :index="menus[1]">
|
|
|
<template slot="title">
|
|
|
- <i class="my-icon-menuA"></i>
|
|
|
+ <i class="my-icon-model"></i>
|
|
|
<span>模型库</span>
|
|
|
</template>
|
|
|
<el-menu-item index="/sensorModel"
|
|
@@ -84,7 +89,7 @@
|
|
|
</el-submenu>
|
|
|
<el-submenu :index="menus[2]">
|
|
|
<template slot="title">
|
|
|
- <i class="my-icon-menuB"></i>
|
|
|
+ <i class="my-icon-algo"></i>
|
|
|
<span>算法库</span>
|
|
|
</template>
|
|
|
<el-menu-item index="/algorithmsLibraryList"
|
|
@@ -96,7 +101,7 @@
|
|
|
</el-submenu>
|
|
|
<el-submenu :index="menus[3]">
|
|
|
<template slot="title">
|
|
|
- <i class="my-icon-menuC"></i>
|
|
|
+ <i class="my-icon-scene"></i>
|
|
|
<span>场景库</span>
|
|
|
</template>
|
|
|
<el-menu-item index="/naturalDrivingScenarioList"
|
|
@@ -119,16 +124,16 @@
|
|
|
</el-submenu>
|
|
|
<el-submenu :index="menus[4]">
|
|
|
<template slot="title">
|
|
|
- <i class="my-icon-menuD"></i>
|
|
|
+ <i class="my-icon-work"></i>
|
|
|
<span>工作管理</span>
|
|
|
</template>
|
|
|
<el-menu-item index="/manualRunProjectList"
|
|
|
>手动运行项目</el-menu-item
|
|
|
>
|
|
|
</el-submenu>
|
|
|
- <!--<el-submenu index="systemManagement">
|
|
|
+ <el-submenu :index="menus[5]">
|
|
|
<template slot="title">
|
|
|
- <i class="my-icon-menuF"></i>
|
|
|
+ <i class="my-icon-system"></i>
|
|
|
<span>系统管理</span>
|
|
|
</template>
|
|
|
<el-menu-item index="/accountManagement"
|
|
@@ -137,9 +142,21 @@
|
|
|
<el-menu-item index="/parameterManagement"
|
|
|
>参数管理</el-menu-item
|
|
|
>
|
|
|
- <el-menu-item index="clusteringManagement"
|
|
|
- >集群管理</el-menu-item>
|
|
|
- </el-submenu>-->
|
|
|
+ <el-menu-item index="/clusteringManagement"
|
|
|
+ >集群管理</el-menu-item>
|
|
|
+ </el-submenu>
|
|
|
+ -->
|
|
|
+
|
|
|
+ <el-submenu v-for="(item, i) in menuItems" :index="item.id" :key="i">
|
|
|
+ <template slot="title">
|
|
|
+ <i :class="item.icon"></i>
|
|
|
+ <span>{{item.name}}</span>
|
|
|
+ </template>
|
|
|
+ <el-menu-item v-for="(item2, i2) in item.children" :index="item2.router" :key="i2">
|
|
|
+ {{item2.name}}
|
|
|
+ </el-menu-item>
|
|
|
+ </el-submenu>
|
|
|
+
|
|
|
</el-menu>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -151,12 +168,18 @@ import { mapState } from "vuex";
|
|
|
|
|
|
export default {
|
|
|
name: "pageMenu",
|
|
|
+ props:{
|
|
|
+ menuItems:{
|
|
|
+ type: Array,
|
|
|
+ default(){return []}
|
|
|
+ }
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
menuFold: false, // menu是否折叠
|
|
|
opened: false,
|
|
|
menus: [
|
|
|
- "/mainPage",
|
|
|
+ "mainPage",
|
|
|
"modelLibrary",
|
|
|
"algorithmsLibrary",
|
|
|
"sceneLibrary",
|
|
@@ -165,7 +188,7 @@ export default {
|
|
|
activeMenu: "mainPage", // 当前menu
|
|
|
expiresTime: '',
|
|
|
toExpiresTime: '',
|
|
|
- tokenTimer: undefined
|
|
|
+ tokenTimer: undefined,
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -178,18 +201,27 @@ export default {
|
|
|
this.$refs.menu.open(menuKind);
|
|
|
}
|
|
|
|
|
|
- //设置一个定时器定时查看过期时间,如果距离过期时间小于5min,则发送refreshToken
|
|
|
- /*
|
|
|
+ //设置一个定时器,定时在距离过期前5min,这个定时器会发送refreshToken请求
|
|
|
+
|
|
|
this.expiresTime = localStorage.getItem('expiresTime')
|
|
|
- this.toExpiresTime = new Date(this.expiresTime).getTime() - new Date().getTime();
|
|
|
- if(this.toExpiresTime < 5*60*1000){
|
|
|
- this.refreshToken()
|
|
|
- }else{
|
|
|
- setInterval(function(){
|
|
|
- let that = this;
|
|
|
- that.checkExpiresTime()
|
|
|
- }, 5*60*1000)
|
|
|
- }*/
|
|
|
+ if(this.expiresTime){
|
|
|
+ this.toExpiresTime = new Date(this.expiresTime).getTime() - new Date().getTime();
|
|
|
+ let that = this;
|
|
|
+ if(this.toExpiresTime < 5*60*1000){
|
|
|
+ this.refreshToken()
|
|
|
+ }else{
|
|
|
+ if(this.toExpiresTime < 24*60*60*1000){ //当过期时间小于一天时才会定时执行,否则会因为过期时间过大无法执行
|
|
|
+ this.tokenTimer = setTimeout(function(){
|
|
|
+ that.refreshToken()
|
|
|
+ }, this.toExpiresTime - 5*60*1000)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch:{
|
|
|
+ activeMenu(newV){
|
|
|
+ console.log(newV)
|
|
|
+ }
|
|
|
},
|
|
|
methods: {
|
|
|
menuFoldHandle(val) {
|
|
@@ -221,6 +253,7 @@ export default {
|
|
|
this.$axios({
|
|
|
method: "post",
|
|
|
url: this.$api.common.refreshToken,
|
|
|
+ noLoading: true,
|
|
|
data: {
|
|
|
refreshToken: localStorage.getItem("refreshToken"),
|
|
|
},
|
|
@@ -233,8 +266,25 @@ export default {
|
|
|
localStorage.setItem("Authorization", Authorization);
|
|
|
localStorage.setItem("refreshToken", refreshToken);
|
|
|
localStorage.setItem("expiresTime", expiresTime);
|
|
|
+
|
|
|
this.expiresTime = expiresTime
|
|
|
this.toExpiresTime = new Date(this.expiresTime).getTime() - new Date().getTime();
|
|
|
+ clearTimeout(this.tokenTimer)
|
|
|
+ if(this.toExpiresTime < 5*60*1000){
|
|
|
+ //this.refreshToken()
|
|
|
+ }else{
|
|
|
+ if(this.toExpiresTime < 24*60*60*1000){
|
|
|
+ this.tokenTimer = setTimeout(function(){
|
|
|
+ let that = this;
|
|
|
+ that.refreshToken()
|
|
|
+ }, this.toExpiresTime - 5*60*1000)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(res.code == 400){ //refreshToken请求返回400则跳回登录页
|
|
|
+ let loginUrl = window.location.origin + '/login'
|
|
|
+ window.location.href = loginUrl
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -328,34 +378,6 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.my-icon-home {
|
|
|
- background: url("../../assets/common/image/menu/home.png") center no-repeat;
|
|
|
-}
|
|
|
-
|
|
|
-.my-icon-menuA {
|
|
|
- background: url("../../assets/common/image/menu/menuA.png") center no-repeat;
|
|
|
-}
|
|
|
-
|
|
|
-.my-icon-menuB {
|
|
|
- background: url("../../assets/common/image/menu/menuB.png") center no-repeat;
|
|
|
-}
|
|
|
-
|
|
|
-.my-icon-menuC {
|
|
|
- background: url("../../assets/common/image/menu/menuC.png") center no-repeat;
|
|
|
-}
|
|
|
-
|
|
|
-.my-icon-menuD {
|
|
|
- background: url("../../assets/common/image/menu/menuD.png") center no-repeat;
|
|
|
-}
|
|
|
-
|
|
|
-.my-icon-menuE {
|
|
|
- background: url("../../assets/common/image/menu/menuE.png") center no-repeat;
|
|
|
-}
|
|
|
-
|
|
|
-.my-icon-menuF {
|
|
|
- background: url("../../assets/common/image/menu/menuF.png") center no-repeat;
|
|
|
-}
|
|
|
-
|
|
|
.menuFold {
|
|
|
li {
|
|
|
display: flex;
|
|
@@ -452,4 +474,32 @@ export default {
|
|
|
bottom: 30px;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.my-icon-home {
|
|
|
+ background: url("../../assets/common/image/menu/home.png") center no-repeat;
|
|
|
+}
|
|
|
+
|
|
|
+.my-icon-model {
|
|
|
+ background: url("../../assets/common/image/menu/menuA.png") center no-repeat;
|
|
|
+}
|
|
|
+
|
|
|
+.my-icon-algo {
|
|
|
+ background: url("../../assets/common/image/menu/menuB.png") center no-repeat;
|
|
|
+}
|
|
|
+
|
|
|
+.my-icon-scene {
|
|
|
+ background: url("../../assets/common/image/menu/menuC.png") center no-repeat;
|
|
|
+}
|
|
|
+
|
|
|
+.my-icon-work {
|
|
|
+ background: url("../../assets/common/image/menu/menuD.png") center no-repeat;
|
|
|
+}
|
|
|
+
|
|
|
+.my-icon-menuE {
|
|
|
+ background: url("../../assets/common/image/menu/menuE.png") center no-repeat;
|
|
|
+}
|
|
|
+
|
|
|
+.my-icon-system {
|
|
|
+ background: url("../../assets/common/image/menu/menuF.png") center no-repeat;
|
|
|
+}
|
|
|
</style>
|