Skip to content

Commit e07cf2d

Browse files
committed
feat: 完成用户管理详情的示例
1 parent 75b4b30 commit e07cf2d

File tree

1 file changed

+57
-3
lines changed

1 file changed

+57
-3
lines changed

src/pages/(base)/manage/user/[id].tsx

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,59 @@
1-
const User = () => {
2-
return <div>Use11</div>;
1+
import type { DescriptionsProps } from 'antd';
2+
import { type LoaderFunctionArgs, useLoaderData } from 'react-router-dom';
3+
4+
import LookForward from '@/components/LookForward';
5+
import { fetchGetUserList } from '@/service/api';
6+
7+
type Item<T> = T extends any[] ? T[number] : T;
8+
9+
type ValuesOf<T> = T[keyof T];
10+
11+
type Values = ValuesOf<Api.SystemManage.User>;
12+
13+
function transformDataToItem<T extends string, U extends Values>(
14+
tuple: [T, U]
15+
): NonNullable<Item<DescriptionsProps['items']>> {
16+
return {
17+
children: tuple[1],
18+
key: tuple[0],
19+
label: tuple[0]
20+
};
21+
}
22+
23+
// 这个页面仅仅是为了展示 react-router-dom 的 loader 的强大能力,数据是随机的对不上很正常
24+
// This page is solely for demonstrating the powerful capabilities of react-router-dom's loader. The data is random and may not match.
25+
26+
const Component = () => {
27+
const data = useLoaderData() as Api.SystemManage.User | undefined;
28+
29+
const { t } = useTranslation();
30+
31+
if (!data) return <LookForward />;
32+
33+
const items = Object.entries(data).map(transformDataToItem);
34+
35+
return (
36+
<ACard
37+
className="h-full"
38+
title="User Info"
39+
>
40+
<ADescriptions
41+
bordered
42+
items={items}
43+
/>
44+
<div className="mt-16px text-center text-18px">{t('page.manage.userDetail.explain')}</div>
45+
46+
<div className="mt-16px text-center text-18px">{t('page.manage.userDetail.content')}</div>
47+
</ACard>
48+
);
349
};
450

5-
export default User;
51+
export async function loader({ params }: LoaderFunctionArgs) {
52+
const { data, error } = await fetchGetUserList();
53+
if (error) return null;
54+
55+
const info = data.records.find(item => String(item.id) === params.id);
56+
return info;
57+
}
58+
59+
export default Component;

0 commit comments

Comments
 (0)