
<template>
<div>
<el-dialog :visible.sync='visible' width="30%" title="角色权限" :close-on-click-modal='false'>
<el-form >
<el-form-item v-for="(item, index) in powerList" :key="index" class="menuList">
<el-checkbox
@change="(val) => handleCheckAllListChange(val, item)"
:indeterminate="itemIndeterminate(item)"
v-model="item.checkAll"
>{{ item.menuName }}</el-checkbox
>
<el-checkbox-group
v-model="checkedData"
@change="handleCheckedCitiesChange"
style="padding-left: 30px;"
>
<el-checkbox
style="width: 230px;"
v-for="items in item.children"
:key="items.id"
:label="items"
>{{ items.menuName }}</el-checkbox
>
</el-checkbox-group>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="onSubmit()">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import request from '@/utils/request'
export default {
data() {
return {
checkedData: [],
powerList: [],
visible:false
};
},
methods: {
init() {
this.visible=true
request({
url: '/api/Power',
method: 'GET',
}).then((res) => {
if (res.code == 200) {
this.powerList = res.data;
this.powerList.shift()
}
});
},
handleCheckAllListChange(val, item) {
const filterArr = this.checkedData.filter(
(v) => item.children.indexOf(v) == -1
);
this.checkedData = val ? filterArr.concat(item.children) : filterArr;
console.log(this.checkedData,item.children,filterArr,'this.checkedData');
},
itemIndeterminate(item) {
return (
item.children.some((v) => this.checkedData.indexOf(v) > -1) &&
!item.children.every((v) => this.checkedData.indexOf(v) > -1)
);
},
handleCheckedCitiesChange() {
this.powerList.forEach((item) => {
this.$set(item,'checkAll',true);
item.children.forEach((v) => {
if (!this.checkedData.includes(v)) {
this.$set(item,'checkAll',false);
}
})
});
},
}
}
</script>
<style scoped>
.menuList{
margin-bottom: 20px;
}
</style>