.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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: 'Готово',
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user