Skip to content

Commit de34a75

Browse files
committed
feat: 用户管理部分接口对接
1 parent fbf4ec4 commit de34a75

File tree

5 files changed

+281
-5
lines changed

5 files changed

+281
-5
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import axios from '@/utils/axios';
2+
import { ResponseData, TableResponseData } from '@/utils/commonTypes';
3+
import {
4+
UserResponse,
5+
UserRequest,
6+
TAddUserRequest,
7+
TAddUserResponse,
8+
} from './types';
9+
10+
// 获取用户管理 表格数据
11+
const getUserList = (
12+
params: UserRequest,
13+
): Promise<ResponseData<TableResponseData<UserResponse>>> =>
14+
axios.get<never, ResponseData<TableResponseData<UserResponse>>>(`/user`, {
15+
params,
16+
});
17+
18+
// 添加用户
19+
const postAddUser = (
20+
data: TAddUserRequest,
21+
): Promise<ResponseData<TAddUserResponse>> =>
22+
axios.post<never, ResponseData<TAddUserResponse>>('/user', data);
23+
24+
export { getUserList, postAddUser };
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
interface User {
2+
email?: string;
3+
in_charge_of_systems?: string[];
4+
role: string[];
5+
user_group?: string;
6+
username: string;
7+
}
8+
interface UserResponse {
9+
list?: User[];
10+
}
11+
12+
interface UserRequest {
13+
limit?: number;
14+
name?: string;
15+
order?: Order;
16+
order_by?: string;
17+
page?: number;
18+
role?: string;
19+
user_group?: string;
20+
}
21+
22+
enum Order {
23+
Asc = 'asc',
24+
Desc = 'desc',
25+
}
26+
27+
/**
28+
* NewUser
29+
*/
30+
interface TAddUserRequest {
31+
email: string;
32+
in_charge_of_systems?: string[];
33+
node_ids?: string[];
34+
role: string[];
35+
user_group?: string;
36+
username: string;
37+
}
38+
39+
/**
40+
* NewUserCreated
41+
*/
42+
interface TAddUserResponse {
43+
password: string;
44+
username: string;
45+
}
46+
47+
export type {
48+
UserResponse,
49+
UserRequest,
50+
User,
51+
TAddUserRequest,
52+
TAddUserResponse,
53+
};

