from rest_framework import serializers from .models import ListModel, TypeListModel, Role, Permission from utils import datasolve class StaffGetSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=True, required=False) staff_type = serializers.CharField(read_only=True, required=False) check_code = serializers.IntegerField(read_only=True, required=False) create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') class Meta: model = ListModel exclude = ['openid', 'is_delete', ] read_only_fields = ['id', ] class StaffPostSerializer(serializers.ModelSerializer): openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate]) staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) check_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate]) class Meta: model = ListModel exclude = ['is_delete', ] read_only_fields = ['id', 'create_time', 'update_time', ] class StaffUpdateSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) class Meta: model = ListModel exclude = ['openid', 'is_delete', ] read_only_fields = ['id', 'create_time', 'update_time', 'appid'] class StaffPartialUpdateSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) staff_type = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) class Meta: model = ListModel exclude = ['openid', 'is_delete', ] read_only_fields = ['id', 'create_time', 'update_time', ] class FileRenderSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=False, required=False) staff_type = serializers.CharField(read_only=False, required=False) create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') class Meta: model = ListModel ref_name = 'StaffFileRenderSerializer' exclude = ['openid', 'is_delete', ] class StaffTypeGetSerializer(serializers.ModelSerializer): staff_type = serializers.CharField(read_only=True, required=False) creater = serializers.CharField(read_only=True, required=False) create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') class Meta: model = TypeListModel exclude = ['openid'] read_only_fields = ['id', ] class userStaffGetSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=True, required=False) staff_type = serializers.CharField(read_only=True, required=False) create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') class Meta: model = ListModel exclude = ['openid', 'is_delete', 'check_code', ] read_only_fields = ['id', ] class userStaffPostSerializer(serializers.ModelSerializer): openid = serializers.CharField(read_only=False, required=False, validators=[datasolve.openid_validate]) staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) check_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate]) class Meta: model = ListModel exclude = ['is_delete', ] read_only_fields = ['id', 'create_time', 'update_time', ] class userStaffUpdateSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) staff_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) class Meta: model = ListModel exclude = ['openid', 'is_delete', ] read_only_fields = ['id', 'create_time', 'update_time','appid' ] class userStaffPartialUpdateSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) staff_type = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) class Meta: model = ListModel exclude = ['openid', 'is_delete', ] read_only_fields = ['id', 'create_time', 'update_time', ] class userFileRenderSerializer(serializers.ModelSerializer): staff_name = serializers.CharField(read_only=False, required=False) staff_type = serializers.CharField(read_only=False, required=False) create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') class Meta: model = ListModel ref_name = 'StaffFileRenderSerializer' exclude = ['openid', 'is_delete', ] class userStaffTypeGetSerializer(serializers.ModelSerializer): staff_type = serializers.CharField(read_only=True, required=False) creater = serializers.CharField(read_only=True, required=False) create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') class Meta: model = TypeListModel exclude = ['openid'] read_only_fields = ['id', ] class RolePOSTSerializer(serializers.ModelSerializer): name = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) description = serializers.CharField(read_only=False, required=False, allow_blank=True) permissions = serializers.PrimaryKeyRelatedField( many=True, queryset=Permission.objects.all(), required=False ) class Meta: model = Role fields = ['id', 'name', 'description', 'permissions'] read_only_fields = ['id', ] class RoleGETSerializer(serializers.ModelSerializer): permissions_group = serializers.SerializerMethodField() class Meta: model = Role fields = ['id', 'name', 'description', 'permissions_group'] def get_permissions_group(self, obj): # 获取角色关联的所有权限并预取数据 permissions = obj.permissions.all().order_by('page', 'component') # 按page字段分组 grouped = {} for perm in permissions: page = perm.page if page not in grouped: grouped[page] = [] # 使用PermissionSerializer序列化每个权限对象 serializer = PermissionSerializer(perm) grouped[page].append(serializer.data) # 转换为前端需要的格式 return [{"page": page, "permissions": perms} for page, perms in grouped.items()] # 只返回page,不需要返回componet等详细信息 class RolePageGETSerializer(serializers.ModelSerializer): permissions_group = serializers.SerializerMethodField() class Meta: model = Role fields = ['id', 'name', 'description', 'permissions_group'] def get_permissions_group(self, obj): # 获取角色关联的所有权限并预取数据 permissions = obj.permissions.all().order_by('primary_page','page', 'component') # 按page字段分组,只处理component为null的权限 page_access = {} for perm in permissions: # 只处理页面访问权限(component为null) if perm.component is None: page_access[perm.primary_page] = perm.enabled # 转换为前端需要的格式 return [{"page": page, "enabled": enabled} for page, enabled in page_access.items()] class RoleSerializer(serializers.ModelSerializer): class Meta: model = Role fields = '__all__' class PermissionSerializer(serializers.ModelSerializer): class Meta: model = Permission fields = '__all__'