From 0d9ff2bfa64eff44c6e7959d5cdec067d0ca9865 Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Mon, 12 May 2025 10:45:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90admin-user-get?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/admin-user.controller.ts | 7 +++++ .../user/components/user-info-editor.tsx | 31 ++++++++++++++----- .../hooks/admin/user/use-user-list.ts | 9 ------ tone-page-web/hooks/admin/user/use-user.ts | 23 ++++++++++++++ tone-page-web/lib/api/admin/user/get.ts | 6 ++++ tone-page-web/lib/api/admin/user/index.ts | 3 +- 6 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 tone-page-web/hooks/admin/user/use-user.ts create mode 100644 tone-page-web/lib/api/admin/user/get.ts diff --git a/tone-page-server/src/admin/controller/admin-user.controller.ts b/tone-page-server/src/admin/controller/admin-user.controller.ts index 4883258..c33533d 100644 --- a/tone-page-server/src/admin/controller/admin-user.controller.ts +++ b/tone-page-server/src/admin/controller/admin-user.controller.ts @@ -21,6 +21,13 @@ export class AdminUserController { return this.adminUserService.getUser(listDto.page, listDto.pageSize); } + @Get(':userId') + async get( + @Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string, + ) { + return this.userService.findOne({ userId }); + } + @Post() async create( @Body() createDto: CreateDto diff --git a/tone-page-web/app/console/(with-menu)/user/components/user-info-editor.tsx b/tone-page-web/app/console/(with-menu)/user/components/user-info-editor.tsx index 8408f83..46de5fb 100644 --- a/tone-page-web/app/console/(with-menu)/user/components/user-info-editor.tsx +++ b/tone-page-web/app/console/(with-menu)/user/components/user-info-editor.tsx @@ -14,6 +14,9 @@ import { } from "@/components/ui/drawer" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" +import { useUser } from "@/hooks/admin/user/use-user"; +import { User } from "@/lib/types/user"; +import { Skeleton } from "@/components/ui/skeleton"; export function UserInfoEditor({ onClose, @@ -22,6 +25,8 @@ export function UserInfoEditor({ onClose: () => void, userId: string }) { + const { user, isLoading, error } = userId ? useUser(userId) : {}; + return ( @@ -29,7 +34,17 @@ export function UserInfoEditor({ 编辑用户信息 确保你在保存之前检查所有更改 - + + {user && { + e.preventDefault(); + }} />} + + {isLoading && + [...Array(5)].map((_, i) => ( + + )) + } + @@ -40,28 +55,28 @@ export function UserInfoEditor({ ) } -function ProfileForm({ className }: React.ComponentProps<"form">) { +function ProfileForm({ className, user, ...props }: React.ComponentProps<"form"> & { user: User }) { return ( -
+
- +
- +
- +
- +
- +
diff --git a/tone-page-web/hooks/admin/user/use-user-list.ts b/tone-page-web/hooks/admin/user/use-user-list.ts index 30ab4b7..86a6834 100644 --- a/tone-page-web/hooks/admin/user/use-user-list.ts +++ b/tone-page-web/hooks/admin/user/use-user-list.ts @@ -9,15 +9,6 @@ export function useUserList(params?: UserListParams) { const { data, error, isLoading, mutate } = useSWR( ['/api/admin/user', params], () => list(params), - { - onError: (err) => { - if (err instanceof ApiError) { - toast.error(err.message) - } else { - toast.error('请求失败') - } - } - } ) return { diff --git a/tone-page-web/hooks/admin/user/use-user.ts b/tone-page-web/hooks/admin/user/use-user.ts new file mode 100644 index 0000000..c5c4a4c --- /dev/null +++ b/tone-page-web/hooks/admin/user/use-user.ts @@ -0,0 +1,23 @@ +import { AdminApi } from "@/lib/api"; +import { User } from "@/lib/types/user"; +import useSWR from "swr"; + +export function useUser(userId: string) { + const { data, error, isLoading, mutate } = useSWR( + ['/api/admin/user', userId], + () => AdminApi.user.get(userId), + { + revalidateOnFocus: false, + revalidateOnReconnect: false, + revalidateIfStale: false, + dedupingInterval: 0, + } + ) + + return { + user: data, + isLoading, + error, + mutate, + } +} \ No newline at end of file diff --git a/tone-page-web/lib/api/admin/user/get.ts b/tone-page-web/lib/api/admin/user/get.ts new file mode 100644 index 0000000..329a2e0 --- /dev/null +++ b/tone-page-web/lib/api/admin/user/get.ts @@ -0,0 +1,6 @@ +import { User } from "@/lib/types/user"; +import fetcher from "../../fetcher"; + +export function get(userId: string) { + return fetcher(`/api/admin/user/${userId}`); +} \ No newline at end of file diff --git a/tone-page-web/lib/api/admin/user/index.ts b/tone-page-web/lib/api/admin/user/index.ts index fd7991d..03ea753 100644 --- a/tone-page-web/lib/api/admin/user/index.ts +++ b/tone-page-web/lib/api/admin/user/index.ts @@ -1 +1,2 @@ -export * from './list'; \ No newline at end of file +export * from './list'; +export * from './get'; \ No newline at end of file