Add color overlay settings for link buttons

- Added link_overlay_enabled, link_overlay_color, link_overlay_opacity to DesignSettings model
- Created migration 0008 for new fields
- Updated CustomizationPanel with link overlay controls section
- Added validation for new overlay settings in serializer
- Updated PublicDesignSettingsSerializer to include overlay settings
- Applied link overlay to all ExpandableGroup components in public page
- Added preview in customization panel for link overlay effect
This commit is contained in:
2025-11-09 13:00:25 +09:00
parent cefd884172
commit d59c1ad42a
7 changed files with 267 additions and 6 deletions

View File

@@ -36,6 +36,9 @@ class DesignSettingsSerializer(serializers.ModelSerializer):
'group_description_text_color',
'body_font_family',
'heading_font_family',
'link_overlay_enabled',
'link_overlay_color',
'link_overlay_opacity',
'updated_at'
]
read_only_fields = ['id', 'updated_at', 'background_image_url']
@@ -261,6 +264,26 @@ class DesignSettingsSerializer(serializers.ModelSerializer):
raise serializers.ValidationError('ID шаблона слишком длинный')
return value
def validate_link_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_link_overlay_opacity(self, value):
"""
Валидация прозрачности перекрытия кнопок ссылок
"""
if not 0.0 <= value <= 1.0:
raise serializers.ValidationError('Прозрачность должна быть между 0.0 и 1.0')
return value
class PublicDesignSettingsSerializer(serializers.ModelSerializer):
"""
@@ -273,8 +296,28 @@ class PublicDesignSettingsSerializer(serializers.ModelSerializer):
fields = [
'theme_color',
'background_image_url',
'dashboard_layout',
'groups_default_expanded',
'show_group_icons',
'show_link_icons',
'dashboard_background_color',
'font_family',
'custom_css'
'header_text_color',
'group_text_color',
'link_text_color',
'group_overlay_enabled',
'group_overlay_color',
'group_overlay_opacity',
'show_groups_title',
'group_description_text_color',
'body_font_family',
'heading_font_family',
'cover_overlay_enabled',
'cover_overlay_color',
'cover_overlay_opacity',
'link_overlay_enabled',
'link_overlay_color',
'link_overlay_opacity'
]
def get_background_image_url(self, obj):