增加 运营开支
This commit is contained in:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user