From 2cf19a45e5b6782c991b2dc1b9a6a9355621fa07 Mon Sep 17 00:00:00 2001 From: SunCheng Date: Thu, 19 Feb 2026 22:44:26 +0800 Subject: [PATCH] 1 --- .gitignore | 2 +- Service/Budget/BudgetStatsService.cs | 57 ++++--- Web/src/views/BalanceView.vue | 146 ++++++++++++++---- WebApi.Test/Budget/BudgetStatsTest.cs | 58 +++++++ balance-page-after.png | Bin 0 -> 205130 bytes null | 2 - .../.openspec.yaml | 2 + .../design.md | 120 ++++++++++++++ .../proposal.md | 34 ++++ .../specs/balance-page-header/spec.md | 38 +++++ .../specs/balance-segmented-tabs/spec.md | 45 ++++++ .../tasks.md | 51 ++++++ openspec/specs/balance-page-header/spec.md | 38 +++++ openspec/specs/balance-segmented-tabs/spec.md | 45 ++++++ 14 files changed, 583 insertions(+), 55 deletions(-) create mode 100644 balance-page-after.png delete mode 100644 null create mode 100644 openspec/changes/archive/2026-02-19-unify-balance-page-header-tabs/.openspec.yaml create mode 100644 openspec/changes/archive/2026-02-19-unify-balance-page-header-tabs/design.md create mode 100644 openspec/changes/archive/2026-02-19-unify-balance-page-header-tabs/proposal.md create mode 100644 openspec/changes/archive/2026-02-19-unify-balance-page-header-tabs/specs/balance-page-header/spec.md create mode 100644 openspec/changes/archive/2026-02-19-unify-balance-page-header-tabs/specs/balance-segmented-tabs/spec.md create mode 100644 openspec/changes/archive/2026-02-19-unify-balance-page-header-tabs/tasks.md create mode 100644 openspec/specs/balance-page-header/spec.md create mode 100644 openspec/specs/balance-segmented-tabs/spec.md diff --git a/.gitignore b/.gitignore index 85a2dba..1c687d8 100644 --- a/.gitignore +++ b/.gitignore @@ -407,4 +407,4 @@ Web/dist .aider* .screenshot/* - +**/nul diff --git a/Service/Budget/BudgetStatsService.cs b/Service/Budget/BudgetStatsService.cs index fff5c68..9cb84fc 100644 --- a/Service/Budget/BudgetStatsService.cs +++ b/Service/Budget/BudgetStatsService.cs @@ -595,27 +595,46 @@ public class BudgetStatsService( logger.LogDebug("开始处理当前及未来月份预算"); foreach (var budget in currentBudgetsDict.Values) { - // 对于年度预算,如果还没有从归档中添加,则添加 - if (budget.Type == BudgetPeriodType.Year && !processedBudgetIds.Contains(budget.Id)) + // 对于年度预算,需要实时计算当前金额 + if (budget.Type == BudgetPeriodType.Year) { - var currentAmount = await CalculateCurrentAmountAsync(budget, statType, referenceDate); - result.Add(new BudgetStatsItem + // 如果已经从归档中添加过,需要更新其Current值为实时计算的金额 + if (processedBudgetIds.Contains(budget.Id)) { - Id = budget.Id, - Name = budget.Name, - Type = budget.Type, - Limit = budget.Limit, - Current = currentAmount, - Category = budget.Category, - SelectedCategories = string.IsNullOrEmpty(budget.SelectedCategories) - ? [] - : budget.SelectedCategories.Split(',', StringSplitOptions.RemoveEmptyEntries), - NoLimit = budget.NoLimit, - IsMandatoryExpense = budget.IsMandatoryExpense, - IsArchive = false - }); - logger.LogInformation("添加当前年度预算: {BudgetName} - 预算金额: {Limit}, 实际金额: {Current}", - budget.Name, budget.Limit, currentAmount); + var realTimeAmount = await CalculateCurrentAmountAsync(budget, statType, referenceDate); + var existingItem = result.FirstOrDefault(r => r.Id == budget.Id && r.Type == BudgetPeriodType.Year); + if (existingItem != null) + { + // 更新Current为实时金额(而不是归档的Actual) + result.Remove(existingItem); + result.Add(existingItem with { Current = realTimeAmount, IsArchive = false }); + logger.LogInformation("更新年度预算实时金额: {BudgetName} - 归档金额: {ArchiveAmount}, 实时金额: {RealtimeAmount}", + budget.Name, existingItem.Current, realTimeAmount); + } + } + else + { + // 如果没有从归档中添加,则新增 + var currentAmount = await CalculateCurrentAmountAsync(budget, statType, referenceDate); + result.Add(new BudgetStatsItem + { + Id = budget.Id, + Name = budget.Name, + Type = budget.Type, + Limit = budget.Limit, + Current = currentAmount, + Category = budget.Category, + SelectedCategories = string.IsNullOrEmpty(budget.SelectedCategories) + ? [] + : budget.SelectedCategories.Split(',', StringSplitOptions.RemoveEmptyEntries), + NoLimit = budget.NoLimit, + IsMandatoryExpense = budget.IsMandatoryExpense, + IsArchive = false + }); + logger.LogInformation("添加当前年度预算: {BudgetName} - 预算金额: {Limit}, 实际金额: {Current}", + budget.Name, budget.Limit, currentAmount); + processedBudgetIds.Add(budget.Id); + } } // 对于月度预算,仅添加当前月的预算项(如果还没有从归档中添加) else if (budget.Type == BudgetPeriodType.Month) diff --git a/Web/src/views/BalanceView.vue b/Web/src/views/BalanceView.vue index 3d0bfb4..aa30540 100644 --- a/Web/src/views/BalanceView.vue +++ b/Web/src/views/BalanceView.vue @@ -1,17 +1,16 @@ -