src/pages/ReportManage/ReportManage.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,11 @@ const ReportManage: FC = () => {
4545
rowSelection: 'checkbox',
4646
rowSelectKeys: deleteValues,
4747
onSelectChange: setDeleteValues,
48-
width: 280,
4948
},
5049
{
5150
title: '任务名',
5251
dataIndex: 'source',
53-
width: 240,
52+
width: 320,
5453
},
5554
{
5655
title: '任务组',
@@ -61,7 +60,7 @@ const ReportManage: FC = () => {
6160
},
6261
{
6362
title: '生成时间',
64-
width: 240,
63+
width: 320,
6564
dataIndex: 'start_time',
6665
columnsHeaderFilterType: 'rangePicker',
6766
rangePickSetting: {
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import { postAddUser } from '@/apis/SystemManagementApi';
2+
import { WizardModal } from '@/compoments';
3+
import { UseModalRefType } from '@/compoments/WizardModal/useModal';
4+
import { useRequest } from 'ahooks';
5+
import { Button, Form, Input } from 'antd';
6+
import { forwardRef, useImperativeHandle } from 'react';
7+
8+
const { Item } = Form;
9+
const layout = {
10+
labelCol: { span: 3 },
11+
wrapperCol: { span: 24 },
12+
};
13+
14+
const CreateUserModal = forwardRef<
15+
UseModalRefType,
16+
{
17+
title: string;
18+
refresh: () => void;
19+
}
20+
>(({ title, refresh }, ref) => {
21+
const [model] = WizardModal.useModal();
22+
const [form] = Form.useForm();
23+
24+
useImperativeHandle(ref, () => ({
25+
open() {
26+
console.log('打开', title, refresh);
27+
model.open();
28+
},
29+
}));
30+
31+
const { run, loading } = useRequest(postAddUser, {
32+
manual: true,
33+
onSuccess: (values) => {
34+
console.log(values, 'aaa');
35+
},
36+
});
37+
38+
const onOk = async () => {
39+
try {
40+
const formData = await form.validateFields();
41+
run({ ...formData });
42+
} catch (err) {
43+
console.error(err);
44+
}
45+
};
46+
47+
return (
48+
<WizardModal
49+
footer={
50+
<>
51+
<Button
52+
key="link"
53+
onClick={() => {
54+
model.close();
55+
form.resetFields();
56+
}}
57+
>
58+
取消
59+
</Button>
60+
<Button
61+
key="submit"
62+
type="primary"
63+
onClick={() => onOk()}
64+
loading={loading}
65+
>
66+
确定
67+
</Button>
68+
</>
69+
}
70+
width={550}
71+
modal={model}
72+
title={title}
73+
>
74+
<div className="pt-2 px-6">
75+
<Form form={form} layout="horizontal" {...layout}>
76+
<Item
77+
name={'username'}
78+
label="用户名"
79+
rules={[{ required: true, message: '用户名不能为空' }]}
80+
>
81+
<Input placeholder="请输入用户名" />
82+
</Item>
83+
<Item
84+
name={'email'}
85+
label="邮箱"
86+
rules={[
87+
{ required: true, message: '邮箱不能为空' },
88+
{ type: 'email', message: '邮箱格式不正确' },
89+
]}
90+
>
91+
<Input placeholder="请输入邮箱" />
92+
</Item>
93+
</Form>
94+
</div>
95+
</WizardModal>
96+
);
97+
});
98+
99+
export { CreateUserModal };
Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,108 @@
1-
import { FC } from 'react';
1+
import { FC, useRef } from 'react';
2+
import { Button, Tag } from 'antd';
3+
4+
import { getUserList } from '@/apis/SystemManagementApi';
5+
import { User, UserRequest } from '@/apis/SystemManagementApi/types';
6+
import { WizardTable } from '@/compoments';
7+
import { UseModalRefType } from '@/compoments/WizardModal/useModal';
8+
import { CreateTableProps } from '@/compoments/WizardTable/types';
9+
import { PlusOutlined } from '@ant-design/icons';
10+
import { CreateUserModal } from './CreateUserModal';
211

312
const SystemManagement: FC = () => {
4-
return '系统管理';
13+
const [page] = WizardTable.usePage();
14+
const CreateUserModalRef = useRef<UseModalRefType>(null);
15+
16+
const UserColumns: CreateTableProps<User>['columns'] = [
17+
{
18+
title: '用户名',
19+
dataIndex: 'username',
20+
},
21+
{
22+
title: '邮箱',
23+
dataIndex: 'email',
24+
width: 320,
25+
},
26+
{
27+
title: 'Roles',
28+
dataIndex: 'role',
29+
width: 160,
30+
render: (val) =>
31+
val && Array.isArray(val) ? (
32+
<div className="flex items-center justify-center gap-2">
33+
{val.map((it) => (
34+
<Tag key={it} color="blue">
35+
{it}
36+
</Tag>
37+
))}
38+
</div>
39+
) : (
40+
'-'
41+
),
42+
},
43+
{
44+
title: '操作',
45+
dataIndex: 'report_id',
46+
fixed: 'right',
47+
width: 160,
48+
render: (_, record) => <div>这是操作项 {record?.email}</div>,
49+
},
50+
];
51+
52+
const handCreateUser = async () => {
53+
console.log(222);
54+
CreateUserModalRef.current?.open();
55+
};
56+
57+
return (
58+
<>
59+
<WizardTable
60+
page={page}
61+
rowKey="username"
62+
columns={UserColumns}
63+
tableHeader={{
64+
title: '用户管理列表',
65+
options: {
66+
optionsSearch: {
67+
key: 'name',
68+
placeholder: '请输入用户名搜索',
69+
},
70+
trigger: (
71+
<div className="flex gap-2">
72+
<Button onClick={async () => {}}>
73+
<PlusOutlined /> 批量创建
74+
</Button>
75+
76+
<Button
77+
type="primary"
78+
onClick={async () => handCreateUser()}
79+
>
80+
<PlusOutlined /> 创建用户
81+
</Button>
82+
</div>
83+
),
84+
},
85+
}}
86+
request={async (params, filter) => {
87+
const request = {
88+
...params,
89+
...filter,
90+
} as UserRequest;
91+
const result = await getUserList({ ...request });
92+
const { data } = result;
93+
return {
94+
list: data?.list ?? [],
95+
pagemeta: data?.pagemeta,
96+
};
97+
}}
98+
/>
99+
<CreateUserModal
100+
ref={CreateUserModalRef}
101+
title="创建用户"
102+
refresh={page.refresh}
103+
/>
104+
</>
105+
);
5106
};
6107

7108
export { SystemManagement };

0 commit comments

Comments
 (0)