From cb6260c8cbaddb26b1c15adb07c739d40a76ea32 Mon Sep 17 00:00:00 2001 From: chencc Date: Wed, 14 Apr 2021 07:03:31 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=97=B6=E6=B7=B1=E5=BA=A6=E4=BC=98=E5=85=88=E9=81=8D=E5=8E=86?= =?UTF-8?q?=E5=AD=90=E8=8A=82=E7=82=B9=E6=98=AF=E5=90=A6=E5=85=A8=E9=80=89?= =?UTF-8?q?=EF=BC=8C=E5=85=A8=E9=80=89=E5=90=8E=E7=9B=B4=E6=8E=A5=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=B8=80=E6=95=B4=E4=B8=AA=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(tree-select): 删除父节点的最后一个子节点后选中了另外的子节点. #3508 #3586 --- components/vc-tree-select/src/Select.jsx | 32 +++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/components/vc-tree-select/src/Select.jsx b/components/vc-tree-select/src/Select.jsx index 33edb0edba..c63bea785c 100644 --- a/components/vc-tree-select/src/Select.jsx +++ b/components/vc-tree-select/src/Select.jsx @@ -879,7 +879,37 @@ const Select = defineComponent({ const { keyCode } = event; if (KeyCode.BACKSPACE === keyCode && this.isMultiple() && !searchValue && valueList.length) { - const lastValue = valueList[valueList.length - 1].value; + // cache result + let tempMap = new WeakMap(); + // if childrens‘s status is select all, then remove parent + let lastValue = valueList[valueList.length - 1].value; + const lastValueParent = valueEntities[lastValue].parent; + //every children include node's value or node's disabled is true + function dfs (children) { + if(tempMap.get(children)) return true; + for(let i = 0; i < children.length; i++){ + const item = children[i]; + if(item.children && item.children.length) { + if(!dfs(item.children)){ + return false; + } + } + if(!valueList.some( j => j.value === item.value || item.disabled === true)) { + return false; + } + } + tempMap.set(children, true); + return true; + } + const isAllChoise = dfs(lastValueParent.children); + if (isAllChoise) { + let cur = lastValueParent.parent; + lastValue = lastValueParent.value; + while(cur) { + dfs(cur.children) && (lastValue = cur.value); + cur = cur.parent; + } + } this.onMultipleSelectorRemove(event, lastValue); } }, From 1455e239caf142c61c7167e807306055974eb159 Mon Sep 17 00:00:00 2001 From: chencc Date: Wed, 14 Apr 2021 07:09:34 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0treeNode=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit disabled参数用于在tree-select 组件获取时用于跳过该节点(disabled为true用作删除全选判断) --- components/vc-tree/src/util.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/vc-tree/src/util.js b/components/vc-tree/src/util.js index ed5a5e3073..d58d41bf44 100644 --- a/components/vc-tree/src/util.js +++ b/components/vc-tree/src/util.js @@ -194,8 +194,8 @@ export function convertTreeToEntities( } traverseTreeNodes(treeNodes, item => { - const { node, index, pos, key, parentPos } = item; - const entity = { node, index, key, pos }; + const { node, index, pos, key, parentPos, disabled } = item; + const entity = { node, index, key, pos, disabled }; posEntities.set(pos, entity); keyEntities.set(key, entity); From 911ed0595eeae42ede70bcf7a204b513ad200a5d Mon Sep 17 00:00:00 2001 From: chencc Date: Wed, 14 Apr 2021 07:14:51 +0800 Subject: [PATCH 3/5] =?UTF-8?q?treeNode=20=E5=A2=9E=E5=8A=A0disabled?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit treeNode 增加disabled参数 --- components/vc-tree/src/util.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/vc-tree/src/util.js b/components/vc-tree/src/util.js index d58d41bf44..7a905cec32 100644 --- a/components/vc-tree/src/util.js +++ b/components/vc-tree/src/util.js @@ -56,6 +56,7 @@ export function traverseTreeNodes(treeNodes, callback) { function processNode(node, index, parent) { const children = node ? getSlot(node) : treeNodes; const pos = node ? getPosition(parent.pos, index) : 0; + const disabled = node ? node.props.disabled : false // Filter children const childList = getNodeChildren(children); @@ -71,6 +72,7 @@ export function traverseTreeNodes(treeNodes, callback) { index, pos, key, + disabled, parentPos: parent.node ? parent.pos : null, }; callback(data); From 5250a39ffedc10aadf57b8035273cf95d9d01d2a Mon Sep 17 00:00:00 2001 From: chencc Date: Wed, 14 Apr 2021 10:45:28 +0800 Subject: [PATCH 4/5] Update Select.jsx --- components/vc-tree-select/src/Select.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/vc-tree-select/src/Select.jsx b/components/vc-tree-select/src/Select.jsx index c63bea785c..432eef3116 100644 --- a/components/vc-tree-select/src/Select.jsx +++ b/components/vc-tree-select/src/Select.jsx @@ -874,7 +874,7 @@ const Select = defineComponent({ }, onSearchInputKeyDown(event) { - const { _searchValue: searchValue, _valueList: valueList } = this.$data; + const { _searchValue: searchValue, _valueList: valueList, _valueEntities: valueEntities } = this.$data; const { keyCode } = event; From 566ed43befaf162717023b940d35d138769bdc5d Mon Sep 17 00:00:00 2001 From: chencc Date: Wed, 14 Apr 2021 21:39:16 +0800 Subject: [PATCH 5/5] Update Select.jsx --- components/vc-tree-select/src/Select.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/vc-tree-select/src/Select.jsx b/components/vc-tree-select/src/Select.jsx index 432eef3116..e33eaead32 100644 --- a/components/vc-tree-select/src/Select.jsx +++ b/components/vc-tree-select/src/Select.jsx @@ -901,7 +901,7 @@ const Select = defineComponent({ tempMap.set(children, true); return true; } - const isAllChoise = dfs(lastValueParent.children); + const isAllChoise = lastValueParent && dfs(lastValueParent.children); if (isAllChoise) { let cur = lastValueParent.parent; lastValue = lastValueParent.value;