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 (