feat(invitation): 新增返利统计汇总与时间筛选

This commit is contained in:
yml2213
2026-10-29 12:36:57 +08:00
parent 2029c1f4fb
commit 163ffb9eff
8 changed files with 913 additions and 14 deletions
@@ -56,6 +56,9 @@ export interface AdminInvitationQuery {
invitee_phone?: string
order_no?: string
trade_role?: string
source?: string
start_date?: string
end_date?: string
distribution_site_id?: number
inviter_id?: number
invitee_id?: number
@@ -63,6 +66,43 @@ export interface AdminInvitationQuery {
page_size?: number
}
export interface AdminRebateDailyStat {
date: string
ledger_count: number
rebate_amount_cent: number
order_amount_cent: number
pickup_amount_cent: number
}
export interface AdminRebateInviterStat {
inviter_id: number
inviter_phone: string
inviter_nickname: string
ledger_count: number
rebate_amount_cent: number
}
export interface AdminRebateSummary {
total_rebate_cent: number
ledger_count: number
inviter_count: number
invitee_count: number
avg_rebate_cent: number
order_rebate_cent: number
order_count: number
pickup_rebate_cent: number
pickup_count: number
buyer_rebate_cent: number
buyer_count: number
seller_rebate_cent: number
seller_count: number
first_month_cent: number
second_month_cent: number
subsequent_cent: number
daily: AdminRebateDailyStat[]
top_inviters: AdminRebateInviterStat[]
}
export async function fetchAdminInvitations(query: AdminInvitationQuery = {}) {
const { data } = await apiClient.get<ApiResponse<PaginatedResult<AdminInvitationRow>>>(
'/admin/invitations',
@@ -86,3 +126,31 @@ export async function fetchAdminRebates(query: AdminInvitationQuery = {}) {
total: Number(result?.total ?? 0),
}
}
export async function fetchAdminRebateSummary(query: AdminInvitationQuery = {}) {
const { data } = await apiClient.get<ApiResponse<AdminRebateSummary>>(
'/admin/invitations/rebates/summary',
{ params: query }
)
const result = data.data
return {
total_rebate_cent: Number(result?.total_rebate_cent ?? 0),
ledger_count: Number(result?.ledger_count ?? 0),
inviter_count: Number(result?.inviter_count ?? 0),
invitee_count: Number(result?.invitee_count ?? 0),
avg_rebate_cent: Number(result?.avg_rebate_cent ?? 0),
order_rebate_cent: Number(result?.order_rebate_cent ?? 0),
order_count: Number(result?.order_count ?? 0),
pickup_rebate_cent: Number(result?.pickup_rebate_cent ?? 0),
pickup_count: Number(result?.pickup_count ?? 0),
buyer_rebate_cent: Number(result?.buyer_rebate_cent ?? 0),
buyer_count: Number(result?.buyer_count ?? 0),
seller_rebate_cent: Number(result?.seller_rebate_cent ?? 0),
seller_count: Number(result?.seller_count ?? 0),
first_month_cent: Number(result?.first_month_cent ?? 0),
second_month_cent: Number(result?.second_month_cent ?? 0),
subsequent_cent: Number(result?.subsequent_cent ?? 0),
daily: Array.isArray(result?.daily) ? result.daily : [],
top_inviters: Array.isArray(result?.top_inviters) ? result.top_inviters : [],
} satisfies AdminRebateSummary
}