Files
TakeoutSaaS.TenantUI/apps/web-antd/src/api/store-pickup/index.ts

140 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 文件职责:自提设置模块 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);
}