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: