李志伟 3 years ago
parent
commit
e9d6f224bd

+ 114
- 16
src/pages/SystemManagement/Administrator/index.jsx View File

1
 import React, { useState, useEffect, useRef } from 'react';
1
 import React, { useState, useEffect, useRef } from 'react';
2
-import { Button, Popconfirm, Modal, Form, Input, message, Radio, Select } from 'antd';
2
+import { Button, Popconfirm, Modal, Form, Input, message, Radio, Select, Checkbox } from 'antd';
3
 import { PlusOutlined } from '@ant-design/icons';
3
 import { PlusOutlined } from '@ant-design/icons';
4
 import { getCooperativeList } from '@/services/cooperative';
4
 import { getCooperativeList } from '@/services/cooperative';
5
 import {
5
 import {
10
   getDefaultPassword,
10
   getDefaultPassword,
11
   getUserDetail,
11
   getUserDetail,
12
 } from '@/services/user';
12
 } from '@/services/user';
13
+import { getRoleList } from '@/services/role';
14
+import { getUserRoleList, addUserUserRole, deleteUserRole } from '@/services/userRole';
13
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
15
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
14
 import PageTable from '@/components/PageTable';
16
 import PageTable from '@/components/PageTable';
15
 import moment from 'moment';
17
 import moment from 'moment';
30
   const [password, setPassWord] = useState('');
32
   const [password, setPassWord] = useState('');
31
   const [cooperativeList, setCooperativeList] = useState([]);
33
   const [cooperativeList, setCooperativeList] = useState([]);
32
 
34
 
35
+  const [editRoleModal, setEditRoleModal] = useState(false);
36
+  const [rLoading, setRLoading] = useState(false);
37
+  const [rUserId, setRUserId] = useState();
38
+  const [roleList, setRoleList] = useState([]);
39
+  const [currentCheckbox, setCurrentCheckbox] = useState();
33
   //列表数据
40
   //列表数据
34
   const actionRef = useRef();
41
   const actionRef = useRef();
35
 
42
 
76
   const handelChange = () => {};
83
   const handelChange = () => {};
77
 
84
 
78
   // 列表点击编辑按钮
85
   // 列表点击编辑按钮
79
-  const handelEdit = (val) => {
86
+  const handleEdit = (val) => {
80
     setuserId(val.userId);
87
     setuserId(val.userId);
81
     setEditModal(true);
88
     setEditModal(true);
82
   };
89
   };
112
       },
119
       },
113
     });
120
     });
114
   };
121
   };
