diff --git a/software/web/src/pages/devices/index.tsx b/software/web/src/pages/devices/index.tsx index 72d9a97..cc27e7f 100644 --- a/software/web/src/pages/devices/index.tsx +++ b/software/web/src/pages/devices/index.tsx @@ -123,17 +123,37 @@ export default function Devices() { return; } setSelectedKeys(keys); - if (key.startsWith('org-')) { - setSelectedType('organization'); - setSelectedId(Number(key.replace('org-', ''))); - } else if (key.startsWith('proj-')) { - setSelectedType('project'); - setSelectedId(Number(key.replace('proj-', ''))); - } else if (key.startsWith('cab-')) { - setSelectedType('cabinet'); - setSelectedId(Number(key.replace('cab-', ''))); + + // 找到对应的树节点,获取类型和ID + const findNode = (nodes: TreeInternalNode[], targetKey: string): TreeInternalNode | undefined => { + for (const n of nodes) { + if (n.key === targetKey) return n; + if (n.children) { + const found = findNode(n.children, targetKey); + if (found) return found; + } + } + return undefined; + }; + + // 从treeData中查找 + const findInTreeData = (nodes: TreeInternalNode[], targetKey: string): TreeInternalNode | undefined => { + for (const n of nodes) { + if (n.key === targetKey) return n; + if (n.children) { + const found = findInTreeData(n.children, targetKey); + if (found) return found; + } + } + return undefined; + }; + + const node = findInTreeData(treeData, key); + if (node) { + setSelectedType(node._type); + setSelectedId(node._id); } - }, []); + }, [treeData]); // -------- 组织/项目 CRUD --------