Quellcode durchsuchen

批量修改用户角色,角色列表人数统计,角色成员分页、total,批量删除角色

zhangnaiwen vor 2 Jahren
Ursprung
Commit
00d6018256
5 geänderte Dateien mit 107 neuen und 11 gelöschten Zeilen
  1. 1 1
      src/app/api/__init__.py
  2. 2 2
      src/app/api/permission.py
  3. 62 7
      src/app/api/role.py
  4. 41 0
      src/app/api/users.py
  5. 1 1
      src/app/modle/users.py

+ 1 - 1
src/app/api/__init__.py

@@ -34,4 +34,4 @@ api.add_namespace(system_monitoring)
 api.add_namespace(server)
 
 
-# todo 公司联级查询,增加字段,角色成员人数
+# todo 公司联级查询

+ 2 - 2
src/app/api/permission.py

@@ -25,13 +25,13 @@ class PermissionApi(Resource):
             stmt = select(Menus.id, Menus.name).where(Menus.parent_id == 0)
             results = session.execute(stmt)
             for result in results:
-                stmt2 = select(Menus.id, Menus.name).where(Menus.parent_id == result.id)
+                stmt2 = select(Menus.id, Menus.name, Menus.menu_type).where(Menus.parent_id == result.id)
                 data.append(
                     {
                         'id': result.id,
                         'name': result.name,
                         'children': [
-                            {'id': result1.id, 'name': result1.name} for result1 in session.execute(stmt2)
+                            {'id': result1.id, 'name': result1.name, 'menu_type': result1.menu_type} for result1 in session.execute(stmt2)
                         ]
                     }
                 )

+ 62 - 7
src/app/api/role.py

