feat: 移除预算同步相关功能,简化预算管理逻辑
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 22s
Docker Build & Deploy / Deploy to Production (push) Successful in 6s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 2s

This commit is contained in:
孙诚
2026-01-07 16:23:50 +08:00
parent c95aa6b17b
commit 60fb0e0d8f
5 changed files with 3 additions and 72 deletions

View File

@@ -39,11 +39,6 @@ public class BudgetRecord : BaseEntity
/// 开始日期
/// </summary>
public DateTime StartDate { get; set; } = DateTime.Now;
/// <summary>
/// 上次同步时间
/// </summary>
public DateTime? LastSync { get; set; }
}
public enum BudgetPeriodType

View File

@@ -60,15 +60,3 @@ export function toggleStopBudget(id) {
})
}
/**
* 同步预算进度
* @param {number} id 预算ID
* @param {string} referenceDate 参考日期 (可选)
*/
export function syncBudget(id, referenceDate) {
return request({
url: '/Budget/Sync',
method: 'post',
params: { id, referenceDate }
})
}

View File

@@ -46,7 +46,6 @@
<van-tag v-else type="success" size="small" plain>进行中</van-tag>
</div>
<div class="header-actions">
<van-button icon="replay" size="mini" plain :loading="budget.syncing" @click="handleSync(budget)" />
<van-button :icon="budget.isStopped ? 'play' : 'pause'" size="mini" plain @click="handleToggleStop(budget)" />
</div>
</div>
@@ -91,7 +90,6 @@
<span class="period-text">{{ budget.period }}</span>
<van-icon name="arrow" class="nav-icon" @click="handleSwitchPeriod(budget, 1)" />
</div>
<span class="sync-time">上次同步: {{ budget.lastSync }}</span>
</div>
</div>
<template #right>
@@ -140,7 +138,6 @@
<van-tag v-else type="success" size="small" plain>进行中</van-tag>
</div>
<div class="header-actions">
<van-button icon="replay" size="mini" plain round :loading="budget.syncing" @click="handleSync(budget)" />
<van-button :icon="budget.isStopped ? 'play' : 'pause'" size="mini" plain round @click="handleToggleStop(budget)" />
</div>
</div>
@@ -185,7 +182,6 @@
<span class="period-text">{{ budget.period }}</span>
<van-icon name="arrow" class="nav-icon" @click="handleSwitchPeriod(budget, 1)" />
</div>
<span class="sync-time">上次同步: {{ budget.lastSync }}</span>
</div>
</div>
<template #right>
@@ -234,7 +230,6 @@
<van-tag v-else type="success" size="small" plain>积累中</van-tag>
</div>
<div class="header-actions">
<van-button icon="replay" size="mini" plain round :loading="budget.syncing" @click="handleSync(budget)" />
<van-button :icon="budget.isStopped ? 'play' : 'pause'" size="mini" plain round @click="handleToggleStop(budget)" />
</div>
</div>
@@ -281,7 +276,6 @@
</span>
<van-icon name="arrow" class="nav-icon" @click="handleSwitchPeriod(budget, 1)" />
</div>
<span class="sync-time">上次同步: {{ budget.lastSync }}</span>
</div>
</div>
<template #right>
@@ -388,7 +382,7 @@
import { ref, reactive, computed, onMounted, watch } from 'vue'
import { showToast, showConfirmDialog } from 'vant'
import { getCategoryList } from '@/api/transactionCategory'
import { getBudgetList, createBudget, deleteBudget, toggleStopBudget, syncBudget, getBudgetStatistics } from '@/api/budget'
import { getBudgetList, createBudget, deleteBudget, toggleStopBudget, getBudgetStatistics } from '@/api/budget'
import { BudgetPeriodType, BudgetCategory } from '@/constants/enums'
import PopupContainer from '@/components/PopupContainer.vue'
@@ -592,23 +586,6 @@ const handleDelete = (budget) => {
}).catch(() => {})
}
const handleSync = async (budget) => {
budget.syncing = true
try {
const refDate = refDateMap[budget.id] ? refDateMap[budget.id].toISOString() : null
const res = await syncBudget(budget.id, refDate)
if (res.success) {
showToast('同步成功')
Object.assign(budget, res.data)
}
} catch (err) {
showToast('同步失败')
console.error('同步预算失败', err)
} finally {
budget.syncing = false
}
}
const handleToggleStop = async (budget) => {
try {
const res = await toggleStopBudget(budget.id)

View File

@@ -68,8 +68,7 @@ public class BudgetController(
Limit = dto.Limit,
Category = dto.Category,
SelectedCategories = dto.SelectedCategories != null ? string.Join(",", dto.SelectedCategories) : string.Empty,
StartDate = dto.StartDate ?? DateTime.Now,
LastSync = DateTime.Now
StartDate = dto.StartDate ?? DateTime.Now
};
var success = await budgetService.AddAsync(budget);
@@ -122,30 +121,4 @@ public class BudgetController(
}
}
/// <summary>
/// 同步预算数据
/// </summary>
[HttpPost]
public async Task<BaseResponse<BudgetDto>> SyncAsync([FromQuery] long id, [FromQuery] DateTime? referenceDate = null)
{
try
{
var budget = await budgetService.GetByIdAsync(id);
if (budget == null)
{
return "预算不存在".Fail<BudgetDto>();
}
budget.LastSync = DateTime.Now;
await budgetService.UpdateAsync(budget);
var currentAmount = await budgetService.CalculateCurrentAmountAsync(budget, referenceDate);
return BudgetDto.FromEntity(budget, currentAmount, referenceDate).Ok();
}
catch (Exception ex)
{
logger.LogError(ex, "同步预算失败, Id: {Id}", id);
return $"同步失败: {ex.Message}".Fail<BudgetDto>();
}
}
}

View File

@@ -12,7 +12,6 @@ public class BudgetDto
public bool IsStopped { get; set; }
public string StartDate { get; set; } = string.Empty;
public string Period { get; set; } = string.Empty;
public string LastSync { get; set; } = string.Empty;
public static BudgetDto FromEntity(BudgetRecord entity, decimal currentAmount = 0, DateTime? referenceDate = null)
{
@@ -32,8 +31,7 @@ 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}",
LastSync = entity.LastSync?.ToString("yyyy-MM-dd HH:mm") ?? "未同步"
Period = entity.Type == BudgetPeriodType.Longterm ? "长期" : $"{start:yyyy-MM-dd} ~ {end:yyyy-MM-dd}"
};
}
}