feat: add budget update functionality and enhance budget management UI
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 26s
Docker Build & Deploy / Deploy to Production (push) Successful in 8s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 2s

- Implemented UpdateAsync method in BudgetController for updating budget details.
- Created UpdateBudgetDto for handling budget update requests.
- Added BudgetCard component for displaying budget information with progress tracking.
- Developed BudgetEditPopup component for creating and editing budget entries.
- Introduced BudgetSummary component for summarizing budget statistics by period.
- Enhanced budget period display logic in BudgetDto to support various timeframes.
This commit is contained in:
孙诚
2026-01-07 17:33:50 +08:00
parent 60fb0e0d8f
commit 620effd1f8
8 changed files with 759 additions and 600 deletions

View File

@@ -103,6 +103,38 @@ public class BudgetController(
}
}
/// <summary>
/// 更新预算
/// </summary>
[HttpPost]
public async Task<BaseResponse> UpdateAsync([FromBody] UpdateBudgetDto dto)
{
try
{
var budget = await budgetService.GetByIdAsync(dto.Id);
if (budget == null) return "预算不存在".Fail();
budget.Name = dto.Name;
budget.Type = dto.Type;
budget.Limit = dto.Limit;
budget.Category = dto.Category;
budget.SelectedCategories = dto.SelectedCategories != null ? string.Join(",", dto.SelectedCategories) : string.Empty;
budget.IsStopped = dto.IsStopped;
if (dto.StartDate.HasValue)
{
budget.StartDate = dto.StartDate.Value;
}
var success = await budgetService.UpdateAsync(budget);
return success ? BaseResponse.Done() : "更新预算失败".Fail();
}
catch (Exception ex)
{
logger.LogError(ex, "更新预算失败, Id: {Id}", dto.Id);
return $"更新预算失败: {ex.Message}".Fail();
}
}
/// <summary>
/// 切换预算暂停状态
/// </summary>

View File

@@ -31,7 +31,14 @@ public class BudgetDto
: entity.SelectedCategories.Split(','),
IsStopped = entity.IsStopped,
StartDate = entity.StartDate.ToString("yyyy-MM-dd"),
Period = entity.Type == BudgetPeriodType.Longterm ? "长期" : $"{start:yyyy-MM-dd} ~ {end:yyyy-MM-dd}"
Period = entity.Type switch
{
BudgetPeriodType.Longterm => "长期",
BudgetPeriodType.Year => $"{start:yy}年",
BudgetPeriodType.Month => $"{start:yy}年第{start.Month}月",
BudgetPeriodType.Week => $"{start:yy}年第{System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(start, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday)}周",
_ => $"{start:yyyy-MM-dd} ~ {end:yyyy-MM-dd}"
}
};
}
}
@@ -45,3 +52,10 @@ public class CreateBudgetDto
public string[] SelectedCategories { get; set; } = Array.Empty<string>();
public DateTime? StartDate { get; set; }
}
public class UpdateBudgetDto : CreateBudgetDto
{
public long Id { get; set; }
public bool IsStopped { get; set; }
}