[update] 选部门组件先选复选框后再改变父子关联,页面选中数据和实际选中数据不符合的问题

This commit is contained in:
lideqin
2024-04-17 10:28:14 +08:00
parent cc6264e8e6
commit eb76804fe4
@@ -13,6 +13,7 @@
<a-spin tip="Loading..." :spinning="false">
<a-input-search style="margin-bottom: 1px" :placeholder="$t('selectDepartment.enterDepartmentPressEnter')" @search="onSearch" />
<a-tree
ref="tree"
:checkable="true"
:class="treeScreenClass"
:treeData="treeData"
@@ -310,20 +311,58 @@ export default {
}
return rows
},
// 获取currKeys及其子节点
getChildrenTreeData (currKeys, treeData) {
const childrenKeys = []
for (let i = 0; i < treeData.length; i++) {
if (currKeys.includes(treeData[i].key)) {
childrenKeys.push(treeData[i].key)
if (treeData[i].children) {
const childrenKeysArr = this.getChildrenKeys(treeData[i].children)
childrenKeys.push(...childrenKeysArr)
}
}
if (treeData[i].children) {
childrenKeys.push(...this.getChildrenTreeData(currKeys, treeData[i].children))
}
}
return childrenKeys
},
// 把传入的树结构key值全部存成一个数组
getChildrenKeys (treeData) {
const arr = []
for (const item of treeData) {
arr.push(item.key)
if (item.children) {
arr.push(...this.getChildrenKeys(item.children))
}
}
return arr
},
// 获取所有子节点全选的父节点
getChildAllCheckNode (treeData) {
const nodeKeys = []
for (const item of treeData) {
if (item.children) {
if (item.children.every(i => this.checkedKeys.includes(i.key))) {
// 子节点每一个都选中了
nodeKeys.push(item.key)
}
nodeKeys.push(...this.getChildAllCheckNode(item.children))
}
}
return nodeKeys
},
switchCheckStrictly (v) {
if (v === 1) {
this.checkStrictly = false
const allChildrenCheckKeys = this.getChildAllCheckNode(this.treeData)
const allChildrenKeys = this.getChildrenTreeData(this.checkedKeys, this.treeData)
this.checkedKeys = Array.from([...allChildrenCheckKeys, ...allChildrenKeys])
this.checkedRows = this.getCheckedRows(this.checkedKeys)
} else if (v === 2) {
this.checkStrictly = true
}
this.$nextTick(() => {
const dom = document.getElementsByClassName('ant-tree-checkbox')
console.log(dom)
dom[0].click()
setTimeout(() => {
dom[0].click()
}, 0)
})
},
isFullscreen (val) {
this.fullscreen = val