ca4bef959f
Adjust all entity types to match actual backend response shapes. String-typed numeric fields (Shop.rating, Shop.commissionValue, WalletTransaction.amount) now correctly typed as strings. Post.linkedOrderId changed from SnowflakeId to number (backend int64). Removed fields absent from backend: Order consumer/player/shopName, Review fromUserAvatar/toUserId, Dispute initiatorId/initiatorName, Post authorRole/quotedPostId, Comment postId, ChatSession readonly/lastMessageAt, ChatMessage senderName/senderAvatar. Added Player.gender field.
36 lines
904 B
TypeScript
36 lines
904 B
TypeScript
import type { Shop } from "@/lib/types"
|
|
|
|
type ShopCommission = Pick<Shop, "commissionType" | "commissionValue">
|
|
|
|
export interface IncomeCalculation {
|
|
income: number
|
|
commissionLabel: string
|
|
}
|
|
|
|
function roundCurrency(amount: number) {
|
|
return Number(amount.toFixed(2))
|
|
}
|
|
|
|
export function calculateOrderIncome(totalPrice: number, shop?: ShopCommission): IncomeCalculation {
|
|
if (!shop) {
|
|
return {
|
|
income: roundCurrency(totalPrice),
|
|
commissionLabel: "独立接单无抽成",
|
|
}
|
|
}
|
|
|
|
const commission = Number(shop.commissionValue)
|
|
|
|
if (shop.commissionType === "percentage") {
|
|
return {
|
|
income: roundCurrency(totalPrice * (1 - commission / 100)),
|
|
commissionLabel: `扣除${shop.commissionValue}%抽成`,
|
|
}
|
|
}
|
|
|
|
return {
|
|
income: roundCurrency(Math.max(0, totalPrice - commission)),
|
|
commissionLabel: `扣除¥${shop.commissionValue}固定抽成`,
|
|
}
|
|
}
|