|
|
|
|
@ -1,5 +1,4 @@
|
|
|
|
|
import React, { useEffect, useState } from 'react';
|
|
|
|
|
import { ResizeBox } from '@arco-design/web-react';
|
|
|
|
|
import { getUrlParams } from '@/utils/common';
|
|
|
|
|
import styles from './style/index.module.less';
|
|
|
|
|
import SideBar from './sideBar';
|
|
|
|
|
@ -8,8 +7,12 @@ import RightSideBar from './rightSideBar';
|
|
|
|
|
import NavBar from './navBar';
|
|
|
|
|
import ProjectContainer from '@/pages/orchestration/project';
|
|
|
|
|
import ApplicationContainer from '@/pages/orchestration/application';
|
|
|
|
|
import { menuData, menuData2 } from './config/menuData';
|
|
|
|
|
import { menuData1, menuData2 } from './config/menuData';
|
|
|
|
|
import { Selected } from '@/pages/ideContainer/types';
|
|
|
|
|
import { updateInfo } from '@/store/ideContainer';
|
|
|
|
|
import { useDispatch, useSelector } from 'react-redux';
|
|
|
|
|
import { getAppListBySceneId } from '@/api/apps';
|
|
|
|
|
import * as url from 'node:url';
|
|
|
|
|
|
|
|
|
|
type UrlParamsOptions = {
|
|
|
|
|
identity?: string;
|
|
|
|
|
@ -41,11 +44,29 @@ function IDEContainer() {
|
|
|
|
|
const [subMenuWidth, setSubMenuWidth] = useState(200); // 子菜单宽度状态
|
|
|
|
|
// 用于跟踪已打开的tab,保持组件状态
|
|
|
|
|
const [openedTabs, setOpenedTabs] = useState<Set<string>>(new Set());
|
|
|
|
|
const [subMenuData, setSubMenuData] = useState<any>({});
|
|
|
|
|
const { menuData } = useSelector((state) => state.ideContainer);
|
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
|
|
|
|
|
const getAppList = async () => {
|
|
|
|
|
const res: any = await getAppListBySceneId({
|
|
|
|
|
pageSize: 999,
|
|
|
|
|
currPage: 1,
|
|
|
|
|
sceneId: urlParams.id
|
|
|
|
|
});
|
|
|
|
|
if (res.code === 200) setSubMenuData({ 'appList': res.data.list });
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
setUrlParams(getUrlParams(window.location.href) as UrlParamsOptions);
|
|
|
|
|
dispatch(updateInfo(getUrlParams(window.location.href) as UrlParamsOptions));
|
|
|
|
|
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (urlParams.id) getAppList();
|
|
|
|
|
}, [urlParams.id]);
|
|
|
|
|
|
|
|
|
|
// 当selected.path变化时,添加到已打开的tab集合中
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (selected.path) {
|
|
|
|
|
@ -122,37 +143,25 @@ function IDEContainer() {
|
|
|
|
|
setSubMenuWidth(width);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 根据identity获取对应的菜单数据
|
|
|
|
|
const getCurrentMenuData = () => {
|
|
|
|
|
switch (urlParams.identity) {
|
|
|
|
|
case 'scene':
|
|
|
|
|
return menuData;
|
|
|
|
|
case 'componentDevelopment':
|
|
|
|
|
return menuData2;
|
|
|
|
|
default:
|
|
|
|
|
return menuData;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 处理tab切换
|
|
|
|
|
const handleTabChange = (path: string) => {
|
|
|
|
|
if (path) {
|
|
|
|
|
const handleTabChange = (key: string) => {
|
|
|
|
|
if (key) {
|
|
|
|
|
// 根据path查找对应的菜单项
|
|
|
|
|
const findMenuItem = (menuItems: any[], path: string): any => {
|
|
|
|
|
const findMenuItem = (menuItems: any[], key: string): any => {
|
|
|
|
|
for (const item of menuItems) {
|
|
|
|
|
if (item.path === path) {
|
|
|
|
|
if (item.key === key) {
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
if (item.children) {
|
|
|
|
|
const found = findMenuItem(item.children, path);
|
|
|
|
|
const found = findMenuItem(item.children, key);
|
|
|
|
|
if (found) return found;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const menuItems = getCurrentMenuData();
|
|
|
|
|
const menuItem = findMenuItem(menuItems, path);
|
|
|
|
|
const menuItems = menuData[urlParams.identity];
|
|
|
|
|
const menuItem = findMenuItem(menuItems, key);
|
|
|
|
|
|
|
|
|
|
if (menuItem) {
|
|
|
|
|
setSelected({
|
|
|
|
|
@ -184,16 +193,17 @@ function IDEContainer() {
|
|
|
|
|
<>
|
|
|
|
|
<div className={styles.IDEContainer}>
|
|
|
|
|
<SideBar
|
|
|
|
|
onMenuSelect={(select) => setSelected(select)}
|
|
|
|
|
selectedKey={selected.key}
|
|
|
|
|
identity={urlParams.identity}
|
|
|
|
|
subMenuData={subMenuData}
|
|
|
|
|
onMenuSelect={(select) => setSelected(select)}
|
|
|
|
|
/>
|
|
|
|
|
<div className={styles.content}>
|
|
|
|
|
<div className={styles.mainContent}>
|
|
|
|
|
{/*顶部导航栏*/}
|
|
|
|
|
<NavBar
|
|
|
|
|
selected={selected}
|
|
|
|
|
menuData={getCurrentMenuData()}
|
|
|
|
|
menuData={menuData[urlParams.identity]}
|
|
|
|
|
onTabChange={handleTabChange}
|
|
|
|
|
onTabClose={handleTabClose}
|
|
|
|
|
></NavBar>
|
|
|
|
|
|