Files
juwan-frontend/lib/domain/income.ts
T
zetaloop ca4bef959f refactor(types): align entity types with backend API responses
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.
2026-04-23 21:14:46 +08:00

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}固定抽成`,
}
}