新增财务仪表盘并统一金额到角

This commit is contained in:
yml
2026-06-09 00:13:03 +08:00
parent a2a0489158
commit 2dfa2611fd
40 changed files with 1324 additions and 70 deletions
@@ -0,0 +1,116 @@
import { apiClient } from '@/shared/api/client'
import type { ApiResponse, PaginatedResult } from '@/shared/types/types'
export interface FinanceSummary {
total_flow_amount_cent: number
total_refund_amount_cent: number
pending_refund_amount_cent: number
channel_net_amount_cent: number
platform_income_amount: number
owner_should_income_amount: number
owner_wallet_income_amount: number
settlement_diff_amount: number
successful_pay_count: number
successful_refund_count: number
pending_refund_count: number
settled_order_count: number
financial_exception_count: number
}
export interface FinanceDailyItem {
date: string
total_flow_amount_cent: number
total_refund_amount_cent: number
pending_refund_amount_cent: number
channel_net_amount_cent: number
platform_income_amount: number
owner_should_income_amount: number
owner_wallet_income_amount: number
settlement_diff_amount: number
successful_pay_count: number
successful_refund_count: number
pending_refund_count: number
settled_order_count: number
}
export interface FinanceDashboard {
summary: FinanceSummary
daily_items: FinanceDailyItem[]
generated_at: string
}
export interface FinanceDetail {
order_id: number
order_no: string
order_status: string
settlement_status: string
refund_status: string
renter_id: number
renter_phone: string
renter_nickname: string
owner_id: number
owner_phone: string
owner_nickname: string
order_rent_amount: number
order_deposit_amount: number
checkout_rent_amount: number
checkout_renter_refund: number
checkout_owner_income: number
checkout_platform_fee: number
owner_wallet_income_amount: number
paid_amount_cent: number
refunded_amount_cent: number
refunding_amount_cent: number
failed_refund_amount_cent: number
channel_net_amount_cent: number
platform_net_amount: number
settlement_diff_amount: number
finance_status: string
created_at: string
settled_at?: string
}
export interface FinanceDateQuery {
start_date?: string
end_date?: string
}
export interface FinanceDetailQuery extends FinanceDateQuery {
order_no?: string
user_id?: string
order_status?: string
settlement_status?: string
date_type?: string
page?: number
page_size?: number
}
function cleanParams(query: object) {
return Object.fromEntries(
Object.entries(query).filter(([, value]) => value !== '' && value !== undefined)
)
}
export async function fetchFinanceDashboard(query: FinanceDateQuery = {}) {
const { data } = await apiClient.get<ApiResponse<FinanceDashboard>>('/admin/finance/dashboard', {
params: cleanParams(query),
})
return {
...data.data,
daily_items: Array.isArray(data.data?.daily_items) ? data.data.daily_items : [],
}
}
export async function fetchFinanceDetails(query: FinanceDetailQuery = {}) {
const { data } = await apiClient.get<ApiResponse<PaginatedResult<FinanceDetail>>>(
'/admin/finance/details',
{ 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),
}
}