From a3735d3a5ba1cda6d70b5bf1524de66330a7792e Mon Sep 17 00:00:00 2001 From: ZLY Date: Fri, 26 Sep 2025 14:40:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(ideContainer):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E9=80=89=E4=B8=AD=E9=80=BB=E8=BE=91=E4=B8=8E?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/ideContainer/config/menuData.ts | 30 ++++++++++++++++------- src/pages/ideContainer/index.tsx | 5 ++-- src/pages/ideContainer/navBar.tsx | 12 +++++---- src/pages/ideContainer/sideBar.tsx | 14 +++-------- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/pages/ideContainer/config/menuData.ts b/src/pages/ideContainer/config/menuData.ts index 1fcb01f..3ffc73c 100644 --- a/src/pages/ideContainer/config/menuData.ts +++ b/src/pages/ideContainer/config/menuData.ts @@ -3,6 +3,7 @@ export const menuData1 = [ title: '应用列表', path: '', key: 'appList', + parentKey: 'appList', children: [ { title: '应用A', @@ -41,6 +42,7 @@ export const menuData1 = [ { title: '应用编排', key: 'appFlow', + parentKey: 'appFlow', children: null, path: 'appFlow' }, @@ -48,19 +50,22 @@ export const menuData1 = [ title: '事件', children: null, path: 'event', - key: 'event' + key: 'event', + parentKey: 'event' }, { title: '全局变量', children: null, path: 'globalVar', - key: 'globalVar' + key: 'globalVar', + parentKey: 'globalVar' }, { title: '组件', children: null, path: 'appCompList', - key: 'appCompList' + key: 'appCompList', + parentKey: 'appCompList' } ]; @@ -68,21 +73,25 @@ export const menuData2 = [ { title: '组件列表', key: 'componentList', + parentKey: 'componentList', children: [ { title: '我的组件', children: null, - path: 'myComponents' + path: 'myComponents', + parentKey: 'componentList' }, { title: '协同组件', children: null, - path: 'matchingComponents' + path: 'matchingComponents', + parentKey: 'componentList' }, { title: '组件审核', children: null, - path: 'componentReview' + path: 'componentReview', + parentKey: 'componentList' } ] }, @@ -90,19 +99,22 @@ export const menuData2 = [ title: '组件编码', children: null, path: 'componentCoding', - key: 'componentCoding' + key: 'componentCoding', + parentKey: 'componentCoding' }, { title: '组件部署', children: null, path: 'componentDeployment', - key: 'componentDeployment' + key: 'componentDeployment', + parentKey: 'componentDeployment' }, { title: '组件测试', children: null, path: 'componentTest', - key: 'componentTest' + key: 'componentTest', + parentKey: 'componentTest' } ]; diff --git a/src/pages/ideContainer/index.tsx b/src/pages/ideContainer/index.tsx index c2e8039..8d72bfe 100644 --- a/src/pages/ideContainer/index.tsx +++ b/src/pages/ideContainer/index.tsx @@ -165,7 +165,8 @@ function IDEContainer() { if (menuItem) { setSelected({ ...menuItem, - key: menuItem.key || menuItem.parentKey + key: menuItem.key, + parentKey: menuItem.parentKey }); } } @@ -192,7 +193,7 @@ function IDEContainer() { <>
setSelected(select)} diff --git a/src/pages/ideContainer/navBar.tsx b/src/pages/ideContainer/navBar.tsx index 04b99f8..5b16d72 100644 --- a/src/pages/ideContainer/navBar.tsx +++ b/src/pages/ideContainer/navBar.tsx @@ -41,6 +41,7 @@ const NavBar: React.FC = ({ selected, menuData, onTabChange, onTabC if (selected?.path) { const path = selected.path; const key = selected.key; + const parentKey = selected.parentKey; const title = selected.title; // 检查tab是否已存在 const existingTab = tabs.find(tab => tab.key === (key) && tab.title === title); @@ -50,6 +51,7 @@ const NavBar: React.FC = ({ selected, menuData, onTabChange, onTabC const title = menuData ? findMenuTitle(selected, menuData, path) : path; const newTab = { key: key, + parentKey: parentKey, title: title, path: path }; @@ -71,7 +73,7 @@ const NavBar: React.FC = ({ selected, menuData, onTabChange, onTabC // 如果删除的是当前激活的tab,激活第一个tab(如果存在) if (key === activeTab && newTabs.length > 0) { setActiveTab(newTabs[0].key); - onTabChange?.(newTabs[0].path); + onTabChange?.(newTabs[0].key); } else if (key === activeTab && newTabs.length === 0) { setActiveTab(''); @@ -85,10 +87,10 @@ const NavBar: React.FC = ({ selected, menuData, onTabChange, onTabC const handleTabChange = (key: string) => { setActiveTab(key); // 查找对应的tab并通知父组件 - // const tab = tabs.find(t => t.key === key); - // if (tab) { - // onTabChange?.(tab.key); - // } + const tab = tabs.find(t => t.key === key); + if (tab) { + onTabChange?.(tab.key); + } }; return ( diff --git a/src/pages/ideContainer/sideBar.tsx b/src/pages/ideContainer/sideBar.tsx index b564581..b66085b 100644 --- a/src/pages/ideContainer/sideBar.tsx +++ b/src/pages/ideContainer/sideBar.tsx @@ -24,7 +24,7 @@ interface MenuItemType { interface SideBarProps { subMenuData: any; - selectedKey?: string; + selected?: any; identity?: string; onMenuSelect?: (selected: Selected) => void; } @@ -34,12 +34,11 @@ const compTypeMap = { subComponent: '复合组件' }; -const SideBar: React.FC = ({ selectedKey, identity, subMenuData, onMenuSelect }) => { +const SideBar: React.FC = ({ selected, identity, subMenuData, onMenuSelect }) => { const [menu, setMenu] = useState([]); const [subMenuWidth, setSubMenuWidth] = useState(300); // 子菜单宽度状态 const [isSubMenuCollapsed, setIsSubMenuCollapsed] = useState(false); // 子菜单收起状态 const [activeKey, setActiveKey] = useState(0); - const [mainMenuSelectedKey, setMainMenuSelectedKey] = useState(''); const { menuData } = useSelector(state => state.ideContainer); const dispatch = useDispatch(); @@ -94,7 +93,7 @@ const SideBar: React.FC = ({ selectedKey, identity, subMenuData, o const handleMenuItemClick = (item: MenuItemType, index: number) => { setActiveKey(index); // 如果点击的是当前已激活的菜单项,则切换子菜单的展开/收起状态 - if (selectedKey === `${item.key}`) { + if (selected.key === `${item.key}`) { toggleSubMenu(); } else { @@ -105,8 +104,6 @@ const SideBar: React.FC = ({ selectedKey, identity, subMenuData, o } } - const mainMenuKey = `${item.key}`; - setMainMenuSelectedKey(mainMenuKey); // 调用外部传入的菜单选择处理函数 onMenuSelect?.({ ...item }); }; @@ -192,7 +189,7 @@ const SideBar: React.FC = ({ selectedKey, identity, subMenuData, o {menu.map((item, index) => (
handleMenuItemClick(item, index)} >
@@ -240,9 +237,6 @@ const SideBar: React.FC = ({ selectedKey, identity, subMenuData, o const selectedNode = info.node; const originalData = selectedNode.props.dataRef; await getProjectEnvData(originalData); - // 保持主菜单的选中状态 - const mainMenuKey = `${menu[activeKey]?.key}`; - setMainMenuSelectedKey(mainMenuKey); // 调用外部传入的菜单选择处理函数 originalData.key && onMenuSelect?.({ ...originalData } as Selected);