修复后台分页刷新并优化财务查询

This commit is contained in:
yml2213
2026-08-30 21:56:22 +08:00
parent 327a03672a
commit 6561f925e0
7 changed files with 40 additions and 53 deletions
@@ -98,42 +98,29 @@ func (r *Repository) disbursementSummary(ctx context.Context, query DashboardQue
return nil, err return nil, err
} }
var withdrawalPaid struct { // 付款、处理中、待审核三类提现在一次条件聚合中完成,避免同一张表重复扫描。
AmountCent int64 var withdrawal struct {
FeeAmountCent int64 PaidAmountCent int64
ActualAmountCent int64 PaidFeeAmountCent int64
Count int64 PaidActualAmountCent int64
PaidCount int64
PendingAmountCent int64
PendingCount int64
ReviewAmountCent int64
ReviewCount int64
} }
if err := db.Table("withdrawal_requests"). if err := db.Table("withdrawal_requests").Select(`
Select(`COALESCE(SUM(amount_cent), 0) AS amount_cent, COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN amount_cent ELSE 0 END), 0) AS paid_amount_cent,
COALESCE(SUM(fee_cent), 0) AS fee_amount_cent, COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN fee_cent ELSE 0 END), 0) AS paid_fee_amount_cent,
COALESCE(SUM(actual_amount_cent), 0) AS actual_amount_cent, COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN actual_amount_cent ELSE 0 END), 0) AS paid_actual_amount_cent,
COUNT(id) AS count`). COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN 1 ELSE 0 END), 0) AS paid_count,
Where("status = ?", "completed"). COALESCE(SUM(CASE WHEN status = 'processing' THEN actual_amount_cent ELSE 0 END), 0) AS pending_amount_cent,
Where("paid_at >= ? AND paid_at <= ?", query.StartDate, query.EndDate). COALESCE(SUM(CASE WHEN status = 'processing' THEN 1 ELSE 0 END), 0) AS pending_count,
Scan(&withdrawalPaid).Error; err != nil { COALESCE(SUM(CASE WHEN status = 'pending' THEN actual_amount_cent ELSE 0 END), 0) AS review_amount_cent,
return nil, err COALESCE(SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END), 0) AS review_count`,
} query.StartDate, query.EndDate, query.StartDate, query.EndDate,
query.StartDate, query.EndDate, query.StartDate, query.EndDate).
var withdrawalPending struct { Scan(&withdrawal).Error; err != nil {
ActualAmountCent int64
Count int64
}
if err := db.Table("withdrawal_requests").
Select(`COALESCE(SUM(actual_amount_cent), 0) AS actual_amount_cent, COUNT(id) AS count`).
Where("status = ?", "processing").
Scan(&withdrawalPending).Error; err != nil {
return nil, err
}
var withdrawalReview struct {
ActualAmountCent int64
Count int64
}
if err := db.Table("withdrawal_requests").
Select(`COALESCE(SUM(actual_amount_cent), 0) AS actual_amount_cent, COUNT(id) AS count`).
Where("status = ?", "pending").
Scan(&withdrawalReview).Error; err != nil {
return nil, err return nil, err
} }
@@ -150,22 +137,22 @@ func (r *Repository) disbursementSummary(ctx context.Context, query DashboardQue
} }
return &DisbursementSummaryDTO{ return &DisbursementSummaryDTO{
PaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent + withdrawalPaid.ActualAmountCent + manualPaid.AmountCent, PaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent + withdrawal.PaidActualAmountCent + manualPaid.AmountCent,
PaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count + withdrawalPaid.Count + manualPaid.Count, PaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count + withdrawal.PaidCount + manualPaid.Count,
PendingPaymentAmountCent: offlinePending.AmountCent + pickupPending.AmountCent + pickupAdjustmentPending.AmountCent + withdrawalPending.ActualAmountCent, PendingPaymentAmountCent: offlinePending.AmountCent + pickupPending.AmountCent + pickupAdjustmentPending.AmountCent + withdrawal.PendingAmountCent,
PendingPaymentCount: offlinePending.Count + pickupPending.Count + pickupAdjustmentPending.Count + withdrawalPending.Count, PendingPaymentCount: offlinePending.Count + pickupPending.Count + pickupAdjustmentPending.Count + withdrawal.PendingCount,
OfflineSettlementPaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent, OfflineSettlementPaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent,
OfflineSettlementPaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count, OfflineSettlementPaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count,
OfflineSettlementPendingAmountCent: offlinePending.AmountCent, OfflineSettlementPendingAmountCent: offlinePending.AmountCent,
OfflineSettlementPendingCount: offlinePending.Count, OfflineSettlementPendingCount: offlinePending.Count,
WithdrawalAmountCent: withdrawalPaid.AmountCent, WithdrawalAmountCent: withdrawal.PaidAmountCent,
WithdrawalFeeAmountCent: withdrawalPaid.FeeAmountCent, WithdrawalFeeAmountCent: withdrawal.PaidFeeAmountCent,
WithdrawalPaidAmountCent: withdrawalPaid.ActualAmountCent, WithdrawalPaidAmountCent: withdrawal.PaidActualAmountCent,
WithdrawalPaidCount: withdrawalPaid.Count, WithdrawalPaidCount: withdrawal.PaidCount,
WithdrawalPendingAmountCent: withdrawalPending.ActualAmountCent, WithdrawalPendingAmountCent: withdrawal.PendingAmountCent,
WithdrawalPendingCount: withdrawalPending.Count, WithdrawalPendingCount: withdrawal.PendingCount,
WithdrawalReviewAmountCent: withdrawalReview.ActualAmountCent, WithdrawalReviewAmountCent: withdrawal.ReviewAmountCent,
WithdrawalReviewCount: withdrawalReview.Count, WithdrawalReviewCount: withdrawal.ReviewCount,
ManualPaidAmountCent: manualPaid.AmountCent, ManualPaidAmountCent: manualPaid.AmountCent,
ManualPaidCount: manualPaid.Count, ManualPaidCount: manualPaid.Count,
}, nil }, nil
@@ -404,7 +404,7 @@ function defaultEndDate() {
v-model:current-page="currentPage" v-model:current-page="currentPage"
v-model:page-size="currentPageSize" v-model:page-size="currentPageSize"
:total="total" :total="total"
@change="handlePageChange" @page-change="handlePageChange"
/> />
</section> </section>
</div> </div>
@@ -673,7 +673,7 @@ function accountTypeLabel(type: string) {
v-model:current-page="currentPage" v-model:current-page="currentPage"
v-model:page-size="currentPageSize" v-model:page-size="currentPageSize"
:total="total" :total="total"
@change="loadItems" @page-change="loadItems"
/> />
</section> </section>
@@ -405,7 +405,7 @@ function statusType(status: string): 'success' | 'danger' {
v-model:current-page="currentPage" v-model:current-page="currentPage"
v-model:page-size="currentPageSize" v-model:page-size="currentPageSize"
:total="total" :total="total"
@change="loadItems" @page-change="loadItems"
/> />
</section> </section>
@@ -356,7 +356,7 @@ function jsonText(value: unknown) {
v-model:current-page="currentPage" v-model:current-page="currentPage"
v-model:page-size="currentPageSize" v-model:page-size="currentPageSize"
:total="total" :total="total"
@change="handlePageChange" @page-change="handlePageChange"
/> />
</section> </section>
@@ -267,7 +267,7 @@ function directionLabel(direction: string) {
v-model:current-page="currentPage" v-model:current-page="currentPage"
v-model:page-size="currentPageSize" v-model:page-size="currentPageSize"
:total="total" :total="total"
@change="handlePageChange" @page-change="handlePageChange"
/> />
</section> </section>
</div> </div>
@@ -469,7 +469,7 @@ function money(cent: number | undefined | null) {
v-model:current-page="currentPage" v-model:current-page="currentPage"
v-model:page-size="pageSize" v-model:page-size="pageSize"
:total="total" :total="total"
@change="loadWithdrawals" @page-change="loadWithdrawals"
/> />
</section> </section>