李志伟 3 年前
父节点
当前提交
e9d6f224bd

+ 114
- 16
src/pages/SystemManagement/Administrator/index.jsx 查看文件

@@ -1,5 +1,5 @@
1 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 3
 import { PlusOutlined } from '@ant-design/icons';
4 4
 import { getCooperativeList } from '@/services/cooperative';
5 5
 import {
@@ -10,6 +10,8 @@ import {
10 10
   getDefaultPassword,
11 11
   getUserDetail,
12 12
 } from '@/services/user';
13
+import { getRoleList } from '@/services/role';
14
+import { getUserRoleList, addUserUserRole, deleteUserRole } from '@/services/userRole';
13 15
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
14 16
 import PageTable from '@/components/PageTable';
15 17
 import moment from 'moment';
@@ -30,6 +32,11 @@ export default (props) => {
30 32
   const [password, setPassWord] = useState('');
31 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 41
   const actionRef = useRef();
35 42
 
@@ -76,7 +83,7 @@ export default (props) => {
76 83
   const handelChange = () => {};
77 84
 
78 85
   // 列表点击编辑按钮
79
-  const handelEdit = (val) => {
86
+  const handleEdit = (val) => {
80 87
     setuserId(val.userId);
81 88
     setEditModal(true);
82 89
   };
@@ -112,6 +119,61 @@ export default (props) => {
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 177
   useEffect(() => {
116 178
     //获取账号默认密码
117 179
     getDefaultPassword().then((res) => {
@@ -121,6 +183,12 @@ export default (props) => {
121 183
     getCooperativeList().then((res) => {
122 184
       setCooperativeList(res.records);
123 185
     });
186
+    //获取角色列表数据
187
+    getRoleList().then((res) => {
188
+      setRoleList(res.records);
189
+    });
190
+  }, []);
191
+  useEffect(() => {
124 192
     if (userId) {
125 193
       getUserDetail(userId).then((res) => {
126 194
         if (res.orgId === '-1') {
@@ -196,11 +264,14 @@ export default (props) => {
196 264
         <Button type="link" key={1} onClick={() => handleOK(record)}>
197 265
           {record.status === 0 ? '启用' : '禁用'}
198 266
         </Button>,
199
-        <a key={2} onClick={() => handelEdit(record)}>
267
+        <a key={2} onClick={() => handleEdit(record)}>
200 268
           编辑
201 269
         </a>,
270
+        <a key={3} onClick={() => handleRole(record)}>
271
+          授权角色
272
+        </a>,
202 273
         <Popconfirm
203
-          key={3}
274
+          key={4}
204 275
           title="您是否确认删除 ?"
205 276
           onConfirm={() => handleDelete(record.userId)}
206 277
           okText="确定"
@@ -225,6 +296,7 @@ export default (props) => {
225 296
         scroll={{ x: 1000 }}
226 297
       />
227 298
       <Modal
299
+        forceRender
228 300
         title={userId ? '人员编辑' : '人员新增'}
229 301
         visible={editModal}
230 302
         onCancel={onCancel}
@@ -234,18 +306,6 @@ export default (props) => {
234 306
         footer={null}
235 307
       >
236 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 309
           <FormItem label="用户名" name="userName" rules={[{ required: true, message: '请输入' }]}>
250 310
             <Input placeholder="请输入" />
251 311
           </FormItem>
@@ -261,6 +321,18 @@ export default (props) => {
261 321
           <FormItem label="邮箱" name="email" rules={[{ required: true, message: '请输入' }]}>
262 322
             <Input placeholder="请输入" />
263 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 336
           <FormItem label="所属机构" name="orgId" rules={[{ required: true, message: '请输入' }]}>
265 337
             <Search placeholder="请选择机构" onChange={handelChange} />
266 338
             {/* <Select
@@ -297,6 +369,32 @@ export default (props) => {
297 369
           </FormItem>
298 370
         </Form>
299 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 398
     </PageHeaderWrapper>
301 399
   );
302 400
 };

+ 8
- 9
src/pages/SystemManagement/Region/index.jsx 查看文件

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

+ 11
- 18
src/pages/SystemManagement/UserRights/index.jsx 查看文件

@@ -1,25 +1,12 @@
1 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 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 4
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
20 5
 import moment from 'moment';
21 6
 import PageTable from '@/components/PageTable';
22 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 11
 const formatterTime = (val) => {
25 12
   return val && val !== '-' ? moment(val).format('YYYY-MM-DD') : '-';
@@ -39,16 +26,22 @@ export default (props) => {
39 26
 
40 27
   // 授权弹窗
41 28
   const [showModal, setShowModal] = useState(false);
29
+  //左侧菜单数据源一维数组形式的
30
+  const [primordialData, setPrimordialData] = useState([]);
31
+  //左侧菜单树形数组
42 32
   const [treeList, setTreeList] = useState([]);
33
+  //右侧权限列表数据源
43 34
   const [permissionAllList, setPermissionAllList] = useState([]);
44
-  const [primordialData, setPrimordialData] = useState([]);
45
-
35
+  //当前选中菜单的权限列表
46 36
   const [currenList, setCurrentList] = useState([]);
37
+  //右侧权限标题
47 38
   const [title, setTitle] = useState('');
48 39
   //选中的权限列表
49 40
   const [rolePermissionList, setRolePermissionList] = useState([]);
50 41
   const [pLoading, setPLoading] = useState(false);
42
+  //用于储存父节点id数组 防止用户只选择了子节点没有选择父节点到时候显示不出来
51 43
   let parentList = [];
44
+  // 用于递归遍历时存放当前父节点id
52 45
   let pid = '';
53 46
 
54 47
   //列表编辑

+ 22
- 0
src/services/userRole.js 查看文件

@@ -0,0 +1,22 @@
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' });