diff --git a/app/components/catalog/CatalogConfigurator.vue b/app/components/catalog/CatalogConfigurator.vue index 0e0cd82..c186331 100644 --- a/app/components/catalog/CatalogConfigurator.vue +++ b/app/components/catalog/CatalogConfigurator.vue @@ -50,6 +50,12 @@ const DEFAULT_CATALOG_PRODUCT_TYPE_SETTING: CatalogProductTypeSettingNode = { customLengthStepM: null, allowCustomSleeveBrand: false, allowCustomLabel: false, + widthOptionsMm: [], + lengthOptionsM: [], + thicknessOptionsMicron: [], + sleeveOptions: [], + colorOptions: [], + labelOptions: [], }; const parameterFields: Array<{ key: ParamFieldKey; label: string }> = [ { key: 'widthMm', label: 'Ширина' }, @@ -481,23 +487,75 @@ function variantCountLabel(count: number) { return `${count} вариантов`; } -function customizationNotes(group: ProductGroup) { - const setting = groupCatalogSetting(group); - const notes: string[] = []; +function formatLengthRange(setting: CatalogProductTypeSettingNode) { + if (!setting.customLengthMinM || !setting.customLengthMaxM || !setting.customLengthStepM) { + return null; + } - if (setting.allowCustomLength && setting.customLengthMinM && setting.customLengthMaxM && setting.customLengthStepM) { - notes.push(`Любая длина ${setting.customLengthMinM}-${setting.customLengthMaxM} м, шаг ${setting.customLengthStepM} м`); + return `${setting.customLengthMinM}-${setting.customLengthMaxM} м, шаг ${setting.customLengthStepM} м`; +} + +function fieldHelperText(group: ProductGroup, field: ParamFieldKey) { + const setting = groupCatalogSetting(group); + + if (field === 'widthMm') { + return 'Ширина рулона. От неё зависит, насколько широкую полосу материала вы получите.'; + } + + if (field === 'lengthM') { + const customRange = formatLengthRange(setting); + if (setting.allowCustomLength && customRange) { + return `Выберите стандартную длину или закажите свою. Доступный диапазон: ${customRange}.`; + } + + return 'Длина рулона в метрах. Здесь выбирается стандартный доступный размер.'; + } + + if (field === 'thicknessMicron') { + return 'Толщина материала. Чем выше значение, тем плотнее и заметнее сама лента.'; + } + + if (field === 'sleeveBrand') { + if (setting.allowCustomSleeveBrand) { + return 'Тип втулки внутри рулона. При необходимости можем сделать втулку с вашим логотипом.'; + } + + return 'Тип втулки внутри рулона. Выберите подходящий стандартный вариант.'; + } + + if (field === 'colorTag') { + return 'Цвет или визуальное исполнение ленты. Он влияет на внешний вид готового продукта.'; + } + + if (field === 'labelTag') { + if (setting.allowCustomLabel) { + return 'Готовая надпись или маркировка. Если нужно, можем нанести и вашу собственную надпись.'; + } + + return 'Готовая надпись или маркировка на ленте для стандартных сценариев использования.'; + } + + return 'Выберите подходящий параметр для этой позиции.'; +} + +function customizationDetails(group: ProductGroup) { + const setting = groupCatalogSetting(group); + const details: string[] = []; + const customRange = formatLengthRange(setting); + + if (setting.allowCustomLength && customRange) { + details.push(`Длина под заказ: ${customRange}.`); } if (setting.allowCustomSleeveBrand) { - notes.push('Втулка с логотипом'); + details.push('Втулка под заказ: можно сделать с вашим логотипом.'); } if (setting.allowCustomLabel) { - notes.push('Нанесение надписи'); + details.push('Надпись под заказ: можно нанести вашу маркировку или текст.'); } - return notes; + return details; } function toggleExpanded(group: ProductGroup) { @@ -572,48 +630,63 @@ function decrementSelected(group: ProductGroup) {
+ Выберите параметры внутри карточки, а ниже при необходимости можно открыть полный список вариантов по этой позиции. +
+ +Под заказ
+{{ field.label }}
+{{ field.label }}
-{{ articleLabel(group) }}