From b5c583ba7dcc8db7f81d9f1faedfd7ad582d23cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B0=8F=E6=B6=9B?= <1537080775@qq.com> Date: Fri, 3 Jan 2025 14:41:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(20250103-role):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=89=B9=E9=87=8F=E6=8E=88=E6=9D=83=E7=94=A8?= =?UTF-8?q?=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/role.py | 26 ++++++++++++++ .../system/role/components/RoleDrawer.vue | 32 +++++++++++++---- .../system/role/components/RoleUsers.vue | 35 +++++++++++++++++++ web/src/views/system/role/components/api.ts | 33 +++++++++++++++++ web/src/views/system/role/index.vue | 13 ++++--- .../system/role/stores/RoleDrawerStores.ts | 5 +++ .../system/role/stores/RoleUsersStores.ts | 24 +++++++++++++ web/src/views/system/role/types.ts | 13 ++++++- 8 files changed, 169 insertions(+), 12 deletions(-) create mode 100644 web/src/views/system/role/components/RoleUsers.vue create mode 100644 web/src/views/system/role/stores/RoleUsersStores.ts diff --git a/backend/dvadmin/system/views/role.py b/backend/dvadmin/system/views/role.py index a5b5a6f9..07a16376 100644 --- a/backend/dvadmin/system/views/role.py +++ b/backend/dvadmin/system/views/role.py @@ -26,6 +26,12 @@ class RoleSerializer(CustomModelSerializer): """ 角色-序列化器 """ + users = serializers.SerializerMethodField() + + @staticmethod + def get_users(instance): + users = instance.users_set.exclude(id=1).values('id', 'name', 'dept__name') + return users class Meta: model = Role @@ -116,3 +122,23 @@ class RoleViewSet(CustomModelViewSet, FastCrudMixin,FieldPermissionMixin): create_serializer_class = RoleCreateUpdateSerializer update_serializer_class = RoleCreateUpdateSerializer search_fields = ['name', 'key'] + + @action(methods=['PUT'], detail=True, permission_classes=[IsAuthenticated]) + def set_role_users(self, request, pk): + """ + 设置 角色-用户 + :param request: + :return: + """ + data = request.data + direction = data.get('direction') + movedKeys = data.get('movedKeys') + role = Role.objects.get(pk=pk) + if direction == "left": + # left : 移除用户权限 + role.users_set.remove(*movedKeys) + else: + # right : 添加用户权限 + role.users_set.add(*movedKeys) + serializer = RoleSerializer(role) + return DetailResponse(data=serializer.data, msg="更新成功") \ No newline at end of file diff --git a/web/src/views/system/role/components/RoleDrawer.vue b/web/src/views/system/role/components/RoleDrawer.vue index c147b665..23b3a602 100644 --- a/web/src/views/system/role/components/RoleDrawer.vue +++ b/web/src/views/system/role/components/RoleDrawer.vue @@ -11,38 +11,56 @@ 当前授权角色: - {{ RoleDrawer.roleName }} + {{ RoleDrawer.roleName }} + 授权人员: + {{ RoleDrawer.users.length }} - + - - + + + + + +