|
|
|
@ -24,7 +24,7 @@ interface MenuItemType {
|
|
|
|
|
|
|
|
|
|
|
|
interface SideBarProps {
|
|
|
|
interface SideBarProps {
|
|
|
|
subMenuData: any;
|
|
|
|
subMenuData: any;
|
|
|
|
selectedKey?: string;
|
|
|
|
selected?: any;
|
|
|
|
identity?: string;
|
|
|
|
identity?: string;
|
|
|
|
onMenuSelect?: (selected: Selected) => void;
|
|
|
|
onMenuSelect?: (selected: Selected) => void;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -34,12 +34,11 @@ const compTypeMap = {
|
|
|
|
subComponent: '复合组件'
|
|
|
|
subComponent: '复合组件'
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const SideBar: React.FC<SideBarProps> = ({ selectedKey, identity, subMenuData, onMenuSelect }) => {
|
|
|
|
const SideBar: React.FC<SideBarProps> = ({ selected, identity, subMenuData, onMenuSelect }) => {
|
|
|
|
const [menu, setMenu] = useState<MenuItemType[]>([]);
|
|
|
|
const [menu, setMenu] = useState<MenuItemType[]>([]);
|
|
|
|
const [subMenuWidth, setSubMenuWidth] = useState(300); // 子菜单宽度状态
|
|
|
|
const [subMenuWidth, setSubMenuWidth] = useState(300); // 子菜单宽度状态
|
|
|
|
const [isSubMenuCollapsed, setIsSubMenuCollapsed] = useState(false); // 子菜单收起状态
|
|
|
|
const [isSubMenuCollapsed, setIsSubMenuCollapsed] = useState(false); // 子菜单收起状态
|
|
|
|
const [activeKey, setActiveKey] = useState(0);
|
|
|
|
const [activeKey, setActiveKey] = useState(0);
|
|
|
|
const [mainMenuSelectedKey, setMainMenuSelectedKey] = useState<string>('');
|
|
|
|
|
|
|
|
const { menuData } = useSelector(state => state.ideContainer);
|
|
|
|
const { menuData } = useSelector(state => state.ideContainer);
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
|
|
|
|
|
|
|
@ -94,7 +93,7 @@ const SideBar: React.FC<SideBarProps> = ({ selectedKey, identity, subMenuData, o
|
|
|
|
const handleMenuItemClick = (item: MenuItemType, index: number) => {
|
|
|
|
const handleMenuItemClick = (item: MenuItemType, index: number) => {
|
|
|
|
setActiveKey(index);
|
|
|
|
setActiveKey(index);
|
|
|
|
// 如果点击的是当前已激活的菜单项,则切换子菜单的展开/收起状态
|
|
|
|
// 如果点击的是当前已激活的菜单项,则切换子菜单的展开/收起状态
|
|
|
|
if (selectedKey === `${item.key}`) {
|
|
|
|
if (selected.key === `${item.key}`) {
|
|
|
|
toggleSubMenu();
|
|
|
|
toggleSubMenu();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
@ -105,8 +104,6 @@ const SideBar: React.FC<SideBarProps> = ({ selectedKey, identity, subMenuData, o
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const mainMenuKey = `${item.key}`;
|
|
|
|
|
|
|
|
setMainMenuSelectedKey(mainMenuKey);
|
|
|
|
|
|
|
|
// 调用外部传入的菜单选择处理函数
|
|
|
|
// 调用外部传入的菜单选择处理函数
|
|
|
|
onMenuSelect?.({ ...item });
|
|
|
|
onMenuSelect?.({ ...item });
|
|
|
|
};
|
|
|
|
};
|
|
|
|
@ -192,7 +189,7 @@ const SideBar: React.FC<SideBarProps> = ({ selectedKey, identity, subMenuData, o
|
|
|
|
{menu.map((item, index) => (
|
|
|
|
{menu.map((item, index) => (
|
|
|
|
<div
|
|
|
|
<div
|
|
|
|
key={index}
|
|
|
|
key={index}
|
|
|
|
className={`${styles['menu-item']} ${(selectedKey === `${item.key}` || mainMenuSelectedKey === `${item.key}`) ? styles['menu-item-active'] : ''}`}
|
|
|
|
className={`${styles['menu-item']} ${(selected.parentKey === `${item.parentKey}`) ? styles['menu-item-active'] : ''}`}
|
|
|
|
onClick={() => handleMenuItemClick(item, index)}
|
|
|
|
onClick={() => handleMenuItemClick(item, index)}
|
|
|
|
>
|
|
|
|
>
|
|
|
|
<div className={styles['menu-item-content']}>
|
|
|
|
<div className={styles['menu-item-content']}>
|
|
|
|
@ -240,9 +237,6 @@ const SideBar: React.FC<SideBarProps> = ({ selectedKey, identity, subMenuData, o
|
|
|
|
const selectedNode = info.node;
|
|
|
|
const selectedNode = info.node;
|
|
|
|
const originalData = selectedNode.props.dataRef;
|
|
|
|
const originalData = selectedNode.props.dataRef;
|
|
|
|
await getProjectEnvData(originalData);
|
|
|
|
await getProjectEnvData(originalData);
|
|
|
|
// 保持主菜单的选中状态
|
|
|
|
|
|
|
|
const mainMenuKey = `${menu[activeKey]?.key}`;
|
|
|
|
|
|
|
|
setMainMenuSelectedKey(mainMenuKey);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用外部传入的菜单选择处理函数
|
|
|
|
// 调用外部传入的菜单选择处理函数
|
|
|
|
originalData.key && onMenuSelect?.({ ...originalData } as Selected);
|
|
|
|
originalData.key && onMenuSelect?.({ ...originalData } as Selected);
|
|
|
|
|