From b0d7b177be0515ba1a58dc8b6e9d0e60a59d5071 Mon Sep 17 00:00:00 2001 From: Ken Hai Date: Mon, 25 Aug 2025 21:32:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E6=8E=88=E6=9D=83=E7=9A=84=E6=A0=91=E5=BD=A2=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E5=8F=96=E6=B6=88=E5=8B=BE=E9=80=89=E5=8F=B6?= =?UTF-8?q?=E5=AD=90=E8=8A=82=E7=82=B9=EF=BC=8C=E7=88=B6=E7=BA=A7=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E7=8A=B6=E6=80=81=E9=94=99=E8=AF=AF=20(#6680)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: haiyinlong --- .../ui-kit/shadcn-ui/src/ui/tree/tree.vue | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue index c6c4df7d9..3e497c51a 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue @@ -103,10 +103,15 @@ function updateTreeValue() { treeValue.value = undefined; } else { if (Array.isArray(val)) { - const filteredValues = val.filter((v) => { + let filteredValues = val.filter((v) => { const item = getItemByValue(v); return item && !get(item, props.disabledField); }); + + if (!props.checkStrictly && props.autoCheckParent) { + filteredValues = processParentSelection(filteredValues); + } + treeValue.value = filteredValues.map((v) => getItemByValue(v)); if (filteredValues.length !== val.length) { @@ -123,7 +128,35 @@ function updateTreeValue() { } } } +function processParentSelection( + selectedValues: Array, +): Array { + if (props.checkStrictly) return selectedValues; + const result = [...selectedValues]; + + for (let i = result.length - 1; i >= 0; i--) { + const currentValue = result[i]; + if (currentValue === undefined) continue; + const currentItem = getItemByValue(currentValue); + + if (!currentItem) continue; + + const children = get(currentItem, props.childrenField); + if (Array.isArray(children) && children.length > 0) { + const hasSelectedChildren = children.some((child) => { + const childValue = get(child, props.valueField); + return result.includes(childValue); + }); + + if (!hasSelectedChildren) { + result.splice(i, 1); + } + } + } + + return result; +} function updateModelValue(val: Arrayable>) { if (Array.isArray(val)) { const filteredVal = val.filter((v) => !get(v, props.disabledField));