From fb99a5e5b067201e181943b6db6f3bd86411761d Mon Sep 17 00:00:00 2001 From: Hermes CI Fix Date: Thu, 27 Aug 2026 17:45:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=A2=84=E7=AE=97=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8C=89=E7=89=88=E6=9C=AC=E7=AD=9B=E9=80=89=20=E2=80=94=20?= =?UTF-8?q?=E6=B6=88=E9=99=A4=E5=A4=9A=E7=89=88=E6=9C=AC=E5=A0=86=E5=8F=A0?= =?UTF-8?q?=E7=9A=84=E9=87=8D=E5=A4=8D=E6=9C=9F=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因: 同一KPI同一期间存在多版本预算(v1.0/v2.0/incremental/zero_based/flexible/2026H2) F_REVENUE 22行=6版本堆叠(用户看到大量重复期间) 修复: - 预算录入tab加版本筛选下拉(含'(当前)'标记, 来自版本列表) - loadBudget 传 version 过滤 - 切换地图自动加载版本列表+清空筛选 - 验证: 全版本22行 → 选2026H2=1行 / 选v2.0=24行(F_REVENUE 2026-07~12各1条, 无重复) pytest 35 passed, 部署 --- frontend/src/views/BudgetManagement.vue | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/BudgetManagement.vue b/frontend/src/views/BudgetManagement.vue index 70769363..e28f506a 100644 --- a/frontend/src/views/BudgetManagement.vue +++ b/frontend/src/views/BudgetManagement.vue @@ -19,6 +19,9 @@
+ + + 查询 @@ -452,7 +455,7 @@ function getEntityId() { return Number(localStorage.getItem('cma_entity_id') || 1) } const yearOptions = computed(() => { const y: number[] = []; for (let i = currentYear - 2; i <= currentYear + 2; i++) y.push(i); return y }) -const filterYear = ref(currentYear); const filterMonth = ref(0); const searchKpi = ref('') +const filterYear = ref(currentYear); const filterMonth = ref(0); const searchKpi = ref(''); const filterVersion = ref('') const loading = ref(false); const budgetList = ref([]); const page = ref(1); const pageSize = ref(20); const total = ref(0); const noMap = ref(false) const batchEditMode = ref(false); const batchSavingAll = ref(false) @@ -495,6 +498,8 @@ async function loadPublishedMaps() { function onMapSelect(id: number) { selectedMap.value = publishedMaps.value.find(m => m.id === id) || null + filterVersion.value = '' // 切换地图清空版本筛选(重新加载后由用户选择) + loadVersions() // 加载该地图年度版本列表供筛选 loadBudget() } @@ -545,7 +550,7 @@ async function loadBudget() { if (mapCodes.size === 0) { budgetList.value = []; total.value = 0; return } noMap.value = false; loading.value = true try { - const params: any = { page: page.value, page_size: pageSize.value, entity_id: getEntityId(), map_id: selectedMapId.value }; if (filterYear.value) params.year = filterYear.value; if (filterMonth.value > 0) params.budget_month = filterMonth.value; if (searchKpi.value) params.keyword = searchKpi.value + const params: any = { page: page.value, page_size: pageSize.value, entity_id: getEntityId(), map_id: selectedMapId.value }; if (filterYear.value) params.year = filterYear.value; if (filterVersion.value) params.version = filterVersion.value; if (filterMonth.value > 0) params.budget_month = filterMonth.value; if (searchKpi.value) params.keyword = searchKpi.value const r: any = await budgetApi.list(params); const d = r.data || r || []; const allPlans = (Array.isArray(d) ? d : (d.items || [])) as any[] // 只保留选中地图关联KPI的预算记录 const plans = allPlans.filter((p: any) => mapCodes.has(p.kpi_code))