Files
fibo-rule/h5-auth-manager/src/components/models/authorityAssignmentDialog.vue

366 lines
8.6 KiB
Vue
Raw Normal View History

2022-07-14 12:55:31 +08:00
<template>
<div class="user-edit-wrapper">
<el-dialog title="角色配置" :visible.sync="dialogVisible" width="50%" :before-close="handleClose">
<el-form ref="myform" :model="form" label-width="80px" label-position="left">
<el-row>
<el-col :span="8">
<div class="grid-conten">
<el-form-item label="角色名">
<el-input v-model="form.roleName" autocomplete="off" :disabled="disabled"></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="8">
<div class="grid-conten">
<el-form-item label="所属组织">
<el-select v-model="form.organId" :disabled="disabled">
<el-option v-for="item in listOrganArr" :key="item.organId" :label="item.name" :value="item.organId"></el-option>
</el-select>
</el-form-item>
</div>
</el-col>
</el-row>
<el-divider></el-divider>
<el-row>
<el-col :span="12">
<div class="grid-conten">
<h3 style="margin-bottom:30px">
功能权限
</h3>
</div>
</el-col>
<el-col :span="12">
<div class="grid-conten">
<!-- <h3 style="margin-bottom:30px">
搜索引擎子权限
</h3> -->
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-tabs v-model="tabs" >
<el-tab-pane :label="value.value" :name="value.value" v-for="value in systemList"></el-tab-pane>
</el-tabs>
<div class="grid-conten">
<el-tree ref="tree" :props="props" :data="treeList[tabs]" show-checkbox node-key="resourceId" :default-checked-keys="checkedKeys[tabs]"
@check-change="findTreeChange">
</el-tree>
</div>
</el-col>
<el-col :span="12">
<div class="grid-conten">
<!-- <el-tree
ref="engineTree"
:props="props"
:data="engineList"
show-checkbox
node-key="id"
:default-checked-keys="engineCheckedKeys"
@check-change="engineTreeChange"
>
</el-tree> -->
</div>
</el-col>
</el-row>
<el-form-item class="btn-group">
<el-button @click="handleClose()">取消</el-button>
<el-button type="primary" @click="onSubmit()">确认</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import {
getFindtreeList,
getEngineTree,
insertRoleMenu,
insertRoleEngine
} from '@/api/index.js'
import mixin from '@/utils/mixin.js'
export default {
name: 'authorityAssignmentDialog',
mixins:[mixin],
props: {
dialogVisible: {
type: Boolean,
default: false
},
dataItem: {
type: Object,
default () {
return {}
}
},
listOrganArr: {
type: Array,
default () {
return []
}
}
},
watch: {
dataItem(newVal) {
this.dataItem = newVal;
if (JSON.stringify(newVal) !== '{}') {
this.tabs = this.systemList[0].value
// console.log(this.systemList[0].value)
this.systemList.forEach(value=>{
this.$set(this.treeList,value.value,null)
this.$set(this.checkedKeys,value.value,[])
this.gettreeList(newVal.roleId,value.value);
})
// this.getEnginetreeList(newVal.id);
this.form = {
roleId: newVal.roleId,
organId: newVal.organId,
roleName: newVal.roleName
}
}
}
},
data() {
return {
form: {
roleId: '',
organId: '',
roleName: ''
},
tabs:"",
disabled: true,
props: {
label: 'name',
children: 'children'
},
count: 1,
treeList: {
},
engineList: [],
// 默认选中节点
checkedKeys: {
},
engineCheckedKeys: []
}
},
methods: {
findTreeChange(data, checked, indeterminate) {
let nodes = this.$refs.tree.getCheckedNodes()
this.checkedKeys[this.tabs] = nodes.map(item => {
return item.resourceId
})
},
// 搜索引擎子权限:
// engineTreeChange(data,checked,indeterminate){
// let nodes = this.$refs.engineTree.getCheckedNodes()
// this.engineCheckedKeys = nodes.map(item => {
// return item.id
// })
// },
getTreeData(data, type,str) {
let treeArr = data;
let result = []
for (let i = 0; i < treeArr.length; i++) {
let item = treeArr[i];
if (item.parentId == 0) {
result.push(item);
}
}
this.data2treeDG(treeArr, result, type,str);
},
data2treeDG(datas, dataArray, type,str) {
// console.log(datas, dataArray, type)
for (let j = 0; j < dataArray.length; j++) {
let dataArrayIndex = dataArray[j];
let childrenArray = [];
let Id = dataArrayIndex.resourceId;
if (dataArrayIndex.checked) {
(type == 1) ? this.checkedKeys[str].push(dataArrayIndex.resourceId): this.engineCheckedKeys.push(dataArrayIndex.resourceId)
}
for (let i = 0; i < datas.length; i++) {
let data = datas[i];
let parentId = data.parentId;
if (parentId == Id) { //判断是否为儿子节点
childrenArray.push(data);
if (data.checked) {
(type == 1) ? this.checkedKeys[str].push(data.resourceId): this.engineCheckedKeys.push(data.resourceId)
}
}
}
dataArrayIndex.children = childrenArray;
if (childrenArray.length > 0) { //有儿子节点则递归
this.data2treeDG(datas, childrenArray)
}
}
if (type == 1) {
this.treeList[str] = dataArray;
console.log(this.treeList)
} else {
this.engineList = dataArray;
}
},
// 新增或编辑
onSubmit() {
console.log(this.checkedKeys)
this.checkedKeys.EngineX.forEach(value => {
if (this.deepparentId(value,'EngineX')) {
this.checkedKeys.EngineX.push(this.deepparentId(value,'EngineX'))
}
})
this.checkedKeys.DataX.forEach(value => {
if (this.deepparentId(value,'DataX')) {
this.checkedKeys.DataX.push(this.deepparentId(value,'DataX'))
}
})
let arr = []
this.systemList.forEach(value=>{
arr.push(...this.checkedKeys[value.value])
})
console.log(arr)
arr = this.unique(arr)
this.updateInsertRoleMenu({
roleId: this.dataItem.roleId,
ids: arr.join(',')
})
// 搜索引擎子权限:
// this.updateInsertRoleEngine({
// roleId:this.dataItem.id,
// ids:this.engineCheckedKeys.join(',')
// })
},
unique(arr) {
return Array.from(new Set(arr))
},
deepparentId(id,str) {
let num
this.treeList[str].forEach(value => {
if (value.resourceId == id) {
num = value.parentId
}
if (value.children.length > 0) {
value.children.forEach(item => {
if (item.resourceId == id) {
num = item.parentId
}
})
}
})
return num
},
async updateInsertRoleMenu(form) {
const data = await insertRoleMenu(form)
if (data.status != "0") {
if (data.data) {
this.$message({
message: '修改成功!',
type: 'success'
});
this.handleClose();
}
}
},
async updateInsertRoleEngine(form) {
const data = await insertRoleEngine(form)
if (data.status != "0") {
if (data.data) {
this.$message({
message: '修改成功!',
type: 'success'
});
this.handleClose();
}
}
},
async gettreeList(id,str) {
if(this.treeList[str]) return
const data = await getFindtreeList({
"roleId": id,
"entity":{
"resourceSystem":str
}
})
if (data.status != "0") {
data.data.forEach(value=>{
if(!value.checked){
data.data.forEach(item=>{
if(item.resourceId==value.parentId){
item.checked = false
}
})
}
})
this.getTreeData(data.data, 1,str);
}
},
async getEnginetreeList(id) {
const data = await getEngineTree({
"roleId": id,
})
if (data.status != "0") {
this.getTreeData(data.data, 2);
}
},
handleClose() {
this.form = {
roleId: '',
organId: '',
roleName: ''
}
this.checkedKeys.EngineX = []
this.checkedKeys.DataX = []
this.treeList.EngineX=null
this.treeList.DataX=null
this.tabs = 'EngineX'
this.$emit('closeEvent');
}
}
}
</script>
<style>
.el-dialog__body {
padding: 20px 40px;
}
.user-edit-wrapper .el-input {
width: 80%;
}
.user-edit-wrapper .btn-group {
margin-top: 30px;
}
</style>