在做权限的时候,提交数据会把选中与半选中的数据提交给后台,但是在回显时后台返回的数据包含父节点,导致子节点全部选中。解决方法,在回显的时候把后台返回的数据中把所有的父节点给删掉这样就能解决问题。
- 提交全选与半选状态数据
<el-tree ref="orgTree" show-checkbox check-on-click-node :data="orgTree" :props="defaultProps" :default-checked-keys="checkedKeys" node-key="id" :expand-on-click-node="false" :destroy-on-close="true" />
// 全选状态数据
const checkedKeys = this.$refs.orgTree.getCheckedKeys()
// 半选状态数据
const halfSelected = this.$refs.orgTree.getHalfCheckedKeys()
// 包含全选与半选状态的数据
const saveCheckedKeys = checkedKeys.concat(halfSelected)
- 回显将含有父节点的数据给删除
a. tree 数据结构
b. 回显数据包含父节点
echoTree() {
this.clearParentOrgCode(this.orgTree)
// this.orgCodes 后台返回的包含父节点数据 this.parentsCodes 父节点数据
this.checkedKeys = this.removeArr(this.orgCodes, this.parentsCodes)
},
// 递归找寻父节点数据
clearParentOrgCode(tree) {
const orgCodes = this.orgCodes
tree.forEach(item => {
if (item.children && item.children.length > 0) {
if (orgCodes.includes(item.id)) {
this.parentsCodes.push(item.id)
}
this.clearParentOrgCode(item.children)
}
})
},
// 过滤数组
removeArr(arr1, arr2) {
return arr1.filter((item) => !arr2.includes(item))
},