From 3cde69f6f96b6829fa8505511bfd706b4d4df2ff Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 7 May 2026 13:53:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=94=AF=E6=8C=81=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E7=BB=84=E4=BB=B6=E6=A0=91=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=8F=AF=E5=B1=95=E5=BC=80=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 layerNodeIsExpandable 配置项,业务方可自定义"已选组件"面板中 节点是否显示为可展开形态。同时导出默认实现 defaultIsExpandable 与 类型 IsExpandableFunction 供第三方复用。 Co-authored-by: Cursor --- docs/api/editor/props.md | 40 +++++ packages/editor/src/Editor.vue | 1 + packages/editor/src/components/Tree.vue | 5 +- packages/editor/src/components/TreeNode.vue | 16 +- packages/editor/src/editorProps.ts | 3 + .../editor/src/layouts/sidebar/Sidebar.vue | 4 + .../src/layouts/sidebar/layer/LayerPanel.vue | 12 +- packages/editor/src/type.ts | 3 + packages/editor/src/utils/tree.ts | 6 +- packages/editor/tests/unit/utils/tree.spec.ts | 139 ++++++++++++++++++ 10 files changed, 218 insertions(+), 11 deletions(-) create mode 100644 packages/editor/tests/unit/utils/tree.spec.ts diff --git a/docs/api/editor/props.md b/docs/api/editor/props.md index ec179e5a..0438a2fa 100644 --- a/docs/api/editor/props.md +++ b/docs/api/editor/props.md @@ -1171,6 +1171,46 @@ const customContentMenu = (menus, { node }) => { ``` +## layerNodeIsExpandable + +- **详情:** + + 用于自定义判断"已选组件"面板中组件树节点是否可展开(即是否要展示为拥有子节点的形态) + + 该函数返回 `true` 时,节点会显示展开图标,并在展开后渲染子节点容器;返回 `false` 时,展开图标显示为透明占位,且不渲染子节点容器 + + 默认行为:当节点的 `items` 中至少存在一个 `visible` 状态为 `true` 的子节点时认为可展开(被搜索过滤隐藏的子节点不会让父节点显示为可展开) + +- **默认值:** `defaultIsExpandable` + +- **类型:** `(data: TreeNodeData, nodeStatusMap: Map) => boolean` + +- **示例:** + +```html + + + +``` + +::: tip +该函数仅作用于"已选组件"面板的组件树节点,不影响代码块、数据源等其它面板内的树。 + +第三方业务可从 `@tmagic/editor` 直接导入 `defaultIsExpandable` 复用默认逻辑作为兜底。 +::: + ## extendFormState - **详情:** diff --git a/packages/editor/src/Editor.vue b/packages/editor/src/Editor.vue index dedbc66f..394a9add 100644 --- a/packages/editor/src/Editor.vue +++ b/packages/editor/src/Editor.vue @@ -26,6 +26,7 @@ :custom-content-menu="customContentMenu" :indent="treeIndent" :next-level-indent-increment="treeNextLevelIndentIncrement" + :layer-node-is-expandable="layerNodeIsExpandable" >