菜单更新完善授权信息

This commit is contained in:
龙运模 2025-04-06 19:54:22 +08:00
parent 650e5ff65b
commit 4d87561462
4 changed files with 198 additions and 48 deletions

View File

@ -24,23 +24,41 @@
<div class="td module">{{item.meta.title}}</div>
<div class="td check"><el-checkbox v-model="item.checked" :indeterminate="item.isCheck" @change="menuCheckChange(item)" :size="size" /></div>
<div class="td tdChild">
<div class="nextTd" v-for="(em,ind) in item.children" :key="ind">
<div class="tdName menu">
<el-checkbox @change="moduleCheckChange(item,em)" :indeterminate="em.isCheck" v-model="em.checked" :size="size">{{em.meta.title}}</el-checkbox>
</div>
<div class="tdName authority">
<div class="childTr">
<div class="preBox" v-for="(li,lidex) in em.meta.data_permission" :key="lidex">
<span v-if="li.title.length<9">
<el-checkbox @change="checkChange(item,em)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox @change="checkChange(item,em)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
<template v-if="item.children">
<div class="nextTd" v-for="(em,ind) in item.children" :key="ind">
<div class="tdName menu">
<el-checkbox @change="moduleCheckChange(item,em)" :indeterminate="em.isCheck" v-model="em.checked" :size="size">{{em.meta.title}}</el-checkbox>
</div>
<div class="tdName authority">
<div class="childTr">
<div class="preBox" v-for="(li,lidex) in em.meta.data_permission" :key="lidex">
<span v-if="li.title.length<9">
<el-checkbox @change="checkChange(item,em)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox @change="checkChange(item,em)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
</div>
</div>
</div>
</div>
</div>
</template>
<template v-else>
<div class="nextTd">
<div class="tdName tdNameNoneBorder authority">
<div class="childTr">
<div class="preBox" v-for="(li,lidex) in item.meta.data_permission" :key="lidex">
<span v-if="li.title.length<9">
<el-checkbox @change="checkChange(item)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox @change="checkChange(item)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
</div>
</div>
</div>
</div>
</template>
</div>
</div>
</div>
@ -109,6 +127,15 @@ export default {
let ed = item.children.length;
item.isCheck = (check>0 && check != ed) || (isCheck>0 && check!=ed)?true:false;
item.checked = check>0 && check== ed?true:false;
}else{
if(item.meta.data_permission && item.meta.data_permission.length>0){
let check = item.meta.data_permission.filter((li)=>li.checked).length;
let ed = item.meta.data_permission.length;
item.isCheck = check>0 && check != ed?true:false;
if(ed>0){
item.checked = check>0 && check== ed?true:false;
}
}
}
})
this.list = res.data;
@ -131,6 +158,12 @@ export default {
if(item.checked){
item.isCheck = false;
}
}else{
if(item.meta.data_permission && item.meta.data_permission.length>0){
item.meta.data_permission.forEach((li)=>{
li.checked = e;
})
}
}
})
},
@ -149,6 +182,16 @@ export default {
em.isCheck = false;
}
})
}else{
item.checked = e.checked;
if(item.meta.data_permission && item.meta.data_permission.length>0){
item.meta.data_permission.forEach((li)=>{
li.checked = e.checked;
})
}
if(item.checked){
item.isCheck = false;
}
}
if(item.checked){
item.isCheck = false;
@ -193,12 +236,19 @@ export default {
em.isCheck = check>0 && check != ed?true:false;
}
})
let check = item.children.filter((em)=>em.checked).length;
let isCheck = item.children.filter((em)=>em.isCheck).length;
let ed = item.children.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = (check>0 || isCheck>0) && ed!=check?true:false;
}else{
let check = item.meta.data_permission.filter((em)=>em.checked).length;
let ed = item.meta.data_permission.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = check>0 && check != ed?true:false;
}
let check = item.children.filter((em)=>em.checked).length;
let isCheck = item.children.filter((em)=>em.isCheck).length;
let ed = item.children.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = (check>0 || isCheck>0) && ed!=check?true:false;
}
})
},
@ -245,6 +295,19 @@ export default {
})
}
})
}else{
if(item.meta.data_permission && item.meta.data_permission.length>0){
let list = item.meta.data_permission.filter(e=>e.checked).map(u=>{
let obj = {
actions:u.actions,
title:u.title
}
return obj
});
if(list.length>0){
obj.data_permission.push({[item.meta.code]:list})
}
}
}
})
return obj
@ -340,6 +403,9 @@ export default {
.tdName:last-child{
border-left: 1px solid var(--el-border-color-light);
}
.tdNameNoneBorder{
border-left: none !important;
}
.tdName{
padding: 0 10px;
min-height: 33px;

View File

@ -16,25 +16,43 @@
</div>
</div>
<template v-if="item.show">
<div class="tr" v-for="(em,ind) in item.children" :key="ind">
<div class="td module">
<el-checkbox :indeterminate="em.isCheck" v-model="em.checked" @change="moduleCheckChange(item,em)" :size="size">{{em.meta.title}}</el-checkbox>
<template v-if="item.children">
<div class="tr" v-for="(em,ind) in item.children" :key="ind">
<div class="td module">
<el-checkbox :indeterminate="em.isCheck" v-model="em.checked" @change="moduleCheckChange(item,em)" :size="size">{{em.meta.title}}</el-checkbox>
</div>
<div class="td tdChild">
<div class="nextTd">
<div class="tdName authority">
<div class="boxName" v-for="(li,ind) in em.meta.data_permission" :key="ind">
<span v-if="li.title.length<9">
<el-checkbox v-model="li.checked" :size="size" @change="checkChange(item,em)"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox v-model="li.checked" :size="size" @change="checkChange(item,em)"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
</div>
</div>
</div>
</div>
</div>
<div class="td tdChild">
<div class="nextTd">
</template>
<template v-else>
<div class="tr">
<div class="td tdChild">
<div class="tdName authority">
<div class="boxName" v-for="(li,ind) in em.meta.data_permission" :key="ind">
<div class="boxName" v-for="(li,ind) in item.meta.data_permission" :key="ind">
<span v-if="li.title.length<9">
<el-checkbox v-model="li.checked" :size="size" @change="checkChange(item,em)"><span class="name">{{li.title}}</span></el-checkbox>
<el-checkbox v-model="li.checked" :size="size" @change="checkChange(item)"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox v-model="li.checked" :size="size" @change="checkChange(item,em)"><span class="name">{{li.title}}</span></el-checkbox>
<el-checkbox v-model="li.checked" :size="size" @change="checkChange(item)"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
</div>
</div>
</div>
</div>
</div>
</template>
</template>
</template>
</div>
@ -77,9 +95,17 @@ export default {
item.isCheck = (check>0 && check != ed) || (isCheck>0 && check != ed)?true:false;
item.checked = check>0 && check== ed?true:false;
}else{
if(item.meta.data_permission && item.meta.data_permission.length>0){
let check = item.meta.data_permission.filter((li)=>li.checked).length;
let ed = item.meta.data_permission.length;
item.isCheck = check>0 && check != ed?true:false;
if(ed>0){
item.checked = check>0 && check== ed?true:false;
}
}
}
})
this.list = JSON.parse(JSON.stringify(val));
}
}
@ -103,6 +129,16 @@ export default {
em.isCheck = false;
}
})
}else{
item.checked = e.checked;
if(item.meta.data_permission && item.meta.data_permission.length>0){
item.meta.data_permission.forEach((li)=>{
li.checked = e.checked;
})
}
if(item.checked){
item.isCheck = false;
}
}
if(item.checked){
item.isCheck = false;
@ -147,12 +183,17 @@ export default {
em.isCheck = check>0 && check != ed?true:false;
}
})
let check = item.children.filter((em)=>em.checked).length;
let isCheck = item.children.filter((em)=>em.isCheck).length;
let ed = item.children.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = (check>0 || isCheck>0) && ed!=check?true:false;
}else{
let check = item.meta.data_permission.filter((em)=>em.checked).length;
let ed = item.meta.data_permission.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = check>0 && check != ed?true:false;
}
let check = item.children.filter((em)=>em.checked).length;
let isCheck = item.children.filter((em)=>em.isCheck).length;
let ed = item.children.length;
item.checked = check>0 && check == ed?true:false;
item.isCheck = (check>0 || isCheck>0) && ed!=check?true:false;
}
})
},

