95 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| from rest_framework.filters import SearchFilter, OrderingFilter
 | |
| from rest_framework.permissions import IsAuthenticated
 | |
| from rest_framework.views import APIView
 | |
| from rest_framework.viewsets import ModelViewSet
 | |
| from rest_framework.response import Response
 | |
| from rest_framework.permissions import IsAuthenticated
 | |
| from rest_framework.decorators import action
 | |
| from utils.custom import CommonPagination, TreeAPIView
 | |
| from ..permission import RbacPermission
 | |
| from ..models import Organization
 | |
| from ..serializers.organization_serializer import OrganizationSerializer, OrganizationUserTreeSerializer
 | |
| 
 | |
| 
 | |
| class OrganizationViewSet(ModelViewSet):
 | |
|     """
 | |
|     组织机构:增删改查
 | |
|     """
 | |
|     perms_map = (
 | |
|         {'get': 'organization_list'}, {'post': 'organization_create'},
 | |
|         {'put': 'organization_update'}, {'delete': 'organization_delete'})
 | |
|     queryset = Organization.objects.filter(is_delete=0).all()
 | |
|     serializer_class = OrganizationSerializer
 | |
|     pagination_class = None #不分页
 | |
|     filter_backends = (SearchFilter, OrderingFilter)
 | |
|     search_fields = ('^name',)
 | |
|     ordering_fields = ('id',)
 | |
|     
 | |
|     def check_permissions(self, request):
 | |
|         """
 | |
|         Check if the request should be permitted.
 | |
|         Raises an appropriate exception if the request is not permitted.
 | |
|         """
 | |
|         if request.method == 'GET':
 | |
|             pass
 | |
|         else:
 | |
|             for permission in self.get_permissions():
 | |
|                 if not permission.has_permission(request, self):
 | |
|                     self.permission_denied(
 | |
|                         request, message=getattr(permission, 'message', None)
 | |
|                     )
 | |
| 
 | |
|     def destroy(self, request, *args, **kwargs): #逻辑删除
 | |
|         instance = self.get_object()
 | |
|         # self.perform_destroy(instance)
 | |
|         instance.is_delete = True
 | |
|         instance.save()
 | |
|         return Response(status=status.HTTP_204_NO_CONTENT)
 | |
| 
 | |
|     # @action(methods=['get'], detail=False, permission_classes=[IsAuthenticated], pagination_class=None)
 | |
|     # def all(self, request): #不分页,只要求登陆权限
 | |
|     #     queryset = self.queryset
 | |
|     #     serializer_class = self.serializer_class
 | |
|     #     serializer = serializer_class(queryset,many=True)
 | |
|     #     return Response(serializer.data)
 | |
|     
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| class OrganizationTreeView(TreeAPIView):
 | |
|     """
 | |
|     组织架构树
 | |
|     """
 | |
|     queryset = Organization.objects.all()
 | |
|     permission_classes = (IsAuthenticated,)
 | |
| 
 | |
| 
 | |
| class OrganizationUserTreeView(APIView):
 | |
|     """
 | |
|     组织架构关联用户树
 | |
|     """
 | |
| 
 | |
|     def get(self, request, format=None):
 | |
|         organizations = Organization.objects.all()
 | |
|         serializer = OrganizationUserTreeSerializer(organizations, many=True)
 | |
|         tree_dict = {}
 | |
|         tree_data = []
 | |
|         for item in serializer.data:
 | |
|             new_item = {
 | |
|                 'id': 'o' + str(item['id']),
 | |
|                 'label': item['label'],
 | |
|                 'pid': item['pid'],
 | |
|                 'children': item['children']
 | |
|             }
 | |
|             tree_dict[item['id']] = new_item
 | |
|         for i in tree_dict:
 | |
|             if tree_dict[i]['pid']:
 | |
|                 pid = tree_dict[i]['pid']
 | |
|                 parent = tree_dict[pid]
 | |
|                 parent['children'].append(tree_dict[i])
 | |
|             else:
 | |
|                 tree_data.append(tree_dict[i])
 | |
|         return Response(tree_data)
 |