140 lines
3.5 KiB
TypeScript
140 lines
3.5 KiB
TypeScript
/**
|
||
* 文件职责:自提设置模块 API 与 DTO 定义。
|
||
* 1. 维护基本设置、大时段、精细规则与预览类型。
|
||
* 2. 提供查询、保存与复制自提设置接口。
|
||
*/
|
||
import { requestClient } from '#/api/request';
|
||
|
||
/** 自提模式 */
|
||
export type PickupMode = 'big' | 'fine';
|
||
|
||
/** 可选星期(0=周一,6=周日) */
|
||
export type PickupWeekDay = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
||
|
||
/** 自提基本设置 */
|
||
export interface PickupBasicSettingsDto {
|
||
/** 是否允许当天自提 */
|
||
allowSameDayPickup: boolean;
|
||
/** 可预约天数 */
|
||
bookingDays: number;
|
||
/** 单笔最大数量,null 代表不限制 */
|
||
maxItemsPerOrder: null | number;
|
||
}
|
||
|
||
/** 大时段模式单条配置 */
|
||
export interface PickupSlotDto {
|
||
capacity: number;
|
||
cutoffMinutes: number;
|
||
dayOfWeeks: PickupWeekDay[];
|
||
enabled: boolean;
|
||
endTime: string;
|
||
id: string;
|
||
name: string;
|
||
/** 当前已预约数量(用于展示进度) */
|
||
reservedCount: number;
|
||
startTime: string;
|
||
}
|
||
|
||
/** 精细时段规则 */
|
||
export interface PickupFineRuleDto {
|
||
/** 适用星期 */
|
||
dayOfWeeks: PickupWeekDay[];
|
||
/** 每日结束时间 HH:mm */
|
||
dayEndTime: string;
|
||
/** 每日开始时间 HH:mm */
|
||
dayStartTime: string;
|
||
/** 时间间隔(分钟) */
|
||
intervalMinutes: number;
|
||
/** 最少提前预约小时数 */
|
||
minAdvanceHours: number;
|
||
/** 每个窗口容量 */
|
||
slotCapacity: number;
|
||
}
|
||
|
||
/** 预览时段状态 */
|
||
export type PickupPreviewStatus = 'almost' | 'available' | 'expired' | 'full';
|
||
|
||
/** 预览时段 */
|
||
export interface PickupPreviewSlotDto {
|
||
remainingCount: number;
|
||
status: PickupPreviewStatus;
|
||
time: string;
|
||
}
|
||
|
||
/** 预览日 */
|
||
export interface PickupPreviewDayDto {
|
||
date: string;
|
||
label: string;
|
||
slots: PickupPreviewSlotDto[];
|
||
subLabel: string;
|
||
}
|
||
|
||
/** 门店自提设置聚合 */
|
||
export interface StorePickupSettingsDto {
|
||
basicSettings: null | PickupBasicSettingsDto;
|
||
bigSlots: PickupSlotDto[];
|
||
fineRule: null | PickupFineRuleDto;
|
||
isConfigured: boolean;
|
||
mode: null | PickupMode;
|
||
previewDays: PickupPreviewDayDto[];
|
||
storeId: string;
|
||
}
|
||
|
||
/** 保存基本设置参数 */
|
||
export interface SavePickupBasicSettingsParams {
|
||
basicSettings: PickupBasicSettingsDto;
|
||
mode?: PickupMode;
|
||
storeId: string;
|
||
}
|
||
|
||
/** 保存大时段参数 */
|
||
export interface SavePickupSlotsParams {
|
||
mode?: PickupMode;
|
||
slots: PickupSlotDto[];
|
||
storeId: string;
|
||
}
|
||
|
||
/** 保存精细规则参数 */
|
||
export interface SavePickupFineRuleParams {
|
||
fineRule: PickupFineRuleDto;
|
||
mode?: PickupMode;
|
||
storeId: string;
|
||
}
|
||
|
||
/** 复制自提设置参数 */
|
||
export interface CopyStorePickupSettingsParams {
|
||
sourceStoreId: string;
|
||
targetStoreIds: string[];
|
||
}
|
||
|
||
/** 获取门店自提设置 */
|
||
export async function getStorePickupSettingsApi(storeId: string) {
|
||
return requestClient.get<StorePickupSettingsDto>('/store/pickup', {
|
||
params: { storeId },
|
||
});
|
||
}
|
||
|
||
/** 保存基本设置 */
|
||
export async function savePickupBasicSettingsApi(
|
||
data: SavePickupBasicSettingsParams,
|
||
) {
|
||
return requestClient.post('/store/pickup/basic/save', data);
|
||
}
|
||
|
||
/** 保存大时段配置 */
|
||
export async function savePickupSlotsApi(data: SavePickupSlotsParams) {
|
||
return requestClient.post('/store/pickup/slots/save', data);
|
||
}
|
||
|
||
/** 保存精细规则 */
|
||
export async function savePickupFineRuleApi(data: SavePickupFineRuleParams) {
|
||
return requestClient.post('/store/pickup/fine-rule/save', data);
|
||
}
|
||
|
||
/** 复制到其他门店 */
|
||
export async function copyStorePickupSettingsApi(
|
||
data: CopyStorePickupSettingsParams,
|
||
) {
|
||
return requestClient.post('/store/pickup/copy', data);
|
||
}
|