增加 运营开支

This commit is contained in:
yml2213
2026-08-20 16:06:05 +08:00
parent 0b235d078d
commit 80e329a604
14 changed files with 1189 additions and 12 deletions
@@ -68,6 +68,8 @@ export interface FinanceDailyItem {
withdrawal_paid_count: number
manual_paid_amount_cent: number
manual_paid_count: number
operating_expense_amount_cent: number
operating_expense_count: number
disbursement_paid_amount_cent: number
disbursement_paid_count: number
}
@@ -107,6 +109,11 @@ export interface FinanceDisbursementSummary {
manual_paid_count: number
}
export interface OperatingExpenseSummary {
amount_cent: number
count: number
}
export interface FinanceDisbursementListSummary {
record_count: number
paid_amount_cent: number
@@ -207,9 +214,61 @@ export interface FinanceDashboard {
pickup_summary: FinancePickupSummary
mohong_summary: FinanceMohongSummary
disbursement_summary: FinanceDisbursementSummary
operating_expense_summary: OperatingExpenseSummary
generated_at: string
}
export interface OperatingExpense {
id: number
expense_no: string
category: string
payee_name: string
amount_cent: number
occurred_at: string
remark: string
voucher_url: string
status: 'paid' | 'voided'
created_by: number
created_by_name: string
voided_by?: number
voided_by_name: string
voided_at?: string
void_reason: string
created_at: string
}
export interface OperatingExpenseQuery extends FinanceDateQuery {
status?: string
category?: string
keyword?: string
date_type?: 'created' | 'occurred'
page?: number
page_size?: number
}
export interface OperatingExpenseListSummary {
record_count: number
paid_amount_cent: number
paid_count: number
}
export interface OperatingExpenseList {
items: OperatingExpense[]
total: number
page: number
page_size: number
summary: OperatingExpenseListSummary
}
export interface CreateOperatingExpensePayload {
category: string
payee_name: string
amount_cent: number
occurred_at: string
remark: string
voucher_url?: string
}
export interface FinanceDetail {
order_id: number
order_no: string
@@ -309,6 +368,10 @@ export async function fetchFinanceDashboard(query: FinanceDateQuery = {}) {
manual_paid_amount_cent: 0,
manual_paid_count: 0,
},
operating_expense_summary: data.data?.operating_expense_summary ?? {
amount_cent: 0,
count: 0,
},
}
}
@@ -350,6 +413,37 @@ export async function fetchFinanceDisbursements(query: FinanceDisbursementQuery
}
}
export async function fetchOperatingExpenses(query: OperatingExpenseQuery = {}) {
const { data } = await apiClient.get<ApiResponse<OperatingExpenseList>>(
'/admin/finance/operating-expenses',
{ 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 },
}
}
export async function createOperatingExpense(payload: CreateOperatingExpensePayload) {
const { data } = await apiClient.post<ApiResponse<OperatingExpense>>(
'/admin/finance/operating-expenses',
payload
)
return data.data
}
export async function voidOperatingExpense(id: number, reason: string) {
const { data } = await apiClient.post<ApiResponse<OperatingExpense>>(
`/admin/finance/operating-expenses/${id}/void`,
{ reason }
)
return data.data
}
export async function createManualDisbursement(payload: CreateManualDisbursementPayload) {
const { data } = await apiClient.post<ApiResponse<ManualDisbursement>>(
'/admin/finance/manual-disbursements',