@@ -16,20 +16,21 @@ interface SidebarProps {
1616 onMobileMenuClose : ( ) => void
1717}
1818
19- export function Sidebar ( {
20- sidebarOpen,
21- mobileMenuOpen,
22- tooltipsEnabled,
23- onMobileMenuClose
19+ export function Sidebar ( {
20+ sidebarOpen,
21+ mobileMenuOpen,
22+ tooltipsEnabled,
23+ onMobileMenuClose,
2424} : SidebarProps ) {
2525 const { t } = useTranslation ( )
2626 const { config : sidebarBg , inheritedFrom } = useBackground ( 'sidebar' )
2727 const inheritsPageBackground = inheritedFrom === 'page'
2828
2929 return (
3030 < aside
31+ data-dashboard-sidebar = "true"
3132 className = { cn (
32- 'fixed inset-y-0 left-0 z-50 isolate flex flex-col border-r transition-all duration-300 lg:relative lg:z-0 lg:h-full' ,
33+ 'fixed inset-y-0 left-0 isolate z-50 flex flex-col border-r transition-all duration-300 lg:relative lg:z-0 lg:h-full' ,
3334 inheritsPageBackground ? 'bg-transparent' : 'bg-card' ,
3435 // 移动端始终显示完整宽度,桌面端根据 sidebarOpen 切换
3536 'w-52 lg:w-auto' ,
@@ -38,64 +39,67 @@ export function Sidebar({
3839 ) }
3940 >
4041 { ! inheritsPageBackground && < BackgroundLayer config = { sidebarBg } layerId = "sidebar" /> }
41-
42+
4243 { /* Logo 区域 */ }
4344 < div className = "relative z-10" >
4445 < LogoArea sidebarOpen = { sidebarOpen } />
4546 </ div >
4647
47- < ScrollArea className = { cn (
48- 'relative z-10' ,
49- "min-h-0 flex-1 overflow-x-hidden" ,
50- ! sidebarOpen && "lg:w-16"
51- ) }
52- viewportClassName = "[&>div]:!block"
48+ < ScrollArea
49+ className = { cn (
50+ 'relative z-10' ,
51+ 'min-h-0 flex-1 overflow-x-hidden' ,
52+ ! sidebarOpen && 'lg:w-16'
53+ ) }
54+ viewportClassName = "[&>div]:!block"
5355 >
5456 < nav
5557 aria-label = { t ( 'a11y.sidebarNav' ) }
56- className = { cn (
57- "p-4" ,
58- ! sidebarOpen && "lg:p-2 lg:w-16"
59- ) } >
60- < ul className = { cn (
61- // 移动端始终使用正常间距,桌面端根据 sidebarOpen 切换
62- "space-y-6" ,
63- ! sidebarOpen && "lg:space-y-3 lg:w-full"
64- ) } >
65- { menuSections . map ( ( section , sectionIndex ) => (
66- < li key = { section . title } >
67- { /* 块标题 - 移动端始终可见,桌面端根据 sidebarOpen 切换 */ }
68- < div className = { cn (
69- "px-3 h-[1.25rem]" ,
70- // 移动端始终显示,桌面端根据状态切换
71- "mb-2" ,
72- ! sidebarOpen && "lg:mb-1 lg:invisible"
73- ) } >
74- < h3 className = "text-xs font-semibold uppercase tracking-wider text-muted-foreground/60 whitespace-nowrap" >
75- { t ( section . title ) }
76- </ h3 >
77- </ div >
58+ className = { cn ( 'p-4' , ! sidebarOpen && 'lg:w-16 lg:p-2' ) }
59+ >
60+ < ul
61+ className = { cn (
62+ // 移动端始终使用正常间距,桌面端根据 sidebarOpen 切换
63+ 'space-y-6' ,
64+ ! sidebarOpen && 'lg:w-full lg:space-y-3'
65+ ) }
66+ >
67+ { menuSections . map ( ( section , sectionIndex ) => (
68+ < li key = { section . title } >
69+ { /* 块标题 - 移动端始终可见,桌面端根据 sidebarOpen 切换 */ }
70+ < div
71+ className = { cn (
72+ 'h-[1.25rem] px-3' ,
73+ // 移动端始终显示,桌面端根据状态切换
74+ 'mb-2' ,
75+ ! sidebarOpen && 'lg:invisible lg:mb-1'
76+ ) }
77+ >
78+ < h3 className = "text-muted-foreground/60 text-xs font-semibold tracking-wider whitespace-nowrap uppercase" >
79+ { t ( section . title ) }
80+ </ h3 >
81+ </ div >
7882
79- { /* 分割线 - 仅在桌面端折叠时显示 */ }
80- { ! sidebarOpen && sectionIndex > 0 && (
81- < div className = "hidden lg:block mb-2 border-t border-border " />
82- ) }
83+ { /* 分割线 - 仅在桌面端折叠时显示 */ }
84+ { ! sidebarOpen && sectionIndex > 0 && (
85+ < div className = "border-border mb-2 hidden border-t lg:block " />
86+ ) }
8387
84- { /* 菜单项列表 */ }
85- < ul className = "space-y-1" >
86- { section . items . map ( ( item ) => (
87- < NavItem
88- key = { item . path }
89- item = { item }
90- sidebarOpen = { sidebarOpen }
91- tooltipsEnabled = { tooltipsEnabled }
92- onMobileMenuClose = { onMobileMenuClose }
93- />
94- ) ) }
95- </ ul >
96- </ li >
97- ) ) }
98- </ ul >
88+ { /* 菜单项列表 */ }
89+ < ul className = "space-y-1" >
90+ { section . items . map ( ( item ) => (
91+ < NavItem
92+ key = { item . path }
93+ item = { item }
94+ sidebarOpen = { sidebarOpen }
95+ tooltipsEnabled = { tooltipsEnabled }
96+ onMobileMenuClose = { onMobileMenuClose }
97+ />
98+ ) ) }
99+ </ ul >
100+ </ li >
101+ ) ) }
102+ </ ul >
99103 </ nav >
100104 </ ScrollArea >
101105 </ aside >
0 commit comments