'use client'; import { AppSidebar } from "@/components/app-sidebar" import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage, } from "@/components/ui/breadcrumb" import { SidebarInset, SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar" import { UserApi } from "@/lib/api"; import { useRouter } from "next/navigation"; import { useEffect, useLayoutEffect } from "react"; import { toast } from "sonner"; import useSWR from "swr"; export default function ConsoleMenuLayout({ children, }: { children: React.ReactNode }) { const isClientSide = typeof window !== 'undefined'; const router = useRouter(); const { data: user, isLoading, error, mutate } = useSWR( '/api/user/me', async () => UserApi.me(), { onError: (error) => { if (error.statusCode === 401) { if (isClientSide) { localStorage.removeItem('token'); } toast.info('登录凭证已失效,请重新登录'); router.replace('/console/login'); } }, revalidateIfStale: false, revalidateOnFocus: false, revalidateOnReconnect: false, } ); if (!isLoading && !error && !user) { router.replace('/console/login'); localStorage.removeItem('token'); localStorage.removeItem(UserApi.USER_ME_CACHE_KEY); toast.error('账户状态异常,请重新登录'); } return (
{new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long' }).format(new Date())}
{children}
) }