<template>
<div v-if="layout == 'level'" class="pl-sidebar" :style="{width: this.sideWidth, background:'#08111f',top:totop+'px',color:'#e6e6e6'}">
<div class="menusArea pl-cl">
<div class="scroll" ref="domSrcoll">
<Smenu ref="smenu" mode="horizontal" :style="{width: sideWidth,margin: 0}">
<template v-for="(item,index) in menus">
<!-- <Smenu-item v-if="!item.children||!item.children.length" :icon="item.iconClass" @click="handleOpenFunc(item)">{{item.name}}</Smenu-item> -->
<Smenu-item v-if="!item.children||!item.children.length" :hasTitle="hasTitle" :icon="item.iconClass || 'icon-bell'" @click="handleOpenFunc(item)">{{item.name}}</Smenu-item>
<Snav-sub-menus :hasTitle="hasTitle" :menuitem="item" v-if="item.children&&item.children.length" ></Snav-sub-menus>
</template>
</Smenu>
</div>
</div>
<!-- <ul class="pl-menus pl-menus-sub pl-menus-pop"
@mouseenter="handleShowLatelyUse" @mouseleave="handleHideLatelyUse"
:style="latelyUseStyle" v-add2Body>
<li class="pl-menus-item" v-for="item,index in navsLatelyUse" @click="handleOpenLatelyFunc(item)">
<a class="title"><span class="txt">{{item.NAME}}</span></a>
</li>
<li v-show="navsLatelyUse.length==0" class="pl-menus-tips">
没有数据
</li>
</ul> -->
</div>
<div v-else class="pl-sidebar">
<GeminiScrollbar>
<ul class="menus">
<li :class="['item','itemBg'+(index%8+1)]" v-for="(item,index) in navs" :key="index" :title="item.name" @click="handleOpenFunc(item)">
<div class="box">
<img v-if="item.iconClass" :src="item.iconClass | getIconServePath" width="42" height="42"/>
<img v-if="item.iconClass==null||item.iconClass==''" src="@main/assets/def_Func.png" width="42" height="42"/>
<!-- <i class="iconfont"><img v-if="item.iconClass" :src="item.iconClass" width="24" height="24"/></i> -->
<span v-if="item.markCount" class="tip">{{item.markCount}}</span>
</div>
<div class="title">{{item.name}}</div>
</li>
</ul>
</GeminiScrollbar>
</div>
</template>
<script>
import {Smenu,SsubMenu,SmenuItem} from './Smenus'
import SnavSubMenus from './side/Smenus'
export default {
inject:['addTab'],
components:{
Smenu,SsubMenu,SmenuItem,SnavSubMenus
},
props:{
sideWidth:{
type: String,
},
hasTitle:{
type: Boolean,
},
totop:{
type: Number
}
},
data(){
return{
}
/*
return {
navs:[
{
iconClass:"",
name:"新建事项",
url:"",
},
{
iconClass:"",
name:"销售排行",
url:""
},
{
iconClass:"",
name:"待办工作",
url:""
},
{
iconClass:"",
name:"薪资查看",
url:"",
count:10
},
{
iconClass:"",
name:"我的日程",
url:"",
count:8
},
{
iconClass:"",
name:"待开会议",
url:""
},
{
iconClass:"",
name:"签到",
url:""
},
{
iconClass:"",
name:"快捷管理",
url:""
},
{
iconClass:"",
name:"我的日程",
url:"",
count:8
},
{
iconClass:"",
name:"待开会议",
url:""
},
{
iconClass:"",
name:"签到",
url:""
},
{
iconClass:"",
name:"快捷管理",
url:""
},
{
iconClass:"",
name:"我的日程",
url:"",
count:8
},
{
iconClass:"",
name:"待开会议",
url:""
},
{
iconClass:"",
name:"签到",
url:""
},
{
iconClass:"",
name:"快捷管理",
url:""
},
]
}
*/
},
computed:{
navs(){
return this.$store.getters.navs;
},
layout(){
return window.localStorage.getItem('layout');
},
menus(){
return this.$store.getters.menus;
},
navsLatelyUse(){
return this.$store.getters.navsLatelyUse;
}
},
mounted(){
// this.resize();
window.addEventListener('resize',this.resize);
},
filters: {
getIconServePath(path){
let file = path.split(";");
if(file[2]){
return `/amrept-web/checkPhoto/photo.do?path=${file[2]}`
}else{
return "";
}
}
},
methods:{
// resize(){
// let c = this.$refs.smenu.$el.children,w=0;
// for(let i=c.length-1;i>=0;i--){
// w+=c[i].offsetWidth;
// }
// this.$refs.smenu.$el.style.width=`${w+2}px`;
// this.isMenuArrBtn = this.$refs.domSrcoll.offsetWidth<w;
// this.scrollBtnStatus();
// },
handleOpenLatelyFunc(item){
if(item.type== "link"){
window.open(item.resUrl,item.name);
return;
}
this.addTab({
resUrl:item.FURI,
name:item.NAME
});//inject 提供的方法只能 传一个参数
},
handleOpenFunc(item){
if(item.type== "link"){
window.open(item.resUrl,item.name);
return;
}
// this.addTab(item.resUrl,item.name,item.resId)//,item.resId
this.addTab(item);//inject 提供的方法只能 传一个参数
},
handleShowLatelyUse(){
this.$store.dispatch('app/getLatelyUse')//最近使用
let s = this.$refs["dom-latelyUse"];
let rect = s.getBoundingClientRect();
this.latelyUseStyle.display ='block';
this.latelyUseStyle.left = rect.left+'px';
this.latelyUseStyle.top = rect.top + rect.height +'px';
},
handleHideLatelyUse(){
this.latelyUseStyle.display ='none';
},
handleLtMenuScroll(){
this.$refs.domSrcoll.scrollLeft=this.$refs.domSrcoll.scrollLeft-30;
this.menuScrollTimer = setInterval(()=>{
this.$refs.domSrcoll.scrollLeft=this.$refs.domSrcoll.scrollLeft-10;
this.scrollBtnStatus();
},50);
this.scrollBtnStatus();
},
handleRtMenuScroll(){
this.$refs.domSrcoll.scrollLeft=this.$refs.domSrcoll.scrollLeft+30;
this.menuScrollTimer = setInterval(()=>{
this.$refs.domSrcoll.scrollLeft=this.$refs.domSrcoll.scrollLeft+10;
this.scrollBtnStatus();
},50);
this.scrollBtnStatus();
},
handleMenuScrollEnd(){
clearInterval(this.menuScrollTimer);
},
scrollBtnStatus(){
if(!(this.$refs.scrollLtBtn||this.$refs.scrollRtBtn)){
return;
}
if(this.$refs.domSrcoll.scrollLeft==0){
this.$refs.scrollLtBtn.style.opacity=0.3;
}else{
this.$refs.scrollLtBtn.style.opacity=1;
}
if(this.$refs.domSrcoll.scrollLeft>=this.$refs.smenu.$el.offsetWidth-this.$refs.domSrcoll.offsetWidth){
this.$refs.scrollRtBtn.style.opacity=0.3;
}else{
this.$refs.scrollRtBtn.style.opacity=1;
}
}
}
}
</script>