diff --git a/client/src/components/app-sidebar.tsx b/client/src/components/app-sidebar.tsx index 29bef3d..518ac82 100644 --- a/client/src/components/app-sidebar.tsx +++ b/client/src/components/app-sidebar.tsx @@ -63,7 +63,7 @@ export function AppSidebar({ ...props }: React.ComponentProps) { - + ); diff --git a/client/src/components/nav-user.tsx b/client/src/components/nav-user.tsx index 876379d..41a63fc 100644 --- a/client/src/components/nav-user.tsx +++ b/client/src/components/nav-user.tsx @@ -22,17 +22,11 @@ import { SidebarMenuItem, useSidebar, } from '@/components/ui/sidebar'; +import { useUserInfo } from '@/hooks/data/useUserInfo'; -export function NavUser({ - user, -}: { - user: { - name: string; - email: string; - avatar: string; - }; -}) { +export function NavUser() { const { isMobile } = useSidebar(); + const { data: user } = useUserInfo(); return ( @@ -44,11 +38,11 @@ export function NavUser({ className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground" > - + CN
- {user.name} + {user.nickname} {user.email} @@ -65,11 +59,11 @@ export function NavUser({
- + CN
- {user.name} + {user.nickname} {user.email} diff --git a/client/src/components/workbenchCards/checkin.tsx b/client/src/components/workbenchCards/checkin.tsx index a10f8a8..9481b61 100644 --- a/client/src/components/workbenchCards/checkin.tsx +++ b/client/src/components/workbenchCards/checkin.tsx @@ -1,17 +1,22 @@ +import { useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardAction, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; import { useCheckin } from '@/hooks/data/useCheckin'; +import { useUserInfo } from '@/hooks/data/useUserInfo'; export function CheckinCard() { const { mutateAsync, isPending } = useCheckin(); + const { data } = useUserInfo(); + const queryClient = useQueryClient(); return ( 签到状态 - 未签到 + {data.checkin !== null ? '已签到' : '未签到'} + {data.checkin !== null && {`${new Date(data.checkin).toLocaleString()}`}} Day 1 @@ -23,12 +28,13 @@ export function CheckinCard() { onClick={() => { mutateAsync().then(() => { toast('签到成功'); + void queryClient.invalidateQueries({ queryKey: ['userInfo'] }); }).catch((error) => { console.error(error); toast('签到失败'); }); }} - disabled={isPending} + disabled={isPending || data.checkin !== null} > 签到 diff --git a/client/src/hooks/data/useUserInfo.ts b/client/src/hooks/data/useUserInfo.ts new file mode 100644 index 0000000..b688e7c --- /dev/null +++ b/client/src/hooks/data/useUserInfo.ts @@ -0,0 +1,21 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; +import { axiosClient } from '@/lib/axios'; + +export function useUserInfo() { + return useSuspenseQuery({ + queryKey: ['userInfo'], + queryFn: async () => { + const response = await axiosClient.get<{ + user_id: string; + email: string; + type: string; + nickname: string; + subtitle: string; + avatar: string; + checkin: string | null; + } + >('/user/info'); + return response.data; + }, + }); +} diff --git a/client/src/routes/__root.tsx b/client/src/routes/__root.tsx index 2dc2995..6a5987c 100644 --- a/client/src/routes/__root.tsx +++ b/client/src/routes/__root.tsx @@ -1,6 +1,5 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { createRootRoute, Outlet } from '@tanstack/react-router'; -import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'; import { ThemeProvider } from '@/components/theme-provider'; import { Toaster } from '@/components/ui/sonner'; import '@/index.css'; @@ -15,7 +14,6 @@ function RootLayout() { - );