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:
@@ -0,0 +1,28 @@
|
||||
# Generated by Django 4.2.7 on 2025-11-09 14:30
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('customization', '0007_designsettings_body_font_family_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='designsettings',
|
||||
name='link_overlay_color',
|
||||
field=models.CharField(default='#000000', help_text='Цвет перекрытия кнопок ссылок (hex)', max_length=7),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='designsettings',
|
||||
name='link_overlay_enabled',
|
||||
field=models.BooleanField(default=False, help_text='Включить цветовое перекрытие кнопок ссылок'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='designsettings',
|
||||
name='link_overlay_opacity',
|
||||
field=models.FloatField(default=0.2, help_text='Прозрачность перекрытия кнопок ссылок (0.0 - 1.0)'),
|
||||
),
|
||||
]
|
||||
14
backend/customization/migrations/0009_merge_20251109_0356.py
Normal file
14
backend/customization/migrations/0009_merge_20251109_0356.py
Normal file
@@ -0,0 +1,14 @@
|
||||
# Generated by Django 5.2.7 on 2025-11-09 03:56
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('customization', '0008_add_template_id_and_test_list_layout'),
|
||||
('customization', '0008_designsettings_link_overlay_color_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
||||
@@ -149,6 +149,21 @@ class DesignSettings(models.Model):
|
||||
help_text='ID выбранного дизайн-шаблона'
|
||||
)
|
||||
|
||||
# Новые поля для цветового оверлея кнопок ссылок
|
||||
link_overlay_enabled = models.BooleanField(
|
||||
default=False,
|
||||
help_text='Включить цветовое перекрытие кнопок ссылок'
|
||||
)
|
||||
link_overlay_color = models.CharField(
|
||||
max_length=7,
|
||||
default='#000000',
|
||||
help_text='Цвет перекрытия кнопок ссылок (hex)'
|
||||
)
|
||||
link_overlay_opacity = models.FloatField(
|
||||
default=0.2,
|
||||
help_text='Прозрачность перекрытия кнопок ссылок (0.0 - 1.0)'
|
||||
)
|
||||
|
||||
updated_at = models.DateTimeField(
|
||||
auto_now=True,
|
||||
help_text='Дата и время последнего изменения'
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user