@pisell/pisellos 2.2.244 → 2.2.245
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
- package/dist/model/strategy/adapter/promotion/index.js +0 -9
- package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
- package/dist/modules/BookingContext/index.d.ts +48 -0
- package/dist/modules/BookingContext/index.js +566 -0
- package/dist/modules/BookingContext/types.d.ts +102 -0
- package/dist/modules/BookingContext/types.js +51 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +284 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +145 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +218 -0
- package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/dist/modules/BookingContext/utils/flexible.js +56 -0
- package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
- package/dist/modules/BookingContext/utils/index.d.ts +11 -0
- package/dist/modules/BookingContext/utils/index.js +11 -0
- package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/dist/modules/BookingContext/utils/noResource.js +77 -0
- package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
- package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
- package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/dist/modules/BookingContext/utils/productExtend.js +339 -0
- package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
- package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
- package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
- package/dist/modules/BookingContext/utils/resources.js +486 -0
- package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
- package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
- package/dist/modules/Cart/utils/cartProduct.js +24 -3
- package/dist/modules/Cart/utils/changePrice.js +11 -11
- package/dist/modules/Customer/index.d.ts +20 -0
- package/dist/modules/Customer/index.js +172 -83
- package/dist/modules/Customer/types.d.ts +2 -0
- package/dist/modules/Discount/index.d.ts +1 -1
- package/dist/modules/Discount/index.js +13 -6
- package/dist/modules/Discount/types.d.ts +1 -0
- package/dist/modules/OpenData/index.d.ts +8 -0
- package/dist/modules/OpenData/index.js +37 -17
- package/dist/modules/Order/index.d.ts +275 -19
- package/dist/modules/Order/index.js +3493 -809
- package/dist/modules/Order/types.d.ts +286 -31
- package/dist/modules/Order/types.js +38 -0
- package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
- package/dist/modules/Order/utils.d.ts +147 -5
- package/dist/modules/Order/utils.js +750 -104
- package/dist/modules/Payment/index.d.ts +10 -13
- package/dist/modules/Payment/index.js +467 -837
- package/dist/modules/Payment/types.d.ts +2 -0
- package/dist/modules/Payment/utils.js +2 -1
- package/dist/modules/Payment/walletpass.js +41 -25
- package/dist/modules/ProductList/index.d.ts +16 -12
- package/dist/modules/ProductList/index.js +133 -59
- package/dist/modules/ProductList/types.d.ts +14 -0
- package/dist/modules/Quotation/index.d.ts +0 -1
- package/dist/modules/Quotation/index.js +25 -22
- package/dist/modules/Rules/index.d.ts +4 -0
- package/dist/modules/Rules/index.js +97 -70
- package/dist/modules/Rules/types.d.ts +1 -0
- package/dist/modules/SalesSummary/index.d.ts +8 -25
- package/dist/modules/SalesSummary/index.js +86 -35
- package/dist/modules/SalesSummary/types.d.ts +4 -1
- package/dist/modules/SalesSummary/utils.d.ts +2 -25
- package/dist/modules/SalesSummary/utils.js +794 -162
- package/dist/modules/Schedule/index.d.ts +7 -0
- package/dist/modules/Schedule/index.js +24 -2
- package/dist/modules/Summary/index.js +4 -3
- package/dist/modules/SurchargeList/index.d.ts +16 -0
- package/dist/modules/SurchargeList/index.js +162 -0
- package/dist/modules/SurchargeList/types.d.ts +11 -0
- package/dist/modules/SurchargeList/types.js +1 -0
- package/dist/modules/index.d.ts +2 -0
- package/dist/modules/index.js +3 -1
- package/dist/plugins/request.d.ts +1 -0
- package/dist/server/index.d.ts +204 -1
- package/dist/server/index.js +3654 -922
- package/dist/server/modules/index.d.ts +2 -0
- package/dist/server/modules/index.js +2 -0
- package/dist/server/modules/order/index.d.ts +120 -3
- package/dist/server/modules/order/index.js +1758 -448
- package/dist/server/modules/order/types.d.ts +32 -3
- package/dist/server/modules/order/types.js +8 -0
- package/dist/server/modules/order/utils/filterBookings.js +26 -3
- package/dist/server/modules/order/utils/filterOrders.js +23 -8
- package/dist/server/modules/payment/index.d.ts +28 -0
- package/dist/server/modules/payment/index.js +305 -0
- package/dist/server/modules/payment/types.d.ts +9 -0
- package/dist/server/modules/payment/types.js +1 -0
- package/dist/server/modules/products/index.d.ts +34 -7
- package/dist/server/modules/products/index.js +631 -317
- package/dist/server/modules/resource/index.d.ts +2 -0
- package/dist/server/modules/resource/index.js +29 -3
- package/dist/server/modules/schedule/index.d.ts +4 -4
- package/dist/server/modules/schedule/index.js +111 -88
- package/dist/server/test.json +713 -0
- package/dist/server/utils/small-ticket.d.ts +71 -0
- package/dist/server/utils/small-ticket.js +840 -0
- package/dist/solution/BaseSales/index.d.ts +133 -10
- package/dist/solution/BaseSales/index.js +1950 -447
- package/dist/solution/BaseSales/types.d.ts +82 -6
- package/dist/solution/BaseSales/types.js +5 -4
- package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
- package/dist/solution/BaseSales/utils/cartPromotion.js +1438 -0
- package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/dist/solution/BaseSales/utils/quotationPrice.js +237 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +105 -24
- package/dist/solution/BaseSales/utils.d.ts +1 -1
- package/dist/solution/BaseSales/utils.js +62 -21
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +271 -11
- package/dist/solution/BookingTicket/index.js +1777 -242
- package/dist/solution/BookingTicket/types.d.ts +118 -1
- package/dist/solution/BookingTicket/types.js +41 -2
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
- package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
- package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
- package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +40 -0
- package/dist/solution/BookingTicket/utils/bookingStatus.js +70 -0
- package/dist/solution/BookingTicket/utils/cartView.d.ts +9 -1
- package/dist/solution/BookingTicket/utils/cartView.js +94 -7
- package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
- package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
- package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
- package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
- package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
- package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
- package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
- package/dist/solution/BookingTicket/utils/scan/index.js +20 -8
- package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
- package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
- package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
- package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
- package/dist/solution/Checkout/index.d.ts +1 -0
- package/dist/solution/Checkout/index.js +10 -9
- package/dist/solution/RegisterAndLogin/config.js +2 -10
- package/dist/solution/ScanOrder/index.d.ts +9 -3
- package/dist/solution/ScanOrder/index.js +241 -134
- package/dist/solution/ScanOrder/types.d.ts +9 -5
- package/dist/solution/ScanOrder/types.js +2 -3
- package/dist/solution/ScanOrder/utils.d.ts +1 -1
- package/dist/solution/ScanOrder/utils.js +84 -22
- package/dist/solution/VenueBooking/index.d.ts +5 -2
- package/dist/solution/VenueBooking/index.js +110 -59
- package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/dist/types/index.d.ts +10 -0
- package/lib/model/strategy/adapter/promotion/evaluator.js +2 -1
- package/lib/model/strategy/adapter/promotion/index.js +49 -0
- package/lib/model/strategy/adapter/walletPass/utils.js +3 -2
- package/lib/modules/BookingContext/index.d.ts +48 -0
- package/lib/modules/BookingContext/index.js +368 -0
- package/lib/modules/BookingContext/types.d.ts +102 -0
- package/lib/modules/BookingContext/types.js +34 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +276 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +151 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +201 -0
- package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/lib/modules/BookingContext/utils/flexible.js +80 -0
- package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
- package/lib/modules/BookingContext/utils/index.d.ts +11 -0
- package/lib/modules/BookingContext/utils/index.js +43 -0
- package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/lib/modules/BookingContext/utils/noResource.js +90 -0
- package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +56 -0
- package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/lib/modules/BookingContext/utils/productExtend.js +283 -0
- package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
- package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
- package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
- package/lib/modules/BookingContext/utils/resources.js +377 -0
- package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
- package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
- package/lib/modules/Cart/utils/cartProduct.js +20 -3
- package/lib/modules/Cart/utils/changePrice.js +12 -20
- package/lib/modules/Customer/index.d.ts +20 -0
- package/lib/modules/Customer/index.js +64 -11
- package/lib/modules/Customer/types.d.ts +2 -0
- package/lib/modules/Discount/index.d.ts +1 -1
- package/lib/modules/Discount/index.js +9 -1
- package/lib/modules/Discount/types.d.ts +1 -0
- package/lib/modules/OpenData/index.d.ts +8 -0
- package/lib/modules/OpenData/index.js +19 -5
- package/lib/modules/Order/index.d.ts +275 -19
- package/lib/modules/Order/index.js +2245 -336
- package/lib/modules/Order/types.d.ts +286 -31
- package/lib/modules/Order/types.js +1 -0
- package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/lib/modules/Order/utils/manualProductDiscount.js +206 -0
- package/lib/modules/Order/utils.d.ts +147 -5
- package/lib/modules/Order/utils.js +615 -46
- package/lib/modules/Payment/index.d.ts +10 -13
- package/lib/modules/Payment/index.js +18 -150
- package/lib/modules/Payment/types.d.ts +2 -0
- package/lib/modules/Payment/utils.js +2 -1
- package/lib/modules/Payment/walletpass.js +16 -3
- package/lib/modules/ProductList/index.d.ts +16 -12
- package/lib/modules/ProductList/index.js +41 -4
- package/lib/modules/ProductList/types.d.ts +14 -0
- package/lib/modules/Quotation/index.d.ts +0 -1
- package/lib/modules/Quotation/index.js +19 -16
- package/lib/modules/Rules/index.d.ts +4 -0
- package/lib/modules/Rules/index.js +137 -120
- package/lib/modules/Rules/types.d.ts +1 -0
- package/lib/modules/SalesSummary/index.d.ts +8 -25
- package/lib/modules/SalesSummary/index.js +30 -4
- package/lib/modules/SalesSummary/types.d.ts +4 -1
- package/lib/modules/SalesSummary/utils.d.ts +2 -25
- package/lib/modules/SalesSummary/utils.js +645 -91
- package/lib/modules/Schedule/index.d.ts +7 -0
- package/lib/modules/Schedule/index.js +17 -1
- package/lib/modules/Summary/index.js +5 -4
- package/lib/modules/SurchargeList/index.d.ts +16 -0
- package/lib/modules/SurchargeList/index.js +89 -0
- package/lib/modules/SurchargeList/types.d.ts +11 -0
- package/lib/modules/SurchargeList/types.js +17 -0
- package/lib/modules/index.d.ts +2 -0
- package/lib/modules/index.js +5 -1
- package/lib/plugins/request.d.ts +1 -0
- package/lib/server/index.d.ts +204 -1
- package/lib/server/index.js +1891 -59
- package/lib/server/modules/index.d.ts +2 -0
- package/lib/server/modules/index.js +3 -0
- package/lib/server/modules/order/index.d.ts +120 -3
- package/lib/server/modules/order/index.js +883 -94
- package/lib/server/modules/order/types.d.ts +32 -3
- package/lib/server/modules/order/utils/filterBookings.js +24 -5
- package/lib/server/modules/order/utils/filterOrders.js +15 -6
- package/lib/server/modules/payment/index.d.ts +28 -0
- package/lib/server/modules/payment/index.js +192 -0
- package/lib/server/modules/payment/types.d.ts +9 -0
- package/lib/server/modules/payment/types.js +17 -0
- package/lib/server/modules/products/index.d.ts +34 -7
- package/lib/server/modules/products/index.js +189 -54
- package/lib/server/modules/resource/index.d.ts +2 -0
- package/lib/server/modules/resource/index.js +27 -3
- package/lib/server/modules/schedule/index.d.ts +4 -4
- package/lib/server/modules/schedule/index.js +47 -40
- package/lib/server/test.json +713 -0
- package/lib/server/utils/small-ticket.d.ts +71 -0
- package/lib/server/utils/small-ticket.js +800 -0
- package/lib/solution/BaseSales/index.d.ts +133 -10
- package/lib/solution/BaseSales/index.js +1111 -63
- package/lib/solution/BaseSales/types.d.ts +82 -6
- package/lib/solution/BaseSales/types.js +3 -1
- package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
- package/lib/solution/BaseSales/utils/cartPromotion.js +992 -0
- package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/lib/solution/BaseSales/utils/quotationPrice.js +277 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +106 -18
- package/lib/solution/BaseSales/utils.d.ts +1 -1
- package/lib/solution/BaseSales/utils.js +54 -10
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +271 -11
- package/lib/solution/BookingTicket/index.js +922 -29
- package/lib/solution/BookingTicket/types.d.ts +118 -1
- package/lib/solution/BookingTicket/types.js +11 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
- package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +125 -0
- package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +40 -0
- package/lib/solution/BookingTicket/utils/bookingStatus.js +44 -2
- package/lib/solution/BookingTicket/utils/cartView.d.ts +9 -1
- package/lib/solution/BookingTicket/utils/cartView.js +61 -6
- package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
- package/lib/solution/BookingTicket/utils/exampleData.js +0 -0
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +254 -0
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +169 -0
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +51 -0
- package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
- package/lib/solution/BookingTicket/utils/scan/index.js +17 -3
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +127 -0
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +85 -0
- package/lib/solution/Checkout/index.d.ts +1 -0
- package/lib/solution/Checkout/index.js +1 -2
- package/lib/solution/RegisterAndLogin/config.js +2 -10
- package/lib/solution/ScanOrder/index.d.ts +9 -3
- package/lib/solution/ScanOrder/index.js +153 -70
- package/lib/solution/ScanOrder/types.d.ts +9 -5
- package/lib/solution/ScanOrder/utils.d.ts +1 -1
- package/lib/solution/ScanOrder/utils.js +83 -17
- package/lib/solution/VenueBooking/index.d.ts +5 -2
- package/lib/solution/VenueBooking/index.js +54 -17
- package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/lib/types/index.d.ts +10 -0
- package/package.json +1 -1
- package/dist/solution/Checkout/appointmentDemo.json +0 -1
- package/lib/solution/Checkout/appointmentDemo.json +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ProductList, OrderModule } from '../../modules';
|
|
1
|
+
import { ProductList, OrderModule, OpenDataModule } from '../../modules';
|
|
2
|
+
import { BookingContextModule } from '../../modules/BookingContext';
|
|
2
3
|
import { CustomerModule } from '../../modules/Customer';
|
|
3
4
|
import { SalesSummaryModule } from '../../modules/SalesSummary';
|
|
4
5
|
import { ScheduleModule } from '../../modules/Schedule';
|
|
@@ -16,6 +17,8 @@ export interface BookingTicketState extends BaseSalesState {
|
|
|
16
17
|
salesSummary: SalesSummaryModule;
|
|
17
18
|
schedule: ScheduleModule;
|
|
18
19
|
customer: CustomerModule;
|
|
20
|
+
bookingContext: BookingContextModule;
|
|
21
|
+
openData: OpenDataModule;
|
|
19
22
|
}
|
|
20
23
|
export declare function createBookingTicketModule<T extends keyof BookingTicketState>(moduleName: T, solutionName: string, name?: string, version?: string): BookingTicketState[T] | null;
|
|
21
24
|
export declare enum BookingTicketHooks {
|
|
@@ -76,6 +79,10 @@ export interface ILoadProductsParams {
|
|
|
76
79
|
with_count?: string[];
|
|
77
80
|
/** 是否返回日程信息 */
|
|
78
81
|
with_schedule?: number;
|
|
82
|
+
/** 扩展商品类型过滤 */
|
|
83
|
+
extension_type?: string[];
|
|
84
|
+
/** 商品发布状态 */
|
|
85
|
+
status?: string;
|
|
79
86
|
}
|
|
80
87
|
/**
|
|
81
88
|
* 加载商品详情的参数
|
|
@@ -105,6 +112,8 @@ export type BookingTicketCartItemView = BaseSalesOrderProduct;
|
|
|
105
112
|
export interface BookingTicketCartBookingView extends ISalesBooking {
|
|
106
113
|
_extend: {
|
|
107
114
|
product: BookingTicketCartItemView | null;
|
|
115
|
+
addTimeProduct: BookingTicketCartItemView[];
|
|
116
|
+
canAddTime: boolean;
|
|
108
117
|
};
|
|
109
118
|
}
|
|
110
119
|
/**
|
|
@@ -132,3 +141,111 @@ export interface BookingTicketCustomerView {
|
|
|
132
141
|
export interface BookingTicketProductCatalogView {
|
|
133
142
|
products: ProductData[];
|
|
134
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* 添加加时商品到已有 booking 的输入。
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* await bookingTicket.addAddTimeProductToBooking({
|
|
149
|
+
* booking,
|
|
150
|
+
* product,
|
|
151
|
+
* num: 1,
|
|
152
|
+
* price: '10.00',
|
|
153
|
+
* product_add_schedule_time: 30,
|
|
154
|
+
* });
|
|
155
|
+
*/
|
|
156
|
+
export interface AddAddTimeProductToBookingInput {
|
|
157
|
+
/** 当前购物车中已存在的 booking,必须带 metadata.unique_identification_number。 */
|
|
158
|
+
booking: Record<string, any>;
|
|
159
|
+
/** 加时商品原始数据,保留完整商品信息供 OrderModule 缓存原始快照。 */
|
|
160
|
+
product: ProductData & Record<string, any>;
|
|
161
|
+
/** 本次添加数量,缺省为 1。 */
|
|
162
|
+
num?: number;
|
|
163
|
+
/** 本次加时商品价格,缺省回退 product.price。 */
|
|
164
|
+
price?: number | string;
|
|
165
|
+
/** 加时时长,单位分钟;最终写入 product.metadata.product_add_schedule_time。 */
|
|
166
|
+
product_add_schedule_time?: number;
|
|
167
|
+
/** 本次加时方案实际覆盖分钟数,用于同步更新 booking 结束时间与 duration。 */
|
|
168
|
+
coveredMinutes?: number;
|
|
169
|
+
/** 直接写入 booking 的时间补丁,restart 场景使用。 */
|
|
170
|
+
bookingPatch?: {
|
|
171
|
+
start_date?: string;
|
|
172
|
+
start_time?: string;
|
|
173
|
+
end_date?: string;
|
|
174
|
+
end_time?: string;
|
|
175
|
+
duration?: number;
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* 批量添加加时商品到已有 booking 的单行输入。
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* const line: AddAddTimeProductLineInput = { product, product_add_schedule_time: 30 };
|
|
183
|
+
*/
|
|
184
|
+
export type AddAddTimeProductLineInput = Omit<AddAddTimeProductToBookingInput, 'booking' | 'coveredMinutes'>;
|
|
185
|
+
/**
|
|
186
|
+
* 批量添加加时商品到已有 booking 的输入。
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* await bookingTicket.addAddTimeProductsToBooking({
|
|
190
|
+
* booking,
|
|
191
|
+
* products: [{ product, product_add_schedule_time: 30 }],
|
|
192
|
+
* });
|
|
193
|
+
*/
|
|
194
|
+
export interface AddAddTimeProductsToBookingInput {
|
|
195
|
+
/** 当前购物车中已存在的 booking,必须带 metadata.unique_identification_number。 */
|
|
196
|
+
booking: Record<string, any>;
|
|
197
|
+
/** 需要一次性写入购物车的加时商品行。 */
|
|
198
|
+
products: AddAddTimeProductLineInput[];
|
|
199
|
+
/** 本次加时方案实际覆盖分钟数,用于同步更新 booking 结束时间与 duration。 */
|
|
200
|
+
coveredMinutes?: number;
|
|
201
|
+
/** 直接写入 booking 的时间补丁,restart 场景使用。 */
|
|
202
|
+
bookingPatch?: AddAddTimeProductToBookingInput['bookingPatch'];
|
|
203
|
+
}
|
|
204
|
+
/** 扫码宿主桥接:SalesSdk 在 pubsub 订阅回调里注入,OS 需要 UI 时直接调用 */
|
|
205
|
+
export interface GlobalScanHostBridge {
|
|
206
|
+
openProductDetail?: (payload: Record<string, any>) => Promise<any | null>;
|
|
207
|
+
openBookingEdit?: (payload: Record<string, any>) => Promise<any | null>;
|
|
208
|
+
confirmDetail?: (input: {
|
|
209
|
+
item: any;
|
|
210
|
+
detailResult: {
|
|
211
|
+
e: any;
|
|
212
|
+
extension_type?: any;
|
|
213
|
+
detail?: any;
|
|
214
|
+
};
|
|
215
|
+
options?: Record<string, any>;
|
|
216
|
+
}) => Promise<any>;
|
|
217
|
+
confirmBookingEdit?: (input: {
|
|
218
|
+
cacheItem: any;
|
|
219
|
+
options?: Record<string, any>;
|
|
220
|
+
}) => Promise<any>;
|
|
221
|
+
openOrder?: (data: {
|
|
222
|
+
order_id: number;
|
|
223
|
+
business_code?: string;
|
|
224
|
+
}) => void;
|
|
225
|
+
/**
|
|
226
|
+
* walk-in 扫 walletPass:直接核销优惠码(对齐 SaleDetail Voucher.handleApplyCode / cart.scanCode)。
|
|
227
|
+
*/
|
|
228
|
+
applyPromotionCode?: (code: string, customerId?: number) => Promise<{
|
|
229
|
+
isAvailable?: boolean;
|
|
230
|
+
type?: string;
|
|
231
|
+
unavailableReason?: string;
|
|
232
|
+
}>;
|
|
233
|
+
onNotify?: (type: 'success' | 'fail' | 'info', messageKey?: string) => void;
|
|
234
|
+
refresh?: () => void;
|
|
235
|
+
}
|
|
236
|
+
/** handleGlobalScanCode 结构化返回 */
|
|
237
|
+
export type GlobalScanHandleResult = {
|
|
238
|
+
status: 'success';
|
|
239
|
+
kind: 'customer' | 'products' | 'promotion';
|
|
240
|
+
meta?: {
|
|
241
|
+
count?: number;
|
|
242
|
+
};
|
|
243
|
+
} | {
|
|
244
|
+
status: 'pending';
|
|
245
|
+
kind: 'openOrder' | 'requiresDetail' | 'requiresBookingEdit';
|
|
246
|
+
} | {
|
|
247
|
+
status: 'cancelled';
|
|
248
|
+
} | {
|
|
249
|
+
status: 'failed';
|
|
250
|
+
reason: 'empty_code' | 'not_found' | 'invalid_data' | 'no_bridge';
|
|
251
|
+
};
|
|
@@ -24,6 +24,7 @@ __export(types_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(types_exports);
|
|
26
26
|
var import_modules = require("../../modules");
|
|
27
|
+
var import_BookingContext = require("../../modules/BookingContext");
|
|
27
28
|
var import_Customer = require("../../modules/Customer");
|
|
28
29
|
var import_SalesSummary = require("../../modules/SalesSummary");
|
|
29
30
|
var import_Schedule = require("../../modules/Schedule");
|
|
@@ -54,6 +55,16 @@ function createBookingTicketModule(moduleName, solutionName, name, version) {
|
|
|
54
55
|
`${solutionName}_${name || moduleName}`,
|
|
55
56
|
version
|
|
56
57
|
);
|
|
58
|
+
case "bookingContext":
|
|
59
|
+
return new import_BookingContext.BookingContextModule(
|
|
60
|
+
`${solutionName}_${name || moduleName}`,
|
|
61
|
+
version
|
|
62
|
+
);
|
|
63
|
+
case "openData":
|
|
64
|
+
return new import_modules.OpenDataModule(
|
|
65
|
+
`${solutionName}_${name || moduleName}`,
|
|
66
|
+
version
|
|
67
|
+
);
|
|
57
68
|
default:
|
|
58
69
|
return null;
|
|
59
70
|
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { BookingCalcContext } from '../../../modules/BookingContext';
|
|
2
|
+
import type { ProductData } from '../../../modules/Product/types';
|
|
3
|
+
import type { OrderProduct, OrderProductIdentity, AddProductBookingInput } from '../../../modules/Order/types';
|
|
4
|
+
/**
|
|
5
|
+
* cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
|
|
6
|
+
*
|
|
7
|
+
* 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
|
|
8
|
+
* 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(门禁:`getIsAutoClose` on prepared cacheItem)
|
|
9
|
+
* 3. `add`:两关均通过,直接 transform + 加车
|
|
10
|
+
*/
|
|
11
|
+
export type AddProductDecision = {
|
|
12
|
+
action: 'add';
|
|
13
|
+
cacheItem: any;
|
|
14
|
+
} | {
|
|
15
|
+
action: 'requiresDetail';
|
|
16
|
+
payload: AddProductRequiresDetailPayload;
|
|
17
|
+
} | {
|
|
18
|
+
action: 'requiresBookingEdit';
|
|
19
|
+
cacheItem: any;
|
|
20
|
+
payload: AddProductRequiresBookingEditPayload;
|
|
21
|
+
}
|
|
22
|
+
/** session 商品 catalog 日期与 TimeBar 不一致,需 reload products 后由用户重试加购。 */
|
|
23
|
+
| {
|
|
24
|
+
action: 'reloadCatalog';
|
|
25
|
+
};
|
|
26
|
+
/** 资源 / 时间编辑抽屉所需的最小 payload。 */
|
|
27
|
+
export interface AddProductRequiresBookingEditPayload {
|
|
28
|
+
cacheItem: any;
|
|
29
|
+
customerId?: number | string;
|
|
30
|
+
date: string | null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 加车主决策:对齐 `handleSelectProduct` 两段分支。
|
|
34
|
+
*/
|
|
35
|
+
export declare function decideAddProduct(item: any, ctx?: AddProductDecideContext): AddProductDecision;
|
|
36
|
+
/**
|
|
37
|
+
* 规格弹窗 callback 后的第二段决策(对齐 `handleBooking4Service` 内 `cacheItem.autoClose` 分支)。
|
|
38
|
+
*/
|
|
39
|
+
export declare function decideAfterDetail(cacheItem: any, ctx?: AddProductDecideContext): AddProductDecision;
|
|
40
|
+
/**
|
|
41
|
+
* @deprecated 请用 `decideAddProduct`;保留兼容:autoClose=true 仅表示可直接加车(action=add)。
|
|
42
|
+
*/
|
|
43
|
+
export interface AddProductRequiresDetailPayload {
|
|
44
|
+
item: ProductData | Record<string, any>;
|
|
45
|
+
/** UI 需展示的子弹窗开关。 */
|
|
46
|
+
showConfig: {
|
|
47
|
+
option: boolean;
|
|
48
|
+
session: boolean;
|
|
49
|
+
variant: boolean;
|
|
50
|
+
package: boolean;
|
|
51
|
+
number: boolean;
|
|
52
|
+
};
|
|
53
|
+
/** 仅 session 商品(且无 variant/option/package)→ true,UI 可只渲染 session 选择。 */
|
|
54
|
+
isOnlySession: boolean;
|
|
55
|
+
/** 0/1,与 info2 `getIsEject` 等价含义。 */
|
|
56
|
+
isEject: 0 | 1;
|
|
57
|
+
/** 当前选中客户 id(透传给 detail 弹窗用)。 */
|
|
58
|
+
customerId?: number | string;
|
|
59
|
+
/** 当前选择的日期。 */
|
|
60
|
+
date: string | null;
|
|
61
|
+
/** 透传完整商品数据,UI 渲染时直接用。 */
|
|
62
|
+
productData: ProductData | Record<string, any>;
|
|
63
|
+
}
|
|
64
|
+
export interface AddProductDecideContext extends BookingCalcContext {
|
|
65
|
+
type?: 'select' | 'detail';
|
|
66
|
+
quantity?: number;
|
|
67
|
+
customerId?: number | string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 统一补齐预约商品的运行态字段。
|
|
71
|
+
*
|
|
72
|
+
* 新链路不再让决策和提交各自重建 cacheItem;这里作为唯一入口补齐
|
|
73
|
+
* `_extend.resource / capacity / startDate / endDate` 等后续 booking mapper 需要的字段。
|
|
74
|
+
*/
|
|
75
|
+
export declare function prepareBookingCacheItem(cacheItem: any, ctx?: AddProductDecideContext): any;
|
|
76
|
+
export declare function decideAutoClose(item: any, ctx?: AddProductDecideContext): {
|
|
77
|
+
autoClose: boolean;
|
|
78
|
+
cacheItem?: any;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* 替代 info2 `getIsEject`:商品是否需要弹窗(含 type='detail' / option_group / bundle_group / variant / session / sold_by_weight)。
|
|
82
|
+
*/
|
|
83
|
+
export declare function getIsEject(item: any, type?: 'select' | 'detail'): 0 | 1;
|
|
84
|
+
/** 仅 session 商品(且没有 variant/option/package)。 */
|
|
85
|
+
export declare function getIsOnlySession(item: any): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* 拼装 requiresDetail payload;showConfig 与 info2 弹窗内部判断一致。
|
|
88
|
+
*/
|
|
89
|
+
export declare function buildRequiresDetailPayload(item: any, ctx?: AddProductDecideContext): AddProductRequiresDetailPayload;
|
|
90
|
+
/**
|
|
91
|
+
* 用 item.cartDetailValue 拼装一个 cacheItem 雏形(与 info2 `handleDirectAddService` 等价路径)。
|
|
92
|
+
* 这里只补 `_extend.start_date / quantity / other` 等运行态字段;后续走 getProductExtend 才会补齐资源 / 时间。
|
|
93
|
+
*/
|
|
94
|
+
export declare function buildCacheItemFromCartDetail(item: any, ctx?: AddProductDecideContext): any;
|
|
95
|
+
/**
|
|
96
|
+
* 用 Info2 callback 的 (e, extension_type, detail) 拼装 cacheItem。
|
|
97
|
+
*
|
|
98
|
+
* 保留 detail._extend 中的 pricing / note(规格弹窗改价、备注等),
|
|
99
|
+
* 再叠加 session 时间、ctx.quantity 等运行态字段;other 以 callback `e` 为准。
|
|
100
|
+
*/
|
|
101
|
+
export declare function buildCacheItemFromDetail(item: any, detailResult: {
|
|
102
|
+
e: any;
|
|
103
|
+
extension_type?: any;
|
|
104
|
+
detail?: any;
|
|
105
|
+
}, ctx?: AddProductDecideContext): any;
|
|
106
|
+
/**
|
|
107
|
+
* `transformDetailToProductAndBooking`:把 cacheItem 拆成 OS `addProductToOrder` 所需的 `(product, booking)`。
|
|
108
|
+
*
|
|
109
|
+
* - `product` 走 `transformBaseProductToOrderProduct`(沿用 BaseSales 现有 mapper)。
|
|
110
|
+
* - `booking` 走 `cacheItemToBookingInput`(严格按 TEMP_ORDER_FIELDS_SUMMARY.md 协议)。
|
|
111
|
+
* - 普通商品(无 duration / 无 schedules)不产 booking,与 info2 一致。
|
|
112
|
+
*/
|
|
113
|
+
export declare function transformDetailToProductAndBooking(cacheItem: any, ctx?: AddProductDecideContext): {
|
|
114
|
+
product: Partial<OrderProduct> & OrderProductIdentity;
|
|
115
|
+
booking?: AddProductBookingInput;
|
|
116
|
+
cacheItem: any;
|
|
117
|
+
};
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/solution/BookingTicket/utils/addProductDecision.ts
|
|
30
|
+
var addProductDecision_exports = {};
|
|
31
|
+
__export(addProductDecision_exports, {
|
|
32
|
+
buildCacheItemFromCartDetail: () => buildCacheItemFromCartDetail,
|
|
33
|
+
buildCacheItemFromDetail: () => buildCacheItemFromDetail,
|
|
34
|
+
buildRequiresDetailPayload: () => buildRequiresDetailPayload,
|
|
35
|
+
decideAddProduct: () => decideAddProduct,
|
|
36
|
+
decideAfterDetail: () => decideAfterDetail,
|
|
37
|
+
decideAutoClose: () => decideAutoClose,
|
|
38
|
+
getIsEject: () => getIsEject,
|
|
39
|
+
getIsOnlySession: () => getIsOnlySession,
|
|
40
|
+
prepareBookingCacheItem: () => prepareBookingCacheItem,
|
|
41
|
+
transformDetailToProductAndBooking: () => transformDetailToProductAndBooking
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(addProductDecision_exports);
|
|
44
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
45
|
+
var import_BookingContext = require("../../../modules/BookingContext");
|
|
46
|
+
var import_transformBaseProductToOrderProduct = require("../../BaseSales/utils/transformBaseProductToOrderProduct");
|
|
47
|
+
function needsSpecDetailModal(item) {
|
|
48
|
+
if (item == null ? void 0 : item.open_sold_weight)
|
|
49
|
+
return true;
|
|
50
|
+
if (item == null ? void 0 : item.isOpenDetailModal)
|
|
51
|
+
return true;
|
|
52
|
+
if (!(item == null ? void 0 : item.cartDetailValue))
|
|
53
|
+
return true;
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
function needsBookingEdit(cacheItem, ctx) {
|
|
57
|
+
if (isNormalBookingProduct(cacheItem))
|
|
58
|
+
return false;
|
|
59
|
+
const isAutoAllocationOn = (ctx == null ? void 0 : ctx.isAutoAllocationOn) || (() => true);
|
|
60
|
+
return !(0, import_BookingContext.getIsAutoClose)(cacheItem, isAutoAllocationOn);
|
|
61
|
+
}
|
|
62
|
+
function buildRequiresBookingEditPayload(cacheItem, ctx) {
|
|
63
|
+
return {
|
|
64
|
+
cacheItem,
|
|
65
|
+
customerId: ctx == null ? void 0 : ctx.customerId,
|
|
66
|
+
date: typeof (ctx == null ? void 0 : ctx.date) === "string" ? ctx.date : null
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function decideAddProduct(item, ctx) {
|
|
70
|
+
const derivedCtx = withDerivedBookingCtx(ctx);
|
|
71
|
+
if (needsSpecDetailModal(item)) {
|
|
72
|
+
return {
|
|
73
|
+
action: "requiresDetail",
|
|
74
|
+
payload: buildRequiresDetailPayload(item, derivedCtx)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const cacheItem = prepareBookingCacheItem(
|
|
78
|
+
buildCacheItemFromCartDetail(item, derivedCtx),
|
|
79
|
+
derivedCtx
|
|
80
|
+
);
|
|
81
|
+
if (needsBookingEdit(cacheItem, derivedCtx)) {
|
|
82
|
+
return {
|
|
83
|
+
action: "requiresBookingEdit",
|
|
84
|
+
cacheItem,
|
|
85
|
+
payload: buildRequiresBookingEditPayload(cacheItem, derivedCtx)
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { action: "add", cacheItem };
|
|
89
|
+
}
|
|
90
|
+
function decideAfterDetail(cacheItem, ctx) {
|
|
91
|
+
const derivedCtx = withDerivedBookingCtx(ctx);
|
|
92
|
+
const extended = prepareBookingCacheItem(cacheItem, derivedCtx);
|
|
93
|
+
if (needsBookingEdit(extended, derivedCtx)) {
|
|
94
|
+
return {
|
|
95
|
+
action: "requiresBookingEdit",
|
|
96
|
+
cacheItem: extended,
|
|
97
|
+
payload: buildRequiresBookingEditPayload(extended, derivedCtx)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return { action: "add", cacheItem: extended };
|
|
101
|
+
}
|
|
102
|
+
function isNormalBookingProduct(item) {
|
|
103
|
+
return !(0, import_BookingContext.isBookingProduct)(item);
|
|
104
|
+
}
|
|
105
|
+
function hasPreparedBookingExtend(cacheItem) {
|
|
106
|
+
var _a;
|
|
107
|
+
if ((0, import_BookingContext.productNeedsResourceExtend)(cacheItem) && !(0, import_BookingContext.hasActualResourceSelection)(cacheItem)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
const ext = (cacheItem == null ? void 0 : cacheItem._extend) || {};
|
|
111
|
+
const hasResourceState = Boolean(
|
|
112
|
+
(0, import_BookingContext.hasActualResourceSelection)(cacheItem) && ext.capacity && (ext.endDate || ext.end_date)
|
|
113
|
+
);
|
|
114
|
+
const hasSessionState = Boolean(
|
|
115
|
+
(0, import_BookingContext.isSessionProduct)(cacheItem) && ((_a = ext.other) == null ? void 0 : _a.session) && ext.start_time && (ext.end_time || ext.endDate)
|
|
116
|
+
);
|
|
117
|
+
const hasMultiDayState = Boolean(isNormalBookingProduct(cacheItem) === false && isMultiDayLike(cacheItem));
|
|
118
|
+
const hasExplicitTimeState = Boolean(
|
|
119
|
+
ext.duration && (ext.start_date || ext.startDate) && ext.start_time && (ext.end_date && ext.end_time || ext.endDate)
|
|
120
|
+
);
|
|
121
|
+
return hasResourceState || hasSessionState || hasMultiDayState || hasExplicitTimeState;
|
|
122
|
+
}
|
|
123
|
+
function formatBookingDateForUI(date) {
|
|
124
|
+
if (date == null || date === "")
|
|
125
|
+
return null;
|
|
126
|
+
const parsed = (0, import_dayjs.default)(date);
|
|
127
|
+
return parsed.isValid() ? parsed.format("YYYY-MM-DD") : null;
|
|
128
|
+
}
|
|
129
|
+
function withDerivedBookingCtx(ctx) {
|
|
130
|
+
if (!ctx)
|
|
131
|
+
return {};
|
|
132
|
+
return {
|
|
133
|
+
...ctx,
|
|
134
|
+
presetStartTime: ctx.presetStartTime ?? (0, import_BookingContext.derivePresetStartTimeFromDate)(ctx.date)
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function isMultiDayLike(cacheItem) {
|
|
138
|
+
var _a;
|
|
139
|
+
const ext = (cacheItem == null ? void 0 : cacheItem._extend) || {};
|
|
140
|
+
return Boolean(
|
|
141
|
+
((_a = cacheItem == null ? void 0 : cacheItem.duration) == null ? void 0 : _a.type) === "days" && ext.duration && ext.start_date && ext.end_date
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
function prepareBookingCacheItem(cacheItem, ctx) {
|
|
145
|
+
if (isNormalBookingProduct(cacheItem) || hasPreparedBookingExtend(cacheItem)) {
|
|
146
|
+
return cacheItem;
|
|
147
|
+
}
|
|
148
|
+
return (0, import_BookingContext.getProductExtend)({
|
|
149
|
+
cacheItem,
|
|
150
|
+
ctx: withDerivedBookingCtx(ctx),
|
|
151
|
+
isDisabledTime: true
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function decideAutoClose(item, ctx) {
|
|
155
|
+
const decision = decideAddProduct(item, ctx);
|
|
156
|
+
if (decision.action === "add") {
|
|
157
|
+
return { autoClose: true, cacheItem: decision.cacheItem };
|
|
158
|
+
}
|
|
159
|
+
if (decision.action === "requiresBookingEdit") {
|
|
160
|
+
return { autoClose: false, cacheItem: decision.cacheItem };
|
|
161
|
+
}
|
|
162
|
+
return { autoClose: false };
|
|
163
|
+
}
|
|
164
|
+
function getIsEject(item, type = "select") {
|
|
165
|
+
const isSession = (0, import_BookingContext.isSessionProduct)(item);
|
|
166
|
+
const isSoldByWeight = Boolean(item == null ? void 0 : item.open_sold_weight);
|
|
167
|
+
const need = type === "detail" || ((item == null ? void 0 : item.bundle_group_count) || 0) > 0 || ((item == null ? void 0 : item.option_group_count) || 0) > 0 || ((item == null ? void 0 : item.is_variant) || 0) > 0 || isSession || isSoldByWeight;
|
|
168
|
+
return need ? 1 : 0;
|
|
169
|
+
}
|
|
170
|
+
function getIsOnlySession(item) {
|
|
171
|
+
const isSession = (0, import_BookingContext.isSessionProduct)(item);
|
|
172
|
+
return !(((item == null ? void 0 : item.bundle_group_count) || 0) > 0 || ((item == null ? void 0 : item.option_group_count) || 0) > 0 || ((item == null ? void 0 : item.is_variant) || 0) > 0) && isSession;
|
|
173
|
+
}
|
|
174
|
+
function buildRequiresDetailPayload(item, ctx) {
|
|
175
|
+
const isOnlySession = getIsOnlySession(item);
|
|
176
|
+
const isEject = getIsEject(item, (ctx == null ? void 0 : ctx.type) || "select");
|
|
177
|
+
return {
|
|
178
|
+
item,
|
|
179
|
+
showConfig: {
|
|
180
|
+
option: ((item == null ? void 0 : item.option_group_count) || 0) > 0,
|
|
181
|
+
session: (0, import_BookingContext.isSessionProduct)(item),
|
|
182
|
+
variant: ((item == null ? void 0 : item.is_variant) || 0) > 0,
|
|
183
|
+
package: ((item == null ? void 0 : item.bundle_group_count) || 0) > 0,
|
|
184
|
+
number: Boolean(item == null ? void 0 : item.open_sold_weight)
|
|
185
|
+
},
|
|
186
|
+
isOnlySession,
|
|
187
|
+
isEject: isEject ? 1 : 0,
|
|
188
|
+
customerId: ctx == null ? void 0 : ctx.customerId,
|
|
189
|
+
date: formatBookingDateForUI(ctx == null ? void 0 : ctx.date),
|
|
190
|
+
productData: item
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function buildCacheItemFromCartDetail(item, ctx) {
|
|
194
|
+
var _a;
|
|
195
|
+
const cartDetailValue = item.cartDetailValue || {};
|
|
196
|
+
const other = JSON.parse(JSON.stringify(cartDetailValue || {}));
|
|
197
|
+
other.session = cartDetailValue.session;
|
|
198
|
+
const resolvedId = item.id ?? item.product_id;
|
|
199
|
+
let extend = (0, import_BookingContext.applySessionTimesToExtend)(
|
|
200
|
+
item,
|
|
201
|
+
{
|
|
202
|
+
start_date: (ctx == null ? void 0 : ctx.date) || void 0,
|
|
203
|
+
/** 列表连点 / 防抖合并时以 ctx.quantity 为准,避免 cartDetailValue 默认 1 盖掉合并数量 */
|
|
204
|
+
quantity: (ctx == null ? void 0 : ctx.quantity) ?? (cartDetailValue == null ? void 0 : cartDetailValue.quantity) ?? 1,
|
|
205
|
+
product_name: item.title,
|
|
206
|
+
other,
|
|
207
|
+
isNormalProduct: !(0, import_BookingContext.isBookingProduct)(item),
|
|
208
|
+
price: ((_a = item == null ? void 0 : item._extend) == null ? void 0 : _a.price) ?? (item == null ? void 0 : item.price)
|
|
209
|
+
},
|
|
210
|
+
{ date: ctx == null ? void 0 : ctx.date }
|
|
211
|
+
);
|
|
212
|
+
return {
|
|
213
|
+
...item,
|
|
214
|
+
id: resolvedId,
|
|
215
|
+
product_id: resolvedId,
|
|
216
|
+
_key: cartDetailValue.key,
|
|
217
|
+
_extend: extend,
|
|
218
|
+
new: 1
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function buildCacheItemFromDetail(item, detailResult, ctx) {
|
|
222
|
+
var _a, _b, _c;
|
|
223
|
+
const _currentItem = detailResult.detail || item;
|
|
224
|
+
const _detail = _currentItem;
|
|
225
|
+
const detailExtend = (_detail == null ? void 0 : _detail._extend) || {};
|
|
226
|
+
const other = JSON.parse(JSON.stringify(detailResult.e || {}));
|
|
227
|
+
other.session = (_a = detailResult.e) == null ? void 0 : _a.session;
|
|
228
|
+
const resolvedId = _currentItem.id ?? _currentItem.product_id;
|
|
229
|
+
const mergedItem = { ...item, ..._detail, extension_type: _detail.extension_type ?? item.extension_type };
|
|
230
|
+
const runtimeExtend = (0, import_BookingContext.applySessionTimesToExtend)(
|
|
231
|
+
mergedItem,
|
|
232
|
+
{
|
|
233
|
+
start_date: (ctx == null ? void 0 : ctx.date) || detailExtend.start_date || void 0,
|
|
234
|
+
quantity: (ctx == null ? void 0 : ctx.quantity) ?? ((_b = detailResult.e) == null ? void 0 : _b.quantity) ?? detailExtend.quantity ?? 1,
|
|
235
|
+
price: detailExtend.price ?? (_detail == null ? void 0 : _detail.price) ?? (item == null ? void 0 : item.price),
|
|
236
|
+
product_name: _currentItem.title ?? detailExtend.product_name,
|
|
237
|
+
other,
|
|
238
|
+
isNormalProduct: !(0, import_BookingContext.isBookingProduct)(mergedItem)
|
|
239
|
+
},
|
|
240
|
+
{ date: ctx == null ? void 0 : ctx.date }
|
|
241
|
+
);
|
|
242
|
+
const extend = {
|
|
243
|
+
...detailExtend,
|
|
244
|
+
...runtimeExtend,
|
|
245
|
+
other
|
|
246
|
+
};
|
|
247
|
+
const note = detailExtend.note ?? (_detail == null ? void 0 : _detail.note);
|
|
248
|
+
return {
|
|
249
|
+
..._detail,
|
|
250
|
+
id: resolvedId,
|
|
251
|
+
product_id: resolvedId,
|
|
252
|
+
extension_type: mergedItem.extension_type,
|
|
253
|
+
_key: (_c = detailResult.e) == null ? void 0 : _c.key,
|
|
254
|
+
...note != null && note !== "" ? { note: String(note) } : {},
|
|
255
|
+
_extend: extend,
|
|
256
|
+
new: 1
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function transformDetailToProductAndBooking(cacheItem, ctx) {
|
|
260
|
+
const preparedCacheItem = prepareBookingCacheItem(cacheItem, withDerivedBookingCtx(ctx));
|
|
261
|
+
const payload = buildBasePayloadFromCacheItem(preparedCacheItem, ctx);
|
|
262
|
+
const productInput = (0, import_transformBaseProductToOrderProduct.transformBaseProductToOrderProduct)({
|
|
263
|
+
payload,
|
|
264
|
+
sourceProduct: preparedCacheItem
|
|
265
|
+
});
|
|
266
|
+
if (!productInput) {
|
|
267
|
+
throw new Error(
|
|
268
|
+
"[BookingTicket] transformDetailToProductAndBooking: product transform failed (missing numeric item.id / item.product_id)"
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
const isNormalProduct = isNormalBookingProduct(preparedCacheItem);
|
|
272
|
+
let booking;
|
|
273
|
+
if (!isNormalProduct) {
|
|
274
|
+
booking = (0, import_BookingContext.cacheItemToBookingInput)(preparedCacheItem, { bookingConfig: ctx == null ? void 0 : ctx.bookingConfig });
|
|
275
|
+
}
|
|
276
|
+
return { product: productInput, booking, cacheItem: preparedCacheItem };
|
|
277
|
+
}
|
|
278
|
+
function buildBasePayloadFromCacheItem(cacheItem, ctx) {
|
|
279
|
+
var _a, _b, _c, _d;
|
|
280
|
+
const other = ((_a = cacheItem == null ? void 0 : cacheItem._extend) == null ? void 0 : _a.other) || {};
|
|
281
|
+
const quantity = (ctx == null ? void 0 : ctx.quantity) != null && ctx.quantity > 0 ? ctx.quantity : ((_b = cacheItem == null ? void 0 : cacheItem._extend) == null ? void 0 : _b.quantity) ?? 1;
|
|
282
|
+
const resolvedPid = (cacheItem == null ? void 0 : cacheItem.product_id) ?? (cacheItem == null ? void 0 : cacheItem.id);
|
|
283
|
+
const extend = (cacheItem == null ? void 0 : cacheItem._extend) || {};
|
|
284
|
+
return {
|
|
285
|
+
id: (cacheItem == null ? void 0 : cacheItem.id) ?? (cacheItem == null ? void 0 : cacheItem.product_id),
|
|
286
|
+
product_id: resolvedPid,
|
|
287
|
+
variant_id: (other == null ? void 0 : other.product_variant_id) ?? (other == null ? void 0 : other.variant_id) ?? 0,
|
|
288
|
+
quantity,
|
|
289
|
+
option: (other == null ? void 0 : other.option) || [],
|
|
290
|
+
bundle: (other == null ? void 0 : other.bundle) || ((_c = extend == null ? void 0 : extend.skuValue) == null ? void 0 : _c.bundle) || ((_d = extend == null ? void 0 : extend._skuValue) == null ? void 0 : _d.bundle) || [],
|
|
291
|
+
unique: other == null ? void 0 : other.unique,
|
|
292
|
+
session: other == null ? void 0 : other.session,
|
|
293
|
+
note: extend == null ? void 0 : extend.note,
|
|
294
|
+
price: (extend == null ? void 0 : extend.price) ?? (cacheItem == null ? void 0 : cacheItem.price),
|
|
295
|
+
selling_price: (extend == null ? void 0 : extend.price) ?? (cacheItem == null ? void 0 : cacheItem.price),
|
|
296
|
+
line_total: extend == null ? void 0 : extend.total,
|
|
297
|
+
total: extend == null ? void 0 : extend.total,
|
|
298
|
+
origin_total: extend == null ? void 0 : extend.origin_total,
|
|
299
|
+
price_override: extend == null ? void 0 : extend.priceOverride,
|
|
300
|
+
bundle_edit: extend == null ? void 0 : extend.bundle_edit,
|
|
301
|
+
discount_reason: extend == null ? void 0 : extend.discount_reason,
|
|
302
|
+
discount_list: cacheItem == null ? void 0 : cacheItem.discount_list,
|
|
303
|
+
_extend: extend
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
307
|
+
0 && (module.exports = {
|
|
308
|
+
buildCacheItemFromCartDetail,
|
|
309
|
+
buildCacheItemFromDetail,
|
|
310
|
+
buildRequiresDetailPayload,
|
|
311
|
+
decideAddProduct,
|
|
312
|
+
decideAfterDetail,
|
|
313
|
+
decideAutoClose,
|
|
314
|
+
getIsEject,
|
|
315
|
+
getIsOnlySession,
|
|
316
|
+
prepareBookingCacheItem,
|
|
317
|
+
transformDetailToProductAndBooking
|
|
318
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { BaseSalesOrderProduct } from '../../BaseSales';
|
|
2
|
+
import type { ISalesBooking } from '../../BaseSales/utils/parseSalesResponse';
|
|
3
|
+
export interface BuildAddTimeCurrentItemParams {
|
|
4
|
+
booking: ISalesBooking;
|
|
5
|
+
product: BaseSalesOrderProduct | null;
|
|
6
|
+
productsByUid?: Record<string, {
|
|
7
|
+
origin?: Record<string, any>;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolveBookingCanAddTimeParams extends BuildAddTimeCurrentItemParams {
|
|
11
|
+
addTimeProducts?: any[];
|
|
12
|
+
bookingConfig?: Record<string, any> | null;
|
|
13
|
+
shopOpeningHours?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 从 booking 与其关联商品行构建旧 `isUsableProduct` 所需的当前商品快照。
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const currentItem = buildAddTimeCurrentItem({ booking, product, productsByUid });
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildAddTimeCurrentItem({ booking, product, productsByUid, }: BuildAddTimeCurrentItemParams): Record<string, any> | null;
|
|
22
|
+
/**
|
|
23
|
+
* 判断当前 booking 是否允许打开加时入口,保持与旧 ticketBooking 的商品适用规则一致。
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const canAddTime = resolveBookingCanAddTime({ booking, product, addTimeProducts, bookingConfig });
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveBookingCanAddTime(params: ResolveBookingCanAddTimeParams): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* 判断一个加时商品是否适用于当前预约商品。
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const usable = isUsableAddTimeProduct(addTime.add_time, currentItem, '23:59');
|
|
34
|
+
*/
|
|
35
|
+
export declare function isUsableAddTimeProduct(addTime: any, currentItem: Record<string, any> | null | undefined, shopOpeningHours?: string): boolean;
|