View File

@ -341,6 +341,19 @@
})
}
})
}else{
if(item.meta.data_permission && item.meta.data_permission.length>0){
let list = item.meta.data_permission.filter(e=>e.checked).map(u=>{
let obj = {
actions:u.actions,
title:u.title
}
return obj
});
if(list.length>0){
obj.data_permission.push({[item.meta.code]:list})
}
}
}
})
return obj

View File

@ -31,23 +31,41 @@
<div class="td module">{{item.meta.title}}</div>
<div class="td check"><el-checkbox v-model="item.checked" :indeterminate="item.isCheck" @change="menuCheckChange(item)" :disabled="showPermission" :size="size" /></div>
<div class="td tdChild">
<div class="nextTd" v-for="(em,ind) in item.children" :key="ind">
<div class="tdName menu">
<el-checkbox @change="moduleCheckChange(item,em)" :indeterminate="em.isCheck" v-model="em.checked" :disabled="showPermission" :size="size">{{em.meta.title}}</el-checkbox>
</div>
<div class="tdName authority">
<div class="childTr">
<div class="preBox" v-for="(li,lidex) in em.meta.data_permission" :key="lidex">
<span v-if="li.title.length < 9">
<el-checkbox @change="checkChange(item,em,li)" v-model="li.checked" :disabled="showPermission" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox @change="checkChange(item,em,li)" v-model="li.checked" :disabled="showPermission" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
<template v-if="item.children">
<div class="nextTd" v-for="(em,ind) in item.children" :key="ind">
<div class="tdName menu">
<el-checkbox @change="moduleCheckChange(item,em)" :indeterminate="em.isCheck" v-model="em.checked" :disabled="showPermission" :size="size">{{em.meta.title}}</el-checkbox>
</div>
<div class="tdName authority">
<div class="childTr">
<div class="preBox" v-for="(li,lidex) in em.meta.data_permission" :key="lidex">
<span v-if="li.title.length < 9">
<el-checkbox @change="checkChange(item,em,li)" v-model="li.checked" :disabled="showPermission" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox @change="checkChange(item,em,li)" v-model="li.checked" :disabled="showPermission" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
</div>
</div>
</div>
</div>
</div>
</template>
<template v-else>
<div class="nextTd">
<div class="tdName tdNameNoneBorder authority">
<div class="childTr">
<div class="preBox" v-for="(li,lidex) in item.meta.data_permission" :key="lidex">
<span v-if="li.title.length<9">
<el-checkbox @change="checkChange(item)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</span>
<el-tooltip :content="li.title" placement="top" v-else>
<el-checkbox @change="checkChange(item)" v-model="li.checked" :size="size"><span class="name">{{li.title}}</span></el-checkbox>
</el-tooltip>
</div>
</div>
</div>
</div>
</template>
</div>
</div>
</div>
@ -120,6 +138,15 @@ export default {
let ed = item.children.length;
item.isCheck = (check>0 && check != ed) || (isCheck>0 && check !=ed)?true:false;
item.checked = check>0 && check== ed?true:false;
}else{
if(item.meta.data_permission && item.meta.data_permission.length>0){
let check = item.meta.data_permission.filter((li)=>li.checked).length;
let ed = item.meta.data_permission.length;
item.isCheck = check>0 && check != ed?true:false;
if(ed>0){
item.checked = check>0 && check== ed?true:false;
}
}
}
})
this.list = res.data.menu;
@ -231,6 +258,9 @@ export default {
padding: 0 10px;
min-height: 33px;
}
.tdNameNoneBorder{
border-left: none !important;
}
.childTr{
display: flex;
flex-wrap: wrap;