This commit is contained in:
root
2026-01-17 18:05:31 +05:00
parent 08bee68aa2
commit f003bd0498
3 changed files with 58 additions and 30 deletions
+3 -2
View File
@@ -134,12 +134,13 @@ class MarketingService {
throw new Error(result?.message || result?.error?.message || `HTTP ${response.status}: ${response.statusText}`);
}
// v2: ожидаем сырой отчёт, без result.success/result.data
if (!result) {
throw new Error('Пустой ответ от сервера');
}
return result;
// v2: извлекаем data из обёртки {success, message, data}, если она есть
// для обратной совместимости поддерживаем оба формата
return result.data || result;
} catch (error) {
console.error('Ошибка при запуске маркетингового анализа v2:', error);
throw error;
+2 -1
View File
@@ -1180,7 +1180,8 @@ async function loadAnalysisV2() {
if (formData.value.weakSide?.trim()) requestData.weakSide = formData.value.weakSide.trim();
const data = await MarketingService.fetchAnalysisV2(requestData);
localReport.value = data || null;
// Извлекаем data из обёртки {success, message, data}, если она есть
localReport.value = (data?.data || data) || null;
toast.add({
severity: 'success',
summary: 'Готово',
+53 -27
View File
@@ -895,6 +895,19 @@ const v2Report = ref(null); // raw v2 payload from GET /api/marketing/analysis/v
const v2Loading = ref(false);
const v2Error = ref(null);
const isV2ReportPayload = (payload) => {
if (!payload || typeof payload !== 'object') return false;
if (payload.report_title || payload.reportTitle) return true;
if (payload.sections && typeof payload.sections === 'object') return true;
return false;
};
const applyV2Report = (payload) => {
v2Report.value = payload;
v2Loading.value = false;
v2Error.value = null;
};
const v2ReportNormalized = computed(() => {
const root = v2Report.value;
if (!root) return null;
@@ -1050,6 +1063,13 @@ const startPolling = (id) => {
try {
const result = await MarketingService.getAnalysisResult(id);
if (!result) return;
if (isV2ReportPayload(result)) {
stopPolling();
applyV2Report(result);
status.value = 'completed';
return;
}
status.value = result.status;
if (result.status === 'completed' && result.report) {
@@ -3286,37 +3306,43 @@ onMounted(async () => {
try {
analysisId.value = queryAnalysisId;
const result = await MarketingService.getAnalysisResult(queryAnalysisId);
status.value = result.status;
const isV2 = isV2ReportPayload(result);
if (isV2) {
applyV2Report(result);
status.value = 'completed';
} else if (result) {
status.value = result.status;
// Сохраняем тип анализа, если он есть
if (result.analysisType) {
currentAnalysisType.value = result.analysisType;
}
// Сохраняем тип анализа, если он есть
if (result.analysisType) {
currentAnalysisType.value = result.analysisType;
}
if (result.status === 'completed' && result.report) {
report.value = result.report;
} else if (result.status === 'processing' || result.status === 'queued') {
estimatedCompletionTime.value = result.estimatedCompletionTime;
startPolling(queryAnalysisId);
}
if (result.status === 'completed' && result.report) {
report.value = result.report;
} else if (result.status === 'processing' || result.status === 'queued') {
estimatedCompletionTime.value = result.estimatedCompletionTime;
startPolling(queryAnalysisId);
}
// v2 restore:
// 1) from query param
// 2) fallback to /analysis/my lookup (docs say v2AnalysisId is present there)
if (queryV2AnalysisId) {
v2AnalysisId.value = String(queryV2AnalysisId);
await refreshV2();
} else {
try {
const list = await MarketingService.getMyAnalyses();
const found = Array.isArray(list) ? list.find((a) => a?.analysisId === queryAnalysisId) : null;
if (found?.v2AnalysisId) {
v2AnalysisId.value = found.v2AnalysisId;
router.replace({ query: { ...route.query, v2AnalysisId: v2AnalysisId.value } });
await refreshV2();
// v2 restore:
// 1) from query param
// 2) fallback to /analysis/my lookup (docs say v2AnalysisId is present there)
if (queryV2AnalysisId) {
v2AnalysisId.value = String(queryV2AnalysisId);
await refreshV2();
} else {
try {
const list = await MarketingService.getMyAnalyses();
const found = Array.isArray(list) ? list.find((a) => a?.analysisId === queryAnalysisId) : null;
if (found?.v2AnalysisId) {
v2AnalysisId.value = found.v2AnalysisId;
router.replace({ query: { ...route.query, v2AnalysisId: v2AnalysisId.value } });
await refreshV2();
}
} catch (_) {
// ignore v2 restore errors; old analysis page must keep working
}
} catch (_) {
// ignore v2 restore errors; old analysis page must keep working
}
}
} catch (error) {