diff --git a/applications/__init__.py b/applications/__init__.py index a7decf6..8f61d5a 100644 --- a/applications/__init__.py +++ b/applications/__init__.py @@ -12,13 +12,12 @@ from extensions import init_plugs api_bp: Blueprint = Blueprint('api', __name__, url_prefix='/api/v1') from .rights import register_rights_api -from .system import FilePhotoAPI, LoginAPI +from .system import register_sys_api from .users import register_users_api register_rights_api(api_bp) register_users_api(api_bp) -register_api(LoginAPI, 'login_api', '/passport/login', pk='_id', app=api_bp) -register_api(FilePhotoAPI, 'photo_api', '/file/photo', pk='photo_id', app=api_bp) +register_sys_api(api_bp) def init_api(app: Flask) -> None: diff --git a/applications/rights/__init__.py b/applications/rights/__init__.py index 6d96ca1..b908540 100644 --- a/applications/rights/__init__.py +++ b/applications/rights/__init__.py @@ -1,28 +1,42 @@ -from flask_restful import Api - -from .department import DepartmentsResource, DepartmentResource, DeptEnableResource +from common import register_api +from .department import DepartmentsApi, DeptEnableAPI from .rights import ( - RightRightsResource, RightPowerResource, RightPowerEnableResource, AdminConfigsResource, - AdminMenuResource + RightsApi, PowerApi, right_power_enable_resource, + admin_configs_resource, admin_menu_resource ) -from .roles import RoleRolesResource, RoleRoleResource, RoleEnableResource, RolePowerResource +from .roles import RoleRoleApi, RolePowerApi, role_deletes, role_enable_resource def register_rights_api(api_bp): - dept_api = Api(api_bp, prefix='/dept') - dept_api.add_resource(DepartmentsResource, '/departments') - dept_api.add_resource(DepartmentResource, '/department/') - dept_api.add_resource(DeptEnableResource, '/department//status') + register_api(DepartmentsApi, 'rights_dept_api', '/dept/department/', pk='dept_id', app=api_bp) + api_bp.add_url_rule('/dept/department//status', + view_func=DeptEnableAPI.as_view('dept_status_api'), + methods=['PUT', ]) + api_bp.add_url_rule('/rights/rights', + view_func=RightsApi.as_view('dept_rights_api'), + methods=['GET', 'DELETE']) - rights_api = Api(api_bp, prefix='/rights') - rights_api.add_resource(RightRightsResource, '/rights') - rights_api.add_resource(RightPowerResource, '/power/') - rights_api.add_resource(RightPowerEnableResource, '/power//status') - rights_api.add_resource(AdminConfigsResource, '/configs') - rights_api.add_resource(AdminMenuResource, '/menu') + register_api(PowerApi, 'rights_power_api', '/power/', pk='_id', app=api_bp) + api_bp.add_url_rule('/rights/configs', + endpoint='rights_config_api', + view_func=admin_configs_resource, + methods=['GET']) + api_bp.add_url_rule('/rights/menu', + endpoint='rights_menu_api', + view_func=admin_menu_resource, + methods=['GET']) + api_bp.add_url_rule('/power//', + endpoint='rights_power_action_api', + view_func=right_power_enable_resource, + methods=['PUT']) + api_bp.add_url_rule('/roles/role', + endpoint='rights_roles_role_api', + view_func=role_deletes, + methods=['DELETE']) - role_api = Api(api_bp, prefix='/roles') - role_api.add_resource(RoleRolesResource, '/roles') - role_api.add_resource(RoleRoleResource, '/role/') - role_api.add_resource(RoleEnableResource, '/role//status') - role_api.add_resource(RolePowerResource, '/role_power/') + register_api(RoleRoleApi, 'rights_role_api', '/roles/role/', pk='_id', app=api_bp) + register_api(RolePowerApi, 'rights_role_power_api', '/roles/role_power/', pk='_id', app=api_bp) + api_bp.add_url_rule('/roles/role//status', + endpoint='rights_roles_enable_api', + view_func=role_enable_resource, + methods=['PUT']) diff --git a/applications/rights/department.py b/applications/rights/department.py index 7a4431c..1da9262 100644 --- a/applications/rights/department.py +++ b/applications/rights/department.py @@ -1,14 +1,29 @@ from flask import jsonify -from flask_restful import Resource, reqparse +from flask.views import MethodView +from flask_restful import reqparse from common.utils.http import success_api, fail_api from extensions import db from models import DepartmentModel, UserModel -class DepartmentsResource(Resource): +class DepartmentsApi(MethodView): + + def get(self, dept_id): + if dept_id: + dept = DepartmentModel.query.filter_by(id=dept_id).first() + dept_data = { + 'id': dept.id, + 'dept_name': dept.dept_name, + 'leader': dept.leader, + 'email': dept.email, + 'phone': dept.phone, + 'status': dept.status, + 'sort': dept.sort, + 'address': dept.address, + } + return dict(success=True, message='ok', dept=dept_data) - def get(self): dept_data = DepartmentModel.query.order_by(DepartmentModel.sort).all() # TODO dtree 需要返回状态信息 res = { @@ -59,22 +74,6 @@ class DepartmentsResource(Resource): return success_api(message="成功") - -class DepartmentResource(Resource): - def get(self, dept_id): - dept = DepartmentModel.query.filter_by(id=dept_id).first() - dept_data = { - 'id': dept.id, - 'dept_name': dept.dept_name, - 'leader': dept.leader, - 'email': dept.email, - 'phone': dept.phone, - 'status': dept.status, - 'sort': dept.sort, - 'address': dept.address, - } - return dict(success=True, message='ok', dept=dept_data) - def put(self, dept_id): parser = reqparse.RequestParser() parser.add_argument('address', type=str) @@ -110,7 +109,7 @@ class DepartmentResource(Resource): return fail_api(message="删除失败") -class DeptEnableResource(Resource): +class DeptEnableAPI(MethodView): def put(self, dept_id): d = DepartmentModel.query.get(dept_id) if d: diff --git a/applications/rights/rights.py b/applications/rights/rights.py index 1ec9f37..d78acd5 100644 --- a/applications/rights/rights.py +++ b/applications/rights/rights.py @@ -2,8 +2,9 @@ import copy from collections import OrderedDict from flask import request, jsonify, current_app +from flask.views import MethodView from flask_login import current_user -from flask_restful import Resource, reqparse +from flask_restful import reqparse from common.utils.http import success_api, fail_api from extensions import db @@ -170,7 +171,7 @@ parser_power.add_argument('powerUrl', type=str, dest='power_url') parser_power.add_argument('sort', type=int, dest='sort') -class RightRightsResource(Resource): +class RightsApi(MethodView): def get(self): """获取选择父节点""" @@ -202,9 +203,9 @@ class RightRightsResource(Resource): return success_api(message="批量删除成功") -class RightPowerResource(Resource): +class PowerApi(MethodView): - def post(self, power_id): + def post(self): res = parser_power.parse_args() power = RightModel( icon=res.icon, @@ -226,9 +227,9 @@ class RightPowerResource(Resource): return success_api(message="成功") - def delete(self, power_id): + def delete(self, _id): # 删除权限(目前没有判断父节点自动删除子节点) - power = RightModel.query.filter_by(id=power_id).first() + power = RightModel.query.filter_by(id=_id).first() role_id_list = [] roles = power.role for role in roles: @@ -236,7 +237,7 @@ class RightPowerResource(Resource): roles = RoleModel.query.filter(RoleModel.id.in_(role_id_list)).all() for p in roles: power.role.remove(p) - r = RightModel.query.filter_by(id=power_id).delete() + r = RightModel.query.filter_by(id=_id).delete() db.session.commit() if r: @@ -244,7 +245,7 @@ class RightPowerResource(Resource): else: return fail_api(message="删除失败") - def put(self, power_id): + def put(self, _id): res = parser_power.parse_args() data = { @@ -257,7 +258,7 @@ class RightPowerResource(Resource): "url": res.power_url, "sort": res.sort } - power = RightModel.query.filter_by(id=power_id).update(data) + power = RightModel.query.filter_by(id=_id).update(data) db.session.commit() if not power: @@ -265,25 +266,21 @@ class RightPowerResource(Resource): return success_api(message="更新权限成功") -class RightPowerEnableResource(Resource): - def put(self, right_id): - - power = RightModel.query.get(right_id) - if power: - power.enable = not power.enable - db.session.commit() - message = "修改成功" - return success_api(message=message) - else: - return fail_api(message="出错啦") +def right_power_enable_resource(_id, action): + power = RightModel.query.get(_id) + if power: + power.enable = not power.enable + db.session.commit() + message = "修改成功" + return success_api(message=message) + else: + return fail_api(message="出错啦") -class AdminConfigsResource(Resource): - def get(self): - return get_render_config() +def admin_configs_resource(): + return get_render_config() -class AdminMenuResource(Resource): - def get(self): - menu_tree = make_menu_tree() - return jsonify(menu_tree) +def admin_menu_resource(): + menu_tree = make_menu_tree() + return jsonify(menu_tree) diff --git a/applications/rights/roles.py b/applications/rights/roles.py index f2c413a..80a7c0d 100644 --- a/applications/rights/roles.py +++ b/applications/rights/roles.py @@ -1,4 +1,6 @@ -from flask_restful import Resource, reqparse, marshal +from flask.views import MethodView + +from flask_restful import Resource, reqparse from common.utils.http import table_api, success_api, fail_api from extensions import db @@ -33,49 +35,48 @@ def batch_remove_role(role_ids): remove_role(role_id) -class RoleRolesResource(Resource): - # 表格数据 - def get(self): - parser = reqparse.RequestParser(bundle_errors=True) - parser.add_argument('page', type=int, default=1) - parser.add_argument('limit', type=int, default=10) - parser.add_argument('roleName', type=str, dest='role_name', default="") - parser.add_argument('roleCode', type=str, dest='role_code', default="") +def role_deletes(): + parser = reqparse.RequestParser() + parser.add_argument('ids[]', action='append', dest='ids') - res = parser.parse_args() + res = parser.parse_args() - filters = [] - if res.role_name: - filters.append(RoleModel.name.like('%' + res.role_name + '%')) - if res.role_code: - filters.append(RoleModel.code.like('%' + res.role_code + '%')) - - paginate = RoleModel.query.filter(*filters).paginate(page=res.page, per_page=res.limit, error_out=False) - - return table_api(result={'items': [{'id': item.id, - 'roleName': item.name, - 'roleCode': item.code, - 'enable': item.enable, - 'comment': item.comment, - 'details': item.details, - 'sort': item.sort, - } for item in paginate.items], - 'total': paginate.total} - , code=0) - - def delete(self): - parser = reqparse.RequestParser() - parser.add_argument('ids[]', action='append', dest='ids') - - res = parser.parse_args() - - batch_remove_role(res.ids) - return success_api(message="批量删除成功") + batch_remove_role(res.ids) + return success_api(message="批量删除成功") -class RoleRoleResource(Resource): +class RoleRoleApi(MethodView): - def post(self, role_id): + def get(self, _id): + if not _id: + parser = reqparse.RequestParser(bundle_errors=True) + parser.add_argument('page', type=int, default=1) + parser.add_argument('limit', type=int, default=10) + parser.add_argument('roleName', type=str, dest='role_name', default="") + parser.add_argument('roleCode', type=str, dest='role_code', default="") + + res = parser.parse_args() + + filters = [] + if res.role_name: + filters.append(RoleModel.name.like('%' + res.role_name + '%')) + if res.role_code: + filters.append(RoleModel.code.like('%' + res.role_code + '%')) + + paginate = RoleModel.query.filter(*filters).paginate(page=res.page, per_page=res.limit, error_out=False) + + return table_api(result={'items': [{'id': item.id, + 'roleName': item.name, + 'roleCode': item.code, + 'enable': item.enable, + 'comment': item.comment, + 'details': item.details, + 'sort': item.sort, + } for item in paginate.items], + 'total': paginate.total} + , code=0) + + def post(self): parser = reqparse.RequestParser() parser.add_argument('details', type=str) parser.add_argument('enable', type=int) @@ -97,7 +98,7 @@ class RoleRoleResource(Resource): return success_api(message="成功") # 更新角色 - def put(self, role_id): + def put(self, _id): parser = reqparse.RequestParser() parser.add_argument('roleId', dest='role_id', type=int) parser.add_argument('roleCode', dest='role_code', type=str) @@ -116,32 +117,30 @@ class RoleRoleResource(Resource): "details": res.details } - role = RoleModel.query.filter_by(id=role_id).update(data) + role = RoleModel.query.filter_by(id=_id).update(data) db.session.commit() if not role: return fail_api(message="更新角色失败") return success_api(message="更新角色成功") -class RoleEnableResource(Resource): +def role_enable_resource(_id): """启用用户""" + ret = RoleModel.query.get(_id) + ret.enable = not ret.enable + db.session.commit() - def put(self, role_id): - ret = RoleModel.query.get(role_id) - ret.enable = not ret.enable - db.session.commit() - - message = "修改成功" - if not ret: - return fail_api(message="出错啦") - return success_api(message=message) + message = "修改成功" + if not ret: + return fail_api(message="出错啦") + return success_api(message=message) -class RolePowerResource(Resource): +class RolePowerApi(MethodView): - def get(self, role_id): + def get(self, _id): # 获取角色权限 - role = RoleModel.query.filter_by(id=role_id).first() + role = RoleModel.query.filter_by(id=_id).first() # 获取权限列表的 id check_powers_list = [rp.id for rp in role.power] powers = RightModel.query.all() # 获取所有的权限 @@ -167,7 +166,7 @@ class RolePowerResource(Resource): } # 保存角色权限 - def put(self, role_id): + def put(self, _id): parser = reqparse.RequestParser() parser.add_argument('powerIds', dest='power_ids') parser.add_argument('roleId', dest='role_id') @@ -176,7 +175,7 @@ class RolePowerResource(Resource): power_list = res.power_ids.split(',') """ 更新角色权限 """ - role = RoleModel.query.filter_by(id=role_id).first() + role = RoleModel.query.filter_by(id=_id).first() power_id_list = [] for p in role.power: power_id_list.append(p.id) @@ -190,10 +189,8 @@ class RolePowerResource(Resource): return success_api(message="授权成功") # 角色删除 - def delete(self, role_id): - print(role_id) - res = remove_role(role_id) - print(res) + def delete(self, _id): + res = remove_role(_id) if not res: return fail_api(message="角色删除失败") return success_api(message="角色删除成功") diff --git a/applications/system/__init__.py b/applications/system/__init__.py index f368f5c..332d261 100644 --- a/applications/system/__init__.py +++ b/applications/system/__init__.py @@ -1,6 +1,10 @@ from flask import Blueprint +from common import register_api from .file import FilePhotoAPI from .passport import LoginAPI +def register_sys_api(api_bp): + register_api(LoginAPI, 'login_api', '/passport/login', pk='_id', app=api_bp) + register_api(FilePhotoAPI, 'photo_api', '/file/photo', pk='photo_id', app=api_bp) diff --git a/templates/admin/department/dept.html b/templates/admin/department/dept.html index 2fa9ca0..14cbce1 100644 --- a/templates/admin/department/dept.html +++ b/templates/admin/department/dept.html @@ -110,7 +110,7 @@ treeDefaultClose: false, toolbar: '#toolbar', /*表格的工具栏*/ elem: '#tables', /*表格挂载的对象*/ - url: '/api/v1/dept/departments', /*数据来源接口*/ + url: '/api/v1/dept/department', /*数据来源接口*/ page: false, cols: get_columns(),/*表格渲染的数据*/ }) diff --git a/templates/admin/roles/roles.html b/templates/admin/roles/roles.html index 74501f0..bcb47b2 100644 --- a/templates/admin/roles/roles.html +++ b/templates/admin/roles/roles.html @@ -85,7 +85,7 @@ table.render({ parseData: parserTableData, elem: '#tables', - url: '/api/v1/roles/roles', + url: '/api/v1/roles/role', page: true, cols: get_columns(), skin: 'line', @@ -225,7 +225,7 @@ let loading = layer.load() $.ajax({ - url: '/api/v1/roles/roles', + url: '/api/v1/roles/role', data: { ids: ids }, dataType: 'json', type: 'delete',