From c88e1ad6c9b1771334b3aa3a3e3e48d0bb95c391 Mon Sep 17 00:00:00 2001 From: Hermes CI Fix Date: Wed, 23 Sep 2026 15:29:44 +0800 Subject: [PATCH] fix(growth-quality): period select reads periods array from object response Backend GET /growth-quality/periods returns {entity_id,periods[],coverage{}}; axios interceptor already unwraps response.data so the old r.data||r||[] put the whole object into el-select and Vue rendered JSON. Also default to periods[0]: backend returns periods in DESC order, so old code picked the OLDEST period. Only frontend/src/views/GrowthQuality.vue changed. --- frontend/src/views/GrowthQuality.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/GrowthQuality.vue b/frontend/src/views/GrowthQuality.vue index e1c53a76..2618b5fe 100644 --- a/frontend/src/views/GrowthQuality.vue +++ b/frontend/src/views/GrowthQuality.vue @@ -130,9 +130,13 @@ async function loadPeriods() { loadingPeriods.value = true try { const r: any = await api.get('/growth-quality/periods') - periods.value = r.data || r || [] + // 后端返回 {entity_id, periods[], coverage{}};axios 拦截器已 unwrap(response.data), + // 故 r 即响应体本体、r.data 恒为 undefined(本页曾因此把整个对象塞进 el-select → 渲染成 JSON) + const raw = r?.periods ?? r?.data?.periods + const list = Array.isArray(raw) ? raw : (Array.isArray(r) ? r : []) + periods.value = list.filter((p: any) => typeof p === 'string') if (periods.value.length && !periods.value.includes(period.value)) { - period.value = periods.value[periods.value.length - 1] + period.value = periods.value[0] // 后端按期间倒序返回 → 首元素即最新有数据的期间 } } catch (_) {} loadingPeriods.value = false