From dbac4e4c305f549462823f85350a3a20d7536512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E8=92=99=E6=81=A9?= <37646958+XuMengEnEli@users.noreply.github.com> Date: Mon, 24 Aug 2026 21:19:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(tree):=20=E6=96=B0=E5=A2=9E=20keepParentOn?= =?UTF-8?q?Uncheck=20=E5=B1=9E=E6=80=A7=EF=BC=8C=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E5=8B=BE=E9=80=89=E5=AD=90=E8=8A=82=E7=82=B9=E6=97=B6=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E7=88=B6=E8=8A=82=E7=82=B9=E9=80=89=E4=B8=AD=20(#8281?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 权限树等父子节点均为独立授权项的场景中,checkStrictly 与 autoCheckParent 组合下取消勾选子节点会级联清空父节点,用户显式勾选的父级授权被误清空。 - types.ts:TreeProps 新增 keepParentOnUncheck 可选属性,默认 false(与现有级联取消行为一致) - tree.vue:onSelect 取消勾选分支的级联条件追加该属性取反判定,勾选方向的级联不受影响 --- packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue | 1 + packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts | 3 +++ 2 files changed, 4 insertions(+) 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 0a6e8806d..149332b16 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 @@ -249,6 +249,7 @@ function onSelect(item: FlattenedItem>, isSelected: boolean) { props.checkStrictly && props.multiple && props.autoCheckParent && + !props.keepParentOnUncheck && !isSelected ) { flattenData.value diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts index b962a7ee7..7d1a33208 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts @@ -27,6 +27,8 @@ export interface TreeProps { /** 自定义节点类名 */ getNodeClass?: (item: FlattenedItem>) => string; iconField?: string; + /** 取消勾选子节点时保持父节点的选中状态,不级联取消父节点(默认 false:级联取消) */ + keepParentOnUncheck?: boolean; /** label字段 */ labelField?: string; /** 是否多选 */ @@ -58,6 +60,7 @@ export function treePropsDefaults() { multiple: false, showIcon: true, transition: true, + keepParentOnUncheck: false, valueField: 'value', childrenField: 'children', };