@pisell/pisellos 2.3.73 → 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.d.ts +7 -0
- package/dist/core/index.js +111 -71
- 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.d.ts +1 -1
- package/dist/modules/Order/index.js +36 -64
- package/dist/modules/Payment/index.js +97 -162
- package/dist/modules/Quotation/index.d.ts +6 -0
- package/dist/modules/Quotation/index.js +75 -19
- 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.d.ts +1 -0
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.d.ts +8 -2
- package/dist/server/index.js +303 -269
- package/dist/server/modules/floor-plan/index.d.ts +4 -0
- package/dist/server/modules/floor-plan/index.js +240 -98
- package/dist/server/modules/menu/index.js +75 -59
- package/dist/server/modules/order/index.d.ts +17 -7
- package/dist/server/modules/order/index.js +421 -211
- package/dist/server/modules/products/index.d.ts +8 -2
- package/dist/server/modules/products/index.js +191 -117
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +24 -17
- 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.d.ts +1 -1
- 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.d.ts +7 -0
- package/lib/core/index.js +149 -131
- 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.d.ts +1 -1
- 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.d.ts +6 -0
- package/lib/modules/Quotation/index.js +110 -103
- 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.d.ts +1 -0
- 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.d.ts +8 -2
- package/lib/server/index.js +3083 -2663
- package/lib/server/modules/floor-plan/index.d.ts +4 -0
- package/lib/server/modules/floor-plan/index.js +159 -127
- 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 +170 -124
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.d.ts +17 -7
- package/lib/server/modules/order/index.js +916 -977
- 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.d.ts +8 -2
- package/lib/server/modules/products/index.js +656 -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 +225 -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.d.ts +1 -1
- 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,162 +1,161 @@
|
|
|
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 __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);
|
|
1
|
+
"use strict";
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
isMultiDayProduct: () => isMultiDayProduct,
|
|
41
|
-
isSessionProduct: () => isSessionProduct
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.applySessionTimesToExtend = applySessionTimesToExtend;
|
|
7
|
+
exports.formatDayDate = formatDayDate;
|
|
8
|
+
exports.getDays = getDays;
|
|
9
|
+
Object.defineProperty(exports, "getDurationValue", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () {
|
|
12
|
+
return _flexible.getDurationValue;
|
|
13
|
+
}
|
|
42
14
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
15
|
+
exports.getServeStartTime = getServeStartTime;
|
|
16
|
+
exports.getServiceTimes = getServiceTimes;
|
|
17
|
+
exports.getSessionFromItem = getSessionFromItem;
|
|
18
|
+
exports.isBookingProduct = isBookingProduct;
|
|
19
|
+
exports.isMultiDayProduct = isMultiDayProduct;
|
|
20
|
+
exports.isSessionProduct = isSessionProduct;
|
|
21
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
22
|
+
var _flexible = require("./flexible");
|
|
23
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
24
|
+
/**
|
|
25
|
+
* 判断商品是否为跨日预约(duration.type === 'days')。与 info2 isMultiDayProduct 等价。
|
|
26
|
+
*/
|
|
46
27
|
function isMultiDayProduct(product) {
|
|
47
|
-
|
|
48
|
-
return ((_a = product == null ? void 0 : product.duration) == null ? void 0 : _a.type) === "days";
|
|
28
|
+
return product?.duration?.type === 'days';
|
|
49
29
|
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 判断 cacheItem 是否为 session 商品(extension_type ∈ session_product / session_ticket)。
|
|
33
|
+
*/
|
|
50
34
|
function isSessionProduct(cacheItem) {
|
|
51
|
-
return [
|
|
35
|
+
return ['session_product', 'session_ticket'].includes(cacheItem?.extension_type);
|
|
52
36
|
}
|
|
37
|
+
|
|
38
|
+
/** 从 catalog `cartDetailValue` 或 `_extend.other` 取 session 快照。 */
|
|
53
39
|
function getSessionFromItem(item) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return session && typeof session === "object" ? session : null;
|
|
40
|
+
const session = item?.cartDetailValue?.session ?? item?._extend?.other?.session;
|
|
41
|
+
return session && typeof session === 'object' ? session : null;
|
|
57
42
|
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 将 cartDetailValue.session 写入 _extend 的起止时间(与 info2 getServiceStartTimeAndEndTime 的 session 分支一致)。
|
|
46
|
+
* 日历日优先用 ctx.date,时分取自 session.start_at / end_at 或 session.start_time / end_time。
|
|
47
|
+
*/
|
|
58
48
|
function applySessionTimesToExtend(item, extend, ctx) {
|
|
59
|
-
|
|
60
|
-
const session = ((_a = extend == null ? void 0 : extend.other) == null ? void 0 : _a.session) ?? getSessionFromItem(item);
|
|
49
|
+
const session = extend?.other?.session ?? getSessionFromItem(item);
|
|
61
50
|
if (!session || !isSessionProduct(item)) {
|
|
62
51
|
return extend;
|
|
63
52
|
}
|
|
64
|
-
const baseDate =
|
|
65
|
-
const startAt = (0,
|
|
66
|
-
|
|
67
|
-
);
|
|
68
|
-
const endAt = (0, import_dayjs.default)(
|
|
69
|
-
`${baseDate.format("YYYY-MM-DD")} ${(0, import_dayjs.default)(session.end_at).format("HH:mm:ss")}`
|
|
70
|
-
);
|
|
53
|
+
const baseDate = ctx?.date ? (0, _dayjs.default)(ctx.date) : (0, _dayjs.default)();
|
|
54
|
+
const startAt = (0, _dayjs.default)(`${baseDate.format('YYYY-MM-DD')} ${(0, _dayjs.default)(session.start_at).format('HH:mm:ss')}`);
|
|
55
|
+
const endAt = (0, _dayjs.default)(`${baseDate.format('YYYY-MM-DD')} ${(0, _dayjs.default)(session.end_at).format('HH:mm:ss')}`);
|
|
71
56
|
const nextExtend = {
|
|
72
57
|
...extend,
|
|
73
|
-
other: {
|
|
58
|
+
other: {
|
|
59
|
+
...(extend.other || {}),
|
|
60
|
+
session
|
|
61
|
+
},
|
|
74
62
|
start_date: startAt,
|
|
75
63
|
startDate: startAt,
|
|
76
|
-
start_time: session.start_time ?? (0,
|
|
64
|
+
start_time: session.start_time ?? (0, _dayjs.default)(session.start_at).format('HH:mm'),
|
|
77
65
|
end_date: endAt,
|
|
78
66
|
endDate: endAt,
|
|
79
|
-
end_time: session.end_time ?? (0,
|
|
67
|
+
end_time: session.end_time ?? (0, _dayjs.default)(session.end_at).format('HH:mm')
|
|
80
68
|
};
|
|
81
69
|
return {
|
|
82
70
|
...nextExtend,
|
|
83
|
-
duration: getDays({
|
|
71
|
+
duration: getDays({
|
|
72
|
+
_extend: nextExtend
|
|
73
|
+
}, 'minutes')
|
|
84
74
|
};
|
|
85
75
|
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 是否应写入 booking(与 Product.utils isNormalProduct 对齐,并覆盖 session_ticket / cartDetailValue.session)。
|
|
79
|
+
*/
|
|
86
80
|
function isBookingProduct(item) {
|
|
87
|
-
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
if (item.
|
|
91
|
-
|
|
92
|
-
if ((
|
|
93
|
-
return true;
|
|
94
|
-
if ((_b = item == null ? void 0 : item["schedule.ids"]) == null ? void 0 : _b.length)
|
|
95
|
-
return true;
|
|
96
|
-
if (isSessionProduct(item))
|
|
97
|
-
return true;
|
|
98
|
-
if (getSessionFromItem(item))
|
|
99
|
-
return true;
|
|
81
|
+
if (!item) return false;
|
|
82
|
+
if (item.duration) return true;
|
|
83
|
+
if (item?.schedules?.length) return true;
|
|
84
|
+
if (item?.['schedule.ids']?.length) return true;
|
|
85
|
+
if (isSessionProduct(item)) return true;
|
|
86
|
+
if (getSessionFromItem(item)) return true;
|
|
100
87
|
return false;
|
|
101
88
|
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* 处理 'now' 时间占位:'now' → 当前 HH:mm;其他原样返回。
|
|
92
|
+
* 与 info2 `getServeStartTime` 等价。
|
|
93
|
+
*/
|
|
102
94
|
function getServeStartTime(startTime) {
|
|
103
|
-
if (startTime ===
|
|
104
|
-
|
|
105
|
-
return startTime || "";
|
|
95
|
+
if (startTime === 'now') return (0, _dayjs.default)().format('HH:mm');
|
|
96
|
+
return startTime || '';
|
|
106
97
|
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* 计算商品的开始结束时间(统一为 dayjs 实例)。
|
|
101
|
+
* 与 info2 `getServiceTimes` 行为等价:
|
|
102
|
+
* - 跨日商品:startDate = start_date + start_time,endDate = _extend.end_date 原样
|
|
103
|
+
* - session 商品:从 _extend.other.session 取 start_at / end_at
|
|
104
|
+
* - 普通商品:startDate + duration(含 flexible 处理)
|
|
105
|
+
*/
|
|
107
106
|
function getServiceTimes(service) {
|
|
108
|
-
|
|
109
|
-
const startDate = (0, import_dayjs.default)(
|
|
110
|
-
`${(0, import_dayjs.default)((_a = service == null ? void 0 : service._extend) == null ? void 0 : _a.start_date).format("YYYY-MM-DD")} ${getServeStartTime(
|
|
111
|
-
(_b = service == null ? void 0 : service._extend) == null ? void 0 : _b.start_time
|
|
112
|
-
)}`
|
|
113
|
-
);
|
|
107
|
+
const startDate = (0, _dayjs.default)(`${(0, _dayjs.default)(service?._extend?.start_date).format('YYYY-MM-DD')} ${getServeStartTime(service?._extend?.start_time)}`);
|
|
114
108
|
if (isMultiDayProduct(service)) {
|
|
115
|
-
const startTime = getServeStartTime(
|
|
116
|
-
const endDateRaw =
|
|
117
|
-
const endBase = (0,
|
|
118
|
-
|
|
109
|
+
const startTime = getServeStartTime(service?._extend?.start_time);
|
|
110
|
+
const endDateRaw = service?._extend?.end_date ?? service?._extend?.endDate;
|
|
111
|
+
const endBase = (0, _dayjs.default)(endDateRaw);
|
|
112
|
+
// 跨日结束日保留与开始相同的时刻(如 11:24),避免 end_date 仅日期时被解析为 00:00
|
|
113
|
+
const endDate = endBase.isValid() ? (0, _dayjs.default)(`${endBase.format('YYYY-MM-DD')} ${startTime}`) : endBase;
|
|
119
114
|
return {
|
|
120
115
|
startDate,
|
|
121
|
-
endDate
|
|
116
|
+
endDate
|
|
122
117
|
};
|
|
123
118
|
}
|
|
124
|
-
const session =
|
|
119
|
+
const session = service?._extend?.other?.session;
|
|
125
120
|
if (isSessionProduct(service) && session) {
|
|
126
121
|
return {
|
|
127
|
-
startDate: (0,
|
|
128
|
-
endDate: (0,
|
|
122
|
+
startDate: (0, _dayjs.default)(session.start_at),
|
|
123
|
+
endDate: (0, _dayjs.default)(session.end_at)
|
|
129
124
|
};
|
|
130
125
|
}
|
|
131
|
-
const endDate = startDate.add(
|
|
132
|
-
return {
|
|
126
|
+
const endDate = startDate.add(_flexible.flexibleObj.getValue(service?._extend?.duration), 'minute');
|
|
127
|
+
return {
|
|
128
|
+
startDate,
|
|
129
|
+
endDate
|
|
130
|
+
};
|
|
133
131
|
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* 跨日预约相关:把 _extend.start_date / end_date 都对齐到 dayjs startOf('day')。
|
|
135
|
+
* 与 info2 `formatDayDate` 等价。
|
|
136
|
+
*/
|
|
134
137
|
function formatDayDate(_extend) {
|
|
135
138
|
return {
|
|
136
|
-
start_date: (0,
|
|
137
|
-
end_date: (0,
|
|
139
|
+
start_date: (0, _dayjs.default)(_extend?.start_date).startOf('day'),
|
|
140
|
+
end_date: (0, _dayjs.default)(_extend?.end_date).startOf('day')
|
|
138
141
|
};
|
|
139
142
|
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* 计算跨日预约时长:
|
|
146
|
+
* - type='days' → end - start 的天数
|
|
147
|
+
* - type='minutes' → end - start 的分钟数
|
|
148
|
+
* 与 info2 `getDays` 等价。
|
|
149
|
+
*/
|
|
140
150
|
function getDays(cacheItem, type) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
151
|
+
if (type === 'days') {
|
|
152
|
+
const {
|
|
153
|
+
start_date,
|
|
154
|
+
end_date
|
|
155
|
+
} = formatDayDate(cacheItem._extend);
|
|
156
|
+
return end_date.diff(start_date, 'day');
|
|
145
157
|
}
|
|
146
|
-
const startDate = (0,
|
|
147
|
-
const endDate = (0,
|
|
158
|
+
const startDate = (0, _dayjs.default)(cacheItem?._extend?.start_date);
|
|
159
|
+
const endDate = (0, _dayjs.default)(cacheItem?._extend?.end_date);
|
|
148
160
|
return endDate.diff(startDate, type);
|
|
149
|
-
}
|
|
150
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
151
|
-
0 && (module.exports = {
|
|
152
|
-
applySessionTimesToExtend,
|
|
153
|
-
formatDayDate,
|
|
154
|
-
getDays,
|
|
155
|
-
getDurationValue,
|
|
156
|
-
getServeStartTime,
|
|
157
|
-
getServiceTimes,
|
|
158
|
-
getSessionFromItem,
|
|
159
|
-
isBookingProduct,
|
|
160
|
-
isMultiDayProduct,
|
|
161
|
-
isSessionProduct
|
|
162
|
-
});
|
|
161
|
+
}
|
|
@@ -1,58 +1,45 @@
|
|
|
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 __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);
|
|
1
|
+
"use strict";
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.findNextDuration = findNextDuration;
|
|
7
|
+
exports.findNextSlice = findNextSlice;
|
|
8
|
+
Object.defineProperty(exports, "getDurationValue", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () {
|
|
11
|
+
return _flexible.getDurationValue;
|
|
12
|
+
}
|
|
37
13
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var
|
|
41
|
-
var
|
|
14
|
+
exports.getEndDate = getEndDate;
|
|
15
|
+
exports.sliceDayIntoFiveMinutes = sliceDayIntoFiveMinutes;
|
|
16
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
17
|
+
var _flexible = require("./flexible");
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
const timeSlicesCache = new Map();
|
|
42
20
|
function copyTimeSlices(result) {
|
|
43
21
|
return {
|
|
44
22
|
timeSlices: [...result.timeSlices],
|
|
45
23
|
durationSlicesBasedOnTime: [...result.durationSlicesBasedOnTime]
|
|
46
24
|
};
|
|
47
25
|
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 把一天切成等长时间槽,输出 timeSlices(开始时间标签)与 durationSlicesBasedOnTime(基于切片的时长选项)。
|
|
29
|
+
*
|
|
30
|
+
* 与 info2 `sliceDayIntoFiveMinutes` 行为等价;为了不依赖 `locales`,label 输出原始时间字符串('08:00 AM' / '90'),
|
|
31
|
+
* UI 侧需要本地化展示时可基于 value 自行包装。
|
|
32
|
+
*
|
|
33
|
+
* @param config booking config `basic.service_time`,{ value: minutes }
|
|
34
|
+
* @param isDay 是否跨日预约(true 时按 1~30 天切片)
|
|
35
|
+
*/
|
|
48
36
|
function sliceDayIntoFiveMinutes(config, isDay) {
|
|
49
37
|
const timeSlice = config && config.value || 5;
|
|
50
|
-
const cacheKey = isDay ?
|
|
38
|
+
const cacheKey = isDay ? 'days' : `minutes:${timeSlice}`;
|
|
51
39
|
const cached = timeSlicesCache.get(cacheKey);
|
|
52
|
-
if (cached)
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
const endTime = (0, import_dayjs.default)().endOf("day");
|
|
40
|
+
if (cached) return copyTimeSlices(cached);
|
|
41
|
+
const startTime = (0, _dayjs.default)().startOf('day');
|
|
42
|
+
const endTime = (0, _dayjs.default)().endOf('day');
|
|
56
43
|
const timeSlices = [];
|
|
57
44
|
const durationSlicesBasedOnTime = [];
|
|
58
45
|
let currentTime = startTime;
|
|
@@ -60,8 +47,8 @@ function sliceDayIntoFiveMinutes(config, isDay) {
|
|
|
60
47
|
let currentDay = 1;
|
|
61
48
|
while (currentDay <= 30) {
|
|
62
49
|
timeSlices.push({
|
|
63
|
-
label: currentTime.format(
|
|
64
|
-
value: currentTime.format(
|
|
50
|
+
label: currentTime.format('hh:mm A'),
|
|
51
|
+
value: currentTime.format('HH:mm')
|
|
65
52
|
});
|
|
66
53
|
durationSlicesBasedOnTime.push({
|
|
67
54
|
label: String(currentDay),
|
|
@@ -69,71 +56,74 @@ function sliceDayIntoFiveMinutes(config, isDay) {
|
|
|
69
56
|
});
|
|
70
57
|
currentDay += 1;
|
|
71
58
|
}
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
59
|
+
const result = {
|
|
60
|
+
timeSlices,
|
|
61
|
+
durationSlicesBasedOnTime
|
|
62
|
+
};
|
|
63
|
+
timeSlicesCache.set(cacheKey, result);
|
|
64
|
+
return copyTimeSlices(result);
|
|
75
65
|
}
|
|
76
66
|
while (currentTime.isBefore(endTime)) {
|
|
77
67
|
timeSlices.push({
|
|
78
|
-
label: currentTime.format(
|
|
79
|
-
value: currentTime.format(
|
|
68
|
+
label: currentTime.format('hh:mm A'),
|
|
69
|
+
value: currentTime.format('HH:mm')
|
|
80
70
|
});
|
|
81
|
-
const nextTime = currentTime.add(timeSlice,
|
|
82
|
-
const durationValue = nextTime.diff(startTime,
|
|
71
|
+
const nextTime = currentTime.add(timeSlice, 'minute');
|
|
72
|
+
const durationValue = nextTime.diff(startTime, 'minute');
|
|
83
73
|
durationSlicesBasedOnTime.push({
|
|
84
74
|
label: String(durationValue),
|
|
85
75
|
value: durationValue
|
|
86
76
|
});
|
|
87
77
|
currentTime = nextTime;
|
|
88
78
|
}
|
|
89
|
-
const result = {
|
|
79
|
+
const result = {
|
|
80
|
+
timeSlices,
|
|
81
|
+
durationSlicesBasedOnTime
|
|
82
|
+
};
|
|
90
83
|
timeSlicesCache.set(cacheKey, result);
|
|
91
84
|
return copyTimeSlices(result);
|
|
92
85
|
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 取「下一个 duration 选项」:优先用 defaultValue;否则在 array 中找匹配的;找不到取第一个。
|
|
89
|
+
* 与 info2 `findNextDuration` 等价。
|
|
90
|
+
*/
|
|
93
91
|
function findNextDuration(current, array, defaultValue) {
|
|
94
|
-
if (defaultValue !==
|
|
95
|
-
|
|
96
|
-
if (!array || array.length === 0)
|
|
97
|
-
return void 0;
|
|
92
|
+
if (defaultValue !== undefined && defaultValue !== null) return defaultValue;
|
|
93
|
+
if (!array || array.length === 0) return undefined;
|
|
98
94
|
for (let i = 0; i < array.length; i += 1) {
|
|
99
|
-
if (array[i].value ===
|
|
100
|
-
return array[i].value;
|
|
95
|
+
if (array[i].value === current?.value) return array[i].value;
|
|
101
96
|
}
|
|
102
97
|
return array[0].value;
|
|
103
98
|
}
|
|
99
|
+
|
|
100
|
+
/** 取首选 time slice:若指定 date(HH:mm)则找第一个 >= date 的;否则第一个。 */
|
|
104
101
|
function findNextSlice(params) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
102
|
+
const {
|
|
103
|
+
timeSlices,
|
|
104
|
+
index = 0,
|
|
105
|
+
date = ''
|
|
106
|
+
} = params;
|
|
107
|
+
const currentTimeValue = date || (0, _dayjs.default)().format('HH:mm');
|
|
108
108
|
for (let i = 0; i < timeSlices.length; i += 1) {
|
|
109
|
-
if (timeSlices[i].value !==
|
|
109
|
+
if (timeSlices[i].value !== 'now' && timeSlices[i].value >= currentTimeValue) {
|
|
110
110
|
return timeSlices[i].value;
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
return
|
|
113
|
+
return timeSlices[index]?.value;
|
|
114
114
|
}
|
|
115
|
+
|
|
116
|
+
/** 取 endDate;duration='flexible' 时取 endDate 与店铺营业时间的较小值,否则 startDate + duration 分钟。 */
|
|
115
117
|
function getEndDate(startDate, duration, endDate, shopOpeningHours) {
|
|
116
|
-
if (duration ===
|
|
117
|
-
let openingDate = (0,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if ((0, import_dayjs.default)(startDate).isAfter(openingDate)) {
|
|
121
|
-
openingDate = openingDate.add(1, "day");
|
|
118
|
+
if (duration === 'flexible') {
|
|
119
|
+
let openingDate = (0, _dayjs.default)(`${startDate.format('YYYY-MM-DD')} ${shopOpeningHours || '23:59'}`);
|
|
120
|
+
if ((0, _dayjs.default)(startDate).isAfter(openingDate)) {
|
|
121
|
+
openingDate = openingDate.add(1, 'day');
|
|
122
122
|
}
|
|
123
|
-
if (!endDate)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (endDateObj.isAfter(openingDate))
|
|
127
|
-
return openingDate;
|
|
123
|
+
if (!endDate) return openingDate;
|
|
124
|
+
const endDateObj = (0, _dayjs.default)(endDate);
|
|
125
|
+
if (endDateObj.isAfter(openingDate)) return openingDate;
|
|
128
126
|
return endDateObj;
|
|
129
127
|
}
|
|
130
|
-
return startDate.add(Number(duration),
|
|
131
|
-
}
|
|
132
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
133
|
-
0 && (module.exports = {
|
|
134
|
-
findNextDuration,
|
|
135
|
-
findNextSlice,
|
|
136
|
-
getDurationValue,
|
|
137
|
-
getEndDate,
|
|
138
|
-
sliceDayIntoFiveMinutes
|
|
139
|
-
});
|
|
128
|
+
return startDate.add(Number(duration), 'minute');
|
|
129
|
+
}
|