Add comprehensive group customization features

- Add group overlay color and opacity settings
- Add font customization (body and heading fonts)
- Add group description text color control
- Add option to hide 'Groups' title
- Update frontend DesignSettings interface
- Update CustomizationPanel with new UI controls
- Update Django model with new fields
- Create migration for new customization options
- Update DRF serializer with validation
This commit is contained in:
2025-11-09 10:27:04 +09:00
parent 6035cf8d10
commit 92e2854575
5 changed files with 351 additions and 3 deletions

View File

@@ -28,6 +28,13 @@ class DesignSettingsSerializer(serializers.ModelSerializer):
'cover_overlay_enabled',
'cover_overlay_color',
'cover_overlay_opacity',
'group_overlay_enabled',
'group_overlay_color',
'group_overlay_opacity',
'show_groups_title',
'group_description_text_color',
'body_font_family',
'heading_font_family',
'updated_at'
]
read_only_fields = ['id', 'updated_at', 'background_image_url']
@@ -197,6 +204,54 @@ class DesignSettingsSerializer(serializers.ModelSerializer):
raise serializers.ValidationError('Прозрачность должна быть между 0.0 и 1.0')
return value
def validate_group_overlay_color(self, value):
"""
Валидация цвета перекрытия групп
"""
if not value.startswith('#') or len(value) != 7:
raise serializers.ValidationError('Цвет должен быть в формате #RRGGBB')
try:
int(value[1:], 16)
except ValueError:
raise serializers.ValidationError('Некорректный hex цвет')
return value
def validate_group_overlay_opacity(self, value):
"""
Валидация прозрачности перекрытия групп
"""
if not 0.0 <= value <= 1.0:
raise serializers.ValidationError('Прозрачность должна быть между 0.0 и 1.0')
return value
def validate_group_description_text_color(self, value):
"""
Валидация цвета описаний групп
"""
if not value.startswith('#') or len(value) != 7:
raise serializers.ValidationError('Цвет должен быть в формате #RRGGBB')
try:
int(value[1:], 16)
except ValueError:
raise serializers.ValidationError('Некорректный hex цвет')
return value
def validate_body_font_family(self, value):
"""
Валидация шрифта основного текста
"""
if value and len(value) > 100:
raise serializers.ValidationError('Название шрифта слишком длинное')
return value
def validate_heading_font_family(self, value):
"""
Валидация шрифта заголовков
"""
if value and len(value) > 100:
raise serializers.ValidationError('Название шрифта слишком длинное')
return value
class PublicDesignSettingsSerializer(serializers.ModelSerializer):
"""