功能变化: 导入时,同步启用更新
parent
f6e8fb3d09
commit
43e21c9c64
|
@ -22,6 +22,13 @@ class DeptSerializer(CustomModelSerializer):
|
||||||
parent_name = serializers.CharField(read_only=True, source='parent.name')
|
parent_name = serializers.CharField(read_only=True, source='parent.name')
|
||||||
status_label = serializers.SerializerMethodField()
|
status_label = serializers.SerializerMethodField()
|
||||||
has_children = serializers.SerializerMethodField()
|
has_children = serializers.SerializerMethodField()
|
||||||
|
hasChild = serializers.SerializerMethodField()
|
||||||
|
|
||||||
|
def get_hasChild(self, instance):
|
||||||
|
hasChild = Dept.objects.filter(parent=instance.id)
|
||||||
|
if hasChild:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def get_status_label(self, obj: Dept):
|
def get_status_label(self, obj: Dept):
|
||||||
if obj.status:
|
if obj.status:
|
||||||
|
@ -133,31 +140,19 @@ class DeptViewSet(CustomModelViewSet):
|
||||||
|
|
||||||
def list(self, request, *args, **kwargs):
|
def list(self, request, *args, **kwargs):
|
||||||
# 如果懒加载,则只返回父级
|
# 如果懒加载,则只返回父级
|
||||||
queryset = self.filter_queryset(self.get_queryset())
|
params = request.query_params
|
||||||
lazy = self.request.query_params.get('lazy')
|
parent = params.get('parent', None)
|
||||||
parent = self.request.query_params.get('parent')
|
if params:
|
||||||
if lazy:
|
if parent:
|
||||||
# 如果懒加载模式,返回全部
|
queryset = self.queryset.filter(status=True, parent=parent)
|
||||||
if not parent:
|
else:
|
||||||
role_list = request.user.role.filter(status=1).values("admin", "data_range")
|
queryset = self.queryset.filter(status=True)
|
||||||
is_admin = False
|
else:
|
||||||
for ele in role_list:
|
queryset = self.queryset.filter(status=True, parent__isnull=True)
|
||||||
if 3 == ele.get("data_range") or ele.get("admin") == True:
|
queryset = self.filter_queryset(queryset)
|
||||||
is_admin = True
|
serializer = DeptSerializer(queryset, many=True, request=request)
|
||||||
break
|
data = serializer.data
|
||||||
if self.request.user.is_superuser or is_admin:
|
return SuccessResponse(data=data)
|
||||||
queryset = queryset.filter(parent__isnull=True)
|
|
||||||
else:
|
|
||||||
queryset = queryset.filter(id=self.request.user.dept_id)
|
|
||||||
serializer = self.get_serializer(queryset, many=True, request=request)
|
|
||||||
return SuccessResponse(data=serializer.data, msg="获取成功")
|
|
||||||
|
|
||||||
page = self.paginate_queryset(queryset)
|
|
||||||
if page is not None:
|
|
||||||
serializer = self.get_serializer(page, many=True, request=request)
|
|
||||||
return self.get_paginated_response(serializer.data)
|
|
||||||
serializer = self.get_serializer(queryset, many=True, request=request)
|
|
||||||
return SuccessResponse(data=serializer.data, msg="获取成功")
|
|
||||||
|
|
||||||
def dept_lazy_tree(self, request, *args, **kwargs):
|
def dept_lazy_tree(self, request, *args, **kwargs):
|
||||||
parent = self.request.query_params.get('parent')
|
parent = self.request.query_params.get('parent')
|
||||||
|
@ -170,9 +165,9 @@ class DeptViewSet(CustomModelViewSet):
|
||||||
data = queryset.filter(status=True).order_by('sort').values('name', 'id', 'parent')
|
data = queryset.filter(status=True).order_by('sort').values('name', 'id', 'parent')
|
||||||
return DetailResponse(data=data, msg="获取成功")
|
return DetailResponse(data=data, msg="获取成功")
|
||||||
|
|
||||||
|
|
||||||
@action(methods=["GET"], detail=False, permission_classes=[AnonymousUserPermission])
|
@action(methods=["GET"], detail=False, permission_classes=[AnonymousUserPermission])
|
||||||
def all_dept(self, request, *args, **kwargs):
|
def all_dept(self, request, *args, **kwargs):
|
||||||
self.extra_filter_backends = []
|
|
||||||
queryset = self.filter_queryset(self.get_queryset())
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
data = queryset.filter(status=True).order_by('sort').values('name', 'id', 'parent')
|
data = queryset.filter(status=True).order_by('sort').values('name', 'id', 'parent')
|
||||||
return DetailResponse(data=data, msg="获取成功")
|
return DetailResponse(data=data, msg="获取成功")
|
||||||
|
|
|
@ -8,12 +8,13 @@
|
||||||
"""
|
"""
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
|
||||||
from dvadmin.system.models import Role, Menu
|
from dvadmin.system.models import Role, Menu
|
||||||
from dvadmin.system.views.dept import DeptSerializer
|
from dvadmin.system.views.dept import DeptSerializer
|
||||||
from dvadmin.system.views.menu import MenuSerializer
|
from dvadmin.system.views.menu import MenuSerializer
|
||||||
from dvadmin.system.views.menu_button import MenuButtonSerializer
|
from dvadmin.system.views.menu_button import MenuButtonSerializer
|
||||||
from dvadmin.utils.json_response import SuccessResponse
|
from dvadmin.utils.json_response import SuccessResponse, DetailResponse
|
||||||
from dvadmin.utils.serializers import CustomModelSerializer
|
from dvadmin.utils.serializers import CustomModelSerializer
|
||||||
from dvadmin.utils.validator import CustomUniqueValidator
|
from dvadmin.utils.validator import CustomUniqueValidator
|
||||||
from dvadmin.utils.viewset import CustomModelViewSet
|
from dvadmin.utils.viewset import CustomModelViewSet
|
||||||
|
@ -96,12 +97,58 @@ class RoleViewSet(CustomModelViewSet):
|
||||||
serializer_class = RoleSerializer
|
serializer_class = RoleSerializer
|
||||||
create_serializer_class = RoleCreateUpdateSerializer
|
create_serializer_class = RoleCreateUpdateSerializer
|
||||||
update_serializer_class = RoleCreateUpdateSerializer
|
update_serializer_class = RoleCreateUpdateSerializer
|
||||||
|
search_fields = ['name','key']
|
||||||
|
|
||||||
@action(methods=['GET'], detail=True, permission_classes=[])
|
@action(methods=['GET'], detail=True, permission_classes=[IsAuthenticated])
|
||||||
def roleId_get_menu(self, request, *args, **kwargs):
|
def roleId_get_menu(self, request,pk):
|
||||||
"""通过角色id获取该角色用于的菜单"""
|
"""通过角色id获取该角色用于的菜单"""
|
||||||
# instance = self.get_object()
|
instance = Role.objects.filter(id=pk).first()
|
||||||
# queryset = instance.menu.all()
|
queryset = instance.menu.all()
|
||||||
queryset = Menu.objects.filter(status=1).all()
|
# queryset = Menu.objects.filter(status=1).all()
|
||||||
|
queryset = self.filter_queryset(queryset)
|
||||||
serializer = MenuPermissonSerializer(queryset, many=True)
|
serializer = MenuPermissonSerializer(queryset, many=True)
|
||||||
return SuccessResponse(data=serializer.data)
|
return SuccessResponse(data=serializer.data)
|
||||||
|
|
||||||
|
@action(methods=['GET'], detail=False, permission_classes=[IsAuthenticated])
|
||||||
|
def data_scope(self,request):
|
||||||
|
is_superuser = request.user.is_superuser
|
||||||
|
is_admin = Role.objects.filter(users__id=request.user.id,admin=True)
|
||||||
|
if is_superuser or is_admin:
|
||||||
|
data = [
|
||||||
|
{
|
||||||
|
"value": 0,
|
||||||
|
"label": '仅本人数据权限'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 1,
|
||||||
|
"label": '本部门及以下数据权限'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 2,
|
||||||
|
"label": '本部门数据权限'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 3,
|
||||||
|
"label": '全部数据权限'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 4,
|
||||||
|
"label": '自定义数据权限'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
data = [
|
||||||
|
{
|
||||||
|
"value": 0,
|
||||||
|
"label": '仅本人数据权限'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 1,
|
||||||
|
"label": '本部门及以下数据权限'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 2,
|
||||||
|
"label": '本部门数据权限'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
return DetailResponse(data=data)
|
||||||
|
|
|
@ -40,9 +40,10 @@ def CustomExceptionHandler(ex, context):
|
||||||
elif isinstance(ex, DRFAPIException):
|
elif isinstance(ex, DRFAPIException):
|
||||||
set_rollback()
|
set_rollback()
|
||||||
msg = ex.detail
|
msg = ex.detail
|
||||||
for k, v in msg.items():
|
if isinstance(msg,dict):
|
||||||
for i in v:
|
for k, v in msg.items():
|
||||||
msg = "%s:%s" % (k, i)
|
for i in v:
|
||||||
|
msg = "%s:%s" % (k, i)
|
||||||
elif isinstance(ex, ProtectedError):
|
elif isinstance(ex, ProtectedError):
|
||||||
set_rollback()
|
set_rollback()
|
||||||
msg = "删除失败:该条数据与其他数据有相关绑定"
|
msg = "删除失败:该条数据与其他数据有相关绑定"
|
||||||
|
|
|
@ -57,6 +57,11 @@ class ImportSerializerMixin:
|
||||||
length += 2.1 if ord(char) > 256 else 1
|
length += 2.1 if ord(char) > 256 else 1
|
||||||
return round(length, 1) if length <= self.export_column_width else self.export_column_width
|
return round(length, 1) if length <= self.export_column_width else self.export_column_width
|
||||||
|
|
||||||
|
@action(methods=['get'],detail=False)
|
||||||
|
def update_field(self,request:Request):
|
||||||
|
data = [{"label":value,"value":key} for key,value in self.import_field_dict.items()]
|
||||||
|
return DetailResponse(data=data)
|
||||||
|
|
||||||
@action(methods=['get','post'],detail=False)
|
@action(methods=['get','post'],detail=False)
|
||||||
@transaction.atomic # Django 事务,防止出错
|
@transaction.atomic # Django 事务,防止出错
|
||||||
def import_data(self, request: Request, *args, **kwargs):
|
def import_data(self, request: Request, *args, **kwargs):
|
||||||
|
@ -148,12 +153,15 @@ class ImportSerializerMixin:
|
||||||
unique_list = [
|
unique_list = [
|
||||||
ele.name for ele in queryset.model._meta.get_fields() if hasattr(ele, "unique") and ele.unique == True
|
ele.name for ele in queryset.model._meta.get_fields() if hasattr(ele, "unique") and ele.unique == True
|
||||||
]
|
]
|
||||||
|
updateField = request.data.get("updateField")
|
||||||
for ele in data:
|
for ele in data:
|
||||||
# 获取 unique 字段
|
# # 获取 unique 字段
|
||||||
if queryset.model._meta.unique_together: # 判断是否存在联合主键
|
# if queryset.model._meta.unique_together: # 判断是否存在联合主键
|
||||||
filter_dic = {i: ele.get(i) for i in list(queryset.model._meta.unique_together[0])}
|
# filter_dic = {i: ele.get(i) for i in list(queryset.model._meta.unique_together[0])}
|
||||||
else:
|
# else:
|
||||||
filter_dic = {i: ele.get(i) for i in list(set(unique_list)) if ele.get(i) is not None}
|
# filter_dic = {i: ele.get(i) for i in list(set(unique_list)) if ele.get(i) is not None}
|
||||||
|
filter_dic = {updateField:ele.get(updateField)}
|
||||||
|
print(162,filter_dic)
|
||||||
instance = filter_dic and queryset.filter(**filter_dic).first()
|
instance = filter_dic and queryset.filter(**filter_dic).first()
|
||||||
if instance and not updateSupport:
|
if instance and not updateSupport:
|
||||||
continue
|
continue
|
||||||
|
@ -207,6 +215,7 @@ class ExportSerializerMixin:
|
||||||
length += 2.1 if ord(char) > 256 else 1
|
length += 2.1 if ord(char) > 256 else 1
|
||||||
return round(length, 1) if length <= self.export_column_width else self.export_column_width
|
return round(length, 1) if length <= self.export_column_width else self.export_column_width
|
||||||
|
|
||||||
|
@action(methods=['get'],detail=False)
|
||||||
def export_data(self, request: Request, *args, **kwargs):
|
def export_data(self, request: Request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
导出功能
|
导出功能
|
||||||
|
|
Loading…
Reference in New Issue