/** * 文件职责:费用设置模块 API 与 DTO 定义。 * 1. 维护起送/配送费、包装费、其他费用类型。 * 2. 提供查询、保存与复制费用设置接口。 */ import { requestClient } from '#/api/request'; /** 包装费模式 */ export type PackagingFeeMode = 'item' | 'order'; /** 按订单包装费模式 */ export type OrderPackagingFeeMode = 'fixed' | 'tiered'; /** 其他费用类型 */ export type AdditionalFeeType = 'cutlery' | 'rush'; /** 阶梯包装费条目 */ export interface PackagingFeeTierDto { /** 单档费用 */ fee: number; /** 主键 */ id: string; /** 起始订单金额(含) */ minAmount: number; /** 结束订单金额(空值表示无上限) */ maxAmount: null | number; /** 排序号 */ sort: number; } /** 单项其他费用 */ export interface AdditionalFeeItemDto { /** 费用金额 */ amount: number; /** 是否启用 */ enabled: boolean; } /** 其他费用聚合 */ export interface StoreOtherFeesDto { cutlery: AdditionalFeeItemDto; rush: AdditionalFeeItemDto; } /** 门店费用设置聚合 */ export interface StoreFeesSettingsDto { /** 基础配送费 */ baseDeliveryFee: number; /** 平台服务费率(%) */ platformServiceRate: number; /** 固定包装费 */ fixedPackagingFee: number; /** 免配送费门槛,空值表示关闭 */ freeDeliveryThreshold: null | number; /** 起送金额 */ minimumOrderAmount: number; /** 其他费用 */ otherFees: StoreOtherFeesDto; /** 按订单包装费模式 */ orderPackagingFeeMode: OrderPackagingFeeMode; /** 包装费模式 */ packagingFeeMode: PackagingFeeMode; /** 包装费阶梯 */ packagingFeeTiers: PackagingFeeTierDto[]; /** 是否已配置 */ isConfigured: boolean; /** 门店 ID */ storeId: string; } /** 保存费用设置参数 */ export interface SaveStoreFeesSettingsParams { /** 基础配送费 */ baseDeliveryFee: number; /** 平台服务费率(%) */ platformServiceRate: number; /** 固定包装费 */ fixedPackagingFee: number; /** 免配送费门槛,空值表示关闭 */ freeDeliveryThreshold: null | number; /** 起送金额 */ minimumOrderAmount: number; /** 其他费用 */ otherFees: StoreOtherFeesDto; /** 按订单包装费模式 */ orderPackagingFeeMode: OrderPackagingFeeMode; /** 包装费模式 */ packagingFeeMode: PackagingFeeMode; /** 包装费阶梯 */ packagingFeeTiers: PackagingFeeTierDto[]; /** 门店 ID */ storeId: string; } /** 保存包装费收取方式参数 */ export interface SaveStoreFeesModeParams { /** 包装费模式 */ packagingFeeMode: PackagingFeeMode; /** 门店 ID */ storeId: string; } /** 复制费用设置参数 */ export interface CopyStoreFeesSettingsParams { sourceStoreId: string; targetStoreIds: string[]; } /** 获取门店费用设置 */ export async function getStoreFeesSettingsApi(storeId: string) { return requestClient.get('/store/fees', { params: { storeId }, }); } /** 保存门店费用设置 */ export async function saveStoreFeesSettingsApi( data: SaveStoreFeesSettingsParams, ) { return requestClient.post('/store/fees/save', data); } /** 保存包装费收取方式 */ export async function saveStoreFeesModeApi(data: SaveStoreFeesModeParams) { return requestClient.post('/store/fees/mode/save', data); } /** 复制费用设置到其他门店 */ export async function copyStoreFeesSettingsApi( data: CopyStoreFeesSettingsParams, ) { return requestClient.post('/store/fees/copy', data); }