From 51e2fbcb0323cca9e77bbb4b4d8980c7ce9fe3f5 Mon Sep 17 00:00:00 2001 From: sallerli1 Date: Mon, 30 Oct 2023 15:11:19 +0800 Subject: [PATCH] feat(pro:search): tree field supports `defaultExpandedKeys` --- packages/pro/search/demo/Basic.vue | 1 + packages/pro/search/docs/Api.zh.md | 1 + packages/pro/search/src/panel/TreeSelectPanel.tsx | 2 +- packages/pro/search/src/segments/CreateTreeSelectSegment.tsx | 2 ++ packages/pro/search/src/types/panels.ts | 1 + packages/pro/search/src/types/searchFields.ts | 1 + 6 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/pro/search/demo/Basic.vue b/packages/pro/search/demo/Basic.vue index d582833ec..5a12869fe 100644 --- a/packages/pro/search/demo/Basic.vue +++ b/packages/pro/search/demo/Basic.vue @@ -103,6 +103,7 @@ const searchFields: SearchField[] = [ searchable: true, checkable: true, cascaderStrategy: 'all', + defaultExpandedKeys: ['0'], dataSource: [ { label: 'Node 0', diff --git a/packages/pro/search/docs/Api.zh.md b/packages/pro/search/docs/Api.zh.md index 39a4a4641..f361cfaf5 100644 --- a/packages/pro/search/docs/Api.zh.md +++ b/packages/pro/search/docs/Api.zh.md @@ -149,6 +149,7 @@ TreeSelectSearchFieldConfig | `draggableIcon` | 拖拽图标 | `string` | - | - | 详情参考[Tree](/components/tree/zh) | | `customDraggableIcon` | 拖拽图标自定义渲染 | `string \| () => VNodeChild` | - | - | 值为string时为对应名称的插槽 | | `expandIcon` | 展开收起图标 | `string \| TreeExpandIconRenderer \| [string, string]` | - | - | 详情参考[Tree](/components/tree/zh) | +| `defaultExpandedKeys` | 默认展开的节点Key | `VKey[]` | - | - | - | | `customExpandIcon` | 展开收起图标自定义渲染 | `string \| TreeExpandIconRenderer` | - | - | 值为string时为对应名称的插槽 | | `showLine` | 是否展示连线 | `boolean` | - | - | 详情参考[Tree](/components/tree/zh) | | `searchable` | 是否支持筛选 | `boolean` | `false` | - | 默认不支持 | diff --git a/packages/pro/search/src/panel/TreeSelectPanel.tsx b/packages/pro/search/src/panel/TreeSelectPanel.tsx index d700a324d..aebd8a190 100644 --- a/packages/pro/search/src/panel/TreeSelectPanel.tsx +++ b/packages/pro/search/src/panel/TreeSelectPanel.tsx @@ -173,7 +173,7 @@ function useExpandedKeys(props: ProSearchTreeSelectPanelProps): { expandedKeys: ComputedRef setExpandedKeys: (keys: VKey[]) => void } { - const initialExpandedKeySet = new Set() + const initialExpandedKeySet = new Set(props.defaultExpandedKeys ?? []) props.dataSource && traverseTree(props.dataSource, 'children', (item, parents) => { if (props.value?.includes(item.key)) { diff --git a/packages/pro/search/src/segments/CreateTreeSelectSegment.tsx b/packages/pro/search/src/segments/CreateTreeSelectSegment.tsx index b33190328..c8476c9d2 100644 --- a/packages/pro/search/src/segments/CreateTreeSelectSegment.tsx +++ b/packages/pro/search/src/segments/CreateTreeSelectSegment.tsx @@ -26,6 +26,7 @@ export function createTreeSelectSegment( cascaderStrategy, draggable, draggableIcon, + defaultExpandedKeys, customDraggableIcon, expandIcon, customExpandIcon, @@ -78,6 +79,7 @@ export function createTreeSelectSegment( dataSource={dataSource} draggable={draggable} draggableIcon={draggableIcon} + defaultExpandedKeys={defaultExpandedKeys} checkable={checkable} cascaderStrategy={cascaderStrategy} expandIcon={expandIcon} diff --git a/packages/pro/search/src/types/panels.ts b/packages/pro/search/src/types/panels.ts index 3035561d8..992941ef7 100644 --- a/packages/pro/search/src/types/panels.ts +++ b/packages/pro/search/src/types/panels.ts @@ -59,6 +59,7 @@ export const proSearchTreeSelectPanelProps = { draggable: { type: Boolean, default: false }, draggableIcon: { type: String, default: undefined }, droppable: { type: Function as PropType, default: undefined }, + defaultExpandedKeys: { type: Array as PropType, default: undefined }, expandIcon: { type: [String, Array] as PropType, default: undefined }, loadChildren: { diff --git a/packages/pro/search/src/types/searchFields.ts b/packages/pro/search/src/types/searchFields.ts index 866ff20ba..28ee0d84c 100644 --- a/packages/pro/search/src/types/searchFields.ts +++ b/packages/pro/search/src/types/searchFields.ts @@ -76,6 +76,7 @@ interface TreeSelectSearchFieldBase { draggableIcon?: string customDraggableIcon?: string | (() => VNodeChild) expandIcon?: string | [string, string] + defaultExpandedKeys?: VKey[] customExpandIcon?: string | ((options: { key: VKey; expanded: boolean; node: TreeSelectPanelData }) => VNodeChild) showLine?: boolean searchable?: boolean