2022-06-08 14:51:11 +08:00
< template >
< div class = "fullHeight pages" >
< vhead showR = "true" > < / vhead >
<!-- 点击标题跳转项目概况首页 , 菜单导航栏渲染的数据是vuex中的projectManageMenuList -- >
2023-06-26 16:24:12 +08:00
< div
2025-12-17 15:34:38 +08:00
v - if = "
tabsShow &&
( $route . path . indexOf ( '/firm/' ) != - 1 || $route . path . indexOf ( '/page' ) != - 1 )
"
2023-06-26 16:24:12 +08:00
class = "menuBox"
2025-12-17 15:34:38 +08:00
: class = " {
big : $route . path . indexOf ( '/firm/' ) != - 1 || $route . path . indexOf ( '/page' ) != - 1 ,
} "
2023-06-26 16:24:12 +08:00
>
2022-06-08 14:51:11 +08:00
< el-menu
: default - active = "$route.path"
class = "el-menu-demo"
2023-06-26 16:24:12 +08:00
: class = "{ isIframe: isIframe }"
2022-06-08 14:51:11 +08:00
mode = "horizontal"
@ select = "handleSelect"
active - text - color = "#5181F6"
router
>
< div class = "wrapper" ref = "wrapper" >
< div class = "cont" ref = "cont" >
< div
v - for = "(item, index) in $store.state.projectManageMenuList"
: key = "index"
2023-06-26 16:24:12 +08:00
@ click = "clickItem(item)"
class = "menuInnerBox"
v - if = "
company != 'xingxuan' &&
item . target != '_blank' &&
( item . menuName != 'LED大屏显示器' || company != 'nanchang' )
"
2022-06-08 14:51:11 +08:00
>
2023-06-26 16:24:12 +08:00
< el-menu-item
class = "firstLevelMenu"
2022-06-08 14:51:11 +08:00
v - if = "!hasSubMenu(item.menuList)"
: index = "item.modulePath ? item.modulePath : item.path"
>
{ { item . moduleName ? item . moduleName : item . menuName } }
< / el-menu-item >
2025-12-17 15:34:38 +08:00
< el-submenu : index = "item.modulePath ? item.modulePath : item.path" v-else >
2022-06-08 14:51:11 +08:00
< template slot = "title" > { {
item . moduleName ? item . moduleName : item . menuName
} } < / template >
< el-menu-item
: index = "data.path"
v - for = "(data, i) in item.menuList"
: key = "i"
> { { data . menuName } } < / e l - m e n u - i t e m
>
< / el-submenu >
< / div >
< / div >
< / div >
< / el-menu >
2025-12-17 15:34:38 +08:00
2024-04-22 00:24:17 +08:00
<!-- v - show = "$store.state.isShowBackIndex" -- >
< el-button
v - if = "$store.state.userInfo.accountType == 11 && $store.state.selectedGroupSn"
class = "backtoIndex"
type = "primary"
plain
@ click = "backtoIndex()"
size = "mini"
> 返回主菜单 < / e l - b u t t o n
>
2022-06-08 14:51:11 +08:00
< el-button
2024-04-22 00:24:17 +08:00
v - if = "$store.state.userInfo.accountType != 11 && $store.state.isShowBackIndex"
2022-06-08 14:51:11 +08:00
class = "backtoIndex"
type = "primary"
plain
@ click = "backtoIndex()"
size = "mini"
> 返回主菜单 < / e l - b u t t o n
>
< / div >
2023-06-26 16:24:12 +08:00
< div
v - else
class = "menuBox"
2025-12-17 15:34:38 +08:00
: class = " {
big : $route . path . indexOf ( '/firm/' ) != - 1 || $route . path . indexOf ( '/page' ) != - 1 ,
} "
2023-06-26 16:24:12 +08:00
>
2022-06-08 14:51:11 +08:00
< el-menu
: default - active = "$route.path"
class = "el-menu-demo"
2023-06-26 16:24:12 +08:00
: class = "{ isIframe: isIframe }"
2022-06-08 14:51:11 +08:00
mode = "horizontal"
@ select = "handleSelect"
active - text - color = "#5181F6"
router
>
< div class = "wrapper" ref = "wrapper" >
< div class = "cont" ref = "cont" >
< div
2024-10-26 09:14:35 +08:00
v - for = "(item, index) in filterMenuList"
2022-06-08 14:51:11 +08:00
: key = "index"
2023-06-26 16:24:12 +08:00
@ click = "clickItem(item)"
class = "menuInnerBox"
2022-06-08 14:51:11 +08:00
>
2023-06-26 16:24:12 +08:00
< el-menu-item
class = "firstLevelMenu"
2022-06-08 14:51:11 +08:00
v - if = "!hasSubMenu(item.menuList)"
: index = "item.modulePath ? item.modulePath : item.path"
>
{ { item . moduleName ? item . moduleName : item . menuName } }
< / el-menu-item >
2025-12-17 15:34:38 +08:00
< el-submenu : index = "item.modulePath ? item.modulePath : item.path" v-else >
2022-06-08 14:51:11 +08:00
< template slot = "title" > { {
item . moduleName ? item . moduleName : item . menuName
} } < / template >
< el-menu-item
: index = "data.path"
v - for = "(data, i) in item.menuList"
: key = "i"
> { { data . menuName } } < / e l - m e n u - i t e m
>
< / el-submenu >
< / div >
< / div >
< / div >
<!-- < el-menu-item v-show ="item.target!='_blank'" :index="item.modulePath?item.modulePath:item.path" v-for="(item,index) in $store.state.menuList" :key ="index" >
{ { item . moduleName ? item . moduleName : item . menuName } }
< / el-menu-item > -- >
<!-- < el-submenu :index = "item.modulePath?item.modulePath:item.path" v-show ="item.target!='_blank'" v-for="(item,index) in $store.state.menuList" :key ="index" >
< template slot = "title" > { { item . moduleName ? item . moduleName : item . menuName } } < / template >
< el-menu-item v-if ="item.menuList" :index="data.path" v-for="(data,i) in item.menuList" :key ="i" > {{ data.menuName }} < / el -menu -item >
< / el-submenu > -- >
< / el-menu >
< el-button
2024-04-22 00:24:17 +08:00
v - if = "$store.state.userInfo.accountType == 11 && $store.state.selectedGroupSn"
class = "backtoIndex"
type = "primary"
plain
@ click = "backtoIndex()"
size = "mini"
> 返回主菜单 < / e l - b u t t o n
>
< el-button
v - if = "$store.state.userInfo.accountType != 11 && $store.state.isShowBackIndex"
2022-06-08 14:51:11 +08:00
class = "backtoIndex"
type = "primary"
plain
@ click = "backtoIndex()"
size = "mini"
> 返回主菜单 < / e l - b u t t o n
>
2025-12-17 15:34:38 +08:00
< div v-show = "showLeftArrow" class="left_arrow" @click="move_left()" >
<!-- < icon-svg name = "icon-left-arrow" > < / icon-svg > -- >
< i class = "el-icon-arrow-left" > < / i >
< / div >
< div v-show = "showRightArrow" class="right_arrow" @click="move_right()" >
<!-- < icon-svg name = "icon-right-arrow" > < / icon-svg > -- >
< i class = "el-icon-arrow-right" > < / i >
< / div >
2022-06-08 14:51:11 +08:00
< / div >
< div class = "pageContainer" >
< div class = "pageDataContainer" >
2024-02-29 19:28:07 +08:00
< template v-if = "moduleData.pathType == 1 || !moduleData.pathType" >
< keep-alive >
< router-view v-if = "$route.meta.keepAlive" > < / router -view >
< / keep-alive >
< router-view v-if = "!$route.meta.keepAlive" > < / router -view >
< / template >
< template v-else >
2025-12-17 15:34:38 +08:00
< iframe
: key = "key"
: src = "moduleData.embedUrl"
frameborder = "0"
style = "width: 100%; height: 100%"
> < / iframe >
2024-02-29 19:28:07 +08:00
< / template >
2022-06-08 14:51:11 +08:00
< / div >
< / div >
<!-- < el-backtop target = ".pages" > < / el-backtop > -- >
< / div >
< / template >
< script >
import vhead from "./header" ;
2025-12-17 15:34:38 +08:00
import BScroll from "better-scroll" ;
2022-06-08 14:51:11 +08:00
export default {
components : { vhead } ,
2025-12-17 15:34:38 +08:00
inject : [ "reload" ] ,
2022-06-08 14:51:11 +08:00
data ( ) {
return {
2025-12-17 15:34:38 +08:00
selfScrollTop : "" ,
2022-06-08 14:51:11 +08:00
tabsShow ,
// menuList: [{ name: "企业注册审核", url: "/registerAudit" }],
currentUrl : "" ,
2025-12-17 15:34:38 +08:00
scroll : "" ,
2023-06-26 16:24:12 +08:00
company : COMPANY ,
2024-02-29 19:28:07 +08:00
isIframe : false ,
moduleData : {
2025-12-17 15:34:38 +08:00
pathType : 1 ,
2024-02-29 19:28:07 +08:00
} , // 点击的模块数据
2025-12-17 15:34:38 +08:00
key : new Date ( ) . getTime ( ) ,
showLeftArrow : false ,
showRightArrow : false ,
2022-06-08 14:51:11 +08:00
} ;
} ,
2024-02-29 19:28:07 +08:00
created ( ) {
2025-12-17 15:34:38 +08:00
this . moduleData = this . $store . state . menuList [ 0 ] ;
if ( this . $route . path != this . $store . state . menuList [ 0 ] . modulePath ) {
2024-02-29 19:28:07 +08:00
this . $router . push ( this . $store . state . menuList [ 0 ] . modulePath ) ;
}
2025-12-17 15:34:38 +08:00
console . log ( this . $store . state . menuList , "7778888" ) ;
console . log ( this . moduleData , "7778888" ) ;
2024-02-29 19:28:07 +08:00
} ,
2024-10-26 09:14:35 +08:00
computed : {
filterMenuList ( ) {
2025-12-17 15:34:38 +08:00
let list = this . $store . state . menuList . filter ( ( item ) => {
return (
this . company != "xingxuan" &&
item . target != "_blank" &&
( item . menuName != "LED大屏显示器" || this . company != "nanchang" )
) ;
} ) ;
2024-10-30 19:12:04 +08:00
// 非数据中台页面,过滤数据中台菜单
2025-12-17 15:34:38 +08:00
if ( this . $route . path . includes ( "equipmentCenter" ) ) {
return list ;
2024-10-30 19:12:04 +08:00
} else {
2025-12-17 15:34:38 +08:00
return list . filter ( ( item ) => ! item . menuEquipment ) ;
2024-10-30 19:12:04 +08:00
}
2025-12-17 15:34:38 +08:00
} ,
2024-10-26 09:14:35 +08:00
} ,
2025-12-17 15:34:38 +08:00
2022-06-08 14:51:11 +08:00
mounted ( ) {
2024-02-29 19:28:07 +08:00
console . log ( "mounted" , this . $route ) ;
2022-06-08 14:51:11 +08:00
this . $nextTick ( ( ) => {
let timer = setTimeout ( ( ) => {
if ( timer ) {
2025-12-17 15:34:38 +08:00
clearTimeout ( timer ) ;
this . verScroll ( ) ;
2022-06-08 14:51:11 +08:00
}
2025-12-17 15:34:38 +08:00
} , 0 ) ;
} ) ;
if ( window . localStorage . getItem ( "isIframe" ) ) {
if ( window . localStorage . getItem ( "isIframe" ) == "1" ) {
this . isIframe = true ;
2022-06-08 14:51:11 +08:00
// this.$nextTick(()=>{
// setOffset(2180,360)
// })
}
2025-12-17 15:34:38 +08:00
console . log ( window . localStorage . getItem ( "isIframe" ) ) ;
2022-06-08 14:51:11 +08:00
}
2025-12-17 15:34:38 +08:00
this . $nextTick ( ( ) => {
const dh _li = document . querySelector ( ".el-menu-demo .cont" ) ;
const menudemo = document . querySelector ( ".el-menu-demo" ) ;
const style = window . getComputedStyle ( dh _li ) ;
const menudemoStyle = window . getComputedStyle ( menudemo ) ;
setTimeout ( ( ) => {
// console.log(style.width, menudemoStyle.width);
if ( parseInt ( style . width ) > parseInt ( menudemoStyle . width ) ) {
this . showLeftArrow = true ;
this . showRightArrow = true ;
} else {
this . showLeftArrow = false ;
this . showRightArrow = false ;
}
} ) ;
} ) ;
2022-06-08 14:51:11 +08:00
} ,
methods : {
2025-12-17 15:34:38 +08:00
move _left ( ) {
const dh _li = document . querySelector ( ".el-menu-demo .cont" ) ;
const style = window . getComputedStyle ( dh _li ) ;
const matrix = new WebKitCSSMatrix ( style . transform ) ;
if ( matrix . m41 < 0 ) {
const numberCount = matrix . m41 + 140 ;
dh _li . style . transform = ` translateX( ${
numberCount > 0 ? 0 : numberCount
} px ) translateY ( 0 px ) translateZ ( 1 px ) ` ;
}
} ,
move _right ( ) {
const dh _li = document . querySelector ( ".el-menu-demo .cont" ) ;
const menudemo = document . querySelector ( ".el-menu-demo" ) ;
const style = window . getComputedStyle ( dh _li ) ;
const menudemoStyle = window . getComputedStyle ( menudemo ) ;
const matrix = new WebKitCSSMatrix ( style . transform ) ;
if ( matrix . m41 <= 0 ) {
const numberCount = matrix . m41 - 140 ;
const width = parseInt ( style . width + 1 ) - parseInt ( menudemoStyle . width ) ;
dh _li . style . transform = ` translateX( ${
numberCount <= - width ? - width : numberCount
} px ) translateY ( 0 px ) translateZ ( 1 px ) ` ;
}
} ,
2023-06-26 16:24:12 +08:00
clickItem ( item ) {
2025-12-17 15:34:38 +08:00
console . log ( item ) ;
2024-02-29 19:28:07 +08:00
this . moduleData = item ;
2023-09-15 14:51:27 +08:00
//金林湾跳转
2025-12-17 15:34:38 +08:00
if ( this . company == "jlw" ) {
if ( item . menuName == "工地可视化" ) {
2023-09-15 14:51:27 +08:00
this . $router . push ( {
path : item . path ,
// params: {
// companyProject: 'jlw'
// }
} ) ;
// window.open(this.$router.resolve(item.path).href, '_self');
}
} else {
2025-12-17 15:34:38 +08:00
window . _paq . push ( [
"trackEvent" ,
"点击" ,
item . moduleName ? item . moduleName : item . menuName ,
"切换到" + ( item . moduleName ? item . moduleName : item . menuName ) ,
] ) ;
2023-09-15 14:51:27 +08:00
}
2024-02-29 19:28:07 +08:00
this . $forceUpdate ( ) ;
2022-06-08 14:51:11 +08:00
} ,
hasSubMenu ( list ) {
//用于判断有没有下级菜单
let onoff = false ;
// console.log("list", list);
if ( list && list . length > 0 ) {
list . forEach ( ( element ) => {
if ( element . menuName ) {
onoff = true ;
return ;
}
} ) ;
}
// console.log("onoff", onoff);
return onoff ;
} ,
backtoIndex ( ) {
// window._paq.push(['trackEvent', '点击', '返回主菜单','返回主菜单' ])
var url = window . location . href ;
2024-04-11 19:15:19 +08:00
// this.$router.push("/workSpace");
if ( url . indexOf ( "equipmentCenter.html" ) != - 1 ) {
this . $router . push ( "/equipmentCenterIndx" ) ;
2024-04-22 00:24:17 +08:00
} else if ( url . indexOf ( "/supplier/" ) != - 1 ) {
2024-04-20 19:07:58 +08:00
this . $router . push ( "/supplierIndex" ) ;
2024-04-11 19:15:19 +08:00
} else {
this . $router . push ( "/projectIndex" ) ;
}
2022-06-08 14:51:11 +08:00
} ,
2023-06-26 16:24:12 +08:00
handleSelect ( key , keyPath ) {
2025-12-17 15:34:38 +08:00
console . log ( key ) ;
console . log ( keyPath ) ;
2022-06-08 14:51:11 +08:00
// console.log(index)
// this.$store.commit('setCurrentUrl',url)
// this.$store.dispatch('currentUrl',url)
} ,
2023-06-26 16:24:12 +08:00
verScroll ( ) {
2022-06-08 14:51:11 +08:00
// console.log(this.$route.path)
2025-12-17 15:34:38 +08:00
if (
this . $route . path . indexOf ( "/firm/" ) != - 1 ||
this . $route . path . indexOf ( "/page" ) != - 1
) {
2022-06-08 14:51:11 +08:00
this . $refs . cont . style . width = "100%" ;
return ;
} else {
2024-05-22 17:25:30 +08:00
// let width = this.$store.state.menuList.length * 150// 动态计算出滚动区域的大小,前面已经说过了,产生滚动的原因是滚动区域宽度大于父盒子宽度
// this.$refs.cont.style.width = width + 'px'
2025-12-17 15:34:38 +08:00
this . $refs . cont . style . width = "max-content" ;
2022-06-08 14:51:11 +08:00
this . $nextTick ( ( ) => {
if ( ! this . scroll ) {
this . scroll = new BScroll ( this . $refs . wrapper , {
startX : 0 ,
click : true ,
mouseWheel : true ,
scrollX : true ,
scrollY : false ,
2025-12-17 15:34:38 +08:00
eventPassthrough : "vertical" ,
} ) ;
2022-06-08 14:51:11 +08:00
} else {
2025-12-17 15:34:38 +08:00
console . log ( this . scroll . refresh ( ) ) ;
this . scroll . refresh ( ) ; //如果dom结构发生改变调用该方法
2022-06-08 14:51:11 +08:00
}
2025-12-17 15:34:38 +08:00
console . log ( this . scroll ) ;
} ) ;
2022-06-08 14:51:11 +08:00
}
this . reload ;
2025-12-17 15:34:38 +08:00
} ,
2022-06-08 14:51:11 +08:00
} ,
2024-02-29 19:28:07 +08:00
watch : {
$route : {
handler ( val ) {
this . key = new Date ( ) . getTime ( ) ;
} ,
2025-12-17 15:34:38 +08:00
immediate : true ,
} ,
} ,
2022-06-08 14:51:11 +08:00
} ;
< / script >
< style lang = "less" scoped >
// .el-menu.el-menu--horizontal {
// box-sizing: border-box;
// padding: 0 100px 4px;
// border-bottom: none;
// }
. el - menu . el - menu -- horizontal {
box - sizing : border - box ;
// padding: 0 !important;
border - bottom : none ;
margin - left : 50 px ;
2025-12-17 15:34:38 +08:00
margin - right : 150 px ;
2022-06-08 14:51:11 +08:00
white - space : nowrap ;
overflow : hidden ;
}
2025-12-17 15:34:38 +08:00
. left _arrow {
position : absolute ;
top : 50 % ;
left : 20 px ;
transform : translateY ( - 50 % ) ;
cursor : pointer ;
}
. right _arrow {
position : absolute ;
top : 50 % ;
right : 120 px ;
transform : translateY ( - 50 % ) ;
cursor : pointer ;
}
2023-06-26 16:24:12 +08:00
. isIframe {
/deeep/ . el - menu . el - menu -- horizontal {
2022-06-08 14:51:11 +08:00
margin : 0 ;
}
}
. el - menu -- horizontal {
. el - menu - item ,
/deep/ . el - submenu _ _title {
font - family : PingFangSC - Medium ;
font - size : 14 px ;
letter - spacing : 0 ;
height : 44 px ;
line - height : 44 px ;
padding : 0 ;
margin - right : 80 px ;
& : hover ,
& : focus {
background - color : transparent ;
}
& : hover {
color : # 5181 f6 ;
}
}
}
2023-06-26 16:24:12 +08:00
/deep/ . el - submenu _ _title {
padding - right : 20 px ! important ;
. el - submenu _ _icon - arrow {
2022-06-08 14:51:11 +08:00
right : 0 px ;
}
}
2023-06-26 16:24:12 +08:00
. el - menu -- horizontal . firstLevelMenu . is - active ,
/deep/ . is - active . el - submenu _ _title {
2022-06-08 14:51:11 +08:00
border - bottom : 3 px solid # 409 eff ;
}
. menuInnerBox {
display : inline - block ;
}
. menuBox {
position : relative ;
& . big {
. el - menu . el - menu -- horizontal {
padding : 0 ;
display : flex ;
2023-06-26 16:24:12 +08:00
. cont {
2022-06-08 14:51:11 +08:00
display : flex ;
}
. menuInnerBox {
width : 100 % ;
// flex: 1;
}
. el - menu - item {
flex : 1 ;
margin - right : 0 ;
text - align : center ;
border - bottom : none ;
height : 48 px ;
line - height : 48 px ;
& . is - active ,
& : hover {
background - color : @ -- color - primary ;
color : # fff ! important ;
}
}
}
}
}
. backtoIndex {
position : absolute ;
right : 20 px ;
top : 12 px ;
font - size : 14 px ;
padding : 4 px 5 px ;
}
. toOverview {
right : 120 px ;
}
@ media screen and ( max - width : 1500 px ) {
. el - menu . el - menu -- horizontal {
padding : 0 40 px 4 px ;
}
}
2023-06-26 16:24:12 +08:00
. big {
2022-06-08 14:51:11 +08:00
. el - menu . el - menu -- horizontal {
margin : 0 ;
width : 100 % ;
2023-06-26 16:24:12 +08:00
. wrapper {
2022-06-08 14:51:11 +08:00
width : 100 % ;
}
2023-06-26 16:24:12 +08:00
. cont {
2022-06-08 14:51:11 +08:00
width : 100 % ;
}
}
}
< / style >