@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
package/lib/utils/watch.js
CHANGED
|
@@ -1,20 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
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);
|
|
18
|
+
|
|
19
|
+
// src/utils/watch.ts
|
|
20
|
+
var watch_exports = {};
|
|
21
|
+
__export(watch_exports, {
|
|
22
|
+
default: () => watch_default
|
|
5
23
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
events = new Map();
|
|
15
|
-
// 启用列表 - 使用数组保持顺序
|
|
16
|
-
enableListMap = new Map();
|
|
17
|
-
|
|
24
|
+
module.exports = __toCommonJS(watch_exports);
|
|
25
|
+
var Watch = class {
|
|
26
|
+
constructor() {
|
|
27
|
+
// 监听列表
|
|
28
|
+
this.events = /* @__PURE__ */ new Map();
|
|
29
|
+
// 启用列表 - 使用数组保持顺序
|
|
30
|
+
this.enableListMap = /* @__PURE__ */ new Map();
|
|
31
|
+
}
|
|
18
32
|
/**
|
|
19
33
|
* 订阅事件
|
|
20
34
|
* @param event 事件名称
|
|
@@ -22,83 +36,67 @@ class Watch {
|
|
|
22
36
|
* @returns 订阅对象,可用于取消订阅
|
|
23
37
|
*/
|
|
24
38
|
subscribe(watchKey, event) {
|
|
25
|
-
// 如果监听列表不存在,则创建
|
|
26
39
|
if (!this.events.has(watchKey)) {
|
|
27
|
-
this.events.set(watchKey, new Map());
|
|
40
|
+
this.events.set(watchKey, /* @__PURE__ */ new Map());
|
|
28
41
|
}
|
|
29
|
-
|
|
30
|
-
// 获取监听列表
|
|
31
42
|
const callbacks = this.events.get(watchKey);
|
|
32
|
-
// 设置事件
|
|
33
43
|
callbacks.set(event.key, event.callback);
|
|
34
|
-
|
|
35
|
-
// 启用事件
|
|
36
44
|
this.enableEvent(watchKey, event.key);
|
|
37
45
|
return {
|
|
38
46
|
// 取消订阅
|
|
39
47
|
unsubscribe: () => {
|
|
40
|
-
// 取消订阅事件
|
|
41
48
|
this.unsubscribe(watchKey, event);
|
|
42
49
|
}
|
|
43
50
|
};
|
|
44
51
|
}
|
|
45
|
-
|
|
46
52
|
/**
|
|
47
53
|
* 启用事件
|
|
48
54
|
* @param watchKey 监听的key
|
|
49
55
|
* @param event 事件名称
|
|
50
56
|
*/
|
|
51
57
|
enableEvent(watchKey, eventKey) {
|
|
52
|
-
// 获取启用列表
|
|
53
58
|
const enableList = this.enableListMap.get(watchKey);
|
|
54
|
-
// 如果启用列表存在,则添加事件
|
|
55
59
|
if (enableList) {
|
|
56
60
|
if (enableList.includes(eventKey)) {
|
|
57
61
|
return;
|
|
58
62
|
}
|
|
59
63
|
enableList.push(eventKey);
|
|
60
64
|
} else {
|
|
61
|
-
// 如果启用列表不存在,则创建启用列表
|
|
62
65
|
this.enableListMap.set(watchKey, [eventKey]);
|
|
63
66
|
}
|
|
64
67
|
}
|
|
65
|
-
|
|
66
68
|
/**
|
|
67
69
|
* 禁用某个事件
|
|
68
70
|
* @param watchKey 监听的key
|
|
69
71
|
* @param eventKey 事件名称
|
|
70
72
|
*/
|
|
71
73
|
disableEvent(watchKey, eventKey) {
|
|
72
|
-
// 获取启用列表
|
|
73
74
|
const enableList = this.enableListMap.get(watchKey);
|
|
74
75
|
if (enableList) {
|
|
75
|
-
// 找到当前事件的索引
|
|
76
76
|
const index = enableList.indexOf(eventKey);
|
|
77
77
|
if (index !== -1) {
|
|
78
|
-
// 删除当前事件以及之后的所有事件
|
|
79
78
|
enableList.splice(index);
|
|
80
79
|
}
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
|
-
|
|
84
82
|
/**
|
|
85
83
|
* 冻结某个监听下的所有事件
|
|
86
84
|
* @param watchKey 监听的key
|
|
87
85
|
*/
|
|
88
86
|
disabledAllEventByWatchKey(watchKey) {
|
|
89
|
-
// 设置启用列表为空
|
|
90
87
|
this.enableListMap.set(watchKey, []);
|
|
91
88
|
}
|
|
92
|
-
|
|
93
89
|
/**
|
|
94
90
|
* 启用某个监听下的所有事件
|
|
95
91
|
* @param watchKey 监听的key
|
|
96
92
|
*/
|
|
97
93
|
enableAllEventByWatchKey(watchKey) {
|
|
98
|
-
|
|
99
|
-
this.enableListMap.set(
|
|
94
|
+
var _a;
|
|
95
|
+
this.enableListMap.set(
|
|
96
|
+
watchKey,
|
|
97
|
+
Array.from(((_a = this.events.get(watchKey)) == null ? void 0 : _a.keys()) || [])
|
|
98
|
+
);
|
|
100
99
|
}
|
|
101
|
-
|
|
102
100
|
/**
|
|
103
101
|
* 取消订阅事件
|
|
104
102
|
* @param event 事件名称
|
|
@@ -106,51 +104,38 @@ class Watch {
|
|
|
106
104
|
* @returns 是否成功取消订阅
|
|
107
105
|
*/
|
|
108
106
|
unsubscribe(watchKey, event) {
|
|
109
|
-
// 获取监听列表
|
|
110
107
|
const callbacks = this.events.get(watchKey);
|
|
111
|
-
// 如果监听列表不存在,则返回false
|
|
112
108
|
if (!callbacks) {
|
|
113
109
|
return;
|
|
114
110
|
}
|
|
115
|
-
// 禁用事件
|
|
116
111
|
this.disableEvent(watchKey, event.key);
|
|
117
|
-
// 删除事件
|
|
118
112
|
callbacks.delete(event.key);
|
|
119
113
|
return;
|
|
120
114
|
}
|
|
121
|
-
|
|
122
115
|
/**
|
|
123
116
|
* 发布事件
|
|
124
117
|
* @param event 事件名称
|
|
125
118
|
* @param args 事件参数
|
|
126
119
|
*/
|
|
127
120
|
publish(watchKey, ...args) {
|
|
128
|
-
|
|
121
|
+
var _a;
|
|
129
122
|
const callbacks = this.events.get(watchKey);
|
|
130
|
-
// 如果监听列表不存在,则返回
|
|
131
123
|
if (!callbacks) {
|
|
132
124
|
return;
|
|
133
125
|
}
|
|
134
|
-
|
|
135
|
-
// 获取启用列表
|
|
136
126
|
const enableList = this.enableListMap.get(watchKey);
|
|
137
|
-
// 如果启用列表不存在,则返回
|
|
138
127
|
if (!enableList || enableList.length === 0) {
|
|
139
128
|
return;
|
|
140
129
|
}
|
|
141
|
-
|
|
142
|
-
// 只执行最后一个事件
|
|
143
130
|
const lastCallbackKey = enableList.at(-1);
|
|
144
|
-
// 如果最后一个事件存在,则执行
|
|
145
131
|
if (lastCallbackKey) {
|
|
146
132
|
try {
|
|
147
|
-
callbacks.get(lastCallbackKey)
|
|
133
|
+
(_a = callbacks.get(lastCallbackKey)) == null ? void 0 : _a(...args);
|
|
148
134
|
} catch (error) {
|
|
149
135
|
console.error(`执行事件"${watchKey}"的回调时出错:`, error);
|
|
150
136
|
}
|
|
151
137
|
}
|
|
152
138
|
}
|
|
153
|
-
|
|
154
139
|
/**
|
|
155
140
|
* 根据事件名称发布事件
|
|
156
141
|
* @param watchKey 监听的key
|
|
@@ -158,13 +143,13 @@ class Watch {
|
|
|
158
143
|
* @param args 事件参数
|
|
159
144
|
*/
|
|
160
145
|
publishByEventKey(watchKey, eventKey, ...args) {
|
|
146
|
+
var _a;
|
|
161
147
|
const callbacks = this.events.get(watchKey);
|
|
162
148
|
if (!callbacks) {
|
|
163
149
|
return;
|
|
164
150
|
}
|
|
165
|
-
callbacks.get(eventKey)
|
|
151
|
+
(_a = callbacks.get(eventKey)) == null ? void 0 : _a(...args);
|
|
166
152
|
}
|
|
167
|
-
|
|
168
153
|
/**
|
|
169
154
|
* 获取最后一个启用的事件
|
|
170
155
|
* @param watchKey 监听的key
|
|
@@ -172,56 +157,45 @@ class Watch {
|
|
|
172
157
|
*/
|
|
173
158
|
getLastEnableEventKey(watchKey) {
|
|
174
159
|
const enableList = this.enableListMap.get(watchKey);
|
|
160
|
+
console.log("enableList", enableList);
|
|
175
161
|
if (!enableList) {
|
|
176
|
-
return
|
|
162
|
+
return void 0;
|
|
177
163
|
}
|
|
178
|
-
return enableList.at(-1) ||
|
|
164
|
+
return enableList.at(-1) || void 0;
|
|
179
165
|
}
|
|
180
|
-
|
|
181
166
|
/**
|
|
182
167
|
* 移除某个事件的所有订阅
|
|
183
168
|
* @param event 事件名称
|
|
184
169
|
* @returns 是否成功移除
|
|
185
170
|
*/
|
|
186
171
|
clearEvent(watchKey) {
|
|
187
|
-
// 禁用所有事件
|
|
188
172
|
this.disabledAllEventByWatchKey(watchKey);
|
|
189
|
-
// 删除监听列表
|
|
190
173
|
this.events.delete(watchKey);
|
|
191
174
|
}
|
|
192
|
-
|
|
193
175
|
/**
|
|
194
176
|
* 移除所有事件订阅
|
|
195
177
|
*/
|
|
196
178
|
clearAllEvents() {
|
|
197
|
-
// 清空监听列表
|
|
198
179
|
this.events.clear();
|
|
199
|
-
// 清空启用列表
|
|
200
180
|
this.enableListMap.clear();
|
|
201
181
|
}
|
|
202
|
-
|
|
203
182
|
/**
|
|
204
183
|
* 获取事件的订阅数量
|
|
205
184
|
* @param event 事件名称
|
|
206
185
|
* @returns 订阅数量
|
|
207
186
|
*/
|
|
208
187
|
getSubscriberCount(event) {
|
|
209
|
-
// 获取监听列表
|
|
210
188
|
const callbacks = this.events.get(event);
|
|
211
|
-
// 如果监听列表不存在,则返回0
|
|
212
189
|
return callbacks ? callbacks.size : 0;
|
|
213
190
|
}
|
|
214
|
-
|
|
215
191
|
/**
|
|
216
192
|
* 检查事件是否有订阅者
|
|
217
193
|
* @param event 事件名称
|
|
218
194
|
* @returns 是否有订阅者
|
|
219
195
|
*/
|
|
220
196
|
hasSubscribers(event) {
|
|
221
|
-
// 获取监听列表
|
|
222
197
|
return this.getSubscriberCount(event) > 0;
|
|
223
198
|
}
|
|
224
|
-
|
|
225
199
|
/**
|
|
226
200
|
* 一次性订阅事件,事件触发后自动取消订阅
|
|
227
201
|
* @param event 事件名称
|
|
@@ -229,14 +203,8 @@ class Watch {
|
|
|
229
203
|
* @returns 订阅对象,可用于取消订阅
|
|
230
204
|
*/
|
|
231
205
|
once(watchKey, event) {
|
|
232
|
-
// 包装回调函数
|
|
233
206
|
const wrappedCallback = (...args) => {
|
|
234
|
-
|
|
235
|
-
this.unsubscribe(watchKey, {
|
|
236
|
-
key: event.key,
|
|
237
|
-
callback: wrappedCallback
|
|
238
|
-
});
|
|
239
|
-
// 执行回调
|
|
207
|
+
this.unsubscribe(watchKey, { key: event.key, callback: wrappedCallback });
|
|
240
208
|
event.callback(...args);
|
|
241
209
|
};
|
|
242
210
|
return this.subscribe(watchKey, {
|
|
@@ -244,8 +212,6 @@ class Watch {
|
|
|
244
212
|
callback: wrappedCallback
|
|
245
213
|
});
|
|
246
214
|
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
const watch = new Watch();
|
|
251
|
-
var _default = exports.default = watch;
|
|
215
|
+
};
|
|
216
|
+
var watch = new Watch();
|
|
217
|
+
var watch_default = watch;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"private": false,
|
|
3
3
|
"name": "@pisell/pisellos",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.10.2",
|
|
5
5
|
"description": "一个可扩展的前端模块化SDK框架,支持插件系统",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -23,8 +23,7 @@
|
|
|
23
23
|
"docs": "typedoc --out docs src/index.ts",
|
|
24
24
|
"sync": "node sync.js",
|
|
25
25
|
"prepublishOnly": "npm run build",
|
|
26
|
-
"deploy": "npm run build && npm run changeset && npm run version && npm run release"
|
|
27
|
-
"deploy:ci": "npm run build && npm run version && changeset publish --registry=https://registry.npmjs.com/ && npm run sync"
|
|
26
|
+
"deploy": "npm run build && npm run changeset && npm run version && npm run release"
|
|
28
27
|
},
|
|
29
28
|
"repository": {
|
|
30
29
|
"type": "git",
|
|
@@ -55,7 +54,6 @@
|
|
|
55
54
|
"@typescript-eslint/eslint-plugin": "^5.57.1",
|
|
56
55
|
"@typescript-eslint/parser": "^5.57.1",
|
|
57
56
|
"axios": "1.7.2",
|
|
58
|
-
"babel-plugin-transform-remove-console": "^6.9.4",
|
|
59
57
|
"eslint": "^8.37.0",
|
|
60
58
|
"fake-indexeddb": "^6.0.1",
|
|
61
59
|
"father": "^4.1.0",
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import type { ProductData } from '../../../modules/Product/types';
|
|
2
|
-
import type { ScheduleItem } from '../../../modules/Schedule/types';
|
|
3
|
-
import type { DataVariantBusinessData, DataVariantMenu, DataVariantProduct } from '../../../model/strategy/adapter/dataVariant/type';
|
|
4
|
-
import type { DataVariantEvaluator } from '../../../model/strategy/adapter/dataVariant/evaluator';
|
|
5
|
-
import type { StrategyConfig } from '../../../model/strategy/type';
|
|
6
|
-
import type { VenueBookingSlotConfig } from '../types';
|
|
7
|
-
/** VenueBooking 智能定价运行时上下文 */
|
|
8
|
-
export interface VenueBookingSmartPricingContext {
|
|
9
|
-
evaluator?: DataVariantEvaluator | null;
|
|
10
|
-
scheduleList?: ScheduleItem[];
|
|
11
|
-
menuList?: DataVariantMenu[];
|
|
12
|
-
customerId?: number | string;
|
|
13
|
-
availableWalletIds?: Array<number | string>;
|
|
14
|
-
channel?: string;
|
|
15
|
-
businessCode?: string;
|
|
16
|
-
orderType?: string;
|
|
17
|
-
strategy_context?: Record<string, any>;
|
|
18
|
-
strategyConfigs?: StrategyConfig[];
|
|
19
|
-
}
|
|
20
|
-
/** 从商品上读取展示/算价用的 price 字段 */
|
|
21
|
-
export declare function extractProductPrice(product: DataVariantProduct): string | null;
|
|
22
|
-
/** 组装 DataVariant 评估入参,对齐 OS Server buildProductFormatterContext 语义 */
|
|
23
|
-
export declare function buildDataVariantBusinessData(products: ProductData[], context: VenueBookingSmartPricingContext, scheduleDateTime: string): DataVariantBusinessData;
|
|
24
|
-
/**
|
|
25
|
-
* 对商品列表执行一次智能定价格式化(loadProducts 后使用)。
|
|
26
|
-
* evaluator 未注入时原样返回并打 warning。
|
|
27
|
-
*/
|
|
28
|
-
export declare function formatProductsWithDataVariant(products: ProductData[], context: VenueBookingSmartPricingContext, scheduleDateTime?: string): ProductData[];
|
|
29
|
-
/**
|
|
30
|
-
* 根据 schedule_time_points 与营业开始时间,构造当天需要评估的 datetime 列表(升序)。
|
|
31
|
-
* 跨日营业时,早于营业开始小时的时间点归到次日。
|
|
32
|
-
*/
|
|
33
|
-
export declare function buildEvaluationDatetimes(params: {
|
|
34
|
-
date: string;
|
|
35
|
-
config: VenueBookingSlotConfig;
|
|
36
|
-
scheduleTimePoints: string[];
|
|
37
|
-
}): string[];
|
|
38
|
-
/** 找到 slot 时间所属分段的评估 datetime(max(evalDt <= slotDt)) */
|
|
39
|
-
export declare function findSegmentEvalDatetime(slotDatetime: string, evalDatetimes: string[]): string;
|
|
40
|
-
/** 将 slot 标签转为与 timeSlot 网格一致的 slotStart 字符串 */
|
|
41
|
-
export declare function buildSlotStartDatetime(date: string, label: string, config: VenueBookingSlotConfig): string;
|
|
42
|
-
/**
|
|
43
|
-
* 按 schedule 分段批量 resolveProducts,输出与 quotation 相同 key 格式的 slot 价格 Map。
|
|
44
|
-
* key: `${productId}:${slotStart}`,value: price | null
|
|
45
|
-
*/
|
|
46
|
-
export declare function buildSlotPriceMapByScheduleSegments(params: {
|
|
47
|
-
products: ProductData[];
|
|
48
|
-
productIds: number[];
|
|
49
|
-
date: string;
|
|
50
|
-
timeLabels: string[];
|
|
51
|
-
config: VenueBookingSlotConfig;
|
|
52
|
-
context: VenueBookingSmartPricingContext;
|
|
53
|
-
}): Map<string, string | null>;
|
|
54
|
-
/**
|
|
55
|
-
* 指定商品在某一 datetime 的智能定价(addon / 单点重算用)。
|
|
56
|
-
*/
|
|
57
|
-
export declare function getPriceForProductAtDatetime(params: {
|
|
58
|
-
products: ProductData[];
|
|
59
|
-
context: VenueBookingSmartPricingContext;
|
|
60
|
-
productId: number;
|
|
61
|
-
datetime: string;
|
|
62
|
-
fallbackPrice?: string;
|
|
63
|
-
}): string;
|
|
64
|
-
/** 从 slot 价格 Map 读取单价,找不到则回退 fallback */
|
|
65
|
-
export declare function getSlotPriceFromMap(params: {
|
|
66
|
-
slotPriceMap: Map<string, string | null>;
|
|
67
|
-
productId: number;
|
|
68
|
-
slotStartTime: string;
|
|
69
|
-
fallbackPrice?: string;
|
|
70
|
-
}): string;
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
2
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
3
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
4
|
-
import dayjs from 'dayjs';
|
|
5
|
-
import { isBusinessHoursCrossDay } from "./timeSlot";
|
|
6
|
-
|
|
7
|
-
/** VenueBooking 智能定价运行时上下文 */
|
|
8
|
-
|
|
9
|
-
/** 从商品上读取展示/算价用的 price 字段 */
|
|
10
|
-
export function extractProductPrice(product) {
|
|
11
|
-
var _product$price;
|
|
12
|
-
var price = (_product$price = product === null || product === void 0 ? void 0 : product.price) !== null && _product$price !== void 0 ? _product$price : product === null || product === void 0 ? void 0 : product.selling_price;
|
|
13
|
-
if (price == null || price === '') return null;
|
|
14
|
-
return String(price);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** 组装 DataVariant 评估入参,对齐 OS Server buildProductFormatterContext 语义 */
|
|
18
|
-
export function buildDataVariantBusinessData(products, context, scheduleDateTime) {
|
|
19
|
-
var _ref, _context$availableWal, _context$channel, _ref2, _context$orderType, _ref3, _context$businessCode;
|
|
20
|
-
var strategyContext = context.strategy_context || {};
|
|
21
|
-
return {
|
|
22
|
-
products: products,
|
|
23
|
-
strategyConfigs: context.strategyConfigs,
|
|
24
|
-
scheduleDateTime: scheduleDateTime,
|
|
25
|
-
scheduleList: context.scheduleList || [],
|
|
26
|
-
menuList: context.menuList || [],
|
|
27
|
-
customerId: context.customerId,
|
|
28
|
-
availableWalletIds: (_ref = (_context$availableWal = context.availableWalletIds) !== null && _context$availableWal !== void 0 ? _context$availableWal : strategyContext.available_wallet_ids) !== null && _ref !== void 0 ? _ref : strategyContext.availableWalletIds,
|
|
29
|
-
channel: (_context$channel = context.channel) !== null && _context$channel !== void 0 ? _context$channel : strategyContext.channel,
|
|
30
|
-
orderType: (_ref2 = (_context$orderType = context.orderType) !== null && _context$orderType !== void 0 ? _context$orderType : strategyContext.orderType) !== null && _ref2 !== void 0 ? _ref2 : strategyContext.order_type,
|
|
31
|
-
businessCode: (_ref3 = (_context$businessCode = context.businessCode) !== null && _context$businessCode !== void 0 ? _context$businessCode : strategyContext.business_code) !== null && _ref3 !== void 0 ? _ref3 : strategyContext.businessCode,
|
|
32
|
-
custom: strategyContext
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* 对商品列表执行一次智能定价格式化(loadProducts 后使用)。
|
|
38
|
-
* evaluator 未注入时原样返回并打 warning。
|
|
39
|
-
*/
|
|
40
|
-
export function formatProductsWithDataVariant(products, context, scheduleDateTime) {
|
|
41
|
-
var evaluator = context.evaluator;
|
|
42
|
-
if (!evaluator || typeof evaluator.resolveProducts !== 'function') {
|
|
43
|
-
console.warn('[VenueBooking][smartPricing] dataVariantEvaluator 未注入,跳过智能定价格式化');
|
|
44
|
-
return products;
|
|
45
|
-
}
|
|
46
|
-
var resolvedAt = scheduleDateTime || dayjs().format('YYYY-MM-DD HH:mm:ss');
|
|
47
|
-
var businessData = buildDataVariantBusinessData(products, context, resolvedAt);
|
|
48
|
-
var result = evaluator.resolveProducts(businessData);
|
|
49
|
-
return Array.isArray(result === null || result === void 0 ? void 0 : result.products) ? result.products : products;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* 根据 schedule_time_points 与营业开始时间,构造当天需要评估的 datetime 列表(升序)。
|
|
54
|
-
* 跨日营业时,早于营业开始小时的时间点归到次日。
|
|
55
|
-
*/
|
|
56
|
-
export function buildEvaluationDatetimes(params) {
|
|
57
|
-
var date = params.date,
|
|
58
|
-
config = params.config,
|
|
59
|
-
scheduleTimePoints = params.scheduleTimePoints;
|
|
60
|
-
var crossDay = isBusinessHoursCrossDay(config);
|
|
61
|
-
var businessStartHour = Number(config.businessStartTime.split(':')[0]);
|
|
62
|
-
var evalSet = new Set();
|
|
63
|
-
evalSet.add("".concat(date, " ").concat(config.businessStartTime));
|
|
64
|
-
var _iterator = _createForOfIteratorHelper(scheduleTimePoints),
|
|
65
|
-
_step;
|
|
66
|
-
try {
|
|
67
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
68
|
-
var timePoint = _step.value;
|
|
69
|
-
var hour = Number(timePoint.split(':')[0]);
|
|
70
|
-
var pointDate = crossDay && hour < businessStartHour ? dayjs(date).add(1, 'day').format('YYYY-MM-DD') : date;
|
|
71
|
-
evalSet.add("".concat(pointDate, " ").concat(timePoint));
|
|
72
|
-
}
|
|
73
|
-
} catch (err) {
|
|
74
|
-
_iterator.e(err);
|
|
75
|
-
} finally {
|
|
76
|
-
_iterator.f();
|
|
77
|
-
}
|
|
78
|
-
return Array.from(evalSet).sort(function (a, b) {
|
|
79
|
-
var aMs = dayjs(a, ['YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD HH:mm']).valueOf();
|
|
80
|
-
var bMs = dayjs(b, ['YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD HH:mm']).valueOf();
|
|
81
|
-
return aMs - bMs;
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** 找到 slot 时间所属分段的评估 datetime(max(evalDt <= slotDt)) */
|
|
86
|
-
export function findSegmentEvalDatetime(slotDatetime, evalDatetimes) {
|
|
87
|
-
if (!evalDatetimes.length) return slotDatetime;
|
|
88
|
-
var slotMs = dayjs(slotDatetime, ['YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD HH:mm']).valueOf();
|
|
89
|
-
var chosen = evalDatetimes[0];
|
|
90
|
-
var _iterator2 = _createForOfIteratorHelper(evalDatetimes),
|
|
91
|
-
_step2;
|
|
92
|
-
try {
|
|
93
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
94
|
-
var evalDt = _step2.value;
|
|
95
|
-
var evalMs = dayjs(evalDt, ['YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD HH:mm']).valueOf();
|
|
96
|
-
if (evalMs <= slotMs) {
|
|
97
|
-
chosen = evalDt;
|
|
98
|
-
} else {
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
} catch (err) {
|
|
103
|
-
_iterator2.e(err);
|
|
104
|
-
} finally {
|
|
105
|
-
_iterator2.f();
|
|
106
|
-
}
|
|
107
|
-
return chosen;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/** 将 slot 标签转为与 timeSlot 网格一致的 slotStart 字符串 */
|
|
111
|
-
export function buildSlotStartDatetime(date, label, config) {
|
|
112
|
-
var crossDay = isBusinessHoursCrossDay(config);
|
|
113
|
-
var businessStartHour = Number(config.businessStartTime.split(':')[0]);
|
|
114
|
-
var hour = Number(label.split(':')[0]);
|
|
115
|
-
var slotDate = crossDay && hour < businessStartHour ? dayjs(date).add(1, 'day').format('YYYY-MM-DD') : date;
|
|
116
|
-
return dayjs("".concat(slotDate, " ").concat(label)).format('YYYY-MM-DD HH:mm');
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* 按 schedule 分段批量 resolveProducts,输出与 quotation 相同 key 格式的 slot 价格 Map。
|
|
121
|
-
* key: `${productId}:${slotStart}`,value: price | null
|
|
122
|
-
*/
|
|
123
|
-
export function buildSlotPriceMapByScheduleSegments(params) {
|
|
124
|
-
var products = params.products,
|
|
125
|
-
productIds = params.productIds,
|
|
126
|
-
date = params.date,
|
|
127
|
-
timeLabels = params.timeLabels,
|
|
128
|
-
config = params.config,
|
|
129
|
-
context = params.context;
|
|
130
|
-
var map = new Map();
|
|
131
|
-
if (!productIds.length || !timeLabels.length) return map;
|
|
132
|
-
var evaluator = context.evaluator;
|
|
133
|
-
if (!evaluator || typeof evaluator.resolveProducts !== 'function') {
|
|
134
|
-
return map;
|
|
135
|
-
}
|
|
136
|
-
var strategyConfigs = context.strategyConfigs || (typeof evaluator.getStrategyConfigs === 'function' ? evaluator.getStrategyConfigs() : []);
|
|
137
|
-
var scheduleTimePoints = typeof evaluator.buildScheduleTimePoints === 'function' ? evaluator.buildScheduleTimePoints(strategyConfigs, context.scheduleList || []) : [];
|
|
138
|
-
var evalDatetimes = buildEvaluationDatetimes({
|
|
139
|
-
date: date,
|
|
140
|
-
config: config,
|
|
141
|
-
scheduleTimePoints: scheduleTimePoints
|
|
142
|
-
});
|
|
143
|
-
var priceCache = new Map();
|
|
144
|
-
var _iterator3 = _createForOfIteratorHelper(evalDatetimes),
|
|
145
|
-
_step3;
|
|
146
|
-
try {
|
|
147
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
148
|
-
var evalDt = _step3.value;
|
|
149
|
-
var resolved = formatProductsWithDataVariant(products, context, evalDt);
|
|
150
|
-
var priceByProductId = new Map();
|
|
151
|
-
var _iterator5 = _createForOfIteratorHelper(resolved),
|
|
152
|
-
_step5;
|
|
153
|
-
try {
|
|
154
|
-
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
155
|
-
var product = _step5.value;
|
|
156
|
-
var productId = Number(product.id);
|
|
157
|
-
if (!Number.isFinite(productId)) continue;
|
|
158
|
-
priceByProductId.set(productId, extractProductPrice(product));
|
|
159
|
-
}
|
|
160
|
-
} catch (err) {
|
|
161
|
-
_iterator5.e(err);
|
|
162
|
-
} finally {
|
|
163
|
-
_iterator5.f();
|
|
164
|
-
}
|
|
165
|
-
priceCache.set(evalDt, priceByProductId);
|
|
166
|
-
}
|
|
167
|
-
} catch (err) {
|
|
168
|
-
_iterator3.e(err);
|
|
169
|
-
} finally {
|
|
170
|
-
_iterator3.f();
|
|
171
|
-
}
|
|
172
|
-
var _iterator4 = _createForOfIteratorHelper(timeLabels),
|
|
173
|
-
_step4;
|
|
174
|
-
try {
|
|
175
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
176
|
-
var label = _step4.value;
|
|
177
|
-
var slotStart = buildSlotStartDatetime(date, label, config);
|
|
178
|
-
var segmentEvalDt = findSegmentEvalDatetime(slotStart, evalDatetimes);
|
|
179
|
-
var _priceByProductId = priceCache.get(segmentEvalDt);
|
|
180
|
-
var _iterator6 = _createForOfIteratorHelper(productIds),
|
|
181
|
-
_step6;
|
|
182
|
-
try {
|
|
183
|
-
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
184
|
-
var _priceByProductId$get;
|
|
185
|
-
var _productId = _step6.value;
|
|
186
|
-
var key = "".concat(_productId, ":").concat(slotStart);
|
|
187
|
-
var price = (_priceByProductId$get = _priceByProductId === null || _priceByProductId === void 0 ? void 0 : _priceByProductId.get(_productId)) !== null && _priceByProductId$get !== void 0 ? _priceByProductId$get : null;
|
|
188
|
-
if (price !== null) {
|
|
189
|
-
map.set(key, price);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
} catch (err) {
|
|
193
|
-
_iterator6.e(err);
|
|
194
|
-
} finally {
|
|
195
|
-
_iterator6.f();
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
} catch (err) {
|
|
199
|
-
_iterator4.e(err);
|
|
200
|
-
} finally {
|
|
201
|
-
_iterator4.f();
|
|
202
|
-
}
|
|
203
|
-
return map;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* 指定商品在某一 datetime 的智能定价(addon / 单点重算用)。
|
|
208
|
-
*/
|
|
209
|
-
export function getPriceForProductAtDatetime(params) {
|
|
210
|
-
var _ref4, _extractProductPrice;
|
|
211
|
-
var products = params.products,
|
|
212
|
-
context = params.context,
|
|
213
|
-
productId = params.productId,
|
|
214
|
-
datetime = params.datetime,
|
|
215
|
-
fallbackPrice = params.fallbackPrice;
|
|
216
|
-
var resolved = formatProductsWithDataVariant(products, context, datetime);
|
|
217
|
-
var product = resolved.find(function (item) {
|
|
218
|
-
return Number(item.id) === Number(productId);
|
|
219
|
-
});
|
|
220
|
-
return (_ref4 = (_extractProductPrice = extractProductPrice(product || {})) !== null && _extractProductPrice !== void 0 ? _extractProductPrice : fallbackPrice) !== null && _ref4 !== void 0 ? _ref4 : '0.00';
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/** 从 slot 价格 Map 读取单价,找不到则回退 fallback */
|
|
224
|
-
export function getSlotPriceFromMap(params) {
|
|
225
|
-
var slotPriceMap = params.slotPriceMap,
|
|
226
|
-
productId = params.productId,
|
|
227
|
-
slotStartTime = params.slotStartTime,
|
|
228
|
-
fallbackPrice = params.fallbackPrice;
|
|
229
|
-
var key = "".concat(productId, ":").concat(slotStartTime);
|
|
230
|
-
var mapped = slotPriceMap.get(key);
|
|
231
|
-
if (mapped != null) return mapped;
|
|
232
|
-
return fallbackPrice !== null && fallbackPrice !== void 0 ? fallbackPrice : '0.00';
|
|
233
|
-
}
|