|
@@ -4,139 +4,49 @@ import {
|
4
|
4
|
Popconfirm,
|
5
|
5
|
Modal,
|
6
|
6
|
Form,
|
7
|
|
- Input,
|
8
|
7
|
message,
|
9
|
|
- Radio,
|
10
|
|
- Select,
|
11
|
|
- List,
|
12
|
8
|
Row,
|
13
|
9
|
Col,
|
14
|
|
- Card,
|
15
|
|
- Tree,
|
16
|
|
- Checkbox,
|
17
|
10
|
} from 'antd';
|
18
|
11
|
import { PlusOutlined } from '@ant-design/icons';
|
19
|
|
-import { getCooperativeList } from '@/services/cooperative';
|
20
|
12
|
import {
|
21
|
13
|
getUserList,
|
22
|
|
- addUser,
|
23
|
14
|
deleteUser,
|
24
|
15
|
updateUser,
|
25
|
|
- getDefaultPassword,
|
26
|
16
|
getUserDetail,
|
27
|
17
|
} from '@/services/user';
|
28
|
|
-import { getRoleList } from '@/services/role';
|
29
|
|
-import { getUserRoleList, addUserUserRole, deleteUserRole } from '@/services/userRole';
|
|
18
|
+import { getUserRoleList } from '@/services/userRole';
|
30
|
19
|
import { PageHeaderWrapper } from '@ant-design/pro-layout';
|
31
|
20
|
import PageTable from '@/components/PageTable';
|
32
|
21
|
import moment from 'moment';
|
33
|
|
-import Search from '@/components/CooperativeSearch';
|
34
|
22
|
import './index.less';
|
|
23
|
+import OrgTree from './components/OrgTree';
|
|
24
|
+import UserModal from './components/UserModal';
|
|
25
|
+import RoleModel from './components/RoleModel';
|
35
|
26
|
|
36
|
|
-const FormItem = Form.Item;
|
37
|
|
-const { Option } = Select;
|
38
|
27
|
const formatterTime = (val) => {
|
39
|
28
|
return val && val !== '-' ? moment(val).format('YYYY-MM-DD') : '-';
|
40
|
29
|
};
|
41
|
30
|
export default (props) => {
|
42
|
31
|
//编辑弹窗
|
43
|
|
- const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 } };
|
44
|
32
|
const [form] = Form.useForm();
|
45
|
33
|
const [editModal, setEditModal] = useState(false);
|
46
|
|
- const [loading, setLoading] = useState(false);
|
47
|
34
|
const [userId, setuserId] = useState();
|
48
|
|
- const [password, setPassWord] = useState('');
|
49
|
35
|
const [cooperativeList, setCooperativeList] = useState([]);
|
50
|
36
|
|
51
|
37
|
const [editRoleModal, setEditRoleModal] = useState(false);
|
52
|
|
- const [rLoading, setRLoading] = useState(false);
|
53
|
38
|
const [rUserId, setRUserId] = useState();
|
54
|
|
- const [roleList, setRoleList] = useState([]);
|
55
|
39
|
const [currentCheckbox, setCurrentCheckbox] = useState();
|
56
|
40
|
//列表数据
|
57
|
41
|
const actionRef = useRef();
|
58
|
|
- const [data, setData] = useState([]);
|
59
|
42
|
const [orgId, setOrgId] = useState();
|
60
|
43
|
|
61
|
|
- // 动态生成树
|
62
|
|
- const handelNode = (item) => {
|
63
|
|
- let node = (
|
64
|
|
- <div
|
65
|
|
- key={item.orgId}
|
66
|
|
- style={{
|
67
|
|
- justifyContent: 'space-between',
|
68
|
|
- display: 'flex',
|
69
|
|
- padding: '8px 0',
|
70
|
|
- }}
|
71
|
|
- >
|
72
|
|
- <span>{item.title}</span>
|
73
|
|
- </div>
|
74
|
|
- );
|
75
|
|
- return node;
|
76
|
|
- };
|
77
|
|
- const onSelect = (checkedKeys, info) => {
|
78
|
|
- if (info.selected) {
|
79
|
|
- setOrgId(info.node.key);
|
80
|
|
- } else {
|
81
|
|
- setOrgId();
|
82
|
|
- }
|
83
|
|
- };
|
84
|
|
- // 编辑弹窗的表单提交
|
85
|
|
- const Submit = (values) => {
|
86
|
|
- const newData = { ...values };
|
87
|
|
- if (!newData.sex && newData.sex !== 0) {
|
88
|
|
- newData.sex = 1;
|
89
|
|
- }
|
90
|
|
- setLoading(true);
|
91
|
|
- if (!/^1[0-9]{10}$/.test(newData.phone)) {
|
92
|
|
- message.warning('请输入正确的十一位手机号');
|
93
|
|
- setLoading(false);
|
94
|
|
- return false;
|
95
|
|
- }
|
96
|
|
- if (
|
97
|
|
- !/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
|
98
|
|
- newData.idCard,
|
99
|
|
- )
|
100
|
|
- ) {
|
101
|
|
- message.warning('请输入正确的身份证号');
|
102
|
|
- setLoading(false);
|
103
|
|
- return false;
|
104
|
|
- }
|
105
|
|
-
|
106
|
|
- if (userId) {
|
107
|
|
- updateUser(userId, newData)
|
108
|
|
- .then(() => {
|
109
|
|
- setLoading(false);
|
110
|
|
- message.success(`修改成功`);
|
111
|
|
- onCancel();
|
112
|
|
- actionRef.current.reload();
|
113
|
|
- })
|
114
|
|
- .catch((err) => {
|
115
|
|
- setLoading(false);
|
116
|
|
- console.log(err.message);
|
117
|
|
- });
|
118
|
|
- } else {
|
119
|
|
- addUser(newData)
|
120
|
|
- .then(() => {
|
121
|
|
- setLoading(false);
|
122
|
|
- message.success(`保存成功`);
|
123
|
|
- onCancel();
|
124
|
|
- actionRef.current.reload();
|
125
|
|
- })
|
126
|
|
- .catch((err) => {
|
127
|
|
- setLoading(false);
|
128
|
|
- message.error(err.message || err);
|
129
|
|
- });
|
130
|
|
- }
|
131
|
|
- };
|
132
|
44
|
//表单点击取消按钮
|
133
|
45
|
const onCancel = () => {
|
134
|
46
|
setuserId();
|
135
|
47
|
form.resetFields();
|
136
|
48
|
setEditModal(false);
|
137
|
49
|
};
|
138
|
|
- // 弹窗表单中合作社搜索框改变事件目前没用
|
139
|
|
- const handelChange = () => { };
|
140
|
50
|
|
141
|
51
|
// 列表点击编辑按钮
|
142
|
52
|
const handleEdit = (val) => {
|
|
@@ -189,82 +99,7 @@ export default (props) => {
|
189
|
99
|
});
|
190
|
100
|
setEditRoleModal(true);
|
191
|
101
|
};
|
192
|
|
- //授权弹窗点击取消按钮
|
193
|
|
- const onRoleCancel = () => {
|
194
|
|
- setRUserId();
|
195
|
|
- setCurrentCheckbox();
|
196
|
|
- form.resetFields();
|
197
|
|
- setEditRoleModal(false);
|
198
|
|
- };
|
199
|
|
- //授权角色弹窗点击保存按钮
|
200
|
|
- const handelOk = () => {
|
201
|
|
- if (!currentCheckbox) {
|
202
|
|
- message.info('请选择角色');
|
203
|
|
- return;
|
204
|
|
- }
|
205
|
|
- setRLoading(true);
|
206
|
|
- if (currentCheckbox.length === 0) {
|
207
|
|
- deleteUserRole(rUserId)
|
208
|
|
- .then(() => {
|
209
|
|
- message.success('取消授权角色成功');
|
210
|
|
- setRLoading(false);
|
211
|
|
- onRoleCancel();
|
212
|
|
- })
|
213
|
|
- .catch((err) => {
|
214
|
|
- console.log(err.message);
|
215
|
|
- setRLoading(false);
|
216
|
|
- });
|
217
|
|
- } else {
|
218
|
|
- addUserUserRole(
|
219
|
|
- rUserId,
|
220
|
|
- currentCheckbox.map((item) => {
|
221
|
|
- return { userId: rUserId, roleId: item };
|
222
|
|
- }),
|
223
|
|
- )
|
224
|
|
- .then(() => {
|
225
|
|
- message.success('授权角色成功');
|
226
|
|
- setRLoading(false);
|
227
|
|
- onRoleCancel();
|
228
|
|
- })
|
229
|
|
- .catch((err) => {
|
230
|
|
- console.log(err.message);
|
231
|
|
- setRLoading(false);
|
232
|
|
- });
|
233
|
|
- }
|
234
|
|
- };
|
235
|
|
- const handleCheckboxChange = (list) => {
|
236
|
|
- setCurrentCheckbox(list);
|
237
|
|
- };
|
238
|
|
- useEffect(() => {
|
239
|
|
- //获取账号默认密码
|
240
|
|
- getDefaultPassword()
|
241
|
|
- .then((res) => {
|
242
|
|
- setPassWord(res);
|
243
|
|
- })
|
244
|
|
- .catch((err) => {
|
245
|
|
- console.log(err.message);
|
246
|
|
- });
|
247
|
|
- //获取合作社列表数据
|
248
|
|
- getCooperativeList({ pageSize: 999 })
|
249
|
|
- .then((res) => {
|
250
|
|
- setCooperativeList(res.records);
|
251
|
|
- const list = res.records?.map((item) => {
|
252
|
|
- return { title: item.name, key: item.orgId };
|
253
|
|
- });
|
254
|
|
- setData(list);
|
255
|
|
- })
|
256
|
|
- .catch((err) => {
|
257
|
|
- console.log(err.message);
|
258
|
|
- });
|
259
|
|
- //获取角色列表数据
|
260
|
|
- getRoleList({ pageSize: 999 })
|
261
|
|
- .then((res) => {
|
262
|
|
- setRoleList(res.records);
|
263
|
|
- })
|
264
|
|
- .catch((err) => {
|
265
|
|
- console.log(err.message);
|
266
|
|
- });
|
267
|
|
- }, []);
|
|
102
|
+
|
268
|
103
|
//监控
|
269
|
104
|
useEffect(() => {
|
270
|
105
|
if (userId) {
|
|
@@ -382,14 +217,7 @@ export default (props) => {
|
382
|
217
|
<PageHeaderWrapper>
|
383
|
218
|
<Row gutter={16}>
|
384
|
219
|
<Col span={6}>
|
385
|
|
- <Card title="合作社列表">
|
386
|
|
- <Tree
|
387
|
|
- onSelect={onSelect}
|
388
|
|
- className="treeClass"
|
389
|
|
- titleRender={(data) => handelNode(data)}
|
390
|
|
- treeData={data}
|
391
|
|
- />
|
392
|
|
- </Card>
|
|
220
|
+ <OrgTree setOrgId={setOrgId} setCooperativeList={setCooperativeList} />
|
393
|
221
|
</Col>
|
394
|
222
|
<Col span={18}>
|
395
|
223
|
<PageTable
|
|
@@ -405,104 +233,8 @@ export default (props) => {
|
405
|
233
|
/>
|
406
|
234
|
</Col>
|
407
|
235
|
</Row>
|
408
|
|
- <Modal
|
409
|
|
- forceRender
|
410
|
|
- title={userId ? '人员编辑' : '人员新增'}
|
411
|
|
- visible={editModal}
|
412
|
|
- onCancel={onCancel}
|
413
|
|
- keyboard={false}
|
414
|
|
- maskClosable={false}
|
415
|
|
- destroyOnClose={true}
|
416
|
|
- footer={null}
|
417
|
|
- >
|
418
|
|
- <Form {...formItemLayout} onFinish={Submit} form={form}>
|
419
|
|
- <FormItem label="用户名" name="userName" rules={[{ required: true, message: '请输入' }]}>
|
420
|
|
- <Input placeholder="请输入" />
|
421
|
|
- </FormItem>
|
422
|
|
- <FormItem label="性别" name="sex" rules={[{ required: true, message: '请选择' }]}>
|
423
|
|
- <Radio.Group>
|
424
|
|
- <Radio value={1}>男</Radio>
|
425
|
|
- <Radio value={0}>女</Radio>
|
426
|
|
- </Radio.Group>
|
427
|
|
- </FormItem>
|
428
|
|
- <FormItem label="手机号" name="phone" rules={[{ required: true, message: '请输入' }]}>
|
429
|
|
- <Input maxLength="11" placeholder="请输入" />
|
430
|
|
- </FormItem>
|
431
|
|
- <FormItem label="身份证" name="idCard" rules={[{ required: true, message: '请输入' }]}>
|
432
|
|
- <Input placeholder="请输入" />
|
433
|
|
- </FormItem>
|
434
|
|
- <FormItem
|
435
|
|
- label="登录账号"
|
436
|
|
- name="loginName"
|
437
|
|
- rules={[{ required: true, message: '请输入登录账号' }]}
|
438
|
|
- >
|
439
|
|
- <Input placeholder="请输入" />
|
440
|
|
- </FormItem>
|
441
|
|
- <FormItem label=" " colon={false} style={{ height: '4px', marginTop: '-28px' }}>
|
442
|
|
- <span style={{ opacity: '0.7' }}>默认密码{password}</span>
|
443
|
|
- </FormItem>
|
444
|
|
- <FormItem label="所属合作社" name="orgId" rules={[{ required: true, message: '请输入' }]}>
|
445
|
|
- <Search placeholder="请输入合作社" disabled={orgId && !userId ? true : false} onChange={handelChange} />
|
446
|
|
- </FormItem>
|
447
|
|
- {userId && (
|
448
|
|
- <FormItem
|
449
|
|
- label="合作社管理员"
|
450
|
|
- name="isOrgManager"
|
451
|
|
- rules={[{ required: true, message: '请选择' }]}
|
452
|
|
- >
|
453
|
|
- <Select placeholder="请选择是否启用">
|
454
|
|
- <Option value={false}>否</Option>
|
455
|
|
- <Option value={true}>是</Option>
|
456
|
|
- </Select>
|
457
|
|
- </FormItem>
|
458
|
|
- )}
|
459
|
|
- <FormItem label="状态" name="status" rules={[{ required: true, message: '请选择' }]}>
|
460
|
|
- <Select placeholder="请选择是否启用">
|
461
|
|
- <Option value={1}>启用</Option>
|
462
|
|
- <Option value={0}>禁用</Option>
|
463
|
|
- </Select>
|
464
|
|
- </FormItem>
|
465
|
|
- <FormItem label=" " colon={false}>
|
466
|
|
- <Button type="default" onClick={onCancel}>
|
467
|
|
- 取消
|
468
|
|
- </Button>
|
469
|
|
- <Button
|
470
|
|
- type="primary"
|
471
|
|
- loading={loading}
|
472
|
|
- htmlType="Submit"
|
473
|
|
- style={{ marginLeft: '4em' }}
|
474
|
|
- >
|
475
|
|
- 确认
|
476
|
|
- </Button>
|
477
|
|
- </FormItem>
|
478
|
|
- </Form>
|
479
|
|
- </Modal>
|
480
|
|
- <Modal
|
481
|
|
- forceRender
|
482
|
|
- title="授权角色"
|
483
|
|
- visible={editRoleModal}
|
484
|
|
- onCancel={onRoleCancel}
|
485
|
|
- keyboard={false}
|
486
|
|
- maskClosable={false}
|
487
|
|
- destroyOnClose={true}
|
488
|
|
- onOk={handelOk}
|
489
|
|
- confirmLoading={rLoading}
|
490
|
|
- >
|
491
|
|
- <Checkbox.Group
|
492
|
|
- style={{ width: '100%' }}
|
493
|
|
- value={currentCheckbox}
|
494
|
|
- onChange={handleCheckboxChange}
|
495
|
|
- >
|
496
|
|
- <List
|
497
|
|
- dataSource={roleList}
|
498
|
|
- renderItem={(item) => (
|
499
|
|
- <List.Item>
|
500
|
|
- <Checkbox value={item.roleId}>{item.name}</Checkbox>
|
501
|
|
- </List.Item>
|
502
|
|
- )}
|
503
|
|
- />
|
504
|
|
- </Checkbox.Group>
|
505
|
|
- </Modal>
|
|
236
|
+ <UserModal editModal={editModal} onCancel={onCancel} actionRef={actionRef} form={form} orgId={orgId} userId={userId} />
|
|
237
|
+ <RoleModel rUserId={rUserId} setRUserId={setRUserId} currentCheckbox={currentCheckbox} setCurrentCheckbox={setCurrentCheckbox} editRoleModal={editRoleModal} setEditRoleModal={setEditRoleModal} />
|
506
|
238
|
</PageHeaderWrapper>
|
507
|
239
|
);
|
508
|
240
|
};
|