From 1e8c38dfc506b8cbcaa2ffe25f21df09881d4450 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Mon, 1 Jun 2026 20:25:36 +0800 Subject: [PATCH] 1 --- frontend/src/app/(auth)/layout.tsx | 31 +----------- frontend/src/components/mobile-shell.tsx | 60 ++++++++++++++++++++++++ frontend/src/components/nav.tsx | 27 ++++++----- 3 files changed, 76 insertions(+), 42 deletions(-) create mode 100644 frontend/src/components/mobile-shell.tsx diff --git a/frontend/src/app/(auth)/layout.tsx b/frontend/src/app/(auth)/layout.tsx index 80a70f1b..66b7a5fb 100644 --- a/frontend/src/app/(auth)/layout.tsx +++ b/frontend/src/app/(auth)/layout.tsx @@ -1,37 +1,10 @@ import { AuthGuard } from "@/components/auth-guard"; -import { UserMenu } from "@/components/user-menu"; -import { SidebarNav } from "@/components/nav"; +import { MobileShell } from "@/components/mobile-shell"; export default function AuthLayout({ children }: { children: React.ReactNode }) { return ( -
- - -
- {children} -
-
+ {children}
); } diff --git a/frontend/src/components/mobile-shell.tsx b/frontend/src/components/mobile-shell.tsx new file mode 100644 index 00000000..04eb20bc --- /dev/null +++ b/frontend/src/components/mobile-shell.tsx @@ -0,0 +1,60 @@ +"use client"; + +import { useState } from "react"; +import { UserMenu } from "@/components/user-menu"; +import { SidebarNav } from "@/components/nav"; + +export function MobileShell({ children }: { children: React.ReactNode }) { + const [open, setOpen] = useState(false); + + return ( +
+ {/* 移动端汉堡按钮 */} + + + {/* 移动端遮罩 */} + {open && ( +
setOpen(false)} /> + )} + + + +
+ {children} +
+
+ ); +} diff --git a/frontend/src/components/nav.tsx b/frontend/src/components/nav.tsx index 7a7008f4..5108fcb8 100644 --- a/frontend/src/components/nav.tsx +++ b/frontend/src/components/nav.tsx @@ -134,13 +134,14 @@ function TasksIcon() { ); } -function SideNavItem({ href, icon, label }: { href: string; icon: React.ReactNode; label: string }) { +function SideNavItem({ href, icon, label, onNavigate }: { href: string; icon: React.ReactNode; label: string; onNavigate?: () => void }) { const pathname = usePathname(); const isActive = pathname === href || (href !== "/dashboard" && pathname.startsWith(href)); return ( void }) { const { user } = useAuth(); return (