新增资金出款查询与财务统计

This commit is contained in:
yml2213
2026-07-26 16:18:31 +08:00
parent 321f0781cf
commit dbe0cda2c6
17 changed files with 1604 additions and 31 deletions
@@ -50,6 +50,12 @@ export interface FinanceDailyItem {
pending_refund_count: number
settled_order_count: number
offline_settlement_pending_count: number
offline_settlement_paid_amount_cent: number
offline_settlement_paid_count: number
withdrawal_paid_amount_cent: number
withdrawal_paid_count: number
disbursement_paid_amount_cent: number
disbursement_paid_count: number
}
export interface FinancePickupSummary {
@@ -59,10 +65,87 @@ export interface FinancePickupSummary {
in_progress_count: number
}
export interface FinanceDisbursementSummary {
paid_amount_cent: number
paid_count: number
pending_payment_amount_cent: number
pending_payment_count: number
offline_settlement_paid_amount_cent: number
offline_settlement_paid_count: number
offline_settlement_pending_amount_cent: number
offline_settlement_pending_count: number
withdrawal_amount_cent: number
withdrawal_fee_amount_cent: number
withdrawal_paid_amount_cent: number
withdrawal_paid_count: number
withdrawal_pending_amount_cent: number
withdrawal_pending_count: number
withdrawal_review_amount_cent: number
withdrawal_review_count: number
}
export interface FinanceDisbursementListSummary {
record_count: number
paid_amount_cent: number
paid_count: number
payment_pending_amount_cent: number
payment_pending_count: number
review_pending_amount_cent: number
review_pending_count: number
withdrawal_fee_amount_cent: number
}
export interface FinanceDisbursementItem {
source_type: 'platform_managed' | 'withdrawal'
source_id: number
business_no: string
order_id?: number
withdrawal_id?: number
user_id: number
payee_name: string
payee_phone: string
uploader_name: string
source_channel: string
account_type: string
account_name: string
account_no: string
bank_name: string
amount_cent: number
fee_cent: number
actual_amount_cent: number
status: 'review_pending' | 'payment_pending' | 'paid' | 'rejected' | 'cancelled'
raw_status: string
business_created_at?: string
paid_at?: string
operator_id?: number
operator_name: string
remark: string
}
export interface FinanceDisbursementQuery extends FinanceDateQuery {
source_type?: string
status?: string
date_type?: string
business_no?: string
keyword?: string
user_id?: string
page?: number
page_size?: number
}
export interface FinanceDisbursementList {
items: FinanceDisbursementItem[]
total: number
page: number
page_size: number
summary: FinanceDisbursementListSummary
}
export interface FinanceDashboard {
summary: FinanceSummary
daily_items: FinanceDailyItem[]
pickup_summary: FinancePickupSummary
disbursement_summary: FinanceDisbursementSummary
generated_at: string
}
@@ -113,6 +196,8 @@ export interface FinanceDetailQuery extends FinanceDateQuery {
user_id?: string
order_status?: string
settlement_status?: string
settlement_mode?: string
offline_settlement_status?: string
date_type?: string
page?: number
page_size?: number
@@ -137,6 +222,24 @@ export async function fetchFinanceDashboard(query: FinanceDateQuery = {}) {
completed_count: 0,
in_progress_count: 0,
},
disbursement_summary: data.data?.disbursement_summary ?? {
paid_amount_cent: 0,
paid_count: 0,
pending_payment_amount_cent: 0,
pending_payment_count: 0,
offline_settlement_paid_amount_cent: 0,
offline_settlement_paid_count: 0,
offline_settlement_pending_amount_cent: 0,
offline_settlement_pending_count: 0,
withdrawal_amount_cent: 0,
withdrawal_fee_amount_cent: 0,
withdrawal_paid_amount_cent: 0,
withdrawal_paid_count: 0,
withdrawal_pending_amount_cent: 0,
withdrawal_pending_count: 0,
withdrawal_review_amount_cent: 0,
withdrawal_review_count: 0,
},
}
}
@@ -153,3 +256,27 @@ export async function fetchFinanceDetails(query: FinanceDetailQuery = {}) {
page_size: Number(result?.page_size ?? query.page_size ?? 20),
}
}
export async function fetchFinanceDisbursements(query: FinanceDisbursementQuery = {}) {
const { data } = await apiClient.get<ApiResponse<FinanceDisbursementList>>(
'/admin/finance/disbursements',
{ params: cleanParams(query) }
)
const result = data.data
return {
items: Array.isArray(result?.items) ? result.items : [],
total: Number(result?.total ?? 0),
page: Number(result?.page ?? query.page ?? 1),
page_size: Number(result?.page_size ?? query.page_size ?? 20),
summary: result?.summary ?? {
record_count: 0,
paid_amount_cent: 0,
paid_count: 0,
payment_pending_amount_cent: 0,
payment_pending_count: 0,
review_pending_amount_cent: 0,
review_pending_count: 0,
withdrawal_fee_amount_cent: 0,
},
}
}