111 lines
3.3 KiB
Python
111 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
@Remark: 角色管理
|
|
"""
|
|
from rest_framework import serializers
|
|
|
|
from mysystem.models import Dept
|
|
from utils.jsonResponse import SuccessResponse
|
|
from utils.serializers import CustomModelSerializer
|
|
from utils.viewset import CustomModelViewSet
|
|
|
|
class DeptSerializer(CustomModelSerializer):
|
|
"""
|
|
部门-序列化器
|
|
"""
|
|
parent_name = serializers.CharField(read_only=True, source='parent.name')
|
|
status_name = serializers.SerializerMethodField()
|
|
hasChildren = serializers.SerializerMethodField()
|
|
|
|
def get_hasChildren(self, obj):
|
|
return Dept.objects.filter(parent=obj.id).exists()
|
|
|
|
def get_status_name(self, obj: Dept):
|
|
if obj.status:
|
|
return "启用"
|
|
return "禁用"
|
|
|
|
class Meta:
|
|
model = Dept
|
|
fields = "__all__"
|
|
read_only_fields = ["id"]
|
|
|
|
|
|
class DeptCreateUpdateSerializer(CustomModelSerializer):
|
|
"""
|
|
部门管理 创建/更新时的列化器
|
|
"""
|
|
|
|
def create(self, validated_data):
|
|
"""
|
|
默认部门dept_belong_id数据归属为当前部门
|
|
"""
|
|
instance = super().create(validated_data)
|
|
instance.dept_belong_id = instance.id
|
|
instance.save()
|
|
return instance
|
|
|
|
class Meta:
|
|
model = Dept
|
|
fields = '__all__'
|
|
|
|
|
|
class DeptTreeSerializer(CustomModelSerializer):
|
|
"""
|
|
部门表的树形序列化器
|
|
"""
|
|
children = serializers.SerializerMethodField(read_only=True)
|
|
|
|
def get_children(self, instance):
|
|
queryset = Dept.objects.filter(parent=instance.id).filter(status=1)
|
|
if queryset:
|
|
serializer = DeptTreeSerializer(queryset, many=True)
|
|
return serializer.data
|
|
else:
|
|
return None
|
|
|
|
class Meta:
|
|
model = Dept
|
|
fields = "__all__"
|
|
read_only_fields = ["id"]
|
|
|
|
|
|
class DeptViewSet(CustomModelViewSet):
|
|
"""
|
|
部门管理接口:
|
|
"""
|
|
queryset = Dept.objects.all()
|
|
serializer_class = DeptSerializer
|
|
create_serializer_class = DeptCreateUpdateSerializer
|
|
update_serializer_class = DeptCreateUpdateSerializer
|
|
filterset_fields = ['status']
|
|
search_fields = ['name', 'owner','phone','email']
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
"""
|
|
去除分页功能
|
|
改造可懒加载,懒加载默认只返回父级
|
|
"""
|
|
params = request.query_params
|
|
parent = params.get('parent', None)
|
|
lazy = params.get('lazy', None)
|
|
search = params.get('search', None)
|
|
queryset = self.filter_queryset(self.get_queryset())
|
|
if lazy:
|
|
if not search:
|
|
if parent:
|
|
queryset = queryset.filter(parent=parent)
|
|
else:
|
|
queryset = queryset.filter(parent__isnull=True)
|
|
else:
|
|
if parent:
|
|
queryset = queryset.filter(parent=parent)
|
|
serializer = self.get_serializer(queryset, many=True, request=request)
|
|
return SuccessResponse(data=serializer.data, msg="获取成功")
|
|
|
|
def dept_tree(self, request):
|
|
queryset = Dept.objects.exclude(status=0).filter(parent=None)
|
|
serializer = DeptTreeSerializer(queryset, many=True)
|
|
return SuccessResponse(data=serializer.data, msg="获取成功")
|