|
|
|
@ -38,7 +38,6 @@ const ALL_PATHS = [
|
|
|
|
];
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
function IDEContainer() {
|
|
|
|
function IDEContainer() {
|
|
|
|
|
|
|
|
|
|
|
|
const [selected, setSelected] = useState<Selected>({});
|
|
|
|
const [selected, setSelected] = useState<Selected>({});
|
|
|
|
const [urlParams, setUrlParams] = useState<UrlParamsOptions>({});
|
|
|
|
const [urlParams, setUrlParams] = useState<UrlParamsOptions>({});
|
|
|
|
const [subMenuWidth, setSubMenuWidth] = useState(200); // 子菜单宽度状态
|
|
|
|
const [subMenuWidth, setSubMenuWidth] = useState(200); // 子菜单宽度状态
|
|
|
|
@ -69,25 +68,25 @@ function IDEContainer() {
|
|
|
|
|
|
|
|
|
|
|
|
// 当selected.path变化时,添加到已打开的tab集合中
|
|
|
|
// 当selected.path变化时,添加到已打开的tab集合中
|
|
|
|
useEffect(() => {
|
|
|
|
useEffect(() => {
|
|
|
|
if (selected.path) {
|
|
|
|
if (selected.key) {
|
|
|
|
setOpenedTabs(prev => new Set(prev).add(selected.path!));
|
|
|
|
setOpenedTabs(prev => new Set(prev).add(selected.key!));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, [selected.path]);
|
|
|
|
}, [selected.key]);
|
|
|
|
|
|
|
|
|
|
|
|
// 根据选中的菜单项渲染对应组件
|
|
|
|
// 根据选中的菜单项渲染对应组件
|
|
|
|
const renderContent = () => {
|
|
|
|
const renderContent = () => {
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<div style={{ height: '100%', position: 'relative' }}>
|
|
|
|
<div style={{ height: '100%', position: 'relative' }}>
|
|
|
|
{ALL_PATHS.map(path => {
|
|
|
|
{ALL_PATHS.map((path, i) => {
|
|
|
|
// 检查该路径的组件是否已打开
|
|
|
|
// 检查该路径的组件是否已打开
|
|
|
|
const isOpened = openedTabs.has(path);
|
|
|
|
const isOpened = openedTabs.has(selected.key);
|
|
|
|
// 检查是否是当前选中的路径
|
|
|
|
// 检查是否是当前选中的路径
|
|
|
|
const isSelected = selected.path === path;
|
|
|
|
const isSelected = selected.path === path;
|
|
|
|
|
|
|
|
|
|
|
|
// 只有已打开的组件才渲染,通过CSS控制显示/隐藏
|
|
|
|
// 只有已打开的组件才渲染,通过CSS控制显示/隐藏
|
|
|
|
return isOpened ? (
|
|
|
|
return isOpened ? (
|
|
|
|
<div
|
|
|
|
<div
|
|
|
|
key={path}
|
|
|
|
key={`${selected.key}-${i}`}
|
|
|
|
style={{
|
|
|
|
style={{
|
|
|
|
display: isSelected ? 'block' : 'none',
|
|
|
|
display: isSelected ? 'block' : 'none',
|
|
|
|
height: '100%'
|
|
|
|
height: '100%'
|
|
|
|
@ -166,7 +165,7 @@ function IDEContainer() {
|
|
|
|
if (menuItem) {
|
|
|
|
if (menuItem) {
|
|
|
|
setSelected({
|
|
|
|
setSelected({
|
|
|
|
...menuItem,
|
|
|
|
...menuItem,
|
|
|
|
key: menuItem.parentKey || menuItem.key
|
|
|
|
key: menuItem.key || menuItem.parentKey
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|