@pisell/pisellos 0.0.569 → 0.10.2
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/core/index.js +10 -6
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -3
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/walletPass/evaluator.js +7 -5
- package/dist/model/strategy/adapter/walletPass/example.js +26 -3
- package/dist/model/strategy/adapter/walletPass/index.js +5 -5
- package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -3
- package/dist/model/strategy/adapter/walletPass/utils.d.ts +0 -26
- package/dist/model/strategy/adapter/walletPass/utils.js +17 -92
- package/dist/model/strategy/strategy-example.js +19 -5
- package/dist/modules/BaseModule.d.ts +1 -1
- package/dist/modules/BaseModule.js +8 -10
- package/dist/modules/Cart/index.js +3 -0
- package/dist/modules/Cart/utils/cartProduct.js +1 -0
- package/dist/modules/Cart/utils/cartResource.js +0 -2
- package/dist/modules/Cart/utils/changePrice.js +9 -16
- package/dist/modules/Date/index.js +5 -1
- package/dist/modules/Discount/index.d.ts +0 -1
- package/dist/modules/Discount/index.js +7 -22
- package/dist/modules/Discount/types.d.ts +0 -1
- package/dist/modules/OpenData/index.js +2 -0
- package/dist/modules/Order/index.js +70 -40
- package/dist/modules/Payment/index.js +162 -97
- package/dist/modules/Payment/types.d.ts +4 -8
- package/dist/modules/Payment/walletpass.d.ts +0 -2
- package/dist/modules/Payment/walletpass.js +5 -4
- package/dist/modules/ProductList/index.d.ts +1 -1
- package/dist/modules/ProductList/index.js +3 -12
- package/dist/modules/ProductList/types.d.ts +0 -1
- package/dist/modules/Rules/index.js +126 -427
- package/dist/modules/SalesSummary/utils.js +1 -2
- package/dist/modules/Schedule/getDateIsInSchedule.js +0 -5
- package/dist/modules/Schedule/index.js +1 -0
- package/dist/modules/Schedule/utils.js +1 -0
- package/dist/modules/Step/index.js +1 -0
- package/dist/modules/Summary/utils.js +22 -43
- package/dist/plugins/request.js +4 -1
- package/dist/plugins/window.js +6 -2
- package/dist/server/index.js +129 -97
- package/dist/server/modules/menu/index.js +41 -32
- package/dist/server/modules/order/index.js +4 -2
- package/dist/server/modules/products/index.js +42 -24
- package/dist/server/modules/quotation/index.js +38 -29
- package/dist/server/modules/resource/index.js +4 -3
- package/dist/server/modules/schedule/index.js +35 -27
- package/dist/server/utils/product.js +1 -0
- package/dist/solution/BaseSales/index.js +41 -38
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingByStep/index.js +60 -11
- package/dist/solution/BookingByStep/utils/capacity.js +11 -1
- package/dist/solution/BookingByStep/utils/resources.js +3 -1
- package/dist/solution/BookingByStep/utils/timeslots.js +43 -2
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +2 -0
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +7 -6
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +31 -25
- package/dist/solution/BookingTicket/utils/scan/index.js +10 -6
- package/dist/solution/BuyTickets/index.js +12 -9
- package/dist/solution/Checkout/index.js +252 -177
- package/dist/solution/Checkout/utils/index.js +16 -4
- package/dist/solution/RegisterAndLogin/index.js +76 -30
- package/dist/solution/ScanOrder/index.js +60 -50
- package/dist/solution/ShopDiscount/index.js +14 -15
- package/dist/solution/ShopDiscount/types.d.ts +4 -5
- package/dist/solution/ShopDiscount/utils.d.ts +0 -9
- package/dist/solution/ShopDiscount/utils.js +0 -9
- package/dist/solution/VenueBooking/index.d.ts +3 -31
- package/dist/solution/VenueBooking/index.js +496 -651
- package/dist/solution/VenueBooking/types.d.ts +1 -3
- package/dist/solution/VenueBooking/types.js +0 -1
- package/dist/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
- package/dist/solution/VenueBooking/utils/dateSummary.js +25 -12
- package/dist/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
- package/dist/solution/VenueBooking/utils/timeSlot.js +4 -9
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/task.js +18 -15
- package/dist/utils/watch.js +1 -0
- package/lib/apis/picoding.js +0 -2
- package/lib/core/index.js +132 -130
- package/lib/effects/index.js +57 -46
- package/lib/index.d.ts +0 -1
- package/lib/index.js +50 -92
- package/lib/model/index.js +21 -14
- package/lib/model/strategy/adapter/dataVariant/adapter.js +50 -38
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +236 -162
- package/lib/model/strategy/adapter/dataVariant/examples.js +237 -229
- package/lib/model/strategy/adapter/dataVariant/index.js +34 -39
- package/lib/model/strategy/adapter/dataVariant/type.js +28 -57
- package/lib/model/strategy/adapter/index.js +64 -100
- package/lib/model/strategy/adapter/itemRule/adapter.js +144 -156
- package/lib/model/strategy/adapter/itemRule/evaluator.js +48 -36
- package/lib/model/strategy/adapter/itemRule/examples.js +225 -295
- package/lib/model/strategy/adapter/itemRule/index.js +57 -83
- package/lib/model/strategy/adapter/itemRule/type.js +36 -97
- package/lib/model/strategy/adapter/promotion/adapter.js +63 -84
- package/lib/model/strategy/adapter/promotion/evaluator.js +231 -381
- package/lib/model/strategy/adapter/promotion/examples.js +159 -139
- package/lib/model/strategy/adapter/promotion/index.js +49 -1
- package/lib/model/strategy/adapter/promotion/type.js +35 -199
- package/lib/model/strategy/adapter/type.js +16 -4
- package/lib/model/strategy/adapter/walletPass/evaluator.js +152 -180
- package/lib/model/strategy/adapter/walletPass/example.js +190 -217
- package/lib/model/strategy/adapter/walletPass/index.js +51 -75
- package/lib/model/strategy/adapter/walletPass/locales.js +58 -36
- package/lib/model/strategy/adapter/walletPass/type.d.ts +0 -3
- package/lib/model/strategy/adapter/walletPass/type.js +16 -4
- package/lib/model/strategy/adapter/walletPass/utils.d.ts +0 -26
- package/lib/model/strategy/adapter/walletPass/utils.js +383 -678
- package/lib/model/strategy/engine.js +168 -270
- package/lib/model/strategy/index.js +34 -49
- package/lib/model/strategy/strategy-example.js +239 -243
- package/lib/model/strategy/type.js +40 -100
- package/lib/modules/Account/index.js +53 -39
- package/lib/modules/Account/types.js +33 -20
- package/lib/modules/AccountList/index.js +154 -116
- package/lib/modules/AccountList/types.js +31 -30
- package/lib/modules/AccountList/utils.js +30 -18
- package/lib/modules/BaseModule.d.ts +1 -1
- package/lib/modules/BaseModule.js +46 -25
- package/lib/modules/BookingContext/index.js +136 -158
- package/lib/modules/BookingContext/types.js +32 -46
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +143 -131
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +82 -75
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +150 -170
- package/lib/modules/BookingContext/utils/flexible.js +55 -38
- package/lib/modules/BookingContext/utils/formatResourceList.js +34 -19
- package/lib/modules/BookingContext/utils/index.js +41 -124
- package/lib/modules/BookingContext/utils/noResource.js +70 -58
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +41 -14
- package/lib/modules/BookingContext/utils/productExtend.js +155 -202
- package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
- package/lib/modules/BookingContext/utils/resourceSelection.js +41 -19
- package/lib/modules/BookingContext/utils/resources.js +167 -209
- package/lib/modules/BookingContext/utils/serviceTimes.js +116 -115
- package/lib/modules/BookingContext/utils/timeSlices.js +80 -70
- package/lib/modules/Cart/index.js +124 -170
- package/lib/modules/Cart/types.js +51 -46
- package/lib/modules/Cart/utils/cartAccount.js +39 -40
- package/lib/modules/Cart/utils/cartDate.js +61 -56
- package/lib/modules/Cart/utils/cartDiscount.js +33 -28
- package/lib/modules/Cart/utils/cartNote.js +32 -27
- package/lib/modules/Cart/utils/cartProduct.js +251 -321
- package/lib/modules/Cart/utils/cartRelationForms.js +35 -29
- package/lib/modules/Cart/utils/cartResource.js +78 -72
- package/lib/modules/Cart/utils/changePrice.js +50 -28
- package/lib/modules/Cart/utils/index.js +48 -106
- package/lib/modules/Customer/constants.js +34 -13
- package/lib/modules/Customer/index.js +169 -232
- package/lib/modules/Customer/types.js +35 -38
- package/lib/modules/Date/index.js +115 -116
- package/lib/modules/Date/types.js +28 -16
- package/lib/modules/Date/utils.js +123 -174
- package/lib/modules/Discount/index.d.ts +0 -1
- package/lib/modules/Discount/index.js +128 -130
- package/lib/modules/Discount/types.d.ts +0 -1
- package/lib/modules/Discount/types.js +31 -9
- package/lib/modules/Guests/index.js +56 -30
- package/lib/modules/Guests/types.js +33 -23
- package/lib/modules/Holder/index.js +189 -209
- package/lib/modules/Holder/types.js +16 -4
- package/lib/modules/Holder/utils.js +49 -20
- package/lib/modules/OpenData/index.js +76 -69
- package/lib/modules/OpenData/types.js +16 -4
- package/lib/modules/OpenData/utils.js +78 -44
- package/lib/modules/Order/index.js +1909 -1572
- package/lib/modules/Order/types.js +35 -78
- package/lib/modules/Order/utils/bundleDiscountHydration.js +74 -41
- package/lib/modules/Order/utils/manualProductDiscount.js +123 -124
- package/lib/modules/Order/utils/orderCollectionIdentity.js +210 -148
- package/lib/modules/Order/utils.js +634 -799
- package/lib/modules/Payment/cash.js +33 -20
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +76 -145
- package/lib/modules/Payment/eftpos.js +30 -16
- package/lib/modules/Payment/index.js +378 -518
- package/lib/modules/Payment/mx51.js +0 -1
- package/lib/modules/Payment/types.d.ts +4 -8
- package/lib/modules/Payment/types.js +107 -216
- package/lib/modules/Payment/utils.js +48 -51
- package/lib/modules/Payment/walletpass.d.ts +0 -2
- package/lib/modules/Payment/walletpass.js +211 -226
- package/lib/modules/Product/index.js +46 -51
- package/lib/modules/Product/types.js +16 -4
- package/lib/modules/Product/utils.js +33 -32
- package/lib/modules/ProductList/index.d.ts +1 -1
- package/lib/modules/ProductList/index.js +117 -117
- package/lib/modules/ProductList/types.d.ts +0 -1
- package/lib/modules/ProductList/types.js +31 -9
- package/lib/modules/Quotation/index.js +100 -66
- package/lib/modules/Quotation/types.js +16 -4
- package/lib/modules/Resource/index.js +59 -27
- package/lib/modules/Resource/types.js +32 -22
- package/lib/modules/Resource/utils.js +38 -30
- package/lib/modules/ResourcePlanner/index.js +61 -60
- package/lib/modules/ResourcePlanner/planner.js +384 -346
- package/lib/modules/ResourcePlanner/types.js +16 -4
- package/lib/modules/Rules/index.js +903 -1475
- package/lib/modules/Rules/types.js +40 -17
- package/lib/modules/SalesSummary/index.js +90 -85
- package/lib/modules/SalesSummary/types.js +16 -4
- package/lib/modules/SalesSummary/utils.js +427 -351
- package/lib/modules/ScanOrderLogger/index.js +79 -59
- package/lib/modules/ScanOrderLogger/providers/feishu.js +78 -54
- package/lib/modules/ScanOrderLogger/providers/grafana.js +36 -13
- package/lib/modules/ScanOrderLogger/types.js +16 -4
- package/lib/modules/Schedule/getDateIsInSchedule.js +163 -339
- package/lib/modules/Schedule/index.js +114 -100
- package/lib/modules/Schedule/type.js +16 -4
- package/lib/modules/Schedule/types.js +16 -4
- package/lib/modules/Schedule/utils.js +291 -433
- package/lib/modules/Step/index.js +52 -40
- package/lib/modules/Step/tyeps.js +16 -4
- package/lib/modules/Summary/index.js +71 -66
- package/lib/modules/Summary/types.js +16 -4
- package/lib/modules/Summary/utils.js +418 -791
- package/lib/modules/SurchargeList/index.js +60 -46
- package/lib/modules/SurchargeList/types.js +16 -4
- package/lib/modules/index.js +63 -245
- package/lib/plugins/app.js +16 -4
- package/lib/plugins/index.js +25 -36
- package/lib/plugins/request.js +126 -137
- package/lib/plugins/shopStore.js +16 -4
- package/lib/plugins/user.js +16 -4
- package/lib/plugins/window.js +179 -171
- package/lib/server/index.js +2337 -2675
- package/lib/server/modules/floor-plan/index.js +123 -102
- package/lib/server/modules/floor-plan/types.js +30 -15
- package/lib/server/modules/index.js +68 -106
- package/lib/server/modules/menu/index.js +122 -146
- package/lib/server/modules/menu/types.js +31 -18
- package/lib/server/modules/order/index.js +642 -567
- package/lib/server/modules/order/types.js +32 -117
- package/lib/server/modules/order/utils/filterBookings.js +194 -219
- package/lib/server/modules/order/utils/filterOrders.js +92 -118
- package/lib/server/modules/payment/index.js +83 -59
- package/lib/server/modules/payment/types.js +16 -4
- package/lib/server/modules/products/index.js +459 -575
- package/lib/server/modules/products/types.js +34 -44
- package/lib/server/modules/quotation/index.js +172 -137
- package/lib/server/modules/quotation/types.js +31 -21
- package/lib/server/modules/resource/index.js +184 -213
- package/lib/server/modules/resource/types.js +33 -42
- package/lib/server/modules/schedule/index.js +123 -135
- package/lib/server/modules/schedule/types.js +21 -14
- package/lib/server/modules/schedule/utils.js +163 -334
- package/lib/server/types.js +16 -4
- package/lib/server/utils/index.js +23 -25
- package/lib/server/utils/product.js +139 -196
- package/lib/server/utils/schedule.js +41 -34
- package/lib/server/utils/small-ticket.js +456 -478
- package/lib/server/utils/time.js +49 -40
- package/lib/solution/BaseSales/index.js +1016 -850
- package/lib/solution/BaseSales/types.js +37 -41
- package/lib/solution/BaseSales/utils/cartPromotion.js +460 -611
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +105 -85
- package/lib/solution/BaseSales/utils/quotationPrice.js +114 -56
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +143 -102
- package/lib/solution/BaseSales/utils.js +140 -155
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +1340 -1530
- package/lib/solution/BookingByStep/types.js +99 -40
- package/lib/solution/BookingByStep/utils/capacity.js +160 -192
- package/lib/solution/BookingByStep/utils/products.js +52 -42
- package/lib/solution/BookingByStep/utils/resources.js +330 -527
- package/lib/solution/BookingByStep/utils/stock.js +44 -65
- package/lib/solution/BookingByStep/utils/timeslots.js +131 -129
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +459 -543
- package/lib/solution/BookingTicket/types.js +77 -99
- package/lib/solution/BookingTicket/utils/addProductDecision.js +184 -219
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +89 -58
- package/lib/solution/BookingTicket/utils/bookingStatus.js +78 -107
- package/lib/solution/BookingTicket/utils/cartView.js +94 -110
- package/lib/solution/BookingTicket/utils/exampleData.js +0 -185
- package/lib/solution/BookingTicket/utils/orderCustomer.js +41 -18
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +86 -219
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +93 -144
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +91 -79
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +41 -54
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +81 -84
- package/lib/solution/BookingTicket/utils/scan/index.js +104 -98
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +43 -90
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +64 -52
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +58 -56
- package/lib/solution/BuyTickets/index.js +70 -67
- package/lib/solution/BuyTickets/types.js +38 -22
- package/lib/solution/Checkout/index.js +1158 -1451
- package/lib/solution/Checkout/types.js +61 -91
- package/lib/solution/Checkout/utils/index.js +156 -228
- package/lib/solution/PlaceOrder/index.js +0 -55
- package/lib/solution/RegisterAndLogin/config.js +460 -493
- package/lib/solution/RegisterAndLogin/index.js +630 -633
- package/lib/solution/RegisterAndLogin/types.js +76 -189
- package/lib/solution/RegisterAndLogin/utils.js +125 -183
- package/lib/solution/Sales/index.js +320 -317
- package/lib/solution/Sales/types.js +33 -27
- package/lib/solution/ScanOrder/index.js +862 -831
- package/lib/solution/ScanOrder/types.js +34 -33
- package/lib/solution/ScanOrder/utils.js +371 -406
- package/lib/solution/ShopDiscount/index.js +233 -235
- package/lib/solution/ShopDiscount/types.d.ts +4 -5
- package/lib/solution/ShopDiscount/types.js +37 -15
- package/lib/solution/ShopDiscount/utils.d.ts +0 -9
- package/lib/solution/ShopDiscount/utils.js +172 -309
- package/lib/solution/UnifiedBookingSales/index.js +405 -379
- package/lib/solution/UnifiedBookingSales/types.js +31 -12
- package/lib/solution/VenueBooking/index.d.ts +3 -31
- package/lib/solution/VenueBooking/index.js +916 -967
- package/lib/solution/VenueBooking/types.d.ts +1 -3
- package/lib/solution/VenueBooking/types.js +39 -20
- package/lib/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
- package/lib/solution/VenueBooking/utils/dateSummary.js +62 -25
- package/lib/solution/VenueBooking/utils/resource.js +54 -31
- package/lib/solution/VenueBooking/utils/slotMerge.js +107 -94
- package/lib/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
- package/lib/solution/VenueBooking/utils/timeSlot.js +133 -138
- package/lib/solution/VenueBooking/utils.js +67 -130
- package/lib/solution/index.js +41 -124
- package/lib/store/createStore.js +29 -32
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +16 -4
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +47 -81
- package/package.json +2 -4
- package/dist/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
- package/dist/solution/VenueBooking/utils/smartPricing.js +0 -233
- package/lib/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
- package/lib/solution/VenueBooking/utils/smartPricing.js +0 -192
|
@@ -7,9 +7,7 @@ export declare enum VenueBookingHooks {
|
|
|
7
7
|
onDestroy = "venueBooking:onDestroy",
|
|
8
8
|
onRetryInit = "venueBooking:onRetryInit",
|
|
9
9
|
onRefresh = "venueBooking:onRefresh",
|
|
10
|
-
onCartValidationChanged = "venueBooking:onCartValidationChanged"
|
|
11
|
-
/** 登录客户的智能定价、营销配置与订单汇总已完成刷新 */
|
|
12
|
-
onSmartPricingUpdated = "venueBooking:onSmartPricingUpdated"
|
|
10
|
+
onCartValidationChanged = "venueBooking:onCartValidationChanged"
|
|
13
11
|
}
|
|
14
12
|
export type VenueBookingStatus = 'idle' | 'initializing' | 'ready' | 'error';
|
|
15
13
|
export interface VenueBookingEntryContext {
|
|
@@ -1,25 +1,44 @@
|
|
|
1
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
18
|
|
|
3
|
-
|
|
4
|
-
|
|
19
|
+
// src/solution/VenueBooking/types.ts
|
|
20
|
+
var types_exports = {};
|
|
21
|
+
__export(types_exports, {
|
|
22
|
+
DEFAULT_SLOT_CONFIG: () => DEFAULT_SLOT_CONFIG,
|
|
23
|
+
VenueBookingHooks: () => VenueBookingHooks
|
|
5
24
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const DEFAULT_SLOT_CONFIG = exports.DEFAULT_SLOT_CONFIG = {
|
|
25
|
+
module.exports = __toCommonJS(types_exports);
|
|
26
|
+
var VenueBookingHooks = /* @__PURE__ */ ((VenueBookingHooks2) => {
|
|
27
|
+
VenueBookingHooks2["onInited"] = "venueBooking:onInited";
|
|
28
|
+
VenueBookingHooks2["onDestroy"] = "venueBooking:onDestroy";
|
|
29
|
+
VenueBookingHooks2["onRetryInit"] = "venueBooking:onRetryInit";
|
|
30
|
+
VenueBookingHooks2["onRefresh"] = "venueBooking:onRefresh";
|
|
31
|
+
VenueBookingHooks2["onCartValidationChanged"] = "venueBooking:onCartValidationChanged";
|
|
32
|
+
return VenueBookingHooks2;
|
|
33
|
+
})(VenueBookingHooks || {});
|
|
34
|
+
var DEFAULT_SLOT_CONFIG = {
|
|
17
35
|
slotDurationMinutes: 30,
|
|
18
|
-
businessStartTime:
|
|
19
|
-
businessEndTime:
|
|
36
|
+
businessStartTime: "09:00",
|
|
37
|
+
businessEndTime: "23:00",
|
|
20
38
|
fewLeftThreshold: 0.8
|
|
21
39
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
40
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
+
0 && (module.exports = {
|
|
42
|
+
DEFAULT_SLOT_CONFIG,
|
|
43
|
+
VenueBookingHooks
|
|
44
|
+
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { VenueBookingSlotConfig, VenueResourceRawData, VenueDateSummaryItem, ResourceProductMapping } from '../types';
|
|
2
|
+
import type { QuotationModule } from '../../../modules/Quotation';
|
|
2
3
|
export declare function buildDateRangeSummary(params: {
|
|
3
4
|
startDate: string;
|
|
4
5
|
endDate: string;
|
|
5
6
|
config: VenueBookingSlotConfig;
|
|
6
7
|
rawResources: VenueResourceRawData[];
|
|
7
8
|
resourceProductMap: Map<number | string, ResourceProductMapping[]>;
|
|
9
|
+
quotationModule?: QuotationModule;
|
|
8
10
|
resolveConfig?: (date: string) => VenueBookingSlotConfig;
|
|
9
|
-
/** 按日期构建 slot 智能定价 Map */
|
|
10
|
-
buildSlotPriceMap?: (date: string, config: VenueBookingSlotConfig, productIds: number[]) => Map<string, string | null>;
|
|
11
11
|
}): VenueDateSummaryItem[];
|
|
@@ -1,12 +1,39 @@
|
|
|
1
|
-
|
|
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);
|
|
2
28
|
|
|
3
|
-
|
|
4
|
-
|
|
29
|
+
// src/solution/VenueBooking/utils/dateSummary.ts
|
|
30
|
+
var dateSummary_exports = {};
|
|
31
|
+
__export(dateSummary_exports, {
|
|
32
|
+
buildDateRangeSummary: () => buildDateRangeSummary
|
|
5
33
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
34
|
+
module.exports = __toCommonJS(dateSummary_exports);
|
|
35
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
36
|
+
var import_timeSlot = require("./timeSlot");
|
|
10
37
|
function buildDateRangeSummary(params) {
|
|
11
38
|
const {
|
|
12
39
|
startDate,
|
|
@@ -14,32 +41,38 @@ function buildDateRangeSummary(params) {
|
|
|
14
41
|
config,
|
|
15
42
|
rawResources,
|
|
16
43
|
resourceProductMap,
|
|
17
|
-
|
|
18
|
-
|
|
44
|
+
quotationModule,
|
|
45
|
+
resolveConfig
|
|
19
46
|
} = params;
|
|
20
47
|
const result = [];
|
|
21
|
-
const productIds =
|
|
22
|
-
let cursor = (0,
|
|
23
|
-
const end = (0,
|
|
48
|
+
const productIds = quotationModule ? [...new Set([...resourceProductMap.values()].flat().map((m) => m.productId))] : [];
|
|
49
|
+
let cursor = (0, import_dayjs.default)(startDate);
|
|
50
|
+
const end = (0, import_dayjs.default)(endDate);
|
|
24
51
|
while (!cursor.isAfter(end)) {
|
|
25
|
-
const date = cursor.format(
|
|
26
|
-
const effectiveConfig = resolveConfig
|
|
27
|
-
|
|
28
|
-
|
|
52
|
+
const date = cursor.format("YYYY-MM-DD");
|
|
53
|
+
const effectiveConfig = (resolveConfig == null ? void 0 : resolveConfig(date)) || config;
|
|
54
|
+
let quotationPriceMap;
|
|
55
|
+
if (quotationModule && productIds.length) {
|
|
56
|
+
const timeLabels = (0, import_timeSlot.generateTimeLabels)(effectiveConfig);
|
|
57
|
+
const timePoints = timeLabels.map((label) => `${date} ${label}`);
|
|
58
|
+
quotationPriceMap = quotationModule.buildProductPriceMap({ productIds, timePoints });
|
|
59
|
+
}
|
|
60
|
+
const grid = (0, import_timeSlot.buildTimeSlotGrid)({
|
|
29
61
|
date,
|
|
30
62
|
config: effectiveConfig,
|
|
31
63
|
rawResources,
|
|
32
64
|
resourceProductMap,
|
|
33
|
-
|
|
65
|
+
quotationPriceMap
|
|
34
66
|
});
|
|
35
67
|
let totalSlots = 0;
|
|
36
68
|
let availableSlots = 0;
|
|
37
69
|
let lowestPrice = null;
|
|
38
70
|
for (const resource of grid.resources) {
|
|
39
71
|
for (const slot of resource.slots) {
|
|
40
|
-
if (slot.status ===
|
|
72
|
+
if (slot.status === "past" || slot.status === "unavailable")
|
|
73
|
+
continue;
|
|
41
74
|
totalSlots++;
|
|
42
|
-
if (slot.status ===
|
|
75
|
+
if (slot.status === "available" || slot.status === "partially_occupied") {
|
|
43
76
|
availableSlots++;
|
|
44
77
|
if (slot.price !== null) {
|
|
45
78
|
const priceNum = Number(slot.price);
|
|
@@ -52,13 +85,13 @@ function buildDateRangeSummary(params) {
|
|
|
52
85
|
}
|
|
53
86
|
let status;
|
|
54
87
|
if (totalSlots === 0) {
|
|
55
|
-
status =
|
|
88
|
+
status = "unavailable";
|
|
56
89
|
} else if (availableSlots === 0) {
|
|
57
|
-
status =
|
|
90
|
+
status = "sold_out";
|
|
58
91
|
} else if ((totalSlots - availableSlots) / totalSlots >= effectiveConfig.fewLeftThreshold) {
|
|
59
|
-
status =
|
|
92
|
+
status = "few_left";
|
|
60
93
|
} else {
|
|
61
|
-
status =
|
|
94
|
+
status = "available";
|
|
62
95
|
}
|
|
63
96
|
result.push({
|
|
64
97
|
date,
|
|
@@ -67,7 +100,11 @@ function buildDateRangeSummary(params) {
|
|
|
67
100
|
totalSlots,
|
|
68
101
|
availableSlots
|
|
69
102
|
});
|
|
70
|
-
cursor = cursor.add(1,
|
|
103
|
+
cursor = cursor.add(1, "day");
|
|
71
104
|
}
|
|
72
105
|
return result;
|
|
73
|
-
}
|
|
106
|
+
}
|
|
107
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
108
|
+
0 && (module.exports = {
|
|
109
|
+
buildDateRangeSummary
|
|
110
|
+
});
|
|
@@ -1,51 +1,69 @@
|
|
|
1
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
18
|
|
|
3
|
-
|
|
4
|
-
|
|
19
|
+
// src/solution/VenueBooking/utils/resource.ts
|
|
20
|
+
var resource_exports = {};
|
|
21
|
+
__export(resource_exports, {
|
|
22
|
+
buildResourceProductMap: () => buildResourceProductMap,
|
|
23
|
+
extractResourceIds: () => extractResourceIds
|
|
5
24
|
});
|
|
6
|
-
exports
|
|
7
|
-
exports.extractResourceIds = extractResourceIds;
|
|
8
|
-
/**
|
|
9
|
-
* 从商品列表里抽取所有 resource_id:
|
|
10
|
-
* - 商品绑定的 default_resource / optional_resource
|
|
11
|
-
* - 以及这些资源上声明的 combined_resource.resource_ids(若可从 product_resource 读取)
|
|
12
|
-
* 用于一次性拉到子资源数据,判定组合资源的可用性。
|
|
13
|
-
*/
|
|
25
|
+
module.exports = __toCommonJS(resource_exports);
|
|
14
26
|
function extractResourceIds(products) {
|
|
15
|
-
|
|
27
|
+
var _a;
|
|
28
|
+
const ids = /* @__PURE__ */ new Set();
|
|
16
29
|
for (const product of products) {
|
|
17
|
-
const resources = product.product_resource
|
|
18
|
-
if (!Array.isArray(resources))
|
|
30
|
+
const resources = (_a = product.product_resource) == null ? void 0 : _a.resources;
|
|
31
|
+
if (!Array.isArray(resources))
|
|
32
|
+
continue;
|
|
19
33
|
for (const resource of resources) {
|
|
20
|
-
if (resource.status !== 1)
|
|
34
|
+
if (resource.status !== 1)
|
|
35
|
+
continue;
|
|
21
36
|
const defaultRes = resource.default_resource || [];
|
|
22
37
|
const optionalRes = resource.optional_resource || [];
|
|
23
38
|
for (const id of [...defaultRes, ...optionalRes]) {
|
|
24
|
-
if (typeof id ===
|
|
39
|
+
if (typeof id === "number" && id > 0)
|
|
40
|
+
ids.add(id);
|
|
25
41
|
}
|
|
26
42
|
const combined = resource.combined_resource;
|
|
27
43
|
if (combined && combined.status === 1 && Array.isArray(combined.resource_ids)) {
|
|
28
44
|
for (const id of combined.resource_ids) {
|
|
29
|
-
if (typeof id ===
|
|
45
|
+
if (typeof id === "number" && id > 0)
|
|
46
|
+
ids.add(id);
|
|
30
47
|
}
|
|
31
48
|
}
|
|
32
49
|
}
|
|
33
50
|
}
|
|
34
51
|
return Array.from(ids);
|
|
35
52
|
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* 每个 resourceId 可以被多个商品共享(同一场地关联多种运动商品)。
|
|
39
|
-
* Map 的 value 改为 ResourceProductMapping[],按商品出现顺序保留。
|
|
40
|
-
*/
|
|
41
53
|
function buildResourceProductMap(products) {
|
|
42
|
-
|
|
54
|
+
var _a;
|
|
55
|
+
const map = /* @__PURE__ */ new Map();
|
|
43
56
|
for (const product of products) {
|
|
44
|
-
const resources = product.product_resource
|
|
45
|
-
if (!Array.isArray(resources))
|
|
57
|
+
const resources = (_a = product.product_resource) == null ? void 0 : _a.resources;
|
|
58
|
+
if (!Array.isArray(resources))
|
|
59
|
+
continue;
|
|
46
60
|
for (const resource of resources) {
|
|
47
|
-
if (resource.status !== 1)
|
|
48
|
-
|
|
61
|
+
if (resource.status !== 1)
|
|
62
|
+
continue;
|
|
63
|
+
const allResourceIds = [
|
|
64
|
+
...resource.default_resource || [],
|
|
65
|
+
...resource.optional_resource || []
|
|
66
|
+
];
|
|
49
67
|
for (const resId of allResourceIds) {
|
|
50
68
|
const existing = map.get(resId);
|
|
51
69
|
const mapping = {
|
|
@@ -54,16 +72,21 @@ function buildResourceProductMap(products) {
|
|
|
54
72
|
formName: resource.title,
|
|
55
73
|
resourceName: resource.title,
|
|
56
74
|
formId: resource.id,
|
|
57
|
-
price: product.price ||
|
|
58
|
-
resourceType: resource.type ||
|
|
75
|
+
price: product.price || "0.00",
|
|
76
|
+
resourceType: resource.type || "single"
|
|
59
77
|
};
|
|
60
78
|
if (!existing) {
|
|
61
79
|
map.set(resId, [mapping]);
|
|
62
|
-
} else if (!existing.some(m => m.productId === mapping.productId)) {
|
|
80
|
+
} else if (!existing.some((m) => m.productId === mapping.productId)) {
|
|
63
81
|
existing.push(mapping);
|
|
64
82
|
}
|
|
65
83
|
}
|
|
66
84
|
}
|
|
67
85
|
}
|
|
68
86
|
return map;
|
|
69
|
-
}
|
|
87
|
+
}
|
|
88
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
89
|
+
0 && (module.exports = {
|
|
90
|
+
buildResourceProductMap,
|
|
91
|
+
extractResourceIds
|
|
92
|
+
});
|
|
@@ -1,34 +1,62 @@
|
|
|
1
|
-
|
|
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);
|
|
2
28
|
|
|
3
|
-
|
|
4
|
-
|
|
29
|
+
// src/solution/VenueBooking/utils/slotMerge.ts
|
|
30
|
+
var slotMerge_exports = {};
|
|
31
|
+
__export(slotMerge_exports, {
|
|
32
|
+
buildPriceBreakdown: () => buildPriceBreakdown,
|
|
33
|
+
buildVenueBookingEntry: () => buildVenueBookingEntry,
|
|
34
|
+
buildVenueIdentityKey: () => buildVenueIdentityKey,
|
|
35
|
+
buildVenueResourceMetadata: () => buildVenueResourceMetadata,
|
|
36
|
+
expandMergedSlotToIndividual: () => expandMergedSlotToIndividual,
|
|
37
|
+
mergeConsecutiveSlots: () => mergeConsecutiveSlots
|
|
5
38
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
exports.expandMergedSlotToIndividual = expandMergedSlotToIndividual;
|
|
11
|
-
exports.mergeConsecutiveSlots = mergeConsecutiveSlots;
|
|
12
|
-
var _decimal = _interopRequireDefault(require("decimal.js"));
|
|
13
|
-
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
14
|
-
var _utils = require("../../../modules/Order/utils");
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
|
+
module.exports = __toCommonJS(slotMerge_exports);
|
|
40
|
+
var import_decimal = __toESM(require("decimal.js"));
|
|
41
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
42
|
+
var import_utils = require("../../../modules/Order/utils");
|
|
16
43
|
function buildVenueIdentityKey(resourceId, groupIndex) {
|
|
17
|
-
return `venue:${resourceId}:${groupIndex}:${(0,
|
|
44
|
+
return `venue:${resourceId}:${groupIndex}:${(0, import_utils.createUuidV4)()}`;
|
|
18
45
|
}
|
|
19
46
|
function mergeConsecutiveSlots(slots) {
|
|
20
|
-
if (!slots.length)
|
|
47
|
+
if (!slots.length)
|
|
48
|
+
return [];
|
|
21
49
|
const sorted = [...slots].sort((a, b) => a.startTime.localeCompare(b.startTime));
|
|
22
50
|
const groups = [];
|
|
23
51
|
let currentSlots = [sorted[0]];
|
|
24
52
|
let currentStart = sorted[0].startTime;
|
|
25
53
|
let currentEnd = sorted[0].endTime;
|
|
26
|
-
let totalPrice = new
|
|
54
|
+
let totalPrice = new import_decimal.default(sorted[0].price || "0");
|
|
27
55
|
for (let i = 1; i < sorted.length; i++) {
|
|
28
56
|
const slot = sorted[i];
|
|
29
57
|
if (slot.startTime === currentEnd) {
|
|
30
58
|
currentEnd = slot.endTime;
|
|
31
|
-
totalPrice = totalPrice.add(new
|
|
59
|
+
totalPrice = totalPrice.add(new import_decimal.default(slot.price || "0"));
|
|
32
60
|
currentSlots.push(slot);
|
|
33
61
|
} else {
|
|
34
62
|
groups.push({
|
|
@@ -41,7 +69,7 @@ function mergeConsecutiveSlots(slots) {
|
|
|
41
69
|
currentSlots = [slot];
|
|
42
70
|
currentStart = slot.startTime;
|
|
43
71
|
currentEnd = slot.endTime;
|
|
44
|
-
totalPrice = new
|
|
72
|
+
totalPrice = new import_decimal.default(slot.price || "0");
|
|
45
73
|
}
|
|
46
74
|
}
|
|
47
75
|
groups.push({
|
|
@@ -54,21 +82,15 @@ function mergeConsecutiveSlots(slots) {
|
|
|
54
82
|
return groups;
|
|
55
83
|
}
|
|
56
84
|
function buildPriceBreakdown(params) {
|
|
57
|
-
const {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
quotation
|
|
61
|
-
} = params;
|
|
62
|
-
if (!group.slots.length) return [];
|
|
85
|
+
const { group, productId, quotation } = params;
|
|
86
|
+
if (!group.slots.length)
|
|
87
|
+
return [];
|
|
63
88
|
const entries = [];
|
|
64
89
|
for (const slot of group.slots) {
|
|
65
|
-
const unitPrice = Number(slot.price ||
|
|
66
|
-
const shelfId = quotation ? quotation.getQuotationShelfId({
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}) : 0;
|
|
70
|
-
const startHm = (0, _dayjs.default)(slot.startTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
|
|
71
|
-
const endHm = (0, _dayjs.default)(slot.endTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
|
|
90
|
+
const unitPrice = Number(slot.price || "0");
|
|
91
|
+
const shelfId = quotation ? quotation.getQuotationShelfId({ productId, datetime: slot.startTime }) : 0;
|
|
92
|
+
const startHm = (0, import_dayjs.default)(slot.startTime, "YYYY-MM-DD HH:mm").format("YYYY-MM-DD HH:mm");
|
|
93
|
+
const endHm = (0, import_dayjs.default)(slot.endTime, "YYYY-MM-DD HH:mm").format("YYYY-MM-DD HH:mm");
|
|
72
94
|
const last = entries[entries.length - 1];
|
|
73
95
|
if (last && last.unit_price === unitPrice && last.quotation_shelf_id === shelfId && last.end_time === startHm) {
|
|
74
96
|
last.end_time = endHm;
|
|
@@ -86,50 +108,36 @@ function buildPriceBreakdown(params) {
|
|
|
86
108
|
return entries;
|
|
87
109
|
}
|
|
88
110
|
function buildVenueResourceMetadata(params) {
|
|
89
|
-
const {
|
|
90
|
-
|
|
91
|
-
rawResource
|
|
92
|
-
} = params;
|
|
93
|
-
const combined = rawResource?.combined_resource;
|
|
111
|
+
const { mapping, rawResource } = params;
|
|
112
|
+
const combined = rawResource == null ? void 0 : rawResource.combined_resource;
|
|
94
113
|
const isCombined = !!(combined && combined.status === 1 && Array.isArray(combined.resource_ids));
|
|
95
114
|
return {
|
|
96
115
|
form_name: mapping.formName ?? mapping.resourceName,
|
|
97
|
-
resource_name: rawResource
|
|
116
|
+
resource_name: (rawResource == null ? void 0 : rawResource.main_field) ?? mapping.resourceName,
|
|
98
117
|
combined_resource: isCombined ? combined : null
|
|
99
118
|
};
|
|
100
119
|
}
|
|
101
120
|
function buildVenueBookingEntry(params) {
|
|
102
|
-
const {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
rawResource,
|
|
107
|
-
bookingUuid,
|
|
108
|
-
productUid,
|
|
109
|
-
childResources
|
|
110
|
-
} = params;
|
|
111
|
-
const startMoment = (0, _dayjs.default)(group.startTime, 'YYYY-MM-DD HH:mm');
|
|
112
|
-
const endMoment = (0, _dayjs.default)(group.endTime, 'YYYY-MM-DD HH:mm');
|
|
113
|
-
const duration = endMoment.diff(startMoment, 'minute');
|
|
121
|
+
const { group, resourceId, mapping, rawResource, bookingUuid, productUid, childResources } = params;
|
|
122
|
+
const startMoment = (0, import_dayjs.default)(group.startTime, "YYYY-MM-DD HH:mm");
|
|
123
|
+
const endMoment = (0, import_dayjs.default)(group.endTime, "YYYY-MM-DD HH:mm");
|
|
124
|
+
const duration = endMoment.diff(startMoment, "minute");
|
|
114
125
|
const resourceEntry = {
|
|
115
|
-
relation_type:
|
|
116
|
-
like_status:
|
|
126
|
+
relation_type: "form",
|
|
127
|
+
like_status: "common",
|
|
117
128
|
id: resourceId,
|
|
118
129
|
main_field: mapping.resourceName,
|
|
119
|
-
form_id: rawResource
|
|
130
|
+
form_id: (rawResource == null ? void 0 : rawResource.form_id) ?? mapping.formId,
|
|
120
131
|
relation_id: resourceId,
|
|
121
132
|
capacity: 1,
|
|
122
|
-
metadata: buildVenueResourceMetadata({
|
|
123
|
-
mapping,
|
|
124
|
-
rawResource
|
|
125
|
-
})
|
|
133
|
+
metadata: buildVenueResourceMetadata({ mapping, rawResource })
|
|
126
134
|
};
|
|
127
135
|
if (childResources && childResources.length) {
|
|
128
|
-
resourceEntry.children = childResources.map(child => ({
|
|
129
|
-
relation_type:
|
|
130
|
-
like_status:
|
|
136
|
+
resourceEntry.children = childResources.map((child) => ({
|
|
137
|
+
relation_type: "form",
|
|
138
|
+
like_status: "common",
|
|
131
139
|
id: child.resourceId,
|
|
132
|
-
main_field: child.main_field ||
|
|
140
|
+
main_field: child.main_field || "",
|
|
133
141
|
form_id: child.form_id ?? child.formId,
|
|
134
142
|
relation_id: child.resourceId,
|
|
135
143
|
capacity: child.capacity ?? 1,
|
|
@@ -138,15 +146,15 @@ function buildVenueBookingEntry(params) {
|
|
|
138
146
|
}
|
|
139
147
|
return {
|
|
140
148
|
schedule_event_id: null,
|
|
141
|
-
appointment_status:
|
|
142
|
-
start_date: startMoment.format(
|
|
143
|
-
start_time: startMoment.format(
|
|
144
|
-
end_date: endMoment.format(
|
|
145
|
-
end_time: endMoment.format(
|
|
146
|
-
select_date: startMoment.format(
|
|
149
|
+
appointment_status: "new",
|
|
150
|
+
start_date: startMoment.format("YYYY-MM-DD"),
|
|
151
|
+
start_time: startMoment.format("HH:mm"),
|
|
152
|
+
end_date: endMoment.format("YYYY-MM-DD"),
|
|
153
|
+
end_time: endMoment.format("HH:mm"),
|
|
154
|
+
select_date: startMoment.format("YYYY-MM-DD"),
|
|
147
155
|
duration,
|
|
148
|
-
sub_type:
|
|
149
|
-
like_status:
|
|
156
|
+
sub_type: "minutes",
|
|
157
|
+
like_status: "common",
|
|
150
158
|
number: 1,
|
|
151
159
|
is_all: false,
|
|
152
160
|
schedule_id: 0,
|
|
@@ -163,62 +171,67 @@ function buildVenueBookingEntry(params) {
|
|
|
163
171
|
}
|
|
164
172
|
};
|
|
165
173
|
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* 从一条已合并的订单商品还原出独立的时段列表。
|
|
169
|
-
* 优先使用 metadata.price_breakdown 还原每个时段的精确价格,
|
|
170
|
-
* 回退到按 selling_price / slot_count 均分。
|
|
171
|
-
*/
|
|
172
174
|
function expandMergedSlotToIndividual(product, slotDurationMinutes) {
|
|
173
175
|
const meta = product.metadata || {};
|
|
174
176
|
const resourceId = meta.resource_id;
|
|
175
|
-
if (resourceId == null)
|
|
177
|
+
if (resourceId == null)
|
|
178
|
+
return [];
|
|
176
179
|
const startTime = meta.start_time;
|
|
177
180
|
const endTime = meta.end_time;
|
|
178
|
-
if (!startTime || !endTime)
|
|
181
|
+
if (!startTime || !endTime)
|
|
182
|
+
return [];
|
|
179
183
|
const productId = Number(product.product_id);
|
|
180
184
|
const breakdown = meta.price_breakdown;
|
|
181
185
|
const result = [];
|
|
182
|
-
let cursor = (0,
|
|
183
|
-
const end = (0,
|
|
184
|
-
if (breakdown
|
|
185
|
-
const priceMap = new Map();
|
|
186
|
+
let cursor = (0, import_dayjs.default)(startTime, "YYYY-MM-DD HH:mm");
|
|
187
|
+
const end = (0, import_dayjs.default)(endTime, "YYYY-MM-DD HH:mm");
|
|
188
|
+
if (breakdown == null ? void 0 : breakdown.length) {
|
|
189
|
+
const priceMap = /* @__PURE__ */ new Map();
|
|
186
190
|
for (const entry of breakdown) {
|
|
187
|
-
let entryCursor = (0,
|
|
188
|
-
const entryEnd = (0,
|
|
191
|
+
let entryCursor = (0, import_dayjs.default)(entry.start_time, "YYYY-MM-DD HH:mm");
|
|
192
|
+
const entryEnd = (0, import_dayjs.default)(entry.end_time, "YYYY-MM-DD HH:mm");
|
|
189
193
|
while (entryCursor.isBefore(entryEnd)) {
|
|
190
|
-
priceMap.set(entryCursor.format(
|
|
191
|
-
entryCursor = entryCursor.add(slotDurationMinutes,
|
|
194
|
+
priceMap.set(entryCursor.format("HH:mm"), entry.unit_price);
|
|
195
|
+
entryCursor = entryCursor.add(slotDurationMinutes, "minute");
|
|
192
196
|
}
|
|
193
197
|
}
|
|
194
198
|
while (cursor.isBefore(end)) {
|
|
195
|
-
const slotEnd = cursor.add(slotDurationMinutes,
|
|
196
|
-
const hm = cursor.format(
|
|
199
|
+
const slotEnd = cursor.add(slotDurationMinutes, "minute");
|
|
200
|
+
const hm = cursor.format("HH:mm");
|
|
197
201
|
const price = priceMap.get(hm) ?? 0;
|
|
198
202
|
result.push({
|
|
199
203
|
resourceId,
|
|
200
204
|
productId,
|
|
201
|
-
startTime: cursor.format(
|
|
202
|
-
endTime: slotEnd.format(
|
|
203
|
-
price: new
|
|
205
|
+
startTime: cursor.format("YYYY-MM-DD HH:mm"),
|
|
206
|
+
endTime: slotEnd.format("YYYY-MM-DD HH:mm"),
|
|
207
|
+
price: new import_decimal.default(price).toFixed(2)
|
|
204
208
|
});
|
|
205
209
|
cursor = slotEnd;
|
|
206
210
|
}
|
|
207
211
|
} else {
|
|
208
212
|
const slotCount = meta.slot_count || 1;
|
|
209
|
-
const totalPrice = new
|
|
213
|
+
const totalPrice = new import_decimal.default(product.selling_price || "0");
|
|
210
214
|
const perSlotPrice = slotCount > 0 ? totalPrice.div(slotCount).toFixed(2) : totalPrice.toFixed(2);
|
|
211
215
|
while (cursor.isBefore(end)) {
|
|
212
|
-
const slotEnd = cursor.add(slotDurationMinutes,
|
|
216
|
+
const slotEnd = cursor.add(slotDurationMinutes, "minute");
|
|
213
217
|
result.push({
|
|
214
218
|
resourceId,
|
|
215
219
|
productId,
|
|
216
|
-
startTime: cursor.format(
|
|
217
|
-
endTime: slotEnd.format(
|
|
220
|
+
startTime: cursor.format("YYYY-MM-DD HH:mm"),
|
|
221
|
+
endTime: slotEnd.format("YYYY-MM-DD HH:mm"),
|
|
218
222
|
price: perSlotPrice
|
|
219
223
|
});
|
|
220
224
|
cursor = slotEnd;
|
|
221
225
|
}
|
|
222
226
|
}
|
|
223
227
|
return result;
|
|
224
|
-
}
|
|
228
|
+
}
|
|
229
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
230
|
+
0 && (module.exports = {
|
|
231
|
+
buildPriceBreakdown,
|
|
232
|
+
buildVenueBookingEntry,
|
|
233
|
+
buildVenueIdentityKey,
|
|
234
|
+
buildVenueResourceMetadata,
|
|
235
|
+
expandMergedSlotToIndividual,
|
|
236
|
+
mergeConsecutiveSlots
|
|
237
|
+
});
|
|
@@ -27,8 +27,6 @@ export declare function buildTimeSlotGrid(params: {
|
|
|
27
27
|
config: VenueBookingSlotConfig;
|
|
28
28
|
rawResources: VenueResourceRawData[];
|
|
29
29
|
resourceProductMap: Map<number | string, ResourceProductMapping[]>;
|
|
30
|
-
/** @deprecated 使用 slotPriceMap */
|
|
31
30
|
quotationPriceMap?: Map<string, string | null>;
|
|
32
|
-
slotPriceMap?: Map<string, string | null>;
|
|
33
31
|
}): VenueTimeSlotGrid;
|
|
34
32
|
export {};
|