122
+
123
+  const handleRole = (val) => {
124
+    setRUserId(val.userId);
125
+    getUserRoleList({ user_id: val.userId }).then((res) => {
126
+      if (res.length !== 0) {
127
+        setCurrentCheckbox(res.map((item) => item.roleId));
128
+      }
129
+    });
130
+    setEditRoleModal(true);
131
+  };
132
+  //授权弹窗点击取消按钮
133
+  const onRoleCancel = () => {
134
+    setRUserId();
135
+    setCurrentCheckbox();
136
+    form.resetFields();
137
+    setEditRoleModal(false);
138
+  };
139
+  const handelOk = () => {
140
+    if (!currentCheckbox) {
141
+      message.info('请选择角色');
142
+      return;
143
+    }
144
+    setRLoading(true);
145
+    if (currentCheckbox.length === 0) {
146
+      deleteUserRole(rUserId)
147
+        .then(() => {
148
+          message.success('取消授权角色成功');
149
+          setRLoading(false);
150
+          onRoleCancel();
151
+        })
152
+        .catch((err) => {
153
+          message.error(err);
154
+          setRLoading(false);
155
+        });
156
+    } else {
157
+      addUserUserRole(
158
+        rUserId,
159
+        currentCheckbox.map((item) => {
160
+          return { userId: rUserId, roleId: item };
161
+        }),
162
+      )
163
+        .then(() => {
164
+          message.success('授权角色成功');
165
+          setRLoading(false);
166
+          onRoleCancel();
167
+        })
168
+        .catch((err) => {
169
+          message.error(err);
170
+          setRLoading(false);
171
+        });
172
+    }
173
+  };
174
+  const handleCheckboxChange = (list) => {
175
+    setCurrentCheckbox(list);
176
+  };
115
   useEffect(() => {
177
   useEffect(() => {
116
     //获取账号默认密码
178
     //获取账号默认密码
117
     getDefaultPassword().then((res) => {
179
     getDefaultPassword().then((res) => {
121
     getCooperativeList().then((res) => {
183
     getCooperativeList().then((res) => {
122
       setCooperativeList(res.records);
184
       setCooperativeList(res.records);
123
     });
185
     });
186
+    //获取角色列表数据
187
+    getRoleList().then((res) => {
188
+      setRoleList(res.records);
189
+    });
190
+  }, []);
191
+  useEffect(() => {
124
     if (userId) {
192
     if (userId) {
125
       getUserDetail(userId).then((res) => {
193
       getUserDetail(userId).then((res) => {
126
         if (res.orgId === '-1') {
194
         if (res.orgId === '-1') {
196
         <Button type="link" key={1} onClick={() => handleOK(record)}>
264
         <Button type="link" key={1} onClick={() => handleOK(record)}>
197
           {record.status === 0 ? '启用' : '禁用'}
265
           {record.status === 0 ? '启用' : '禁用'}
198
         </Button>,
266
         </Button>,
199
-        <a key={2} onClick={() => handelEdit(record)}>
267
+        <a key={2} onClick={() => handleEdit(record)}>
200
           编辑
268
           编辑
201
         </a>,
269
         </a>,
270
+        <a key={3} onClick={() => handleRole(record)}>
271
+          授权角色
272
+        </a>,
202
         <Popconfirm
273
         <Popconfirm
203
-          key={3}
274
+          key={4}
204
           title="您是否确认删除 ?"
275
           title="您是否确认删除 ?"
205
           onConfirm={() => handleDelete(record.userId)}
276
           onConfirm={() => handleDelete(record.userId)}
206
           okText="确定"
277
           okText="确定"
225
         scroll={{ x: 1000 }}
296
         scroll={{ x: 1000 }}
226
       />
297
       />
227
       <Modal
298
       <Modal
299
+        forceRender
228
         title={userId ? '人员编辑' : '人员新增'}
300
         title={userId ? '人员编辑' : '人员新增'}
229
         visible={editModal}
301
         visible={editModal}
230
         onCancel={onCancel}
302
         onCancel={onCancel}
234
         footer={null}
306
         footer={null}
235
       >
307
       >
236
         <Form {...formItemLayout} onFinish={Submit} form={form}>
308
         <Form {...formItemLayout} onFinish={Submit} form={form}>
237
-          <FormItem label="登录账号">
238
-            <Input.Group compact>
239
-              <Form.Item
240
-                name="loginName"
241
-                noStyle
242
-                rules={[{ required: true, message: '请输入登录账号' }]}
243
-              >
244
-                <Input placeholder="请输入" />
245
-              </Form.Item>
246
-              <span style={{ opacity: '0.7' }}>默认密码{password}</span>
247
-            </Input.Group>
248
-          </FormItem>
249
           <FormItem label="用户名" name="userName" rules={[{ required: true, message: '请输入' }]}>
309
           <FormItem label="用户名" name="userName" rules={[{ required: true, message: '请输入' }]}>
250
             <Input placeholder="请输入" />
310
             <Input placeholder="请输入" />
251
           </FormItem>
311
           </FormItem>
261
           <FormItem label="邮箱" name="email" rules={[{ required: true, message: '请输入' }]}>
321
           <FormItem label="邮箱" name="email" rules={[{ required: true, message: '请输入' }]}>
262
             <Input placeholder="请输入" />
322
             <Input placeholder="请输入" />
263
           </FormItem>
323
           </FormItem>
324
+          <FormItem label="登录账号">
325
+            <Input.Group compact>
326
+              <Form.Item
327
+                name="loginName"
328
+                noStyle
329
+                rules={[{ required: true, message: '请输入登录账号' }]}
330
+              >
331
+                <Input placeholder="请输入" />
332
+              </Form.Item>
333
+              <span style={{ opacity: '0.7' }}>默认密码{password}</span>
334
+            </Input.Group>
335
+          </FormItem>
264
           <FormItem label="所属机构" name="orgId" rules={[{ required: true, message: '请输入' }]}>
336
           <FormItem label="所属机构" name="orgId" rules={[{ required: true, message: '请输入' }]}>
265
             <Search placeholder="请选择机构" onChange={handelChange} />
337
             <Search placeholder="请选择机构" onChange={handelChange} />
266
             {/* <Select
338
             {/* <Select
297
           </FormItem>
369
           </FormItem>
298
         </Form>
370
         </Form>
299
       </Modal>
371
       </Modal>
372
+      <Modal
373
+        forceRender
374
+        title="角色授权"
375
+        visible={editRoleModal}
376
+        onCancel={onRoleCancel}
377
+        keyboard={false}
378
+        maskClosable={false}
379
+        destroyOnClose={true}
380
+        onOk={handelOk}
381
+        confirmLoading={rLoading}
382
+      >
383
+        <Checkbox.Group
384
+          style={{ width: '100%' }}
385
+          value={currentCheckbox}
386
+          onChange={handleCheckboxChange}
387
+        >
388
+          {roleList.map((item) => {
389
+            return (
390
+              <div key={item.roleId}>
391
+                <Checkbox value={item.roleId}>{item.name}</Checkbox>
392
+                <br />
393
+              </div>
394
+            );
395
+          })}
396
+        </Checkbox.Group>
397
+      </Modal>
300
     </PageHeaderWrapper>
398
     </PageHeaderWrapper>
301
   );
399
   );
302
 };
400
 };

+ 8
- 9
src/pages/SystemManagement/Region/index.jsx View File

1
 import React, { useState, useEffect, useRef } from 'react';
1
 import React, { useState, useEffect, useRef } from 'react';
2
-import { history, Link } from 'umi';
3
-import { Button, Popconfirm, Modal, Form, Input, message, Tooltip } from 'antd';
2
+import { Button, Popconfirm, Modal, Form, Input, message } from 'antd';
4
 import { PlusOutlined } from '@ant-design/icons';
3
 import { PlusOutlined } from '@ant-design/icons';
5
-import { getRegionList, addRegion, deleteRegion, updateRegion } from '@/services/region';
6
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
4
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
7
 import moment from 'moment';
5
 import moment from 'moment';
8
 import PageTable from '@/components/PageTable';
6
 import PageTable from '@/components/PageTable';
7
+import { getRegionList, addRegion, deleteRegion, updateRegion } from '@/services/region';
9
 
8
 
10
 const formatterTime = (val) => {
9
 const formatterTime = (val) => {
11
   return val && val !== '-' ? moment(val).format('YYYY-MM-DD') : '-';
10
   return val && val !== '-' ? moment(val).format('YYYY-MM-DD') : '-';
13
 const FormItem = Form.Item;
12
 const FormItem = Form.Item;
14
 
13
 
15
 export default (props) => {
14
 export default (props) => {
16
-  const actions = () => [
17
-    <Button key="add" type="primary" icon={<PlusOutlined />} onClick={() => setEditModal(true)}>
18
-      新增
19
-    </Button>,
20
-  ];
21
   const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 } };
15
   const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 } };
22
   const [form] = Form.useForm();
16
   const [form] = Form.useForm();
23
   const [editModal, setEditModal] = useState(false);
17
   const [editModal, setEditModal] = useState(false);
74
       form.resetFields();
68
       form.resetFields();
75
     }
69
     }
76
   }, [regionId]);
70
   }, [regionId]);
71
+  const actions = () => [
72
+    <Button key="add" type="primary" icon={<PlusOutlined />} onClick={() => setEditModal(true)}>
73
+      新增
74
+    </Button>,
75
+  ];
77
   const columns = [
76
   const columns = [
78
     {
77
     {
79
       title: '区域名',
78
       title: '区域名',
111
     <PageHeaderWrapper>
110
     <PageHeaderWrapper>
112
       <PageTable
111
       <PageTable
113
         request={getRegionList}
112
         request={getRegionList}
114
-        // expfunc={exportPersonList}
115
         columns={columns}
113
         columns={columns}
116
         actionRef={actionRef}
114
         actionRef={actionRef}
117
         rowKey="regionId"
115
         rowKey="regionId"
120
         scroll={{ x: 1000 }}
118
         scroll={{ x: 1000 }}
121
       />
119
       />
122
       <Modal
120
       <Modal
121
+        forceRender
123
         title={regionId ? '区域编辑' : '区域新增'}
122
         title={regionId ? '区域编辑' : '区域新增'}
124
         visible={editModal}
123
         visible={editModal}
125
         onCancel={onCancel}
124
         onCancel={onCancel}

+ 11
- 18
src/pages/SystemManagement/UserRights/index.jsx View File

1
 import React, { useState, useEffect, useRef } from 'react';
1
 import React, { useState, useEffect, useRef } from 'react';
2
-import { history, Link } from 'umi';
3
-import {
4
-  Button,
5
-  Popconfirm,
6
-  Modal,
7
-  Form,
8
-  Input,
9
-  message,
10
-  Tree,
11
-  Checkbox,
12
-  Row,
13
-  Col,
14
-  Divider,
15
-} from 'antd';
2
+import { Button, Popconfirm, Modal, Form, Input, message, Tree, Row, Col, Divider } from 'antd';
16
 import { PlusOutlined } from '@ant-design/icons';
3
 import { PlusOutlined } from '@ant-design/icons';
17
-import { getRoleList, addRole, deleteRole, updateRole, getMenuList } from '@/services/role';
18
-import { getPermissionList, addPermission, getRoleRermissionDetail } from '@/services/permission';
19
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
4
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
20
 import moment from 'moment';
5
 import moment from 'moment';
21
 import PageTable from '@/components/PageTable';
6
 import PageTable from '@/components/PageTable';
22
 import RoleCheckbox from '@/components/RoleCheckbox';
7
 import RoleCheckbox from '@/components/RoleCheckbox';
8
+import { getRoleList, addRole, deleteRole, updateRole, getMenuList } from '@/services/role';
9
+import { getPermissionList, addPermission, getRoleRermissionDetail } from '@/services/permission';
23
 
10
 
24
 const formatterTime = (val) => {
11
 const formatterTime = (val) => {
25
   return val && val !== '-' ? moment(val).format('YYYY-MM-DD') : '-';
12
   return val && val !== '-' ? moment(val).format('YYYY-MM-DD') : '-';
39
 
26
 
40
   // 授权弹窗
27
   // 授权弹窗
41
   const [showModal, setShowModal] = useState(false);
28
   const [showModal, setShowModal] = useState(false);
29
+  //左侧菜单数据源一维数组形式的
30
+  const [primordialData, setPrimordialData] = useState([]);
31
+  //左侧菜单树形数组
42
   const [treeList, setTreeList] = useState([]);
32
   const [treeList, setTreeList] = useState([]);
33
+  //右侧权限列表数据源
43
   const [permissionAllList, setPermissionAllList] = useState([]);
34
   const [permissionAllList, setPermissionAllList] = useState([]);
44
-  const [primordialData, setPrimordialData] = useState([]);
45
-
35
+  //当前选中菜单的权限列表
46
   const [currenList, setCurrentList] = useState([]);
36
   const [currenList, setCurrentList] = useState([]);
37
+  //右侧权限标题
47
   const [title, setTitle] = useState('');
38
   const [title, setTitle] = useState('');
48
   //选中的权限列表
39
   //选中的权限列表
49
   const [rolePermissionList, setRolePermissionList] = useState([]);
40
   const [rolePermissionList, setRolePermissionList] = useState([]);
50
   const [pLoading, setPLoading] = useState(false);
41
   const [pLoading, setPLoading] = useState(false);
42
+  //用于储存父节点id数组 防止用户只选择了子节点没有选择父节点到时候显示不出来
51
   let parentList = [];
43
   let parentList = [];
44
+  // 用于递归遍历时存放当前父节点id
52
   let pid = '';
45
   let pid = '';
53
 
46
 
54
   //列表编辑
47
   //列表编辑

+ 22
- 0
src/services/userRole.js View File

1
+import request from '@/utils/request';
2
+
3
+/**
4
+ * 授权角色
5
+ * @param {*} data
6
+ * @returns
7
+ */
8
+export const addUserUserRole = (id, data) => request(`/user/${id}/role`, { method: 'post', data });
9
+
10
+/**
11
+ * 查询人员角色
12
+ * @param {*} params
13
+ * @returns
14
+ */
15
+export const getUserRoleList = (params) => request('/user-role', { params });
16
+
17
+/**
18
+ * 删除角色
19
+ * @param {*} data
20
+ * @returns
21
+ */
22
+export const deleteUserRole = (id) => request(`/user/${id}/role`, { method: 'delete' });