@pisell/pisellos
Version:
一个可扩展的前端模块化SDK框架,支持插件系统
68 lines (67 loc) • 2.84 kB
TypeScript
import dayjs from 'dayjs';
import type { OrderData } from '../../server/modules/order/types';
import type { BookingData } from '../../server/modules/order/types';
import type { ResourceData, ResourceId } from '../../server/modules/resource/types';
export declare enum SalesHooks {
onInited = "sales:onInited",
onDestroy = "sales:onDestroy",
onCurrentDayChanged = "sales:onCurrentDayChanged",
onReservationListChanged = "sales:onReservationListChanged"
}
/**
* 预订记录类型(暂用 OrderData 占位)
*
* TODO(Rolo): 等领导提供 reservationList 的目标结构后,
* 将 Server/Order 原始数据转换为真正的 Reservation DTO,
* 当前不要直接把 OrderData 当作最终 UI 数据结构。
*/
export type Reservation = OrderData;
export type SalesBookingStatus = 'reserved' | 'occupied' | 'locked' | undefined;
export type SalesReservedStatus = 'not_arrived' | 'late' | undefined;
export interface SalesResourceMatchedBooking extends Omit<BookingData, 'status'> {
status: SalesBookingStatus;
isTimeout: boolean;
timeoutTime?: number;
progressPercent?: number;
lateTime?: number;
remainingReserveTime?: number;
reserved_status: SalesReservedStatus;
}
export interface SalesResourceBookingItem extends Omit<ResourceData, 'bookings'> {
resource_id: ResourceId;
bookings: SalesResourceMatchedBooking[];
}
export type SalesTimelineHighlights = number[];
/**
* Sales 解决方案状态
*
* - currentDay: 当前选择的日期,默认当天 00:00:00
* - reservationList: currentDay 对应的预约列表(数据来源于 Server/Order,转换逻辑待补)
*/
export interface SalesState {
/** 当前选择的日期,默认当天 00:00:00 */
currentDay: dayjs.Dayjs;
/** 当前日期对应的预约列表 */
reservationList: Reservation[];
}
/**
* Sales 解决方案最小 API 面
*/
export interface SalesModuleAPI {
/** 获取当前 store 快照 */
getState: () => SalesState;
/** 获取当前选择日期 */
getCurrentDay: () => dayjs.Dayjs;
/** 设置当前选择日期,会自动归一到当天 00:00:00 */
setCurrentDay: (currentDay: dayjs.ConfigType) => dayjs.Dayjs;
/** 获取当前预约列表 */
getReservationList: () => Reservation[];
/** 覆盖设置当前预约列表 */
setReservationList: (reservationList: Reservation[]) => Reservation[];
/** 重置预约列表为空 */
resetReservationList: () => Reservation[];
/** 获取资源维度的预约占用列表 */
getResourceBookingList: (currentTime: string, bookingList: BookingData[]) => Promise<SalesResourceBookingItem[]>;
/** 获取时间轴每个时间片的预约数量 */
getTimelineHighlights: (bookingList: BookingData[], startDateTime?: string, endDateTime?: string) => SalesTimelineHighlights;
}