From a35d443fb65c46e43637326ccab2bf5366cba689 Mon Sep 17 00:00:00 2001 From: zhengxinonly Date: Mon, 26 Jul 2021 19:55:59 +0800 Subject: [PATCH] =?UTF-8?q?refactor(rest-api):=E8=A7=92=E8=89=B2=E4=B8=8E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/api/roles.py | 140 +++++------ applications/api/users/profile.py | 64 +++-- applications/api/users/user.py | 234 +++++++++---------- applications/templates/roles/edit.html | 15 +- applications/templates/roles/main.html | 70 +++--- applications/templates/users/add.html | 13 +- applications/templates/users/avatar.html | 16 +- applications/templates/users/edit_users.html | 15 +- applications/templates/users/main.html | 60 ++--- applications/templates/users/profile.html | 35 ++- 10 files changed, 359 insertions(+), 303 deletions(-) diff --git a/applications/api/roles.py b/applications/api/roles.py index 03952b4..735901b 100644 --- a/applications/api/roles.py +++ b/applications/api/roles.py @@ -42,8 +42,8 @@ def batch_remove_role(role_ids): role_api = Api(api_bp, prefix='/roles') -@role_api.resource('/data') -class RoleData(Resource): +@role_api.resource('/roles') +class RoleRoles(Resource): # 表格数据 @authorize("admin:role:main", log=True) def get(self): @@ -76,15 +76,23 @@ class RoleData(Resource): } for item in paginate.items ], count=paginate.total, code=0) + @authorize("admin:role:remove", log=True) + @login_required + def delete(self): + parser = reqparse.RequestParser() + parser.add_argument('ids[]', action='append', dest='ids') -@role_api.resource('/add') -class AddRole(Resource): - # @authorize("admin:role:add", log=True) - # def get(self): - # return make_response(render_template('roles/add.html')) + res = parser.parse_args() + + batch_remove_role(res.ids) + return success_api(msg="批量删除成功") + + +@role_api.resource('/role/') +class RoleRole(Resource): @authorize("admin:role:add", log=True) - def post(self): + def post(self, role_id): parser = reqparse.RequestParser() parser.add_argument('details', type=str) parser.add_argument('enable', type=int) @@ -105,6 +113,49 @@ class AddRole(Resource): db.session.commit() return success_api(msg="成功") + # 更新角色 + @authorize("admin:role:edit", log=True) + def put(self, role_id): + parser = reqparse.RequestParser() + parser.add_argument('roleId', dest='role_id', type=int) + parser.add_argument('roleCode', dest='role_code', type=str) + parser.add_argument('roleName', dest='role_name', type=str) + parser.add_argument('sort', type=int) + parser.add_argument('enable', type=int) + parser.add_argument('details', type=str) + + res = parser.parse_args() + + data = { + "code": res.role_code, + "name": res.role_name, + "sort": res.sort, + "enable": res.enable, + "details": res.details + } + + role = Role.query.filter_by(id=role_id).update(data) + db.session.commit() + if not role: + return fail_api(msg="更新角色失败") + return success_api(msg="更新角色成功") + + +@role_api.resource('/role//status') +class RoleEnable(Resource): + """启用用户""" + + @authorize("admin:role:edit", log=True) + def put(self, role_id): + ret = Role.query.get(role_id) + ret.enable = not ret.enable + db.session.commit() + + message = "修改成功" + if not ret: + return fail_api(msg="出错啦") + return success_api(msg=message) + @role_api.resource('/role_power/') class RolePower(Resource): @@ -164,76 +215,3 @@ class RolePower(Resource): if not res: return fail_api(msg="角色删除失败") return success_api(msg="角色删除成功") - - -@role_api.resource('/edit/') -class EditRole(Resource): - - # # 角色编辑 - # @authorize("admin:role:edit", log=True) - # def get(self, role_id): - # role = Role.query.filter_by(id=role_id).first() - # return make_response(render_template('roles/edit.html', role=role)) - - # 更新角色 - @authorize("admin:role:edit", log=True) - def put(self, role_id): - parser = reqparse.RequestParser() - parser.add_argument('roleId', dest='role_id', type=int) - parser.add_argument('roleCode', dest='role_code', type=str) - parser.add_argument('roleName', dest='role_name', type=str) - parser.add_argument('sort', type=int) - parser.add_argument('enable', type=int) - parser.add_argument('details', type=str) - - res = parser.parse_args() - - data = { - "code": res.role_code, - "name": res.role_name, - "sort": res.sort, - "enable": res.enable, - "details": res.details - } - - role = Role.query.filter_by(id=role_id).update(data) - db.session.commit() - if not role: - return fail_api(msg="更新角色失败") - return success_api(msg="更新角色成功") - - -@role_api.resource('/enable') -class RoleEnable(Resource): - """启用用户""" - - @authorize("admin:role:edit", log=True) - def put(self): - parser = reqparse.RequestParser() - parser.add_argument('roleId', dest='role_id', required=True, type=int) - parser.add_argument('operate', required=True, type=int) - - res = parser.parse_args() - ret = Role.query.filter_by(id=res.role_id).update({"enable": res.operate}) - db.session.commit() - - message = "启动成功" if res.operate else "禁用成功" - if not ret: - return fail_api(msg="出错啦") - return success_api(msg=message) - - -@role_api.resource('/batch_remove') -class RoleBatchRemove(Resource): - """批量删除""" - - @authorize("admin:role:remove", log=True) - @login_required - 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(msg="批量删除成功") diff --git a/applications/api/users/profile.py b/applications/api/users/profile.py index 8eb5559..3ed45b3 100644 --- a/applications/api/users/profile.py +++ b/applications/api/users/profile.py @@ -10,45 +10,74 @@ from applications.models import User from . import users_api -@users_api.resource('/avatar') -class Avatar(Resource): +@users_api.resource('/user//status') +class UserStatus(Resource): + def put(self, user_id): + # 启用或者禁用用户 enable disable + + parser = reqparse.RequestParser() + parser.add_argument('userId', type=int, required=True, dest='user_id') + parser.add_argument('operate', type=int, required=True, dest='operate', choices=[0, 1]) + + res = parser.parse_args() + + if res.operate == 1: + user = User.query.get(user_id) + user.enable = res.operate + message = success_api(msg="启动成功") + else: + user = User.query.filter_by(id=res.user_id).update({"enable": res.operate}) + message = success_api(msg="禁用成功") + if user: + db.session.commit() + else: + return fail_api(msg="出错啦") + return message + + +@users_api.resource('/user//avatar') +class UserAvatar(Resource): """修改头像""" - def put(self): + def put(self, user_id): url = request.json.get("avatar").get("src") - ret = User.query.filter_by(id=current_user.id).update({"avatar": url}) + ret = User.query.get(user_id) + ret.avatar = url db.session.commit() if not ret: return fail_api(msg="出错啦") return success_api(msg="修改成功") -@users_api.resource('/updateInfo') -class ProfileInfo(Resource): +@users_api.resource('/user//info') +class UserInfo(Resource): @login_required - def put(self): + def put(self, user_id): parser = reqparse.RequestParser() - parser.add_argument('realname', type=str, dest='real_name') + parser.add_argument('realName', type=str, dest='real_name') + parser.add_argument('username', type=str) parser.add_argument('remark', type=str) parser.add_argument('details', type=str) res = parser.parse_args() - ret = User.query.filter_by( - id=current_user.id).update({"realname": res.real_name, - "remark": res.details}) + ret = User.query.get(user_id) + ret.username = res.username + ret.realname = res.real_name + ret.remark = res.details + db.session.commit() if not ret: return fail_api(msg="出错啦") return success_api(msg="更新成功") -@users_api.resource('/editPassword') -class EditPassword(Resource): +@users_api.resource('/user//password') +class UserPassword(Resource): """前用户密码""" @login_required - def put(self): + def put(self, user_id): parser = reqparse.RequestParser() parser.add_argument('oldPassword', type=str, required=True, help='旧密码不得为空') parser.add_argument('newPassword', type=str, required=True, help='新密码不得为空') @@ -60,11 +89,12 @@ class EditPassword(Resource): return fail_api(msg='确认密码不一致') """ 修改当前用户密码 """ - is_right = current_user.validate_password(res.oldPassword) + user = User.query.get(user_id) + is_right = user.validate_password(res.oldPassword) if not is_right: return jsonify(success=False, msg="旧密码错误") - current_user.set_password(res.newPassword) - db.session.add(current_user) + user.set_password(res.newPassword) + db.session.add(user) db.session.commit() return jsonify(success=True, msg="更改成功") diff --git a/applications/api/users/user.py b/applications/api/users/user.py index dbfdda9..9f6af9f 100644 --- a/applications/api/users/user.py +++ b/applications/api/users/user.py @@ -59,131 +59,10 @@ def update_user_role(_id, roles_list): db.session.commit() -@users_api.resource('/add') -class Users(Resource): +@users_api.resource('/users') +class UserUsers(Resource): """用户列表数据操作""" - # @authorize("admin:user:add", log=True) - # def get(self): - # roles = Role.query.all() - # return make_response(render_template('users/add.html', roles=roles)) - - @authorize("admin:user:add", log=True) - def post(self): - """新建单个用户""" - parser = reqparse.RequestParser() - parser.add_argument("roleIds", type=str, dest='role_ids') - parser.add_argument("username", type=str, required=True, help="用户名不能为空") - parser.add_argument("realName", type=str, required=True, help="真实姓名不能为空", dest='real_name') - parser.add_argument("password", type=str, required=True, help="密码不得为空") - - res = parser.parse_args() - - role_ids = res.role_ids.split(',') - - if is_user_exists(res.username): - return fail_api(msg="用户已经存在") - - user = User() - user.username = res.username - user.realname = res.real_name - user.set_password(res.password) - db.session.add(user) - db.session.commit() - - """ 增加用户角色 """ - user = User.query.filter_by(id=user.id).first() - roles = Role.query.filter(Role.id.in_(role_ids)).all() - for r in roles: - user.role.append(r) - db.session.commit() - - return success_api(msg="增加成功", code=0) - - -@users_api.resource('/') -class CURDUser(Resource): - """修改用户数据""" - - # @authorize("admin:user:edit", log=True) - # def get(self, user_id): - # # 获取编辑用户信息 - # user = User.query.filter_by(id=user_id).first() - # roles = Role.query.all() - # checked_roles = [] - # for r in user.role: - # checked_roles.append(r.id) - # return make_response( - # render_template('users/edit_users.html', user=user, roles=roles, checked_roles=checked_roles)) - - @authorize("admin:user:remove", log=True) - def delete(self, user_id): - # 删除用户 - res = delete_by_id(user_id) - if not res: - return fail_api(msg="删除失败") - return success_api(msg="删除成功") - - @authorize("admin:user:edit", log=True) - def put(self, user_id): - parser = reqparse.RequestParser() - parser.add_argument('roleIds', type=str, dest='role_ids') - parser.add_argument('userId', type=str, dest='user_id') - parser.add_argument('username', type=str) - parser.add_argument('realName', type=str, dest='real_name') - parser.add_argument('deptId', type=str, dest='dept_id') - - res = parser.parse_args() - role_ids = res.role_ids.split(',') - - # 更新用户数据 - User.query.filter_by(id=user_id).update({'username': res.username, - 'realname': res.real_name, - 'dept_id': res.dept_id}) - db.session.commit() - - update_user_role(user_id, role_ids) - - return success_api(msg="更新成功") - - -@users_api.resource('/batchRemove') -class UserBatchRemove(Resource): - """批量删除""" - - @authorize("admin:user:remove", log=True) - def delete(self): - ids = request.form.getlist('ids[]') - batch_remove(ids) - return success_api(msg="批量删除成功") - - -@users_api.resource('/enable') -class UserEnable(Resource): - def put(self): - # 启用或者禁用用户 enable disable - - parser = reqparse.RequestParser() - parser.add_argument('userId', type=int, required=True, dest='user_id') - parser.add_argument('operate', type=int, required=True, dest='operate', choices=[0, 1]) - - res = parser.parse_args() - - if res.operate == 1: - user = User.query.filter_by(id=res.user_id).update({"enable": res.operate}) - message = success_api(msg="启动成功") - else: - user = User.query.filter_by(id=res.user_id).update({"enable": res.operate}) - message = success_api(msg="禁用成功") - if user: - db.session.commit() - else: - return fail_api(msg="出错啦") - return message - - -@users_api.resource('/data') -class UsersData(Resource): @authorize("admin:user:main", log=True) def get(self): parser = reqparse.RequestParser() @@ -220,3 +99,112 @@ class UsersData(Resource): } for item in paginate.items] return table_api(data=user_data, count=paginate.total, code=0) + + @authorize("admin:user:add", log=True) + def post(self): + """新建单个用户""" + parser = reqparse.RequestParser() + parser.add_argument("roleIds", type=str, dest='role_ids') + parser.add_argument("username", type=str, required=True, help="用户名不能为空") + parser.add_argument("realName", type=str, required=True, help="真实姓名不能为空", dest='real_name') + parser.add_argument("password", type=str, required=True, help="密码不得为空") + + res = parser.parse_args() + + role_ids = res.role_ids.split(',') + + if is_user_exists(res.username): + return fail_api(msg="用户已经存在") + + user = User() + user.username = res.username + user.realname = res.real_name + user.set_password(res.password) + db.session.add(user) + db.session.commit() + + """ 增加用户角色 """ + user = User.query.filter_by(id=user.id).first() + roles = Role.query.filter(Role.id.in_(role_ids)).all() + for r in roles: + user.role.append(r) + db.session.commit() + + return success_api(msg="增加成功", code=0) + + @authorize("admin:user:remove", log=True) + def delete(self): + """批量删除""" + ids = request.form.getlist('ids[]') + batch_remove(ids) + return success_api(msg="批量删除成功") + + +@users_api.resource('/user/') +class UserUser(Resource): + """修改用户数据""" + + @authorize("admin:user:add", log=True) + def post(self, user_id): + """新建单个用户""" + parser = reqparse.RequestParser() + parser.add_argument("roleIds", type=str, dest='role_ids') + parser.add_argument("username", type=str, required=True, help="用户名不能为空") + parser.add_argument("realName", type=str, required=True, help="真实姓名不能为空", dest='real_name') + parser.add_argument("password", type=str, required=True, help="密码不得为空") + + res = parser.parse_args() + + role_ids = res.role_ids.split(',') + + if is_user_exists(res.username): + return fail_api(msg="用户已经存在") + + user = User() + user.username = res.username + user.realname = res.real_name + user.set_password(res.password) + db.session.add(user) + db.session.commit() + + """ 增加用户角色 """ + user = User.query.filter_by(id=user.id).first() + roles = Role.query.filter(Role.id.in_(role_ids)).all() + for r in roles: + user.role.append(r) + db.session.commit() + + return success_api(msg="增加成功", code=0) + + @authorize("admin:user:remove", log=True) + def delete(self, user_id): + # 删除用户 + res = delete_by_id(user_id) + if not res: + return fail_api(msg="删除失败") + return success_api(msg="删除成功") + + +@users_api.resource('/user//role') +class UserRole(Resource): + @authorize("admin:user:edit", log=True) + def put(self, user_id): + parser = reqparse.RequestParser() + parser.add_argument('roleIds', type=str, dest='role_ids') + parser.add_argument('userId', type=str, dest='user_id') + parser.add_argument('username', type=str) + parser.add_argument('realName', type=str, dest='real_name') + parser.add_argument('deptId', type=str, dest='dept_id') + + res = parser.parse_args() + role_ids = res.role_ids.split(',') + + # 更新用户数据 + User.query.filter_by(id=user_id).update({'username': res.username, + 'realname': res.real_name, + 'dept_id': res.dept_id}) + db.session.commit() + + update_user_role(user_id, role_ids) + + return success_api(msg="更新成功") diff --git a/applications/templates/roles/edit.html b/applications/templates/roles/edit.html index f176daa..d186279 100644 --- a/applications/templates/roles/edit.html +++ b/applications/templates/roles/edit.html @@ -32,9 +32,9 @@
- -
@@ -76,11 +76,18 @@ layui.use(['form', 'jquery'], function () { let form = layui.form let $ = layui.jquery - let MODULE_PATH = '/api/v1/roles/' + + let MODULE_PATH = '/api/v1/roles' + let ROLE_API = { + 'ROLES': () => `${MODULE_PATH}/roles`, + 'ROLE': (role_id) => `${MODULE_PATH}/role/${role_id}`, + 'ROLE_STATUS': (role_id) => `${MODULE_PATH}/role/${role_id}/status`, + 'ROLE_POWER': (role_id) => `${MODULE_PATH}/role_power/${role_id}` + } form.on('submit(role-update)', function (data) { $.ajax({ - url: MODULE_PATH + 'edit/' + data.field.roleId, + url: ROLE_API.ROLE(data.field.roleId), data: JSON.stringify(data.field), dataType: 'json', contentType: 'application/json', diff --git a/applications/templates/roles/main.html b/applications/templates/roles/main.html index a418020..29b8050 100644 --- a/applications/templates/roles/main.html +++ b/applications/templates/roles/main.html @@ -87,36 +87,26 @@ {# 启动与禁用 #} @@ -111,14 +103,22 @@ let dtree = layui.dtree let popup = layui.popup let common = layui.common - let MODULE_PATH = '/api/v1/users/' + + let MODULE_PATH = '/api/v1/users' + let USER_API = { + 'USERS': () => `${MODULE_PATH}/users`, + 'USER': (user_id) => `${MODULE_PATH}/user/${user_id}`, + 'USER_ROLE': (user_id) => `${MODULE_PATH}/user/${user_id}/role`, + 'USER_STATUS': (user_id) => `${MODULE_PATH}/user/${user_id}/status`, + 'USER_AVATAR': (user_id) => `${MODULE_PATH}/user/${user_id}/avatar`, + 'USER_INFO': (user_id) => `${MODULE_PATH}/user/${user_id}/info`, + 'USER_PASSWORD': (user_id) => `${MODULE_PATH}/user/${user_id}/password`, + } // 表格数据 let cols = [ [ - {% if authorize("admin:user:remove") %} - { type: 'checkbox' }, - {% endif %} + { type: 'checkbox' }, { title: '姓名', field: 'realname', align: 'center', width: 110 }, { title: '账号', field: 'username', align: 'center' }, { title: '部门', field: 'dept', align: 'center' }, @@ -132,7 +132,7 @@ // 渲染表格数据 table.render({ elem: '#user-table', - url: MODULE_PATH + 'data', + url: USER_API.USERS(), page: true, cols: cols, skin: 'line', @@ -146,7 +146,7 @@ dtree.render({ elem: '#dept-tree', method: 'get', - url: '/api/v1/dept/tree', + url: '/api/v1/dept/departments', dataFormat: 'list', line: true, skin: 'laySimple', @@ -217,7 +217,7 @@ } let loading = layer.load() $.ajax({ - url: MODULE_PATH + 'enable', + url: USER_API.USER_STATUS(this.value), data: JSON.stringify({ operate: operate, userId: this.value }), dataType: 'json', contentType: 'application/json', @@ -258,7 +258,7 @@ layer.close(index) let loading = layer.load() $.ajax({ - url: MODULE_PATH + obj.data['id'], + url: USER_API.USER(obj.data['id']), dataType: 'json', type: 'delete', success: function (result) { @@ -301,7 +301,7 @@ let loading = layer.load() $.ajax({ - url: MODULE_PATH + 'batchRemove', + url: USER_API.USERS(), data: { ids: ids }, dataType: 'json', type: 'delete', diff --git a/applications/templates/users/profile.html b/applications/templates/users/profile.html index aee6d37..6cb3172 100644 --- a/applications/templates/users/profile.html +++ b/applications/templates/users/profile.html @@ -56,6 +56,15 @@
+
@@ -177,6 +186,15 @@
+
@@ -222,7 +240,17 @@ let form = layui.form let popup = layui.popup - let MODULE_PATH = '/api/v1/users/' + let MODULE_PATH = '/api/v1/users' + let USER_API = { + 'USERS': () => `${MODULE_PATH}/users`, + 'USER': (user_id) => `${MODULE_PATH}/user/${user_id}`, + 'USER_ROLE': (user_id) => `${MODULE_PATH}/user/${user_id}/role`, + 'USER_STATUS': (user_id) => `${MODULE_PATH}/user/${user_id}/status`, + 'USER_AVATAR': (user_id) => `${MODULE_PATH}/user/${user_id}/avatar`, + 'USER_INFO': (user_id) => `${MODULE_PATH}/user/${user_id}/info`, + 'USER_PASSWORD': (user_id) => `${MODULE_PATH}/user/${user_id}/password`, + } + // 修改密码页面 $('.edit-password').click(function () { layer.open({ @@ -253,7 +281,7 @@ // 表单提交更改个人信息数据 form.on('submit(user-update)', function (data) { $.ajax({ - url: MODULE_PATH + 'updateInfo', + url: USER_API.USER_INFO(data.field.user_id), data: JSON.stringify(data.field), dataType: 'json', contentType: 'application/json', @@ -272,7 +300,7 @@ // 修改密码提交 form.on('submit(edit-password)', function (data) { $.ajax({ - url: MODULE_PATH + 'editPassword', + url: USER_API.USER_PASSWORD(data.field.user_id), data: JSON.stringify(data.field), contentType: 'application/json', dataType: 'json', @@ -280,6 +308,7 @@ success: function (result) { if (result.success) { popup.success(result.msg, function () { + // TODO 关闭修改密码成之后的窗口 parent.layer.close(parent.layer.getFrameIndex(window.name)) }) } else {