From af0e9c6522d5228800a8ebf35fb3db81fa9280e6 Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Wed, 18 Jun 2025 17:26:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AFuser/me=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E5=88=B0console/layout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/console/(with-menu)/layout.tsx | 34 ++++++++++++++++++- tone-page-web/components/app-sidebar.tsx | 5 +-- tone-page-web/components/nav-user.tsx | 32 +++-------------- 3 files changed, 41 insertions(+), 30 deletions(-) diff --git a/tone-page-web/app/console/(with-menu)/layout.tsx b/tone-page-web/app/console/(with-menu)/layout.tsx index 83eb31c..431eb97 100644 --- a/tone-page-web/app/console/(with-menu)/layout.tsx +++ b/tone-page-web/app/console/(with-menu)/layout.tsx @@ -1,3 +1,5 @@ +'use client'; + import { AppSidebar } from "@/components/app-sidebar" import { Breadcrumb, @@ -10,15 +12,45 @@ import { SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar" +import { UserApi } from "@/lib/api"; +import { useRouter } from "next/navigation"; +import { toast } from "sonner"; +import useSWR from "swr"; export default function ConsoleMenuLayout({ children, }: { children: React.ReactNode }) { + + const router = useRouter(); + + const { data: user, isLoading, error } = useSWR( + '/api/user/me', + () => UserApi.me(), + { + onError: (error) => { + if (error.statusCode === 401) { + localStorage.removeItem('token'); + toast.info('登录凭证已失效,请重新登录'); + router.replace('/console/login'); + } + } + } + ); + + if (!isLoading && !error && !user) { + router.replace('/console/login'); + localStorage.removeItem('token'); + toast.error('账户状态异常,请重新登录'); + } + + + + return ( - +
diff --git a/tone-page-web/components/app-sidebar.tsx b/tone-page-web/components/app-sidebar.tsx index 59b9f09..ef3d4b7 100644 --- a/tone-page-web/components/app-sidebar.tsx +++ b/tone-page-web/components/app-sidebar.tsx @@ -24,6 +24,7 @@ import { SidebarRail, } from "@/components/ui/sidebar" import Link from "next/link" +import { User } from "@/lib/types/user" // This is sample data. const data = { user: { @@ -98,7 +99,7 @@ const data = { ], } -export function AppSidebar({ ...props }: React.ComponentProps) { +export function AppSidebar({ user, isUserLoading, ...props }: React.ComponentProps & { user: User | undefined, isUserLoading: boolean }) { return ( @@ -124,7 +125,7 @@ export function AppSidebar({ ...props }: React.ComponentProps) { - + diff --git a/tone-page-web/components/nav-user.tsx b/tone-page-web/components/nav-user.tsx index 6502128..1a973ac 100644 --- a/tone-page-web/components/nav-user.tsx +++ b/tone-page-web/components/nav-user.tsx @@ -26,40 +26,18 @@ import { SidebarMenuItem, useSidebar, } from "@/components/ui/sidebar" -import useSWR from "swr" -import { authApi, UserApi } from "@/lib/api" +import { authApi } from "@/lib/api" import { Skeleton } from "./ui/skeleton" import { toast } from "sonner" import { useRouter } from "next/navigation" -import { ApiError } from "next/dist/server/api-utils" import SetPassword from "./nav-user/SetPassword" import { useState } from "react" +import { User } from "@/lib/types/user" -export function NavUser({ }: {}) { +export function NavUser({ user, isUserLoading }: { user: User | undefined, isUserLoading: boolean }) { const { isMobile } = useSidebar(); const router = useRouter(); - const { data: user, isLoading, error } = useSWR( - '/api/user/me', - () => UserApi.me(), - { - onError: (error) => { - if (error.statusCode === 401) { - localStorage.removeItem('token'); - toast.info('登录凭证已失效,请重新登录'); - router.replace('/console/login'); - } - } - } - ); - - if (!isLoading && !error && !user) { - console.log(isLoading, error, user) - router.replace('/console/login'); - localStorage.removeItem('token'); - toast.error('账户状态异常,请重新登录'); - } - async function logout() { try { await authApi.logout(); @@ -96,7 +74,7 @@ export function NavUser({ }: {}) { } { - isLoading &&
+ isUserLoading &&
@@ -128,7 +106,7 @@ export function NavUser({ }: {}) {
} { - isLoading &&
+ isUserLoading &&