feat: 新增费用设置页面并对齐原型交互

This commit is contained in:
2026-02-16 16:39:27 +08:00
parent c71c8f1b09
commit aebd0c285b
23 changed files with 2568 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
/**
* 文件职责:费用设置模块 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;
/** 固定包装费 */
fixedPackagingFee: number;
/** 免配送费门槛,空值表示关闭 */
freeDeliveryThreshold: null | number;
/** 起送金额 */
minimumOrderAmount: number;
/** 其他费用 */
otherFees: StoreOtherFeesDto;
/** 按订单包装费模式 */
orderPackagingFeeMode: OrderPackagingFeeMode;
/** 包装费模式 */
packagingFeeMode: PackagingFeeMode;
/** 包装费阶梯 */
packagingFeeTiers: PackagingFeeTierDto[];
/** 门店 ID */
storeId: string;
}
/** 保存费用设置参数 */
export type SaveStoreFeesSettingsParams = StoreFeesSettingsDto;
/** 复制费用设置参数 */
export interface CopyStoreFeesSettingsParams {
sourceStoreId: string;
targetStoreIds: string[];
}
/** 获取门店费用设置 */
export async function getStoreFeesSettingsApi(storeId: string) {
return requestClient.get<StoreFeesSettingsDto>('/store/fees', {
params: { storeId },
});
}
/** 保存门店费用设置 */
export async function saveStoreFeesSettingsApi(
data: SaveStoreFeesSettingsParams,
) {
return requestClient.post<StoreFeesSettingsDto>('/store/fees/save', data);
}
/** 复制费用设置到其他门店 */
export async function copyStoreFeesSettingsApi(
data: CopyStoreFeesSettingsParams,
) {
return requestClient.post('/store/fees/copy', data);
}