<style> .per_title{font-size: 14px; color: #333; border-left: 3px solid #E95252; height: 14px; line-height: 14px; margin: 40px 0; padding-left: 15px;} .mentTable{background: #BCBCBC; width: 100%; font-size: 14px; } .mentTable td{background: #fff; height: 30px;} .per_first_menu{overflow: hidden;} .per_first_menu li{float: left; margin-right: 30px; position: relative; cursor: pointer; background: #fff; color: #999; width: 80px; font-size: 12px; height: 60px; padding: 10px 0; border-radius: 4px; text-align: center;} .per_first_menu li.FirsrMenuCked{background: #E95252; color: #f1f1f1;} .per_first_menu li i{font-size: 30px; line-height: 35px;} .per_detail_menu{width: 100%; height: 300px; padding: 20px; margin: 40px 0; background: #fff; border-radius: 8px;} .per_secondMenu{height: auto; overflow: hidden; margin-bottom: 20px;} .per_secondMenu li{float: left; height: 24px; font-size:12px; cursor: pointer; padding: 0 30px; position: relative;} .per_secondMenu li>div{width: 0; height: 3px; background: #F26262; margin: 5px auto 0;} .per_secondMenu li:hover>div{width: 17px; transition: width .3s;} .per_secondMenu li.per_secondLevelCked>div{width: 17px;} .per_secondMenu li .liSplit{ height: 12px; width: 1px; background: #DCDFE6; position: absolute; right: 0; top: 2px;} .per_thirdMenu li{float: left; margin: 0 50px 50px 0; width: 80px; cursor: pointer; height: 85px; padding:15px 10px 0; position: relative; font-size: 12px; color: #666; text-align: center; border-radius: 4px; background: #EBEBEB;} .per_thirdMenu li i{position: absolute; bottom: 10px; right: 10px; font-size: 20px;} .per_SaveBtn{float: right; margin-top: 50px; margin-left: 15px;} .per_thirdMenu li.thirdLevelMenuCked{background: #E95252; color: #f1f1f1;} .per_firstLevelCkbox{position: absolute!important;right:3px; top: 0;} .per_thirdLevelAllCked{float: right;} </style> <template> <div> <div class="per_title">权限设置</div> <div class="per_first_menu"> <ul> <li v-model="item.IsShow" v-for="(item,index) in MenuList" @click="getSecondLevelMenu(index)" :class="{FirsrMenuCked:index==firstLevel}" > <i :class="[fontPub,item.icon]"></i><br/>{{item.MenuName}} <el-checkbox :indeterminate="item.choseParent" class="per_firstLevelCkbox" type="checkbox" :value="item.IsShow" v-model="item.IsShow" @change="firstCheckAll" v-bind:checked="item.IsShow" ></el-checkbox> </li> <input type="button" value="保存" class="normalBtn per_SaveBtn" @click="updateMenu()"/> <!-- <input type="button" value="返回" class="hollowFixedBtn per_SaveBtn" @click="goback"/>--> </ul> </div> <div class="per_detail_menu"> <div class="per_secondMenu" v-if="MenuList.length>0 && MenuList[firstLevel].ChildMenu!=null"> <li v-model="item.IsShow" :class="{per_secondLevelCked:index==secondLevel}" v-for="(item,index) in MenuList[firstLevel].ChildMenu" @click="getThirdLevelMenu(index)">{{item.MenuName}}<div></div><span class="liSplit"></span></li> <el-checkbox class='per_thirdLevelAllCked' @change='checkedAll($event)' v-model='secondChkAllState'>全选</el-checkbox> </div> <div class="per_thirdMenu" v-if="MenuList.length>0 && MenuList[firstLevel].ChildMenu!=null"> <li v-model="item.IsShow" @click="thirdLevelMenuCked(item)" :class="{thirdLevelMenuCked:item.IsShow}" v-for="(item,index) in MenuList[firstLevel].ChildMenu[secondLevel].ChildMenu">{{item.MenuName}}<i :class="[fontPub,item.icon]"></i></li> </div> </div> <div class="per_title">功能管理</div> <div class="per_first_menu"> <ul> <li v-model="item.IsShow" v-for="(item,index) in actionList" @click="item.IsShow = !item.IsShow;" > <i :class="[fontPub,item.icon]"></i><br/>{{item.ActionName}} <el-checkbox class="per_firstLevelCkbox" type="checkbox" :value="item.IsShow" v-model="item.IsShow" v-bind:checked="item.IsShow" ></el-checkbox> </li> <input type="button" value="保存" class="normalBtn per_SaveBtn" @click="saveAction()"/> </ul> </div> </div> </template> <script> export default { data() { return { fontPub:'iconfont', MenuList:[], thirdLevelMenu:[], msg:{ RoleId:0 }, updateMsg:{ RoleId:0, Permission:[], }, firstLevel:0, secondLevel:0, secondChkAllState:false, //功能菜单 actionList:[], } }, mounted() { this.updateMsg.RoleId=this.msg.RoleId = this.$route.query.id let sysId=this.$route.query.sysId this.getMenu() this.getActionMenu(); }, methods: { getActionMenu() { this.apipost("admin_get_RoleGetPostPermissionAction", this.updateMsg, res => { if(res.data.resultCode == 1) { let tempList=res.data.data; this.actionList = tempList; }else{} }, err => {}) }, getMenu() { this.apipost("admin_get_RoleGetPostPermission", this.updateMsg, res => { if(res.data.resultCode == 1) { let tempList=res.data.data tempList.forEach(x=>{ if(x.ParentId==0){ let menuStyle=JSON.parse(x.MenuStyle) x.icon=menuStyle.icon x.color=menuStyle.color x.choseParent=false this.initParentChk(x) this.MenuList.push(x) } }) }else{} }, err => {}) }, updateMenu() { this.MenuList.forEach(x=>{ }) this.updateMsg.Permission=[] this.getCkdId(this.MenuList); this.apipost("admin_post_RoleUpdateRolePermission", this.updateMsg, res => { if(res.data.resultCode == 1) { this.$message.success('保存成功!') }else{ this.$message.error('保存失败!') } }, err => {}) }, getSecondLevelMenu(index){ this.firstLevel=index; this.secondLevel=0; this.threeChange(); this.getThirdLevelMenu(0); }, getThirdLevelMenu(index){ //三级菜单 this.secondLevel=index; this.MenuList[this.firstLevel].ChildMenu[index].ChildMenu.forEach(x=>{ let menuStyle=JSON.parse(x.MenuStyle) x.icon=menuStyle.icon x.color=menuStyle.color this.thirdLevelMenu.push(x) }) this.threeChange() }, thirdLevelMenuCked(item){ item.IsShow=!item.IsShow this.threeChange() }, firstCheckAll(){ this.MenuList[this.firstLevel].ChildMenu.forEach(x=>{ x.IsShow=this.MenuList[this.firstLevel].IsShow x.ChildMenu.forEach((item,index)=>{ item.IsShow=x.IsShow }) }) this.MenuList[this.firstLevel].choseParent=false this.threeChange() }, checkedAll(){ let thirdMenuLength=this.MenuList[this.firstLevel].ChildMenu[this.secondLevel].ChildMenu.length; let chkNo=0; this.MenuList[this.firstLevel].ChildMenu[this.secondLevel].ChildMenu.forEach((item)=>{ if(item.IsShow==true) chkNo++ }) if(chkNo==thirdMenuLength){ this.MenuList[this.firstLevel].ChildMenu[this.secondLevel].ChildMenu.forEach((item)=>{ item.IsShow=false }) }else{ this.MenuList[this.firstLevel].ChildMenu[this.secondLevel].ChildMenu.forEach((item)=>{ item.IsShow=true }) } this.threeChange() }, threeChange(){ let chkCount=0 let count=0 this.MenuList[this.firstLevel].ChildMenu.forEach((x,i)=>{ let secondCheckCount=0 x.ChildMenu.forEach((item,index)=>{ count++ if(item.IsShow){ chkCount++ secondCheckCount++ } }) if(this.secondLevel==i){ if(x.ChildMenu.length>0){ this.secondChkAllState=x.ChildMenu.length==secondCheckCount } else this.secondChkAllState=false } x.IsShow=secondCheckCount>0 }) this.MenuList[this.firstLevel].IsShow=chkCount>0 this.MenuList[this.firstLevel].choseParent=chkCount>0&&chkCount<count }, initParentChk(p){ if(!p.ChildMenu || p.ChildMenu.length==0||p.ChildMenu) return let chkCount=0 let count=0 p.ChildMenu.forEach(x=>{ x.ChildMenu.forEach((item,index)=>{ count++ if(item.IsShow){ chkCount++ } }) }) p.choseParent=chkCount>0&&chkCount<count p.IsShow=chkCount>0 }, //保存功能管理 saveAction() { this.updateMsg.Permission=[] this.getCkdActionId(this.actionList); this.apipost("admin_post_RoleUpdateRolePermissionAction", this.updateMsg, res => { if(res.data.resultCode == 1) { this.$message.success('保存成功!') }else{ this.$message.error('保存失败!') } }, err => {}) }, getCkdId(array){ array.forEach(x=>{ if(x.IsShow==1||x.IsShow==true){ this.updateMsg.Permission.push(x.MenuId) if(x.ChildMenu){ this.getCkdId(x.ChildMenu) } } }) }, //过滤获取功能管理id getCkdActionId(array){ array.forEach(x=>{ if(x.IsShow==1||x.IsShow==true){ this.updateMsg.Permission.push(x.Id); } }) }, goback(){ history.back(-1) } } } </script>