UNPKG

@pisell/pisellos

Version:

一个可扩展的前端模块化SDK框架,支持插件系统

68 lines (67 loc) 2.84 kB
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; }