<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: { VersionsId: 0 }, updateMsg: { VersionsId: 0, Permission: [], }, firstLevel: 0, secondLevel: 0, secondChkAllState: false, //功能菜单 actionList: [], } }, mounted() { this.updateMsg.VersionsId = this.msg.VersionsId = this.$route.query.id let sysId = this.$route.query.sysId this.getMenu(); this.getActionMenu(); }, methods: { getActionMenu() { this.apipost("admin_get_GetVersionsPermissionAction", this.updateMsg, res => { if (res.data.resultCode == 1) { let tempList = res.data.data; this.actionList = tempList; } else {} }, err => {}) }, getMenu() { this.apipost("admin_get_GetVersionsPermission", 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_UpdateVersionsPermission", this.updateMsg, res => { if (res.data.resultCode == 1) { this.$message.success('保存成功!') } else { this.$message.error('保存失败!') } }, err => {}) }, //保存功能管理 saveAction() { this.updateMsg.Permission = [] this.getCkdActionId(this.actionList); this.apipost("admin_post_UpdateVersionsPermissionAction", 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 }, 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>