From ddd1893b113e13786037522341abb2e75f8f9d5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E6=9C=A8?= Date: Fri, 30 Jul 2021 15:23:58 +0800 Subject: [PATCH] fix(tree): fix `checkAll` effects `disabled` node --- CHANGELOG.zh_CN.md | 1 + src/components/Tree/src/Tree.vue | 3 ++- src/components/Tree/src/useTree.ts | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index de1bb27e5cc..31c8ef8ac21 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 354dccdfb6c..1af3bf85287 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 2f03acae88a..175e640b951 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, }; }