From 3b5435cab71820d47f8e416e91a179fd6d8e4a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Sun, 1 Jan 2023 17:20:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E6=87=92=E5=8A=A0=E8=BD=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/models.py | 19 +++++++++++++++++++ backend/dvadmin/system/views/dept.py | 16 +++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index bb59d12..d471438 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -120,6 +120,25 @@ class Dept(CoreModel): help_text="上级部门", ) + @classmethod + def recursion_dept_info(cls, dept_id: int, dept_all_list=None, dept_list=None): + """ + 递归获取部门的所有下级部门 + :param dept_id: 需要获取的id + :param dept_all_list: 所有列表 + :param dept_list: 递归list + :return: + """ + if not dept_all_list: + dept_all_list = Dept.objects.values("id", "parent") + if dept_list is None: + dept_list = [dept_id] + for ele in dept_all_list: + if ele.get("parent") == dept_id: + dept_list.append(ele.get("id")) + cls.recursion_dept_info(ele.get("id"), dept_all_list, dept_list) + return list(set(dept_list)) + class Meta: db_table = table_prefix + "system_dept" verbose_name = "部门表" diff --git a/backend/dvadmin/system/views/dept.py b/backend/dvadmin/system/views/dept.py index 52dc1df..febc74e 100644 --- a/backend/dvadmin/system/views/dept.py +++ b/backend/dvadmin/system/views/dept.py @@ -163,7 +163,21 @@ class DeptViewSet(CustomModelViewSet): else: queryset = Dept.objects.filter(parent__isnull=True).values('id', 'name', 'parent') else: - dept_list = request.user.role.values_list('dept', flat=True) + data_range = request.user.role.values_list('data_range', flat=True) + user_dept_id = request.user.dept.id + dept_list = [] + data_range_list = list(set(data_range)) + for item in data_range_list: + if item in [0,2]: + dept_list = [user_dept_id] + elif item == 1: + dept_list = Dept.recursion_dept_info(dept_id=user_dept_id) + elif item == 3: + dept_list = Dept.objects.values_list('id',flat=True) + elif item == 4: + dept_list = request.user.role.values_list('dept',flat=True) + else: + dept_list = [] if parent: queryset = Dept.objects.filter(id__in=dept_list,parent=parent).values('id', 'name', 'parent') else: