diff --git a/src/service/MarketingService.js b/src/service/MarketingService.js index c122870..892fa09 100644 --- a/src/service/MarketingService.js +++ b/src/service/MarketingService.js @@ -140,7 +140,18 @@ class MarketingService { // v2: извлекаем data из обёртки {success, message, data}, если она есть // для обратной совместимости поддерживаем оба формата - return result.data || result; + let extracted = result.data || result; + + // Убеждаемся, что sources сохраняются, если они есть в исходных данных + if (extracted && !extracted.sources) { + if (result.data?.sources) { + extracted.sources = result.data.sources; + } else if (result.sources) { + extracted.sources = result.sources; + } + } + + return extracted; } catch (error) { console.error('Ошибка при запуске маркетингового анализа v2:', error); throw error; diff --git a/src/views/pages/MarketingAnalysis.vue b/src/views/pages/MarketingAnalysis.vue index fab0b61..c21acbf 100644 --- a/src/views/pages/MarketingAnalysis.vue +++ b/src/views/pages/MarketingAnalysis.vue @@ -922,21 +922,41 @@ -
-
Источники
- +
-
-
- - - {{ source }} - +
Маркетинг Источники
+
+
ИСТОЧНИКИ
+ +
+
список источников данных для анализа
+ + + +
+ +
+ + Источники не найдены
@@ -993,10 +1013,28 @@ const localLoading = ref(false); const localError = ref(null); // unify both modes: in embedded mode we read props; otherwise local state -const report = computed(() => props.report || localReport.value); +const report = computed(() => { + const r = props.report || localReport.value; + if (r && !r.sources) { + // Если sources отсутствуют, проверяем исходные данные + if (props.report?.sources) { + return { ...r, sources: props.report.sources }; + } else if (localReport.value?.sources) { + return { ...r, sources: localReport.value.sources }; + } + } + return r; +}); const loading = computed(() => (props.embedded ? props.loading : localLoading.value)); const error = computed(() => (props.embedded ? props.error : localError.value)); +// Watch для отслеживания изменений report и sources (можно использовать для отладки) +// watch(() => report.value, (newReport) => { +// if (newReport) { +// console.log('Report updated:', { keys: Object.keys(newReport), hasSources: !!newReport.sources }); +// } +// }, { immediate: true, deep: true }); + const DETAIL_LEVEL_OPTIONS = ['КРАТКО', 'СТАНДАРТНО', 'ПОДРОБНО']; const ANALYSIS_TYPE_OPTIONS = ['РЫНОК', 'КОНКУРЕНТЫ', 'ЦА', 'КАНАЛЫ', 'SWOT']; const GENDER_OPTIONS = ['Женщины', 'Мужчины']; @@ -1049,8 +1087,29 @@ async function loadAnalysisV2() { if (formData.value.weakSide?.trim()) requestData.weakSide = formData.value.weakSide.trim(); const data = await MarketingService.fetchAnalysisV2(requestData); - // Извлекаем data из обёртки {success, message, data}, если она есть - localReport.value = (data?.data || data) || null; + // MarketingService.fetchAnalysisV2 уже извлекает data из обёртки {success, message, data} + // Но на всякий случай проверяем, может быть еще одна обёртка + let extractedData = (data?.data || data) || null; + + // Убеждаемся, что sources сохраняются - проверяем все возможные места + if (extractedData && !extractedData.sources) { + // Проверяем все возможные места, где могут быть sources + if (data?.data?.sources) { + extractedData.sources = data.data.sources; + } else if (data?.sources) { + extractedData.sources = data.sources; + } + } + + // Создаём новый объект, чтобы гарантировать, что все поля сохранены + if (extractedData) { + localReport.value = { + ...extractedData, + sources: extractedData.sources || [] + }; + } else { + localReport.value = null; + } toast.add({ severity: 'success', summary: 'Готово', diff --git a/src/views/pages/marketing/MarketingAnalysis.vue b/src/views/pages/marketing/MarketingAnalysis.vue index a7b88b4..7070079 100644 --- a/src/views/pages/marketing/MarketingAnalysis.vue +++ b/src/views/pages/marketing/MarketingAnalysis.vue @@ -937,7 +937,8 @@ const v2ReportNormalized = computed(() => { marketing_economics: pick('marketingEconomics', 'marketing_economics'), bottlenecks: pick('bottlenecks', 'bottlenecks'), recommendations: pick('recommendations', 'recommendations') - } + }, + sources: root.sources || [] }; });