Commit ddd1893b113e13786037522341abb2e75f8f9d5b

Authored by 无木
1 parent e8eefd1b

fix(tree): fix `checkAll` effects `disabled` node

CHANGELOG.zh_CN.md
... ... @@ -9,6 +9,7 @@
9 9 - **ImgRotateDragVerify** 修复组件`resume`方法无法调用的问题
10 10 - **TableAction** 修复 stopButtonPropagation 属性某些情况下不起作用的问题
11 11 - **PageWrapper** 修复`class`属性无效的问题
  12 +- **BasicTree** 修复`checkAll`方法会影响到`disabled`状态节点的问题
12 13 - **BasicTable**
13 14 - 修复可编辑单元格不支持`ellipsis`配置的问题
14 15 - 修复全屏模式下看不到子组件弹出层(popconfirm 以及 select、treeSelect 等编辑组件)的问题
... ...
src/components/Tree/src/Tree.vue
... ... @@ -127,6 +127,7 @@
127 127 updateNodeByKey,
128 128 getAllKeys,
129 129 getChildrenKeys,
  130 + getEnabledKeys,
130 131 } = useTree(treeDataRef, getReplaceFields);
131 132  
132 133 function getIcon(params: Recordable, icon?: string) {
... ... @@ -180,7 +181,7 @@
180 181 }
181 182  
182 183 function checkAll(checkAll: boolean) {
183   - state.checkedKeys = checkAll ? getAllKeys() : ([] as Keys);
  184 + state.checkedKeys = checkAll ? getEnabledKeys() : ([] as Keys);
184 185 }
185 186  
186 187 function expandAll(expandAll: boolean) {
... ...
src/components/Tree/src/useTree.ts
... ... @@ -26,6 +26,23 @@ export function useTree(
26 26 }
27 27 return keys as Keys;
28 28 }
  29 + // get keys that can be checked and selected
  30 + function getEnabledKeys(list?: TreeDataItem[]) {
  31 + const keys: string[] = [];
  32 + const treeData = list || unref(treeDataRef);
  33 + const { key: keyField, children: childrenField } = unref(getReplaceFields);
  34 + if (!childrenField || !keyField) return keys;
  35 +
  36 + for (let index = 0; index < treeData.length; index++) {
  37 + const node = treeData[index];
  38 + node.disabled !== true && node.selectable !== false && keys.push(node[keyField]!);
  39 + const children = node[childrenField];
  40 + if (children && children.length) {
  41 + keys.push(...(getEnabledKeys(children) as string[]));
  42 + }
  43 + }
  44 + return keys as Keys;
  45 + }
29 46  
30 47 function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]): Keys {
31 48 const keys: Keys = [];
... ... @@ -169,5 +186,6 @@ export function useTree(
169 186 updateNodeByKey,
170 187 getAllKeys,
171 188 getChildrenKeys,
  189 + getEnabledKeys,
172 190 };
173 191 }
... ...