diff --git a/src/pages/script/index.tsx b/src/pages/script/index.tsx index 1046904b..90938eb8 100644 --- a/src/pages/script/index.tsx +++ b/src/pages/script/index.tsx @@ -36,7 +36,7 @@ import EditScriptNameModal from './editNameModal'; import debounce from 'lodash/debounce'; import { history, useOutletContext, useLocation } from '@umijs/max'; import { parse } from 'query-string'; -import { depthFirstSearch } from '@/utils'; +import { depthFirstSearch, findNode } from '@/utils'; import { SharedContext } from '@/layouts'; import useFilterTreeData from '@/hooks/useFilterTreeData'; import uniq from 'lodash/uniq'; @@ -80,7 +80,7 @@ const Script = () => { if (code === 200) { setData(data); initState(); - initGetScript(); + initGetScript(data); } }) .finally(() => needLoading && setLoading(false)); @@ -100,7 +100,7 @@ const Script = () => { }); }; - const initGetScript = () => { + const initGetScript = (_data: any) => { const { p, s } = parse(history.location.search); if (s) { const vkey = `${p}/${s}`; @@ -111,8 +111,11 @@ const Script = () => { parent: p, }, }; - setExpandedKeys([p]); - onTreeSelect([vkey], obj); + const item = findNode(_data, (c) => c.key === obj.node.key); + if (item) { + setExpandedKeys([p as string]); + onTreeSelect([vkey], obj); + } } }; diff --git a/src/utils/index.ts b/src/utils/index.ts index dd82982a..0145107b 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -152,9 +152,9 @@ export default function browserType() { shell === 'none' ? {} : { - shell, // wechat qq uc 360 2345 sougou liebao maxthon - shellVs, - }, + shell, // wechat qq uc 360 2345 sougou liebao maxthon + shellVs, + }, ); console.log( @@ -272,6 +272,29 @@ export function depthFirstSearch< return c; } +export function findNode & { children?: T[] }>( + children: T[], + condition: (column: T) => boolean, +) { + const c = [...children]; + + let item; + function find(cls: T[] | undefined): T | undefined { + if (!cls) return; + for (let i = 0; i < cls?.length; i++) { + if (condition(cls[i])) { + item = cls[i]; + } else if (cls[i].children) { + find(cls[i].children); + } + } + } + + find(c); + + return item; +} + export function logEnded(log: string): boolean { const endTips = [LOG_END_SYMBOL, '执行结束']; return endTips.some((x) => log.includes(x));