@pisell/pisellos 2.3.74 → 2.3.75
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 +6 -10
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/strategy-example.js +5 -19
- package/dist/modules/Cart/index.js +0 -3
- package/dist/modules/Cart/utils/cartProduct.js +0 -1
- package/dist/modules/Date/index.js +1 -5
- package/dist/modules/Discount/index.js +2 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.js +36 -64
- package/dist/modules/Payment/index.js +97 -162
- package/dist/modules/Rules/index.js +1 -4
- package/dist/modules/Schedule/index.js +0 -1
- package/dist/modules/Schedule/utils.js +0 -1
- package/dist/modules/Step/index.js +0 -1
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.js +97 -129
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/order/index.js +2 -4
- package/dist/server/modules/products/index.js +24 -42
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +3 -4
- package/dist/server/modules/schedule/index.js +27 -35
- package/dist/server/utils/product.js +0 -1
- package/dist/solution/BaseSales/index.js +38 -41
- package/dist/solution/BookingByStep/index.js +7 -59
- package/dist/solution/BookingByStep/utils/capacity.js +1 -11
- package/dist/solution/BookingByStep/utils/resources.js +1 -3
- package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
- package/dist/solution/BookingTicket/index.js +0 -2
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
- package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
- package/dist/solution/BuyTickets/index.js +9 -12
- package/dist/solution/Checkout/index.js +177 -252
- package/dist/solution/Checkout/utils/index.js +4 -16
- package/dist/solution/RegisterAndLogin/index.js +30 -76
- package/dist/solution/ScanOrder/index.js +50 -60
- package/dist/solution/ShopDiscount/index.js +2 -7
- package/dist/solution/VenueBooking/index.js +45 -55
- package/dist/utils/task.js +15 -18
- package/dist/utils/watch.js +0 -1
- package/lib/apis/picoding.js +2 -0
- package/lib/core/index.js +134 -134
- package/lib/effects/index.js +46 -57
- package/lib/index.js +82 -49
- package/lib/model/index.js +14 -21
- package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
- package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
- package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
- package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
- package/lib/model/strategy/adapter/index.js +100 -64
- package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
- package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
- package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
- package/lib/model/strategy/adapter/itemRule/index.js +83 -57
- package/lib/model/strategy/adapter/itemRule/type.js +97 -36
- package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
- package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
- package/lib/model/strategy/adapter/promotion/examples.js +222 -234
- package/lib/model/strategy/adapter/promotion/index.js +1 -0
- package/lib/model/strategy/adapter/promotion/type.js +243 -36
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
- package/lib/model/strategy/adapter/walletPass/example.js +217 -190
- package/lib/model/strategy/adapter/walletPass/index.js +75 -51
- package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
- package/lib/model/strategy/adapter/walletPass/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
- package/lib/model/strategy/engine.js +270 -168
- package/lib/model/strategy/index.js +49 -34
- package/lib/model/strategy/strategy-example.js +243 -239
- package/lib/model/strategy/type.js +100 -40
- package/lib/modules/Account/index.js +39 -53
- package/lib/modules/Account/types.js +20 -33
- package/lib/modules/AccountList/index.js +116 -154
- package/lib/modules/AccountList/types.js +30 -31
- package/lib/modules/AccountList/utils.js +18 -30
- package/lib/modules/BaseModule.js +23 -42
- package/lib/modules/BookingContext/index.js +158 -136
- package/lib/modules/BookingContext/types.js +46 -32
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
- package/lib/modules/BookingContext/utils/flexible.js +38 -55
- package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
- package/lib/modules/BookingContext/utils/index.js +124 -41
- package/lib/modules/BookingContext/utils/noResource.js +58 -70
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
- package/lib/modules/BookingContext/utils/productExtend.js +202 -155
- package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
- package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
- package/lib/modules/BookingContext/utils/resources.js +209 -167
- package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
- package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
- package/lib/modules/Cart/index.js +170 -124
- package/lib/modules/Cart/types.js +46 -51
- package/lib/modules/Cart/utils/cartAccount.js +40 -39
- package/lib/modules/Cart/utils/cartDate.js +56 -61
- package/lib/modules/Cart/utils/cartDiscount.js +28 -33
- package/lib/modules/Cart/utils/cartNote.js +27 -32
- package/lib/modules/Cart/utils/cartProduct.js +321 -251
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +70 -78
- package/lib/modules/Cart/utils/changePrice.js +22 -50
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +235 -172
- package/lib/modules/Customer/types.js +38 -35
- package/lib/modules/Date/index.js +116 -115
- package/lib/modules/Date/types.js +16 -28
- package/lib/modules/Date/utils.js +174 -123
- package/lib/modules/Discount/index.js +122 -127
- package/lib/modules/Discount/types.js +9 -31
- package/lib/modules/Guests/index.js +30 -56
- package/lib/modules/Guests/types.js +23 -33
- package/lib/modules/Holder/index.js +209 -189
- package/lib/modules/Holder/types.js +4 -16
- package/lib/modules/Holder/utils.js +20 -49
- package/lib/modules/OpenData/index.js +70 -76
- package/lib/modules/OpenData/types.js +4 -16
- package/lib/modules/OpenData/utils.js +44 -78
- package/lib/modules/Order/index.js +1713 -2118
- package/lib/modules/Order/payment-utils.js +77 -120
- package/lib/modules/Order/types.js +88 -35
- package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
- package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
- package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
- package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
- package/lib/modules/Order/utils.js +814 -647
- package/lib/modules/Payment/cash.js +20 -33
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
- package/lib/modules/Payment/eftpos.js +16 -30
- package/lib/modules/Payment/index.js +532 -399
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +230 -108
- package/lib/modules/Payment/utils.js +52 -51
- package/lib/modules/Payment/walletpass.js +485 -660
- package/lib/modules/Product/index.js +51 -46
- package/lib/modules/Product/types.js +4 -16
- package/lib/modules/Product/utils.js +32 -33
- package/lib/modules/ProductList/index.js +113 -123
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +81 -118
- package/lib/modules/Quotation/types.js +4 -16
- package/lib/modules/Resource/index.js +27 -59
- package/lib/modules/Resource/types.js +22 -32
- package/lib/modules/Resource/utils.js +30 -38
- package/lib/modules/ResourcePlanner/index.js +25 -23
- package/lib/modules/ResourcePlanner/localClock.js +54 -119
- package/lib/modules/ResourcePlanner/planner.js +589 -770
- package/lib/modules/ResourcePlanner/types.js +10 -29
- package/lib/modules/Rules/index.js +1218 -959
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +85 -90
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +355 -430
- package/lib/modules/ScanOrderLogger/index.js +59 -79
- package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
- package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
- package/lib/modules/ScanOrderLogger/types.js +4 -16
- package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
- package/lib/modules/Schedule/index.js +100 -114
- package/lib/modules/Schedule/type.js +4 -16
- package/lib/modules/Schedule/types.js +4 -16
- package/lib/modules/Schedule/utils.js +433 -291
- package/lib/modules/Step/index.js +40 -52
- package/lib/modules/Step/tyeps.js +4 -16
- package/lib/modules/Summary/index.js +66 -71
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +773 -418
- package/lib/modules/SurchargeList/index.js +46 -60
- package/lib/modules/SurchargeList/types.js +4 -16
- package/lib/modules/index.js +245 -63
- package/lib/plugins/app.js +4 -16
- package/lib/plugins/index.js +36 -25
- package/lib/plugins/request.js +137 -126
- package/lib/plugins/shopStore.js +4 -16
- package/lib/plugins/user.js +4 -16
- package/lib/plugins/window.js +171 -179
- package/lib/server/index.js +3050 -2665
- package/lib/server/modules/floor-plan/index.js +118 -134
- package/lib/server/modules/floor-plan/types.js +15 -30
- package/lib/server/modules/index.js +106 -68
- package/lib/server/modules/menu/index.js +142 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +784 -1002
- package/lib/server/modules/order/types.js +122 -33
- package/lib/server/modules/order/utils/filterBookings.js +219 -194
- package/lib/server/modules/order/utils/filterOrders.js +118 -92
- package/lib/server/modules/payment/index.js +59 -83
- package/lib/server/modules/payment/types.js +4 -16
- package/lib/server/modules/products/index.js +583 -471
- package/lib/server/modules/products/types.js +44 -34
- package/lib/server/modules/quotation/index.js +137 -172
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +220 -186
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +135 -123
- package/lib/server/modules/schedule/types.js +14 -21
- package/lib/server/modules/schedule/utils.js +334 -163
- package/lib/server/types.js +4 -16
- package/lib/server/utils/index.js +25 -23
- package/lib/server/utils/product.js +196 -139
- package/lib/server/utils/schedule.js +34 -41
- package/lib/server/utils/small-ticket.js +479 -456
- package/lib/server/utils/time.js +40 -49
- package/lib/solution/BaseSales/index.js +1186 -1410
- package/lib/solution/BaseSales/types.js +42 -38
- package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
- package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
- package/lib/solution/BaseSales/utils.js +158 -143
- package/lib/solution/BookingByStep/index.js +1527 -1340
- package/lib/solution/BookingByStep/types.js +40 -99
- package/lib/solution/BookingByStep/utils/capacity.js +192 -160
- package/lib/solution/BookingByStep/utils/products.js +42 -52
- package/lib/solution/BookingByStep/utils/resources.js +527 -330
- package/lib/solution/BookingByStep/utils/stock.js +65 -44
- package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
- package/lib/solution/BookingTicket/index.js +607 -522
- package/lib/solution/BookingTicket/types.js +99 -77
- package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
- package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
- package/lib/solution/BookingTicket/utils/cartView.js +114 -99
- package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
- package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
- package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
- package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
- package/lib/solution/BuyTickets/index.js +67 -70
- package/lib/solution/BuyTickets/types.js +22 -38
- package/lib/solution/Checkout/index.js +1451 -1158
- package/lib/solution/Checkout/types.js +91 -61
- package/lib/solution/Checkout/utils/index.js +228 -156
- package/lib/solution/PlaceOrder/index.js +55 -0
- package/lib/solution/RegisterAndLogin/config.js +493 -460
- package/lib/solution/RegisterAndLogin/index.js +633 -630
- package/lib/solution/RegisterAndLogin/types.js +189 -76
- package/lib/solution/RegisterAndLogin/utils.js +183 -125
- package/lib/solution/Sales/index.js +328 -324
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +832 -864
- package/lib/solution/ScanOrder/types.js +33 -34
- package/lib/solution/ScanOrder/utils.js +409 -374
- package/lib/solution/ShopDiscount/index.js +226 -232
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +300 -172
- package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
- package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
- package/lib/solution/UnifiedBookingSales/types.js +10 -32
- package/lib/solution/VenueBooking/index.js +811 -879
- package/lib/solution/VenueBooking/types.js +19 -39
- package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
- package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +124 -41
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/payment-number.js +26 -46
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
|
@@ -1,105 +1,129 @@
|
|
|
1
|
-
|
|
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
29
2
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
__clearBookingContextSharedCacheForTest:
|
|
35
|
-
buildBookingConfigQueryKey:
|
|
36
|
-
buildBookingResourcesQueryKey:
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
__clearBookingContextSharedCacheForTest: true,
|
|
8
|
+
buildBookingConfigQueryKey: true,
|
|
9
|
+
buildBookingResourcesQueryKey: true,
|
|
10
|
+
BookingContextModule: true
|
|
11
|
+
};
|
|
12
|
+
exports.BookingContextModule = void 0;
|
|
13
|
+
exports.__clearBookingContextSharedCacheForTest = __clearBookingContextSharedCacheForTest;
|
|
14
|
+
exports.buildBookingConfigQueryKey = buildBookingConfigQueryKey;
|
|
15
|
+
exports.buildBookingResourcesQueryKey = buildBookingResourcesQueryKey;
|
|
16
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
17
|
+
var _BaseModule = require("../BaseModule");
|
|
18
|
+
var _request = require("../../plugins/request");
|
|
19
|
+
var _types = require("./types");
|
|
20
|
+
Object.keys(_types).forEach(function (key) {
|
|
21
|
+
if (key === "default" || key === "__esModule") return;
|
|
22
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
23
|
+
if (key in exports && exports[key] === _types[key]) return;
|
|
24
|
+
Object.defineProperty(exports, key, {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _types[key];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
37
30
|
});
|
|
38
|
-
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
31
|
+
var _formatResourceList = require("./utils/formatResourceList");
|
|
32
|
+
var _utils = require("./utils");
|
|
33
|
+
Object.keys(_utils).forEach(function (key) {
|
|
34
|
+
if (key === "default" || key === "__esModule") return;
|
|
35
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
36
|
+
if (key in exports && exports[key] === _utils[key]) return;
|
|
37
|
+
Object.defineProperty(exports, key, {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: function () {
|
|
40
|
+
return _utils[key];
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
45
|
+
const EMPTY_STATE = {
|
|
47
46
|
bookingConfig: null,
|
|
48
47
|
resourcesOrigin: [],
|
|
49
48
|
resourcesOriginMap: {},
|
|
50
49
|
date: null
|
|
51
50
|
};
|
|
52
|
-
|
|
53
|
-
item_type:
|
|
54
|
-
sub_type:
|
|
51
|
+
const DEFAULT_BOOKING_CONFIG_PARAMS = {
|
|
52
|
+
item_type: 'appointment_booking',
|
|
53
|
+
sub_type: 'ticket'
|
|
55
54
|
};
|
|
56
|
-
|
|
55
|
+
const BOARD_CONFIG_CACHE = {
|
|
57
56
|
useCache: true,
|
|
58
57
|
cache: {
|
|
59
|
-
mode:
|
|
60
|
-
type:
|
|
58
|
+
mode: _request.RequestModeENUM.REMOTE_LOCAL,
|
|
59
|
+
type: 'indexDB',
|
|
61
60
|
updateCache: true
|
|
62
61
|
}
|
|
63
62
|
};
|
|
64
|
-
|
|
63
|
+
const RESOURCE_LIST_CACHE = {
|
|
65
64
|
useCache: true,
|
|
66
65
|
cache: {
|
|
67
|
-
mode:
|
|
68
|
-
type:
|
|
66
|
+
mode: _request.RequestModeENUM.REMOTE_LOCAL,
|
|
67
|
+
type: 'memory'
|
|
69
68
|
}
|
|
70
69
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
const requestScopeIds = new WeakMap();
|
|
71
|
+
let nextRequestScopeId = 1;
|
|
72
|
+
const sharedBookingConfigCache = new Map();
|
|
73
|
+
const sharedBookingConfigPending = new Map();
|
|
74
|
+
const sharedResourcesCache = new Map();
|
|
75
|
+
const sharedResourcesPending = new Map();
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 为 request 插件生成稳定作用域,避免不同 request 客户端之间共享缓存数据。
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* const scopedKey = buildSharedCacheKey(requestPlugin, '{"sub_type":"ticket"}');
|
|
82
|
+
*/
|
|
77
83
|
function getRequestScopeId(request) {
|
|
78
84
|
const key = request;
|
|
79
85
|
const existed = requestScopeIds.get(key);
|
|
80
|
-
if (existed)
|
|
81
|
-
return existed;
|
|
86
|
+
if (existed) return existed;
|
|
82
87
|
const id = nextRequestScopeId++;
|
|
83
88
|
requestScopeIds.set(key, id);
|
|
84
89
|
return id;
|
|
85
90
|
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 共享缓存 key = request 作用域 + 已稳定序列化的业务参数。
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* const cacheKey = buildSharedCacheKey(requestPlugin, '2026-06-10|1,2');
|
|
97
|
+
*/
|
|
86
98
|
function buildSharedCacheKey(request, queryKey) {
|
|
87
99
|
return `${getRequestScopeId(request)}:${queryKey}`;
|
|
88
100
|
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 清理跨实例共享缓存,仅供单元测试隔离使用。
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* __clearBookingContextSharedCacheForTest();
|
|
107
|
+
*/
|
|
89
108
|
function __clearBookingContextSharedCacheForTest() {
|
|
90
109
|
sharedBookingConfigCache.clear();
|
|
91
110
|
sharedBookingConfigPending.clear();
|
|
92
111
|
sharedResourcesCache.clear();
|
|
93
112
|
sharedResourcesPending.clear();
|
|
94
113
|
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* 把多形态 date 入参 normalize 成字符串。
|
|
117
|
+
* - dayjs 实例:调用 format()(无参 ISO)。
|
|
118
|
+
* - Date 实例:toISOString()。
|
|
119
|
+
* - 字符串:原样保留。
|
|
120
|
+
* - null/undefined/空串:→ null。
|
|
121
|
+
*/
|
|
95
122
|
function normalizeDate(input) {
|
|
96
|
-
if (input === null || input ===
|
|
97
|
-
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
if (input instanceof Date)
|
|
101
|
-
return input.toISOString();
|
|
102
|
-
if (typeof input.format === "function") {
|
|
123
|
+
if (input === null || input === undefined) return null;
|
|
124
|
+
if (typeof input === 'string') return input || null;
|
|
125
|
+
if (input instanceof Date) return input.toISOString();
|
|
126
|
+
if (typeof input.format === 'function') {
|
|
103
127
|
try {
|
|
104
128
|
return input.format() || null;
|
|
105
129
|
} catch {
|
|
@@ -108,52 +132,67 @@ function normalizeDate(input) {
|
|
|
108
132
|
}
|
|
109
133
|
return null;
|
|
110
134
|
}
|
|
135
|
+
|
|
136
|
+
/** 资源接口使用的 `YYYY-MM-DD` 日期串。 */
|
|
111
137
|
function toScheduleQueryDate(input) {
|
|
112
138
|
const normalized = normalizeDate(input);
|
|
113
|
-
if (!normalized)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return parsed.isValid() ? parsed.format("YYYY-MM-DD") : (0, import_dayjs.default)().format("YYYY-MM-DD");
|
|
139
|
+
if (!normalized) return (0, _dayjs.default)().format('YYYY-MM-DD');
|
|
140
|
+
const parsed = (0, _dayjs.default)(normalized);
|
|
141
|
+
return parsed.isValid() ? parsed.format('YYYY-MM-DD') : (0, _dayjs.default)().format('YYYY-MM-DD');
|
|
117
142
|
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* 由 resources 数组派生出以 id 为 key 的 map,便于 `getResourceByIds` 直接命中。
|
|
146
|
+
*/
|
|
118
147
|
function buildResourcesMap(resources) {
|
|
119
148
|
const map = {};
|
|
120
|
-
resources.forEach(
|
|
121
|
-
if (resource && resource.id !==
|
|
149
|
+
resources.forEach(resource => {
|
|
150
|
+
if (resource && resource.id !== undefined && resource.id !== null) {
|
|
122
151
|
map[String(resource.id)] = resource;
|
|
123
152
|
}
|
|
124
153
|
});
|
|
125
154
|
return map;
|
|
126
155
|
}
|
|
156
|
+
|
|
157
|
+
/** 稳定序列化 config 查询参数,用于判断是否与上次 loadBookingConfig 一致。 */
|
|
127
158
|
function buildBookingConfigQueryKey(params = {}) {
|
|
128
|
-
const merged = {
|
|
159
|
+
const merged = {
|
|
160
|
+
...DEFAULT_BOOKING_CONFIG_PARAMS,
|
|
161
|
+
...params
|
|
162
|
+
};
|
|
129
163
|
const keys = Object.keys(merged).sort();
|
|
130
164
|
const sorted = {};
|
|
131
|
-
keys.forEach(
|
|
165
|
+
keys.forEach(k => {
|
|
132
166
|
sorted[k] = merged[k];
|
|
133
167
|
});
|
|
134
168
|
return JSON.stringify(sorted);
|
|
135
169
|
}
|
|
170
|
+
|
|
171
|
+
/** 稳定序列化资源列表查询(date + bookingIds),用于跳过重复 loadResources。 */
|
|
136
172
|
function buildBookingResourcesQueryKey(params = {}) {
|
|
137
173
|
const date = toScheduleQueryDate(params.date);
|
|
138
|
-
const ids = (params.bookingIds || []).filter(
|
|
139
|
-
return `${date}|${ids.join(
|
|
174
|
+
const ids = (params.bookingIds || []).filter(id => typeof id === 'number' && Number.isFinite(id)).sort((a, b) => a - b);
|
|
175
|
+
return `${date}|${ids.join(',')}`;
|
|
140
176
|
}
|
|
141
|
-
|
|
177
|
+
class BookingContextModule extends _BaseModule.BaseModule {
|
|
178
|
+
defaultName = 'bookingContext';
|
|
179
|
+
defaultVersion = '1.0.0';
|
|
180
|
+
request;
|
|
181
|
+
store = {
|
|
182
|
+
...EMPTY_STATE
|
|
183
|
+
};
|
|
184
|
+
/** 上次成功 loadBookingConfig 的 query key;命中则不再请求。 */
|
|
185
|
+
lastConfigQueryKey = null;
|
|
186
|
+
/** 上次成功 loadResources 的 query key(date|bookingIds);命中则不再请求。 */
|
|
187
|
+
lastResourcesQueryKey = null;
|
|
142
188
|
constructor(name, version) {
|
|
143
189
|
super(name, version);
|
|
144
|
-
this.defaultName = "bookingContext";
|
|
145
|
-
this.defaultVersion = "1.0.0";
|
|
146
|
-
this.store = { ...EMPTY_STATE };
|
|
147
|
-
/** 上次成功 loadBookingConfig 的 query key;命中则不再请求。 */
|
|
148
|
-
this.lastConfigQueryKey = null;
|
|
149
|
-
/** 上次成功 loadResources 的 query key(date|bookingIds);命中则不再请求。 */
|
|
150
|
-
this.lastResourcesQueryKey = null;
|
|
151
190
|
}
|
|
152
191
|
async initialize(core, options = {}) {
|
|
153
192
|
this.core = core;
|
|
154
|
-
this.request = core.getPlugin(
|
|
193
|
+
this.request = core.getPlugin('request');
|
|
155
194
|
if (!this.request) {
|
|
156
|
-
throw new Error(
|
|
195
|
+
throw new Error('BookingContextModule 需要 request 插件支持');
|
|
157
196
|
}
|
|
158
197
|
this.store = {
|
|
159
198
|
bookingConfig: null,
|
|
@@ -189,18 +228,14 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
189
228
|
this.lastConfigQueryKey = configKey;
|
|
190
229
|
return cached;
|
|
191
230
|
}
|
|
192
|
-
let pending = !options.forceRefresh ? sharedBookingConfigPending.get(sharedKey) :
|
|
231
|
+
let pending = !options.forceRefresh ? sharedBookingConfigPending.get(sharedKey) : undefined;
|
|
193
232
|
if (!pending) {
|
|
194
233
|
const requestPromise = (async () => {
|
|
195
234
|
try {
|
|
196
|
-
const res = await this.request.get(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
);
|
|
201
|
-
const config2 = (res == null ? void 0 : res.data) ?? null;
|
|
202
|
-
sharedBookingConfigCache.set(sharedKey, config2);
|
|
203
|
-
return config2;
|
|
235
|
+
const res = await this.request.get('/core/board/management/config', query, BOARD_CONFIG_CACHE);
|
|
236
|
+
const config = res?.data ?? null;
|
|
237
|
+
sharedBookingConfigCache.set(sharedKey, config);
|
|
238
|
+
return config;
|
|
204
239
|
} finally {
|
|
205
240
|
sharedBookingConfigPending.delete(sharedKey);
|
|
206
241
|
}
|
|
@@ -229,18 +264,18 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
229
264
|
this.lastResourcesQueryKey = resourcesKey;
|
|
230
265
|
return this.getResourcesOrigin();
|
|
231
266
|
}
|
|
232
|
-
let pending = !options.forceRefresh ? sharedResourcesPending.get(sharedKey) :
|
|
267
|
+
let pending = !options.forceRefresh ? sharedResourcesPending.get(sharedKey) : undefined;
|
|
233
268
|
if (!pending) {
|
|
234
269
|
const requestPromise = (async () => {
|
|
235
270
|
try {
|
|
236
|
-
const res = await this.request.get(
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
sharedResourcesCache.set(sharedKey,
|
|
243
|
-
return
|
|
271
|
+
const res = await this.request.get('/schedule/resource/list', {
|
|
272
|
+
date
|
|
273
|
+
}, RESOURCE_LIST_CACHE);
|
|
274
|
+
const {
|
|
275
|
+
list
|
|
276
|
+
} = (0, _formatResourceList.formatResourceListAndMap)(res?.data, params.bookingIds || []);
|
|
277
|
+
sharedResourcesCache.set(sharedKey, list);
|
|
278
|
+
return list;
|
|
244
279
|
} finally {
|
|
245
280
|
sharedResourcesPending.delete(sharedKey);
|
|
246
281
|
}
|
|
@@ -253,12 +288,13 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
253
288
|
this.lastResourcesQueryKey = resourcesKey;
|
|
254
289
|
return this.getResourcesOrigin();
|
|
255
290
|
}
|
|
291
|
+
|
|
256
292
|
/**
|
|
257
293
|
* store 内是否已具备与本次 init 入参等价的 config / resources(不再打接口)。
|
|
258
294
|
*/
|
|
259
295
|
isBookingContextReady(params = {}) {
|
|
260
296
|
const configKey = buildBookingConfigQueryKey(params.bookingConfigParams);
|
|
261
|
-
const dateInput = params.date ?? this.store.date ?? (0,
|
|
297
|
+
const dateInput = params.date ?? this.store.date ?? (0, _dayjs.default)();
|
|
262
298
|
const queryDate = toScheduleQueryDate(dateInput);
|
|
263
299
|
const resourcesKey = buildBookingResourcesQueryKey({
|
|
264
300
|
date: queryDate,
|
|
@@ -269,7 +305,7 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
269
305
|
return configReady && resourcesReady;
|
|
270
306
|
}
|
|
271
307
|
async initBookingContext(params = {}) {
|
|
272
|
-
const dateInput = params.date ?? this.store.date ?? (0,
|
|
308
|
+
const dateInput = params.date ?? this.store.date ?? (0, _dayjs.default)();
|
|
273
309
|
const queryDate = toScheduleQueryDate(dateInput);
|
|
274
310
|
this.setDate(dateInput);
|
|
275
311
|
if (!params.forceRefresh && this.isBookingContextReady(params)) {
|
|
@@ -288,24 +324,18 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
288
324
|
});
|
|
289
325
|
}
|
|
290
326
|
if (needResources) {
|
|
291
|
-
await this.loadResources(
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
forceRefresh: params.forceRefresh
|
|
298
|
-
}
|
|
299
|
-
);
|
|
327
|
+
await this.loadResources({
|
|
328
|
+
date: queryDate,
|
|
329
|
+
bookingIds: params.bookingIds
|
|
330
|
+
}, {
|
|
331
|
+
forceRefresh: params.forceRefresh
|
|
332
|
+
});
|
|
300
333
|
}
|
|
301
334
|
return this.getState();
|
|
302
335
|
}
|
|
303
336
|
setBookingConfig(config) {
|
|
304
337
|
this.store.bookingConfig = config || null;
|
|
305
|
-
this.core.effects.emit(
|
|
306
|
-
`${this.name}:${import_types.BookingContextEvent.OnBookingConfigChange}`,
|
|
307
|
-
this.store.bookingConfig
|
|
308
|
-
);
|
|
338
|
+
this.core.effects.emit(`${this.name}:${_types.BookingContextEvent.OnBookingConfigChange}`, this.store.bookingConfig);
|
|
309
339
|
}
|
|
310
340
|
getBookingConfig() {
|
|
311
341
|
return this.store.bookingConfig;
|
|
@@ -314,7 +344,7 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
314
344
|
const list = Array.isArray(resources) ? resources : [];
|
|
315
345
|
this.store.resourcesOrigin = list;
|
|
316
346
|
this.store.resourcesOriginMap = buildResourcesMap(list);
|
|
317
|
-
this.core.effects.emit(`${this.name}:${
|
|
347
|
+
this.core.effects.emit(`${this.name}:${_types.BookingContextEvent.OnResourcesChange}`, {
|
|
318
348
|
resourcesOrigin: this.store.resourcesOrigin,
|
|
319
349
|
resourcesOriginMap: this.store.resourcesOriginMap
|
|
320
350
|
});
|
|
@@ -327,7 +357,7 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
327
357
|
}
|
|
328
358
|
setDate(date) {
|
|
329
359
|
this.store.date = normalizeDate(date);
|
|
330
|
-
this.core.effects.emit(`${this.name}:${
|
|
360
|
+
this.core.effects.emit(`${this.name}:${_types.BookingContextEvent.OnDateChange}`, this.store.date);
|
|
331
361
|
}
|
|
332
362
|
getDate() {
|
|
333
363
|
return this.store.date;
|
|
@@ -349,20 +379,12 @@ var BookingContextModule = class extends import_BaseModule.BaseModule {
|
|
|
349
379
|
resourcesOriginMap: {},
|
|
350
380
|
date: null
|
|
351
381
|
};
|
|
352
|
-
this.core.effects.emit(`${this.name}:${
|
|
353
|
-
this.core.effects.emit(`${this.name}:${
|
|
382
|
+
this.core.effects.emit(`${this.name}:${_types.BookingContextEvent.OnBookingConfigChange}`, null);
|
|
383
|
+
this.core.effects.emit(`${this.name}:${_types.BookingContextEvent.OnResourcesChange}`, {
|
|
354
384
|
resourcesOrigin: [],
|
|
355
385
|
resourcesOriginMap: {}
|
|
356
386
|
});
|
|
357
|
-
this.core.effects.emit(`${this.name}:${
|
|
387
|
+
this.core.effects.emit(`${this.name}:${_types.BookingContextEvent.OnDateChange}`, null);
|
|
358
388
|
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
0 && (module.exports = {
|
|
362
|
-
BookingContextModule,
|
|
363
|
-
__clearBookingContextSharedCacheForTest,
|
|
364
|
-
buildBookingConfigQueryKey,
|
|
365
|
-
buildBookingResourcesQueryKey,
|
|
366
|
-
...require("./types"),
|
|
367
|
-
...require("./utils")
|
|
368
|
-
});
|
|
389
|
+
}
|
|
390
|
+
exports.BookingContextModule = BookingContextModule;
|
|
@@ -1,34 +1,48 @@
|
|
|
1
|
-
|
|
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);
|
|
1
|
+
"use strict";
|
|
18
2
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__export(types_exports, {
|
|
22
|
-
BookingContextEvent: () => BookingContextEvent
|
|
23
|
-
});
|
|
24
|
-
module.exports = __toCommonJS(types_exports);
|
|
25
|
-
var BookingContextEvent = /* @__PURE__ */ ((BookingContextEvent2) => {
|
|
26
|
-
BookingContextEvent2["OnBookingConfigChange"] = "onBookingConfigChange";
|
|
27
|
-
BookingContextEvent2["OnResourcesChange"] = "onResourcesChange";
|
|
28
|
-
BookingContextEvent2["OnDateChange"] = "onDateChange";
|
|
29
|
-
return BookingContextEvent2;
|
|
30
|
-
})(BookingContextEvent || {});
|
|
31
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
-
0 && (module.exports = {
|
|
33
|
-
BookingContextEvent
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
34
5
|
});
|
|
6
|
+
exports.BookingContextEvent = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* BookingContext 子模块:承载「预约 UI 上下文」三件套。
|
|
9
|
+
*
|
|
10
|
+
* - bookingConfig:来自 `/core/board/management/config` 的整套预约配置(service_time / resource_tab /
|
|
11
|
+
* appointment_subject / subject_require / stock_setting / basic / capacity 等)。
|
|
12
|
+
* - resourcesOrigin / resourcesOriginMap:来自 `/schedule/resource/list` 的资源全集,含 times / event_list /
|
|
13
|
+
* combined_resource 等运行态信息,是 getResourceByIds / getResourceTimeIsUsable 的输入。
|
|
14
|
+
* - date:当前选择的日期(dayjs 或 ISO 字符串,迁移后内部统一存原始 ISO 字符串,UI 可自行解析)。
|
|
15
|
+
*
|
|
16
|
+
* 设计原则(与 BookingTicket 现状对齐):
|
|
17
|
+
* - 默认由 `loadBookingConfig` / `loadResources` 拉取并写入 store;也支持消费方 `set*` 直接灌入(复用 ticketBooking 已拉到的数据)。
|
|
18
|
+
* - 所有读 API 返回浅克隆(数组)或原引用(map / config),避免 UI 写穿。
|
|
19
|
+
*/
|
|
20
|
+
/** `loadBookingConfig` 入参,与 ticketBooking `getBookingConfig` 一致。 */
|
|
21
|
+
/** `loadResources` 入参,与 info2 `getResourceList` 一致。 */
|
|
22
|
+
/** `initBookingContext` 入参(BookingTicket 聚合入口)。 */
|
|
23
|
+
/**
|
|
24
|
+
* 资源全集 map:key 为资源 id(数字),value 为资源原始对象,含 times / event_list 等运行态。
|
|
25
|
+
* 这里只声明 Record 形态;具体字段保留 `any`,与 ticketBooking 现网传入的数据形状兼容。
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* 形参 booking_config(结构来自 `/core/board/management/config` 接口)。
|
|
29
|
+
* OS 不强制 schema,保留 `Record<string, any>` 兼容现网;常用路径文档化在 SDK docs。
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* 日期入参:接受 dayjs 实例、ISO 字符串、Date 实例;内部统一 normalize 为 ISO 字符串保存。
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* 内部 store 形态。`resourcesOriginMap` 由 `setResources` 派生,不允许外部直接 set。
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* BookingContextModule 对外 API(给 BookingTicket / SDK Provider 透传消费)。
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* BookingContextModule 事件名常量(采用 `${this.name}:` 前缀,与现有模块一致)。
|
|
42
|
+
*/
|
|
43
|
+
let BookingContextEvent = exports.BookingContextEvent = /*#__PURE__*/function (BookingContextEvent) {
|
|
44
|
+
BookingContextEvent["OnBookingConfigChange"] = "onBookingConfigChange";
|
|
45
|
+
BookingContextEvent["OnResourcesChange"] = "onResourcesChange";
|
|
46
|
+
BookingContextEvent["OnDateChange"] = "onDateChange";
|
|
47
|
+
return BookingContextEvent;
|
|
48
|
+
}({});
|