@@ -21,7 +21,7 @@ role_list.add_argument(name='page', type=int, location='args', required=False, h
 
 @ns.route('/role_list')
 class GetUserListApi(Resource):
-    #method_decorators = [login_required]
+    # method_decorators = [login_required]
 
     @ns.doc(id='get_role_list', description='获取角色列表')
     @ns.expect(role_list)
@@ -40,9 +40,16 @@ class GetUserListApi(Resource):
                 stmt = select(Role).offset(page_size * (page - 1)).limit(page_size)
                 results = session.execute(stmt).scalars().all()
 
+                # 增加角色人数
+                results = to_dict(results)
+
+                for result in results:
+                    number_of_people = select(func.count(User.role)).where(User.role == result['id'])
+                    result['count'] = session.execute(number_of_people).scalars().first()
+
             save_log(request, Module.ROLE, OperationType.INQUIRE, StatesCode.SUCCESS)
 
-            return jsonify(code=StatesCode.SUCCESS, message='成功', total=count_results, data=to_dict(results))
+            return jsonify(code=StatesCode.SUCCESS, message='成功', total=count_results, data=results)
         except Exception as e:
             save_log(request, Module.ROLE, OperationType.INQUIRE, StatesCode.UNKNOWN_ERROR)
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
@@ -60,7 +67,7 @@ role_id.add_argument(name='role_id', type=int, location='args', required=False,
 
 @ns.route('/role')
 class RoleApi(Resource):
-    #method_decorators = [login_required]
+    # method_decorators = [login_required]
 
     @ns.doc(id='get_role', description='获取角色')
     @ns.expect(role_id)
@@ -182,6 +189,8 @@ class RoleApi(Resource):
 
 get_member = reqparse.RequestParser(bundle_errors=True)
 get_member.add_argument(name='role_id', type=int, location='args', required=False, help='角色id')
+get_member.add_argument(name='page_size', type=int, location='args', required=False, help='每页记录数量,默认:20')
+get_member.add_argument(name='page', type=int, location='args', required=False, help='页数')
 
 del_member = reqparse.RequestParser(bundle_errors=True)
 del_member.add_argument(name='user_id', type=int, location='form', required=False, help='用户id')
@@ -192,25 +201,27 @@ batch_del_member.add_argument(name='users_id', type=str, location='form', requir
 
 @ns.route('/member')
 class RoleMemberApi(Resource):
-    #method_decorators = [login_required]
+    # method_decorators = [login_required]
 
     @ns.doc(id='get_role_member', description='获取角色成员')
     @ns.expect(get_member)
     def get(self):
         """获取角色成员"""
         role_id = request.args.get('role_id')
+        page_size = int(request.args.get('page_size', 20))
+        page = int(request.args.get('page', 1))
 
         if role_id is None:
             return jsonify(code=StatesCode.PARA_ERROR, message='角色id不能为空')
 
         try:
             with Session(current_app.engine) as session:
-                stmt = select(User).where(User.role == role_id)
+                stmt = select(User).where(User.role == role_id).offset(page_size * (page - 1)).limit(page_size)
                 results = session.execute(stmt).scalars().all()
 
             save_log(request, Module.ROLE, OperationType.INQUIRE, StatesCode.SUCCESS)
 
-            return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
+            return jsonify(code=StatesCode.SUCCESS, message='成功', total=len(results), data=to_dict(results))
         except Exception as e:
             save_log(request, Module.ROLE, OperationType.INQUIRE, StatesCode.UNKNOWN_ERROR)
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
@@ -237,7 +248,9 @@ class RoleMemberApi(Resource):
             save_log(request, Module.ROLE, OperationType.DELETE, StatesCode.UNKNOWN_ERROR)
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
 
-    # class BatchDeleteRoleMember(Resource):
+
+@ns.route('/batch_delete_role_member')
+class BatchDeleteRoleMember(Resource):
     @ns.doc(id='batch_delete_role_member', description='批量移除角色成员')
     @ns.expect(batch_del_member)
     def delete(self):
@@ -267,3 +280,45 @@ class RoleMemberApi(Resource):
         except Exception as e:
             save_log(request, Module.ROLE, OperationType.BATCH_DELETE, StatesCode.UNKNOWN_ERROR)
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
+
+
+batch_delete_role = reqparse.RequestParser(bundle_errors=True)
+batch_delete_role.add_argument(name='role_ids', type=int, location='form', required=False, help='角色ids')
+
+
+@ns.route('/batch_delete_role')
+class BatchDeleteRole(Resource):
+
+    @ns.doc(description='批量删除角色')
+    @ns.expect()
+    def delete(self):
+        """批量删除角色"""
+        role_ids = request.form.get('role_ids')
+        if role_ids:
+            role_ids = json.loads(role_ids)
+        else:
+            return jsonify(code=StatesCode.PARA_ERROR, message='role_ids不能为空')
+
+        count = {'succeed': 0, 'failure': 0}
+
+        try:
+            with Session(current_app.engine) as session:
+                for role_id in role_ids:
+                    stmt = select(func.count(User.role)).where(User.role == role_id)
+                    results = session.execute(stmt).scalars().first()
+
+                    if results == 0:
+                        stmt = delete(Role).where(Role.id == role_id)
+                        session.execute(stmt)
+                        session.commit()
+                        count['succeed'] += 1
+                    else:
+                        count['failure'] += 1
+
+            save_log(request, Module.ROLE, OperationType.BATCH_DELETE, StatesCode.SUCCESS)
+
+            return jsonify(code=StatesCode.SUCCESS, message='批量移除成功', data=count)
+
+        except Exception as e:
+            save_log(request, Module.ROLE, OperationType.BATCH_DELETE, StatesCode.UNKNOWN_ERROR)
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))

+ 41 - 0
src/app/api/users.py

@@ -363,6 +363,47 @@ class BatchModifyUsersStatusApi(Resource):
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
 
 
+batch_modify_user_role = reqparse.RequestParser(bundle_errors=True)
+batch_modify_user_role.add_argument(name='users_id', type=list, required=True, location='form', help='用户id列表')
+batch_modify_user_role.add_argument(name='role_id', type=int, required=True, location='form', help='角色id')
+
+
+@ns.route('/batch_modify_user_role')
+class BatchModifyUsersRoleApi(Resource):
+    @ns.doc(id='batch_modify_user_role', description='批量修改用户角色')
+    @ns.expect(batch_modify_user_role)
+    def put(self):
+        """批量修改用户角色"""
+        users_id = request.form.get('users_id')
+        role_id = request.form.get('role_id')
+
+        if users_id and role_id:
+            users_id = json.loads(users_id)
+            role_id = int(role_id)
+        else:
+            return jsonify(code=StatesCode.PARA_ERROR, message='用户id和角色id不能为空')
+
+        try:
+            values = []
+            for user_id in users_id:
+                values.append({"id": user_id, "role": role_id})
+
+            with Session(current_app.engine) as session:
+                session.execute(
+                    update(User),
+                    values
+                )
+                session.commit()
+
+            save_log(request, Module.USER, OperationType.BATCH_UPDATE, StatesCode.SUCCESS)
+
+            return jsonify(code=StatesCode.SUCCESS, message='批量修改用户角色成功')
+
+        except Exception as e:
+            save_log(request, Module.USER, OperationType.BATCH_UPDATE, StatesCode.UNKNOWN_ERROR)
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
+
+
 @ns.route('/export_data')
 class ExportDataApi(Resource):
     #method_decorators = [login_required]

+ 1 - 1
src/app/modle/users.py

@@ -18,7 +18,7 @@ class User(Base):
     email = Column(String, nullable=True, unique=False, index=False, doc='邮箱')
     company = Column(String, nullable=True, unique=False, index=False, doc='公司')
     department = Column(String, nullable=True, unique=False, index=False, doc='部门')
-    role = Column(String, nullable=True, unique=False, index=False, doc='角色')
+    role = Column(Integer, nullable=True, unique=False, index=False, doc='角色')
     permission = Column(String, nullable=True, unique=False, index=False, doc='权限')
     on_job_status = Column(String, nullable=True, unique=False, index=False, doc='在职状态')
     duty = Column(String, nullable=True, unique=False, index=False, doc='职务')