diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index de1bb27e5cc8080fadd7701f184e9eb408d72bf9..31c8ef8ac21cb003756959a371a9bbc9f204dcb9 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -9,6 +9,7 @@ - **ImgRotateDragVerify** 修复组件`resume`方法无法调用的问题 - **TableAction** 修复 stopButtonPropagation 属性某些情况下不起作用的问题 - **PageWrapper** 修复`class`属性无效的问题 +- **BasicTree** 修复`checkAll`方法会影响到`disabled`状态节点的问题 - **BasicTable** - 修复可编辑单元格不支持`ellipsis`配置的问题 - 修复全屏模式下看不到子组件弹出层(popconfirm 以及 select、treeSelect 等编辑组件)的问题 diff --git a/src/components/Tree/src/Tree.vue b/src/components/Tree/src/Tree.vue index 354dccdfb6c650026fcb9c9fdb386d6e840da21b..1af3bf85287e72a17197fd4a5670dd4b035a57ad 100644 --- a/src/components/Tree/src/Tree.vue +++ b/src/components/Tree/src/Tree.vue @@ -127,6 +127,7 @@ updateNodeByKey, getAllKeys, getChildrenKeys, + getEnabledKeys, } = useTree(treeDataRef, getReplaceFields); function getIcon(params: Recordable, icon?: string) { @@ -180,7 +181,7 @@ } function checkAll(checkAll: boolean) { - state.checkedKeys = checkAll ? getAllKeys() : ([] as Keys); + state.checkedKeys = checkAll ? getEnabledKeys() : ([] as Keys); } function expandAll(expandAll: boolean) { diff --git a/src/components/Tree/src/useTree.ts b/src/components/Tree/src/useTree.ts index 2f03acae88ad159c0d3824110294898a34ca1e60..175e640b9511d1148e12690f2391245132fd606b 100644 --- a/src/components/Tree/src/useTree.ts +++ b/src/components/Tree/src/useTree.ts @@ -26,6 +26,23 @@ export function useTree( } return keys as Keys; } + // get keys that can be checked and selected + function getEnabledKeys(list?: TreeDataItem[]) { + const keys: string[] = []; + const treeData = list || unref(treeDataRef); + const { key: keyField, children: childrenField } = unref(getReplaceFields); + if (!childrenField || !keyField) return keys; + + for (let index = 0; index < treeData.length; index++) { + const node = treeData[index]; + node.disabled !== true && node.selectable !== false && keys.push(node[keyField]!); + const children = node[childrenField]; + if (children && children.length) { + keys.push(...(getEnabledKeys(children) as string[])); + } + } + return keys as Keys; + } function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]): Keys { const keys: Keys = []; @@ -169,5 +186,6 @@ export function useTree( updateNodeByKey, getAllKeys, getChildrenKeys, + getEnabledKeys, }; }