feat(finance): 完成成本快照运行层、销售事实与人工支出登记
迁移 108-111:快照业务时间与预估转实际、销售事实表、系统成本项、公司人工支出登记。接单平台按工单实际 reward 入账;人工支出支持登记/审批/驳回/报销并写 actual 快照。新增销售毛利页、人工支出页与订单入口。
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
import { apiGet } from '@/lib/http'
|
||||
import type { AdminFinanceSummary, AdminFinanceTransactionResult } from '@/types/admin/finance'
|
||||
import { apiGet, apiPost } from '@/lib/http'
|
||||
import type {
|
||||
AdminFinanceSummary,
|
||||
AdminFinanceTransactionResult,
|
||||
AdminSalesFactsResult,
|
||||
AdminSalesProfitOverview,
|
||||
} from '@/types/admin/finance'
|
||||
|
||||
export type AdminFinanceDateType = 'occurred' | 'created' | 'reviewed'
|
||||
|
||||
@@ -22,3 +27,29 @@ export function fetchAdminFinanceTransactions(
|
||||
) {
|
||||
return apiGet<AdminFinanceTransactionResult>('/api/v1/admin/finance/transactions', params)
|
||||
}
|
||||
|
||||
export type AdminSalesProfitParams = {
|
||||
dateFrom?: string
|
||||
dateTo?: string
|
||||
provider?: string
|
||||
carrierType?: string
|
||||
page?: number
|
||||
pageSize?: number
|
||||
}
|
||||
|
||||
export function fetchAdminSalesProfitOverview(params: AdminSalesProfitParams = {}) {
|
||||
return apiGet<AdminSalesProfitOverview>('/api/v1/admin/finance/sales-profit/overview', params)
|
||||
}
|
||||
|
||||
export function fetchAdminSalesDailyFacts(params: AdminSalesProfitParams = {}) {
|
||||
return apiGet<AdminSalesFactsResult>('/api/v1/admin/finance/sales-facts', params)
|
||||
}
|
||||
|
||||
export function rebuildAdminSalesDailyFacts(payload: { dateFrom?: string; dateTo?: string }) {
|
||||
return apiPost<{
|
||||
range: { fromDate: string; toDate: string }
|
||||
deletedCount: number
|
||||
insertedCount: number
|
||||
computedAt: string
|
||||
}>('/api/v1/admin/finance/sales-facts/rebuild', payload)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
export * from './auth'
|
||||
export * from './dashboard'
|
||||
export * from './finance'
|
||||
export * from './manual-expense'
|
||||
export * from './cost-center'
|
||||
export * from './fund'
|
||||
export * from './users'
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
import { apiGet, apiPost } from '@/lib/http'
|
||||
import type {
|
||||
AdminManualExpense,
|
||||
AdminManualExpenseListResult,
|
||||
AdminManualExpenseOverview,
|
||||
} from '@/types/admin/manual-expense'
|
||||
|
||||
export type AdminManualExpenseParams = {
|
||||
dateFrom?: string
|
||||
dateTo?: string
|
||||
status?: string
|
||||
keyword?: string
|
||||
costItemId?: number
|
||||
paidByAdminUserId?: number
|
||||
orderId?: number
|
||||
page?: number
|
||||
pageSize?: number
|
||||
}
|
||||
|
||||
export function fetchAdminManualExpenses(params: AdminManualExpenseParams = {}) {
|
||||
return apiGet<AdminManualExpenseListResult>('/api/v1/admin/finance/manual-expenses', params)
|
||||
}
|
||||
|
||||
export function fetchAdminManualExpenseOverview(params: AdminManualExpenseParams = {}) {
|
||||
return apiGet<AdminManualExpenseOverview>(
|
||||
'/api/v1/admin/finance/manual-expenses/overview',
|
||||
params,
|
||||
)
|
||||
}
|
||||
|
||||
export function fetchAdminManualExpenseCostItems() {
|
||||
return apiGet<{
|
||||
items: Array<{
|
||||
id: number
|
||||
code: string
|
||||
name: string
|
||||
costType: string
|
||||
carrierType: string
|
||||
pricingMode: string
|
||||
}>
|
||||
}>('/api/v1/admin/finance/manual-expenses/cost-items')
|
||||
}
|
||||
|
||||
export function fetchAdminManualExpense(expenseId: number) {
|
||||
return apiGet<AdminManualExpense>(`/api/v1/admin/finance/manual-expenses/${expenseId}`)
|
||||
}
|
||||
|
||||
export function createAdminManualExpense(payload: Record<string, unknown>) {
|
||||
return apiPost<AdminManualExpense>('/api/v1/admin/finance/manual-expenses', payload)
|
||||
}
|
||||
|
||||
export function approveAdminManualExpense(
|
||||
expenseId: number,
|
||||
payload: Record<string, unknown> = {},
|
||||
) {
|
||||
return apiPost<AdminManualExpense>(
|
||||
`/api/v1/admin/finance/manual-expenses/${expenseId}/approve`,
|
||||
payload,
|
||||
)
|
||||
}
|
||||
|
||||
export function rejectAdminManualExpense(expenseId: number, rejectReason: string) {
|
||||
return apiPost<AdminManualExpense>(`/api/v1/admin/finance/manual-expenses/${expenseId}/reject`, {
|
||||
rejectReason,
|
||||
})
|
||||
}
|
||||
|
||||
export function reimburseAdminManualExpense(expenseId: number) {
|
||||
return apiPost<AdminManualExpense>(`/api/v1/admin/finance/manual-expenses/${expenseId}/reimburse`)
|
||||
}
|
||||
Reference in New Issue
Block a user