fix: 预算列表按版本筛选 — 消除多版本堆叠的重复期间
原因: 同一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, 部署
This commit is contained in:
@@ -19,6 +19,9 @@
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap;align-items:center;">
|
||||
<el-select v-model="filterYear" placeholder="年份" style="width:100px;" @change="loadBudget"><el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" /></el-select>
|
||||
<el-select v-model="filterVersion" placeholder="版本" style="width:180px;" @change="loadBudget" clearable>
|
||||
<el-option v-for="v in versionsList" :key="v.version" :label="v.version + (v.status === 'active' ? ' (当前)' : '')" :value="v.version" />
|
||||
</el-select>
|
||||
<el-select v-model="filterMonth" placeholder="月份" style="width:90px;" @change="loadBudget"><el-option label="全年" :value="0" /><el-option v-for="m in 12" :key="m" :label="`${m}月`" :value="m" /></el-select>
|
||||
<el-input v-model="searchKpi" placeholder="搜索KPI名称" clearable style="width:200px;" @clear="loadBudget" @keyup.enter="loadBudget" />
|
||||
<el-button type="primary" @click="loadBudget">查询</el-button>
|
||||
@@ -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<any[]>([]); 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))
|
||||
|
||||
Reference in New Issue
Block a user