优化
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { http, unwrapApiResponse, type ApiEnvelope } from '@/shared/api/http'
|
||||
|
||||
export type OverseasFeeType = 'STORAGE' | 'RETURN_STORAGE'
|
||||
export type OverseasBillingUnit = 'CBM' | 'PALLET'
|
||||
|
||||
export interface OverseasStorageFeeTier {
|
||||
id: string
|
||||
startDay: number
|
||||
endDay: number | null
|
||||
unitPrice: number
|
||||
sortNo: number
|
||||
feeType: OverseasFeeType
|
||||
billingUnit: OverseasBillingUnit
|
||||
}
|
||||
|
||||
export interface OverseasStorageFeeConfig {
|
||||
id: string
|
||||
customerId: string
|
||||
customerName: string
|
||||
currency: string
|
||||
tiers: OverseasStorageFeeTier[]
|
||||
version: number
|
||||
createdAt: string | null
|
||||
updatedAt: string | null
|
||||
}
|
||||
|
||||
export interface OverseasStorageFeeUpdateRequest {
|
||||
customerId: string
|
||||
customerName: string
|
||||
currency: string
|
||||
tiers: Array<Pick<OverseasStorageFeeTier, 'feeType' | 'billingUnit' | 'startDay' | 'endDay' | 'unitPrice'>>
|
||||
version: number
|
||||
}
|
||||
|
||||
const path = (tenantId: string) => `/platform/v1/iam/tenants/${encodeURIComponent(tenantId)}/overseas-storage-fees`
|
||||
|
||||
type RawConfig = Omit<OverseasStorageFeeConfig, 'id' | 'customerId' | 'version' | 'tiers'> & {
|
||||
id: string | number
|
||||
customerId: string | number
|
||||
version: string | number
|
||||
tiers: Array<Omit<OverseasStorageFeeTier, 'id'> & { id: string | number; unitPrice: number | string }>
|
||||
}
|
||||
|
||||
function normalize(data: RawConfig): OverseasStorageFeeConfig {
|
||||
return {
|
||||
...data,
|
||||
id: String(data.id), customerId: String(data.customerId), version: Number(data.version),
|
||||
tiers: data.tiers.map((tier) => ({ ...tier, id: String(tier.id), unitPrice: Number(tier.unitPrice), feeType: tier.feeType as OverseasFeeType, billingUnit: tier.billingUnit as OverseasBillingUnit })),
|
||||
}
|
||||
}
|
||||
|
||||
export async function getCustomerOverseasStorageFees(tenantId: string) {
|
||||
const response = await http.get<never, ApiEnvelope<RawConfig>>(path(tenantId))
|
||||
return normalize(unwrapApiResponse(response))
|
||||
}
|
||||
|
||||
export async function updateCustomerOverseasStorageFees(tenantId: string, request: OverseasStorageFeeUpdateRequest) {
|
||||
await http.put<never, ApiEnvelope<null>>(path(tenantId), request)
|
||||
return getCustomerOverseasStorageFees(tenantId)
|
||||
}
|
||||
|
||||
export async function listOverseasStorageFees(page = 1, size = 20, customerName?: string) {
|
||||
const response = await http.get<never, ApiEnvelope<{ records: RawConfig[]; total: number; page: number; size: number }>>('/platform/v1/overseas-storage-fees', { params: { page, size, customerName } })
|
||||
const result = unwrapApiResponse(response)
|
||||
return { ...result, records: result.records.map(normalize) }
|
||||
}
|
||||
Reference in New Issue
Block a user