diff --git a/packages/layout/src/components/SiderMenu/BaseMenu.tsx b/packages/layout/src/components/SiderMenu/BaseMenu.tsx index 4e86d65705cd..caf9f6804899 100644 --- a/packages/layout/src/components/SiderMenu/BaseMenu.tsx +++ b/packages/layout/src/components/SiderMenu/BaseMenu.tsx @@ -185,9 +185,10 @@ class MenuUtil { getNavMenuItems = ( menusData: MenuDataItem[] = [], level: number, + noGroupLevel: number, ): ItemType[] => menusData - .map((item) => this.getSubMenuOrItem(item, level)) + .map((item) => this.getSubMenuOrItem(item, level, noGroupLevel)) .filter((item) => item) .flat(1); @@ -195,6 +196,7 @@ class MenuUtil { getSubMenuOrItem = ( item: MenuDataItem, level: number, + noGroupLevel: number, ): ItemType | ItemType[] => { const { subMenuItemRender, @@ -236,7 +238,7 @@ class MenuUtil { this.props?.hashId, { [`${baseClassName}-item-title-collapsed`]: collapsed, - [`${baseClassName}-item-title-collapsed-level-${level}`]: + [`${baseClassName}-item-title-collapsed-level-${noGroupLevel}`]: collapsed, [`${baseClassName}-group-item-title`]: menuType === 'group', [`${baseClassName}-item-collapsed-show-title`]: @@ -284,11 +286,12 @@ class MenuUtil { this.props.collapsed && !menu.collapsedShowGroupTitle ) { - return this.getNavMenuItems(children, level); + return this.getNavMenuItems(children, level + 1, level); } const childrenList = this.getNavMenuItems( children, + level + 1, isGroup && level === 0 && this.props.collapsed ? level : level + 1, ); @@ -329,7 +332,7 @@ class MenuUtil { disabled: item.disabled, key: item.key! || item.path!, onClick: item.onTitleClick, - label: this.getMenuItemPath(item, level), + label: this.getMenuItemPath(item, level, noGroupLevel), }; }; @@ -350,7 +353,11 @@ class MenuUtil { * * @memberof SiderMenu */ - getMenuItemPath = (item: MenuDataItem, level: number) => { + getMenuItemPath = ( + item: MenuDataItem, + level: number, + noGroupLevel: number, + ) => { const itemPath = this.conversionPath(item.path || '/'); const { location = { pathname: '/' }, @@ -386,7 +393,8 @@ class MenuUtil { this.props?.hashId, { [`${baseClassName}-item-title-collapsed`]: collapsed, - [`${baseClassName}-item-title-collapsed-level-${level}`]: collapsed, + [`${baseClassName}-item-title-collapsed-level-${noGroupLevel}`]: + collapsed, [`${baseClassName}-item-collapsed-show-title`]: menu?.collapsedShowTitle && collapsed, }, @@ -429,7 +437,7 @@ class MenuUtil { this.props?.hashId, { [`${baseClassName}-item-title-collapsed`]: collapsed, - [`${baseClassName}-item-title-collapsed-level-${level}`]: + [`${baseClassName}-item-title-collapsed-level-${noGroupLevel}`]: collapsed, [`${baseClassName}-item-link`]: true, [`${baseClassName}-item-collapsed-show-title`]: @@ -703,7 +711,7 @@ const BaseMenu: React.FC = (props) => { [`${baseClassName}-horizontal`]: mode === 'horizontal', [`${baseClassName}-collapsed`]: props.collapsed, })} - items={menuUtils.getNavMenuItems(finallyData, 0)} + items={menuUtils.getNavMenuItems(finallyData, 0, 0)} onOpenChange={(_openKeys) => { if (!props.collapsed) { setOpenKeys(_openKeys); diff --git a/packages/layout/src/demos/morse_debug.tsx b/packages/layout/src/demos/morse_debug.tsx new file mode 100644 index 000000000000..147210217c26 --- /dev/null +++ b/packages/layout/src/demos/morse_debug.tsx @@ -0,0 +1,234 @@ +import { + GithubFilled, + InfoCircleFilled, + PlusCircleFilled, + QuestionCircleFilled, + SearchOutlined, +} from '@ant-design/icons'; +import { PageContainer, ProCard, ProLayout } from '@ant-design/pro-components'; +import { Button, Input } from 'antd'; +import { useState } from 'react'; + +export default () => { + const [pathname, setPathname] = useState('/list/sub-page/sub-sub-page1'); + + return ( + { + if (props.isMobile) return []; + return [ + props.layout !== 'side' ? ( +
{ + e.stopPropagation(); + e.preventDefault(); + }} + > + + } + placeholder="搜索方案" + bordered={false} + /> + +
+ ) : undefined, + , + , + , + ]; + }} + menuFooterRender={(props) => { + if (props?.collapsed) return undefined; + return ( +

+ Power by Ant Design +

+ ); + }} + onMenuHeaderClick={(e) => console.log(e)} + menuItemRender={(item, dom) => ( + { + setPathname(item.path || '/welcome'); + }} + > + {dom} + + )} + > + 操作, + , + , + ]} + footer={[ + , + , + ]} + > + +
+ + + + ); +}; diff --git a/tests/layout/__snapshots__/demo.test.ts.snap b/tests/layout/__snapshots__/demo.test.ts.snap index e9f9885478aa..e52c4a5d5818 100644 --- a/tests/layout/__snapshots__/demo.test.ts.snap +++ b/tests/layout/__snapshots__/demo.test.ts.snap @@ -18859,6 +18859,354 @@ exports[`layout demos > 📸 renders ./packages/layout/src/demos/mixMode.tsx cor `; +exports[`layout demos > 📸 renders ./packages/layout/src/demos/morse_debug.tsx correctly 1`] = ` + +
+
+ test +
+
+
+
+
+
+
+ + + + + + +
+
+
+
+
+ +
+ + + + + 七妮妮 + +
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +`; + exports[`layout demos > 📸 renders ./packages/layout/src/demos/pageSimplify.tsx correctly 1`] = `