Commit 5ad93c6004026489bd22b32ef049f7c63efc1024

Authored by chengj
Committed by GitHub
1 parent ce7f382b

feat(function): get selected tree node (#1857)

src/components/Tree/src/Tree.vue
@@ -119,6 +119,7 @@ @@ -119,6 +119,7 @@
119 getAllKeys, 119 getAllKeys,
120 getChildrenKeys, 120 getChildrenKeys,
121 getEnabledKeys, 121 getEnabledKeys,
  122 + getSelectedNode,
122 } = useTree(treeDataRef, getFieldNames); 123 } = useTree(treeDataRef, getFieldNames);
123 124
124 function getIcon(params: Recordable, icon?: string) { 125 function getIcon(params: Recordable, icon?: string) {
@@ -320,6 +321,7 @@ @@ -320,6 +321,7 @@
320 insertNodesByKey, 321 insertNodesByKey,
321 deleteNodeByKey, 322 deleteNodeByKey,
322 updateNodeByKey, 323 updateNodeByKey,
  324 + getSelectedNode,
323 checkAll, 325 checkAll,
324 expandAll, 326 expandAll,
325 filterByLevel: (level: number) => { 327 filterByLevel: (level: number) => {
src/components/Tree/src/tree.ts
@@ -185,4 +185,9 @@ export interface TreeActionType { @@ -185,4 +185,9 @@ export interface TreeActionType {
185 updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void; 185 updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void;
186 setSearchValue: (value: string) => void; 186 setSearchValue: (value: string) => void;
187 getSearchValue: () => string; 187 getSearchValue: () => string;
  188 + getSelectedNode: (
  189 + key: KeyType,
  190 + treeList?: TreeItem[],
  191 + selectNode?: TreeItem | null,
  192 + ) => TreeItem | null;
188 } 193 }
src/components/Tree/src/useTree.ts
1 -import type { InsertNodeParams, KeyType, FieldNames } from './tree'; 1 +import type { InsertNodeParams, KeyType, FieldNames, TreeItem } from './tree';
2 import type { Ref, ComputedRef } from 'vue'; 2 import type { Ref, ComputedRef } from 'vue';
3 import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; 3 import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
4 4
@@ -176,6 +176,23 @@ export function useTree(treeDataRef: Ref&lt;TreeDataItem[]&gt;, getFieldNames: Compute @@ -176,6 +176,23 @@ export function useTree(treeDataRef: Ref&lt;TreeDataItem[]&gt;, getFieldNames: Compute
176 } 176 }
177 } 177 }
178 } 178 }
  179 +
  180 + // Get selected node
  181 + function getSelectedNode(key: KeyType, list?: TreeItem[], selectedNode?: TreeItem | null) {
  182 + if (!key && key !== 0) return null;
  183 + const treeData = list || unref(treeDataRef);
  184 + treeData.forEach((item) => {
  185 + if (selectedNode?.key || selectedNode?.key === 0) return selectedNode;
  186 + if (item.key === key) {
  187 + selectedNode = item;
  188 + return;
  189 + }
  190 + if (item.children && item.children.length) {
  191 + selectedNode = getSelectedNode(key, item.children, selectedNode);
  192 + }
  193 + });
  194 + return selectedNode || null;
  195 + }
179 return { 196 return {
180 deleteNodeByKey, 197 deleteNodeByKey,
181 insertNodeByKey, 198 insertNodeByKey,
@@ -185,5 +202,6 @@ export function useTree(treeDataRef: Ref&lt;TreeDataItem[]&gt;, getFieldNames: Compute @@ -185,5 +202,6 @@ export function useTree(treeDataRef: Ref&lt;TreeDataItem[]&gt;, getFieldNames: Compute
185 getAllKeys, 202 getAllKeys,
186 getChildrenKeys, 203 getChildrenKeys,
187 getEnabledKeys, 204 getEnabledKeys,
  205 + getSelectedNode,
188 }; 206 };
189 } 207 }
src/views/demo/tree/ActionTree.vue
@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 <a-button @click="handleGetCheckData" class="mr-2"> 获取勾选数据 </a-button> 13 <a-button @click="handleGetCheckData" class="mr-2"> 获取勾选数据 </a-button>
14 <a-button @click="handleSetSelectData" class="mr-2"> 设置选中数据 </a-button> 14 <a-button @click="handleSetSelectData" class="mr-2"> 设置选中数据 </a-button>
15 <a-button @click="handleGetSelectData" class="mr-2"> 获取选中数据 </a-button> 15 <a-button @click="handleGetSelectData" class="mr-2"> 获取选中数据 </a-button>
  16 + <a-button @click="handleGetSelectNode" class="mr-2"> 获取选中节点 </a-button>
16 17
17 <a-button @click="handleSetExpandData" class="mr-2"> 设置展开数据 </a-button> 18 <a-button @click="handleSetExpandData" class="mr-2"> 设置展开数据 </a-button>
18 <a-button @click="handleGetExpandData" class="mr-2"> 获取展开数据 </a-button> 19 <a-button @click="handleGetExpandData" class="mr-2"> 获取展开数据 </a-button>
@@ -69,6 +70,12 @@ @@ -69,6 +70,12 @@
69 createMessage.success(JSON.stringify(keys)); 70 createMessage.success(JSON.stringify(keys));
70 } 71 }
71 72
  73 + function handleGetSelectNode() {
  74 + const keys = getTree().getSelectedKeys();
  75 + const node = getTree().getSelectedNode(keys[0]);
  76 + createMessage.success(node !== null ? JSON.stringify(node) : null);
  77 + }
  78 +
72 function handleSetExpandData() { 79 function handleSetExpandData() {
73 getTree().setExpandedKeys(['0-0']); 80 getTree().setExpandedKeys(['0-0']);
74 } 81 }
@@ -120,6 +127,7 @@ @@ -120,6 +127,7 @@
120 handleGetSelectData, 127 handleGetSelectData,
121 handleSetExpandData, 128 handleSetExpandData,
122 handleGetExpandData, 129 handleGetExpandData,
  130 + handleGetSelectNode,
123 appendNodeByKey, 131 appendNodeByKey,
124 deleteNodeByKey, 132 deleteNodeByKey,
125 updateNodeByKey, 133 updateNodeByKey,