From 515f720a59576cc906d14c38b19dedb4e46ee21a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Fri, 18 Aug 2023 00:39:14 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=8F=9C=E5=8D=95=E5=92=8C=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E8=8C=83=E5=9B=B4=E6=8E=88=E6=9D=83=E5=AE=8C?= =?UTF-8?q?=E6=88=90;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/role_menu_button_permission.py | 20 +- .../role/components/PermissionComNew/api.ts | 12 + .../components/PermissionComNew/index.vue | 571 +++++++++--------- .../role/components/PermissionComNew/types.ts | 6 +- 4 files changed, 324 insertions(+), 285 deletions(-) diff --git a/backend/dvadmin/system/views/role_menu_button_permission.py b/backend/dvadmin/system/views/role_menu_button_permission.py index f1d5b00..1b3386e 100644 --- a/backend/dvadmin/system/views/role_menu_button_permission.py +++ b/backend/dvadmin/system/views/role_menu_button_permission.py @@ -47,6 +47,7 @@ class RoleButtonPermissionSerializer(CustomModelSerializer): 角色按钮权限 """ isCheck = serializers.SerializerMethodField() + data_range = serializers.SerializerMethodField() def get_isCheck(self, instance): params = self.request.query_params @@ -55,9 +56,20 @@ class RoleButtonPermissionSerializer(CustomModelSerializer): role__id=params.get('role'), ).exists() + def get_data_range(self, instance): + params = self.request.query_params + obj = RoleMenuButtonPermission.objects.filter( + menu_button__id=instance['id'], + role__id=params.get('role'), + ).first() + if obj is None: + return None + return obj.data_range + + class Meta: model = MenuButton - fields = ['id','name','value','isCheck'] + fields = ['id','name','value','isCheck','data_range'] class RoleMenuPermissionSerializer(CustomModelSerializer): """ @@ -122,7 +134,7 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): @action(methods=['PUT'], detail=True, permission_classes=[IsAuthenticated]) def set_role_premission(self,request,pk): """ - 对角色授权: + 对角色的菜单和按钮授权: :param request: :param pk: role :return: @@ -137,10 +149,12 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): RoleMenuPermission.objects.create(role_id=pk, menu_id=menu.get('id')) for btn in menu.get('btns'): if btn.get('isCheck'): - RoleMenuButtonPermission.objects.create(role_id=pk, menu_button_id=btn.get('id')) + instance = RoleMenuButtonPermission.objects.create(role_id=pk, menu_button_id=btn.get('id'),data_range=btn.get('data_range')) + instance.dept.set(btn.get('dept',[])) return DetailResponse(msg="授权成功") + @action(methods=['GET'], detail=False, permission_classes=[IsAuthenticated]) def role_menu_get_button(self, request): """ diff --git a/web/src/views/system/role/components/PermissionComNew/api.ts b/web/src/views/system/role/components/PermissionComNew/api.ts index 12481e5..be37ef5 100644 --- a/web/src/views/system/role/components/PermissionComNew/api.ts +++ b/web/src/views/system/role/components/PermissionComNew/api.ts @@ -45,3 +45,15 @@ export function getDataPermissionMenu() { method: 'get' }) } + +/** + * 设置按钮的数据范围 + */ +export function setBtnDatarange(roleId:number,data:object) { + return request({ + url: `/api/system/role_menu_button_permission/${roleId}/set_btn_datarange/`, + method: 'put', + data + }) +} + diff --git a/web/src/views/system/role/components/PermissionComNew/index.vue b/web/src/views/system/role/components/PermissionComNew/index.vue index 20def79..7bc1d4e 100644 --- a/web/src/views/system/role/components/PermissionComNew/index.vue +++ b/web/src/views/system/role/components/PermissionComNew/index.vue @@ -1,119 +1,134 @@ diff --git a/web/src/views/system/role/components/PermissionComNew/types.ts b/web/src/views/system/role/components/PermissionComNew/types.ts index e02c980..c336389 100644 --- a/web/src/views/system/role/components/PermissionComNew/types.ts +++ b/web/src/views/system/role/components/PermissionComNew/types.ts @@ -20,10 +20,10 @@ export interface CustomDataPermissionMenuType { } export interface MenuDataType { - key: string; + id: string; name: string; isCheck: boolean; radio: string; - btns: { label: string; value: string; isCheck: boolean; role: string; }[]; + btns: { id:number,label: string; value: string; isCheck: boolean; data_range: number;dept:object }[]; columns: { [key: string]: boolean | string; }[] -} \ No newline at end of file +}