From 9f523f6eba66ac1fcb70bbe07cfab57927e19689 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, 30 Dec 2022 16:57:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/dept.py | 19 ++++++++++++------- backend/dvadmin/system/views/role.py | 18 ++++++++++++++++-- .../components/header-user/userinfo.vue | 1 - web/src/views/system/role/crud.js | 8 ++++---- web/src/views/system/role/index.vue | 5 +++++ web/src/views/system/rolePermission/api.js | 15 ++++++++++++++- web/src/views/system/rolePermission/index.vue | 2 +- 7 files changed, 52 insertions(+), 16 deletions(-) diff --git a/backend/dvadmin/system/views/dept.py b/backend/dvadmin/system/views/dept.py index 743fa79..52dc1df 100644 --- a/backend/dvadmin/system/views/dept.py +++ b/backend/dvadmin/system/views/dept.py @@ -156,14 +156,19 @@ class DeptViewSet(CustomModelViewSet): def dept_lazy_tree(self, request, *args, **kwargs): parent = self.request.query_params.get('parent') - queryset = self.filter_queryset(self.get_queryset()) - if not parent: - if self.request.user.is_superuser: - queryset = queryset.filter(parent__isnull=True) + is_superuser = request.user.is_superuser + if is_superuser: + if parent: + queryset = Dept.objects.filter(parent=parent).values('id', 'name', 'parent') else: - queryset = queryset.filter(id=self.request.user.dept_id) - data = queryset.filter(status=True).order_by('sort').values('name', 'id', 'parent') - return DetailResponse(data=data, msg="获取成功") + queryset = Dept.objects.filter(parent__isnull=True).values('id', 'name', 'parent') + else: + dept_list = request.user.role.values_list('dept', flat=True) + if parent: + queryset = Dept.objects.filter(id__in=dept_list,parent=parent).values('id', 'name', 'parent') + else: + queryset = Dept.objects.filter(id__in=dept_list,parent__isnull=True).values('id', 'name', 'parent') + return DetailResponse(data=queryset, msg="获取成功") @action(methods=["GET"], detail=False, permission_classes=[AnonymousUserPermission]) diff --git a/backend/dvadmin/system/views/role.py b/backend/dvadmin/system/views/role.py index da4f951..727e355 100644 --- a/backend/dvadmin/system/views/role.py +++ b/backend/dvadmin/system/views/role.py @@ -10,7 +10,7 @@ from rest_framework import serializers from rest_framework.decorators import action from rest_framework.permissions import IsAuthenticated -from dvadmin.system.models import Role, Menu, MenuButton +from dvadmin.system.models import Role, Menu, MenuButton, Dept from dvadmin.system.views.dept import DeptSerializer from dvadmin.system.views.menu import MenuSerializer from dvadmin.system.views.menu_button import MenuButtonSerializer @@ -62,6 +62,9 @@ class RoleCreateUpdateSerializer(CustomModelSerializer): return super().validate(attrs) def save(self, **kwargs): + is_superuser = self.request.user.is_superuser + if not is_superuser: + self.validated_data.pop('admin') data = super().save(**kwargs) data.dept.set(self.initial_data.get('dept', [])) data.menu.set(self.initial_data.get('menu', [])) @@ -119,7 +122,7 @@ class RoleViewSet(CustomModelViewSet): else: menu_id_list = request.user.role.values_list('menu',flat=True) queryset = Menu.objects.filter(id__in=menu_id_list) - queryset = self.filter_queryset(queryset) + # queryset = self.filter_queryset(queryset) serializer = MenuPermissonSerializer(queryset, many=True,request=request) return DetailResponse(data=serializer.data) @@ -201,3 +204,14 @@ class RoleViewSet(CustomModelViewSet): else: data = [] return DetailResponse(data=data) + + @action(methods=['GET'], detail=False, permission_classes=[IsAuthenticated]) + def data_scope_dept(self,request): + """根据当前角色获取部门信息""" + is_superuser = request.user.is_superuser + if is_superuser: + queryset = Dept.objects.values('id','name','parent') + else: + dept_list = request.user.role.values_list('dept',flat=True) + queryset = Dept.objects.filter(id__in=dept_list).values('id','name','parent') + return DetailResponse(data=queryset) \ No newline at end of file diff --git a/web/src/layout/header-aside/components/header-user/userinfo.vue b/web/src/layout/header-aside/components/header-user/userinfo.vue index b46522e..d02c51d 100644 --- a/web/src/layout/header-aside/components/header-user/userinfo.vue +++ b/web/src/layout/header-aside/components/header-user/userinfo.vue @@ -279,7 +279,6 @@ export default { * @param file */ handleAvatarSuccess (res, file) { - console.log(11, res) this.userInfo.avatar = res } } diff --git a/web/src/views/system/role/crud.js b/web/src/views/system/role/crud.js index 6e2169c..3468f44 100644 --- a/web/src/views/system/role/crud.js +++ b/web/src/views/system/role/crud.js @@ -156,7 +156,6 @@ export const crudOptions = (vm) => { title: '是否管理员', key: 'admin', sortable: true, - type: 'radio', dict: { data: vm.dictionary('button_whether_bool') @@ -164,11 +163,12 @@ export const crudOptions = (vm) => { form: { value: false, component: { - placeholder: '请选择是否管理员' - } + placeholder: '请选择是否管理员', + show(context){ + return vm.info.is_superuser?true:false} + }, } }, - { title: '状态', key: 'status', diff --git a/web/src/views/system/role/index.vue b/web/src/views/system/role/index.vue index 8ed34d7..72517e8 100644 --- a/web/src/views/system/role/index.vue +++ b/web/src/views/system/role/index.vue @@ -64,12 +64,17 @@ import * as api from './api' import { crudOptions } from './crud' import { d2CrudPlus } from 'd2-crud-plus' import rolePermission from '../rolePermission' +import { mapState } from 'vuex' + export default { name: 'role', mixins: [d2CrudPlus.crud], components: { rolePermission }, + computed: { + ...mapState('d2admin/user', ['info']) + }, data () { return { rolePermissionShow: false, diff --git a/web/src/views/system/rolePermission/api.js b/web/src/views/system/rolePermission/api.js index d0b4631..8e9d842 100644 --- a/web/src/views/system/rolePermission/api.js +++ b/web/src/views/system/rolePermission/api.js @@ -47,7 +47,7 @@ export function DelObj (id) { // 通过角色id,获取菜单数据 export function GetMenuData (obj) { return request({ - url: '/api/system/role/' + obj.id + '/roleId_get_menu/', + url: '/api/system/role/role_get_menu/', method: 'get', params: {} }).then(res => { @@ -69,3 +69,16 @@ export function GetDataScope () { params: {} }) } + +/** + * 获取角色部门 + * @returns {*} + * @constructor + */ +export function GetDataScopeDept () { + return request({ + url: '/api/system/role/data_scope_dept/', + method: 'get', + params: {} + }) +} diff --git a/web/src/views/system/rolePermission/index.vue b/web/src/views/system/rolePermission/index.vue index 25555b4..fa81c32 100644 --- a/web/src/views/system/rolePermission/index.vue +++ b/web/src/views/system/rolePermission/index.vue @@ -215,7 +215,7 @@ export default { }, // 获取部门数据 getDeptData () { - deptApi.GetListAll().then(ret => { + api.GetDataScopeDept().then(ret => { this.deptOptions = XEUtils.toArrayTree(ret.data, { parentKey: 'parent', strict: false }) }) },