import { TicketBookingSecondaryDisplayConfig } from "../ticketBooking/components/ticketBooking/useTicketBookingSecondaryScreen.js"; import { ProductDisplayConfig, ProductDisplayPresetKey } from "../ticketBooking/components/ProductDisplayAdapter/types.js"; import { BaseResponsiveProps } from "../../responsive/type.js"; import { ILoadProductsParams, SalesSdkCartContextValue, SalesSdkContextValue, SalesSdkCustomerContextValue, SalesSdkProductsContextValue, SalesSdkProviderProps, SalesSdkSummaryContextValue } from "../../plus/salesSdk/types.js"; import { SalesSdkBookingContextValue } from "../../plus/salesSdk/context/SalesSdkBookingContext.js"; import { SaleDetailModuleConfig, SaleDetailOrderCompletePayload, SaleDetailTemplate, SaleOrderExternalPaymentResult } from "../../plus/saleDetail/types.js"; import { BigSaleSelectionFlowScene } from "./selectionFlowConfig.js"; import React from "react"; //#region src/components/bigSale/types.d.ts type BigSaleMode = 'ticket' | 'retail'; type BigSaleTemplate = 'standard' | 'secondaryScreen' | 'kiosk' | 'HDLKiosk'; type BigSaleExternalAction = 'cash-payment' | 'payment-method'; type BigSaleExternalActionRequestBase = { id: string; }; type BigSaleExternalActionRequest = BigSaleExternalActionRequestBase & ({ action: 'cash-payment'; } | { action: 'payment-method'; paymentCode: string; }); type BigSaleExternalPaymentResult = SaleOrderExternalPaymentResult; interface BigSaleContext { sales: SalesSdkContextValue; products: SalesSdkProductsContextValue; customer: SalesSdkCustomerContextValue; cart: SalesSdkCartContextValue; summary: SalesSdkSummaryContextValue; booking: SalesSdkBookingContextValue; } interface BigSaleBaseProps extends BaseResponsiveProps { /** 页面/Tab 是否激活;失活时商品列表会关闭 Tabbar 搜索态。 */ isActive?: boolean; /** Big Sale 实例标识;用于区分当前页面本地商品列表设置。 */ osKey?: SalesSdkProviderProps['osKey']; /** 右侧 SaleDetail 信息区顶部栏(如 BigSaleDialog 订单号 + 关闭)。 */ saleDetailHeaderSlot?: React.ReactNode; /** 标准模板右侧 ActionBar 顶部关闭事件(订单编辑弹窗使用)。 */ rightActionBarClose?: () => void; /** 全屏 loading 遮罩(如 BigSaleDialog 新建 seed 未就绪时)。 */ overlaySlot?: React.ReactNode; mode?: BigSaleMode; tmpl?: BigSaleTemplate; template?: BigSaleTemplate; productLoadParams?: ILoadProductsParams; /** 预约/餐饮业务码,用于 BigSale 内部选择桌台时复用平面图配置。 */ businessCode?: string; /** BookingContext 初始化参数,用于选择桌台后刷新资源上下文。 */ bookingConfigParams?: SalesSdkProviderProps['bookingConfigParams']; /** 隐藏 BigSale 内置的选择桌台/资源按钮(如 Dialog 宿主已有外层上下文)。 */ hideSelectFloorMapResourceAction?: boolean; productDisplayConfig?: ProductDisplayPresetKey | ProductDisplayConfig; /** 弹窗 openNonce + 模式,用于强制刷新商品 catalog。 */ productCatalogSessionKey?: string; /** 当前业务的商品目录配置是否已就绪;false 时只渲染 UI,不发商品请求。 */ productCatalogReady?: boolean; saleDetailTemplate?: SaleDetailTemplate; saleDetailModuleConfig?: SaleDetailModuleConfig; autoCreate?: boolean; orderId?: SalesSdkProviderProps['orderId']; locale?: string; /** 副屏场景下包裹 saleDetail 区域的额外属性(缩放、连点手势等) */ saleDetailWrapperProps?: React.HTMLAttributes & { id?: string; }; /** 副屏购物车每行展示几个商品;未传或 <=1 时保持单列 */ cartProductsPerRow?: number; /** 是否在 SaleDetail 中渲染客户信息(默认 true) */ showClient?: boolean; /** 保存 / 结账成功后回调(BigSaleDialog 用于关闭弹窗)。 */ onOrderComplete?: (payload: SaleDetailOrderCompletePayload) => void; /** 宿主传入的一次性受控快捷支付动作。 */ externalActionRequest?: BigSaleExternalActionRequest; /** BigSale 接受一次性动作后通知宿主清理请求。 */ onExternalActionAccepted?: (requestId: string) => void; /** 外部动作触发的支付成功、失败或取消后通知宿主。 */ onExternalPaymentSettled?: (result: BigSaleExternalPaymentResult) => void; } interface BigSaleProps extends Omit, Pick { osKey?: SalesSdkProviderProps['osKey']; /** * 已由宿主注册的 UnifiedBookingSales 原始模块名。 * 传入后 BigSale 只复用该实例;未传时 BigSale 会创建并注册自己的 * UnifiedBookingSales 实例。BigSale 不再默认创建 BookingTicket。 */ osModuleName?: string; /** * 使用 BigSale 内置的商品选择 Flow 场景。 * product-selection 会按商品能力解析普通规格、称重、单日预约与跨日预约步骤。 */ selectionFlowScene?: BigSaleSelectionFlowScene; secondaryScreenDisplay?: TicketBookingSecondaryDisplayConfig; /** SalesSdk 挂载后的 bootstrap 逻辑(如 BigSaleDialog 的 create/load seed)。 */ bootstrapSlot?: React.ReactNode; saleDetailHeaderSlot?: React.ReactNode; rightActionBarClose?: () => void; overlaySlot?: React.ReactNode; onOrderComplete?: (payload: SaleDetailOrderCompletePayload) => void; } //#endregion export { BigSaleBaseProps, BigSaleContext, BigSaleExternalAction, BigSaleExternalActionRequest, BigSaleExternalPaymentResult, BigSaleMode, BigSaleProps, BigSaleTemplate };