@pisell/pisellos 0.0.567 → 0.0.568
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 -9
- package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/adapter/walletPass/utils.js +0 -3
- 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 +1 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +14 -41
- package/dist/modules/Payment/index.js +142 -270
- package/dist/modules/Payment/walletpass.js +4 -5
- package/dist/modules/Rules/index.js +0 -7
- 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 +88 -121
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/products/index.js +29 -49
- 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 +32 -40
- package/dist/server/utils/product.js +0 -1
- 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.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +5 -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 -246
- 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.d.ts +5 -0
- package/dist/solution/VenueBooking/index.js +364 -327
- 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 +130 -131
- package/lib/effects/index.js +46 -57
- package/lib/index.js +92 -53
- 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 +84 -63
- package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
- package/lib/model/strategy/adapter/promotion/examples.js +139 -159
- package/lib/model/strategy/adapter/promotion/index.js +1 -49
- package/lib/model/strategy/adapter/promotion/type.js +199 -35
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
- 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 +652 -402
- 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 +22 -45
- 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 +306 -241
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +72 -78
- package/lib/modules/Cart/utils/changePrice.js +26 -62
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +216 -153
- 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 +117 -113
- 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 +63 -74
- 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 +332 -320
- package/lib/modules/Order/types.js +24 -33
- package/lib/modules/Order/utils.js +350 -284
- 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 +566 -432
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +216 -107
- package/lib/modules/Payment/utils.js +50 -47
- package/lib/modules/Payment/walletpass.js +221 -203
- 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 +111 -110
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +60 -82
- 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/Rules/index.js +1172 -872
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +59 -68
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +176 -193
- 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 -167
- package/lib/modules/Schedule/index.js +97 -107
- 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 -70
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +782 -429
- package/lib/modules/index.js +212 -57
- 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 +882 -623
- package/lib/server/modules/index.js +85 -59
- package/lib/server/modules/menu/index.js +146 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +195 -231
- package/lib/server/modules/order/types.js +107 -32
- package/lib/server/modules/order/utils/filterBookings.js +174 -140
- package/lib/server/modules/order/utils/filterOrders.js +89 -60
- package/lib/server/modules/products/index.js +430 -335
- package/lib/server/modules/products/types.js +41 -34
- package/lib/server/modules/quotation/index.js +76 -77
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +216 -187
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +134 -119
- 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/time.js +40 -49
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +1530 -1343
- 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.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +147 -122
- package/lib/solution/BookingTicket/types.js +38 -64
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
- package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- 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 +227 -158
- 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 +218 -200
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +803 -840
- package/lib/solution/ScanOrder/types.js +34 -34
- package/lib/solution/ScanOrder/utils.js +372 -331
- package/lib/solution/ShopDiscount/index.js +230 -236
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +309 -172
- package/lib/solution/VenueBooking/index.d.ts +5 -0
- package/lib/solution/VenueBooking/index.js +886 -929
- package/lib/solution/VenueBooking/types.js +20 -40
- package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
- package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
- package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +102 -37
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
|
@@ -1,45 +1,25 @@
|
|
|
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
|
-
DEFAULT_SLOT_CONFIG: () => DEFAULT_SLOT_CONFIG,
|
|
23
|
-
VenueBookingHooks: () => VenueBookingHooks
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
24
5
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return
|
|
34
|
-
}
|
|
35
|
-
|
|
6
|
+
exports.VenueBookingHooks = exports.DEFAULT_SLOT_CONFIG = void 0;
|
|
7
|
+
let VenueBookingHooks = exports.VenueBookingHooks = /*#__PURE__*/function (VenueBookingHooks) {
|
|
8
|
+
VenueBookingHooks["onInited"] = "venueBooking:onInited";
|
|
9
|
+
VenueBookingHooks["onDestroy"] = "venueBooking:onDestroy";
|
|
10
|
+
VenueBookingHooks["onRetryInit"] = "venueBooking:onRetryInit";
|
|
11
|
+
VenueBookingHooks["onRefresh"] = "venueBooking:onRefresh";
|
|
12
|
+
VenueBookingHooks["onCartValidationChanged"] = "venueBooking:onCartValidationChanged";
|
|
13
|
+
VenueBookingHooks["onSmartPricingUpdated"] = "venueBooking:onSmartPricingUpdated";
|
|
14
|
+
return VenueBookingHooks;
|
|
15
|
+
}({}); // ─── 场地预定核心类型 ───
|
|
16
|
+
const DEFAULT_SLOT_CONFIG = exports.DEFAULT_SLOT_CONFIG = {
|
|
36
17
|
slotDurationMinutes: 30,
|
|
37
|
-
businessStartTime:
|
|
38
|
-
businessEndTime:
|
|
18
|
+
businessStartTime: '09:00',
|
|
19
|
+
businessEndTime: '23:00',
|
|
39
20
|
fewLeftThreshold: 0.8
|
|
40
21
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
});
|
|
22
|
+
|
|
23
|
+
// ─── 时段选择 & 合并 ───
|
|
24
|
+
|
|
25
|
+
// ─── Store 状态 ───
|
|
@@ -1,39 +1,12 @@
|
|
|
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
|
-
__export(dateSummary_exports, {
|
|
32
|
-
buildDateRangeSummary: () => buildDateRangeSummary
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
33
5
|
});
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
var
|
|
6
|
+
exports.buildDateRangeSummary = buildDateRangeSummary;
|
|
7
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
8
|
+
var _timeSlot = require("./timeSlot");
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
10
|
function buildDateRangeSummary(params) {
|
|
38
11
|
const {
|
|
39
12
|
startDate,
|
|
@@ -45,14 +18,14 @@ function buildDateRangeSummary(params) {
|
|
|
45
18
|
buildSlotPriceMap
|
|
46
19
|
} = params;
|
|
47
20
|
const result = [];
|
|
48
|
-
const productIds = buildSlotPriceMap ? [...new Set([...resourceProductMap.values()].flat().map(
|
|
49
|
-
let cursor = (0,
|
|
50
|
-
const end = (0,
|
|
21
|
+
const productIds = buildSlotPriceMap ? [...new Set([...resourceProductMap.values()].flat().map(m => m.productId))] : [];
|
|
22
|
+
let cursor = (0, _dayjs.default)(startDate);
|
|
23
|
+
const end = (0, _dayjs.default)(endDate);
|
|
51
24
|
while (!cursor.isAfter(end)) {
|
|
52
|
-
const date = cursor.format(
|
|
53
|
-
const effectiveConfig =
|
|
54
|
-
const slotPriceMap = buildSlotPriceMap && productIds.length ? buildSlotPriceMap(date, effectiveConfig, productIds) :
|
|
55
|
-
const grid = (0,
|
|
25
|
+
const date = cursor.format('YYYY-MM-DD');
|
|
26
|
+
const effectiveConfig = resolveConfig?.(date) || config;
|
|
27
|
+
const slotPriceMap = buildSlotPriceMap && productIds.length ? buildSlotPriceMap(date, effectiveConfig, productIds) : undefined;
|
|
28
|
+
const grid = (0, _timeSlot.buildTimeSlotGrid)({
|
|
56
29
|
date,
|
|
57
30
|
config: effectiveConfig,
|
|
58
31
|
rawResources,
|
|
@@ -64,10 +37,9 @@ function buildDateRangeSummary(params) {
|
|
|
64
37
|
let lowestPrice = null;
|
|
65
38
|
for (const resource of grid.resources) {
|
|
66
39
|
for (const slot of resource.slots) {
|
|
67
|
-
if (slot.status ===
|
|
68
|
-
continue;
|
|
40
|
+
if (slot.status === 'past' || slot.status === 'unavailable') continue;
|
|
69
41
|
totalSlots++;
|
|
70
|
-
if (slot.status ===
|
|
42
|
+
if (slot.status === 'available' || slot.status === 'partially_occupied') {
|
|
71
43
|
availableSlots++;
|
|
72
44
|
if (slot.price !== null) {
|
|
73
45
|
const priceNum = Number(slot.price);
|
|
@@ -80,13 +52,13 @@ function buildDateRangeSummary(params) {
|
|
|
80
52
|
}
|
|
81
53
|
let status;
|
|
82
54
|
if (totalSlots === 0) {
|
|
83
|
-
status =
|
|
55
|
+
status = 'unavailable';
|
|
84
56
|
} else if (availableSlots === 0) {
|
|
85
|
-
status =
|
|
57
|
+
status = 'sold_out';
|
|
86
58
|
} else if ((totalSlots - availableSlots) / totalSlots >= effectiveConfig.fewLeftThreshold) {
|
|
87
|
-
status =
|
|
59
|
+
status = 'few_left';
|
|
88
60
|
} else {
|
|
89
|
-
status =
|
|
61
|
+
status = 'available';
|
|
90
62
|
}
|
|
91
63
|
result.push({
|
|
92
64
|
date,
|
|
@@ -95,11 +67,7 @@ function buildDateRangeSummary(params) {
|
|
|
95
67
|
totalSlots,
|
|
96
68
|
availableSlots
|
|
97
69
|
});
|
|
98
|
-
cursor = cursor.add(1,
|
|
70
|
+
cursor = cursor.add(1, 'day');
|
|
99
71
|
}
|
|
100
72
|
return result;
|
|
101
|
-
}
|
|
102
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
103
|
-
0 && (module.exports = {
|
|
104
|
-
buildDateRangeSummary
|
|
105
|
-
});
|
|
73
|
+
}
|
|
@@ -1,69 +1,51 @@
|
|
|
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(resource_exports, {
|
|
22
|
-
buildResourceProductMap: () => buildResourceProductMap,
|
|
23
|
-
extractResourceIds: () => extractResourceIds
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
24
5
|
});
|
|
25
|
-
|
|
6
|
+
exports.buildResourceProductMap = buildResourceProductMap;
|
|
7
|
+
exports.extractResourceIds = extractResourceIds;
|
|
8
|
+
/**
|
|
9
|
+
* 从商品列表里抽取所有 resource_id:
|
|
10
|
+
* - 商品绑定的 default_resource / optional_resource
|
|
11
|
+
* - 以及这些资源上声明的 combined_resource.resource_ids(若可从 product_resource 读取)
|
|
12
|
+
* 用于一次性拉到子资源数据,判定组合资源的可用性。
|
|
13
|
+
*/
|
|
26
14
|
function extractResourceIds(products) {
|
|
27
|
-
|
|
28
|
-
const ids = /* @__PURE__ */ new Set();
|
|
15
|
+
const ids = new Set();
|
|
29
16
|
for (const product of products) {
|
|
30
|
-
const resources =
|
|
31
|
-
if (!Array.isArray(resources))
|
|
32
|
-
continue;
|
|
17
|
+
const resources = product.product_resource?.resources;
|
|
18
|
+
if (!Array.isArray(resources)) continue;
|
|
33
19
|
for (const resource of resources) {
|
|
34
|
-
if (resource.status !== 1)
|
|
35
|
-
continue;
|
|
20
|
+
if (resource.status !== 1) continue;
|
|
36
21
|
const defaultRes = resource.default_resource || [];
|
|
37
22
|
const optionalRes = resource.optional_resource || [];
|
|
38
23
|
for (const id of [...defaultRes, ...optionalRes]) {
|
|
39
|
-
if (typeof id ===
|
|
40
|
-
ids.add(id);
|
|
24
|
+
if (typeof id === 'number' && id > 0) ids.add(id);
|
|
41
25
|
}
|
|
42
26
|
const combined = resource.combined_resource;
|
|
43
27
|
if (combined && combined.status === 1 && Array.isArray(combined.resource_ids)) {
|
|
44
28
|
for (const id of combined.resource_ids) {
|
|
45
|
-
if (typeof id ===
|
|
46
|
-
ids.add(id);
|
|
29
|
+
if (typeof id === 'number' && id > 0) ids.add(id);
|
|
47
30
|
}
|
|
48
31
|
}
|
|
49
32
|
}
|
|
50
33
|
}
|
|
51
34
|
return Array.from(ids);
|
|
52
35
|
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 每个 resourceId 可以被多个商品共享(同一场地关联多种运动商品)。
|
|
39
|
+
* Map 的 value 改为 ResourceProductMapping[],按商品出现顺序保留。
|
|
40
|
+
*/
|
|
53
41
|
function buildResourceProductMap(products) {
|
|
54
|
-
|
|
55
|
-
const map = /* @__PURE__ */ new Map();
|
|
42
|
+
const map = new Map();
|
|
56
43
|
for (const product of products) {
|
|
57
|
-
const resources =
|
|
58
|
-
if (!Array.isArray(resources))
|
|
59
|
-
continue;
|
|
44
|
+
const resources = product.product_resource?.resources;
|
|
45
|
+
if (!Array.isArray(resources)) continue;
|
|
60
46
|
for (const resource of resources) {
|
|
61
|
-
if (resource.status !== 1)
|
|
62
|
-
|
|
63
|
-
const allResourceIds = [
|
|
64
|
-
...resource.default_resource || [],
|
|
65
|
-
...resource.optional_resource || []
|
|
66
|
-
];
|
|
47
|
+
if (resource.status !== 1) continue;
|
|
48
|
+
const allResourceIds = [...(resource.default_resource || []), ...(resource.optional_resource || [])];
|
|
67
49
|
for (const resId of allResourceIds) {
|
|
68
50
|
const existing = map.get(resId);
|
|
69
51
|
const mapping = {
|
|
@@ -72,21 +54,16 @@ function buildResourceProductMap(products) {
|
|
|
72
54
|
formName: resource.title,
|
|
73
55
|
resourceName: resource.title,
|
|
74
56
|
formId: resource.id,
|
|
75
|
-
price: product.price ||
|
|
76
|
-
resourceType: resource.type ||
|
|
57
|
+
price: product.price || '0.00',
|
|
58
|
+
resourceType: resource.type || 'single'
|
|
77
59
|
};
|
|
78
60
|
if (!existing) {
|
|
79
61
|
map.set(resId, [mapping]);
|
|
80
|
-
} else if (!existing.some(
|
|
62
|
+
} else if (!existing.some(m => m.productId === mapping.productId)) {
|
|
81
63
|
existing.push(mapping);
|
|
82
64
|
}
|
|
83
65
|
}
|
|
84
66
|
}
|
|
85
67
|
}
|
|
86
68
|
return map;
|
|
87
|
-
}
|
|
88
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
89
|
-
0 && (module.exports = {
|
|
90
|
-
buildResourceProductMap,
|
|
91
|
-
extractResourceIds
|
|
92
|
-
});
|
|
69
|
+
}
|
|
@@ -1,62 +1,34 @@
|
|
|
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
|
-
__export(slotMerge_exports, {
|
|
32
|
-
buildPriceBreakdown: () => buildPriceBreakdown,
|
|
33
|
-
buildVenueBookingEntry: () => buildVenueBookingEntry,
|
|
34
|
-
buildVenueIdentityKey: () => buildVenueIdentityKey,
|
|
35
|
-
buildVenueResourceMetadata: () => buildVenueResourceMetadata,
|
|
36
|
-
expandMergedSlotToIndividual: () => expandMergedSlotToIndividual,
|
|
37
|
-
mergeConsecutiveSlots: () => mergeConsecutiveSlots
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
38
5
|
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
6
|
+
exports.buildPriceBreakdown = buildPriceBreakdown;
|
|
7
|
+
exports.buildVenueBookingEntry = buildVenueBookingEntry;
|
|
8
|
+
exports.buildVenueIdentityKey = buildVenueIdentityKey;
|
|
9
|
+
exports.buildVenueResourceMetadata = buildVenueResourceMetadata;
|
|
10
|
+
exports.expandMergedSlotToIndividual = expandMergedSlotToIndividual;
|
|
11
|
+
exports.mergeConsecutiveSlots = mergeConsecutiveSlots;
|
|
12
|
+
var _decimal = _interopRequireDefault(require("decimal.js"));
|
|
13
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
14
|
+
var _utils = require("../../../modules/Order/utils");
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
43
16
|
function buildVenueIdentityKey(resourceId, groupIndex) {
|
|
44
|
-
return `venue:${resourceId}:${groupIndex}:${(0,
|
|
17
|
+
return `venue:${resourceId}:${groupIndex}:${(0, _utils.createUuidV4)()}`;
|
|
45
18
|
}
|
|
46
19
|
function mergeConsecutiveSlots(slots) {
|
|
47
|
-
if (!slots.length)
|
|
48
|
-
return [];
|
|
20
|
+
if (!slots.length) return [];
|
|
49
21
|
const sorted = [...slots].sort((a, b) => a.startTime.localeCompare(b.startTime));
|
|
50
22
|
const groups = [];
|
|
51
23
|
let currentSlots = [sorted[0]];
|
|
52
24
|
let currentStart = sorted[0].startTime;
|
|
53
25
|
let currentEnd = sorted[0].endTime;
|
|
54
|
-
let totalPrice = new
|
|
26
|
+
let totalPrice = new _decimal.default(sorted[0].price || '0');
|
|
55
27
|
for (let i = 1; i < sorted.length; i++) {
|
|
56
28
|
const slot = sorted[i];
|
|
57
29
|
if (slot.startTime === currentEnd) {
|
|
58
30
|
currentEnd = slot.endTime;
|
|
59
|
-
totalPrice = totalPrice.add(new
|
|
31
|
+
totalPrice = totalPrice.add(new _decimal.default(slot.price || '0'));
|
|
60
32
|
currentSlots.push(slot);
|
|
61
33
|
} else {
|
|
62
34
|
groups.push({
|
|
@@ -69,7 +41,7 @@ function mergeConsecutiveSlots(slots) {
|
|
|
69
41
|
currentSlots = [slot];
|
|
70
42
|
currentStart = slot.startTime;
|
|
71
43
|
currentEnd = slot.endTime;
|
|
72
|
-
totalPrice = new
|
|
44
|
+
totalPrice = new _decimal.default(slot.price || '0');
|
|
73
45
|
}
|
|
74
46
|
}
|
|
75
47
|
groups.push({
|
|
@@ -82,14 +54,15 @@ function mergeConsecutiveSlots(slots) {
|
|
|
82
54
|
return groups;
|
|
83
55
|
}
|
|
84
56
|
function buildPriceBreakdown(params) {
|
|
85
|
-
const {
|
|
86
|
-
|
|
87
|
-
|
|
57
|
+
const {
|
|
58
|
+
group
|
|
59
|
+
} = params;
|
|
60
|
+
if (!group.slots.length) return [];
|
|
88
61
|
const entries = [];
|
|
89
62
|
for (const slot of group.slots) {
|
|
90
|
-
const unitPrice = Number(slot.price ||
|
|
91
|
-
const startHm = (0,
|
|
92
|
-
const endHm = (0,
|
|
63
|
+
const unitPrice = Number(slot.price || '0');
|
|
64
|
+
const startHm = (0, _dayjs.default)(slot.startTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
|
|
65
|
+
const endHm = (0, _dayjs.default)(slot.endTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
|
|
93
66
|
const last = entries[entries.length - 1];
|
|
94
67
|
if (last && last.unit_price === unitPrice && last.quotation_shelf_id === 0 && last.end_time === startHm) {
|
|
95
68
|
last.end_time = endHm;
|
|
@@ -107,36 +80,50 @@ function buildPriceBreakdown(params) {
|
|
|
107
80
|
return entries;
|
|
108
81
|
}
|
|
109
82
|
function buildVenueResourceMetadata(params) {
|
|
110
|
-
const {
|
|
111
|
-
|
|
83
|
+
const {
|
|
84
|
+
mapping,
|
|
85
|
+
rawResource
|
|
86
|
+
} = params;
|
|
87
|
+
const combined = rawResource?.combined_resource;
|
|
112
88
|
const isCombined = !!(combined && combined.status === 1 && Array.isArray(combined.resource_ids));
|
|
113
89
|
return {
|
|
114
90
|
form_name: mapping.formName ?? mapping.resourceName,
|
|
115
|
-
resource_name:
|
|
91
|
+
resource_name: rawResource?.main_field ?? mapping.resourceName,
|
|
116
92
|
combined_resource: isCombined ? combined : null
|
|
117
93
|
};
|
|
118
94
|
}
|
|
119
95
|
function buildVenueBookingEntry(params) {
|
|
120
|
-
const {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
96
|
+
const {
|
|
97
|
+
group,
|
|
98
|
+
resourceId,
|
|
99
|
+
mapping,
|
|
100
|
+
rawResource,
|
|
101
|
+
bookingUuid,
|
|
102
|
+
productUid,
|
|
103
|
+
childResources
|
|
104
|
+
} = params;
|
|
105
|
+
const startMoment = (0, _dayjs.default)(group.startTime, 'YYYY-MM-DD HH:mm');
|
|
106
|
+
const endMoment = (0, _dayjs.default)(group.endTime, 'YYYY-MM-DD HH:mm');
|
|
107
|
+
const duration = endMoment.diff(startMoment, 'minute');
|
|
124
108
|
const resourceEntry = {
|
|
125
|
-
relation_type:
|
|
126
|
-
like_status:
|
|
109
|
+
relation_type: 'form',
|
|
110
|
+
like_status: 'common',
|
|
127
111
|
id: resourceId,
|
|
128
112
|
main_field: mapping.resourceName,
|
|
129
|
-
form_id:
|
|
113
|
+
form_id: rawResource?.form_id ?? mapping.formId,
|
|
130
114
|
relation_id: resourceId,
|
|
131
115
|
capacity: 1,
|
|
132
|
-
metadata: buildVenueResourceMetadata({
|
|
116
|
+
metadata: buildVenueResourceMetadata({
|
|
117
|
+
mapping,
|
|
118
|
+
rawResource
|
|
119
|
+
})
|
|
133
120
|
};
|
|
134
121
|
if (childResources && childResources.length) {
|
|
135
|
-
resourceEntry.children = childResources.map(
|
|
136
|
-
relation_type:
|
|
137
|
-
like_status:
|
|
122
|
+
resourceEntry.children = childResources.map(child => ({
|
|
123
|
+
relation_type: 'form',
|
|
124
|
+
like_status: 'common',
|
|
138
125
|
id: child.resourceId,
|
|
139
|
-
main_field: child.main_field ||
|
|
126
|
+
main_field: child.main_field || '',
|
|
140
127
|
form_id: child.form_id ?? child.formId,
|
|
141
128
|
relation_id: child.resourceId,
|
|
142
129
|
capacity: child.capacity ?? 1,
|
|
@@ -145,15 +132,15 @@ function buildVenueBookingEntry(params) {
|
|
|
145
132
|
}
|
|
146
133
|
return {
|
|
147
134
|
schedule_event_id: null,
|
|
148
|
-
appointment_status:
|
|
149
|
-
start_date: startMoment.format(
|
|
150
|
-
start_time: startMoment.format(
|
|
151
|
-
end_date: endMoment.format(
|
|
152
|
-
end_time: endMoment.format(
|
|
153
|
-
select_date: startMoment.format(
|
|
135
|
+
appointment_status: 'new',
|
|
136
|
+
start_date: startMoment.format('YYYY-MM-DD'),
|
|
137
|
+
start_time: startMoment.format('HH:mm'),
|
|
138
|
+
end_date: endMoment.format('YYYY-MM-DD'),
|
|
139
|
+
end_time: endMoment.format('HH:mm'),
|
|
140
|
+
select_date: startMoment.format('YYYY-MM-DD'),
|
|
154
141
|
duration,
|
|
155
|
-
sub_type:
|
|
156
|
-
like_status:
|
|
142
|
+
sub_type: 'minutes',
|
|
143
|
+
like_status: 'common',
|
|
157
144
|
number: 1,
|
|
158
145
|
is_all: false,
|
|
159
146
|
schedule_id: 0,
|
|
@@ -170,67 +157,62 @@ function buildVenueBookingEntry(params) {
|
|
|
170
157
|
}
|
|
171
158
|
};
|
|
172
159
|
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* 从一条已合并的订单商品还原出独立的时段列表。
|
|
163
|
+
* 优先使用 metadata.price_breakdown 还原每个时段的精确价格,
|
|
164
|
+
* 回退到按 selling_price / slot_count 均分。
|
|
165
|
+
*/
|
|
173
166
|
function expandMergedSlotToIndividual(product, slotDurationMinutes) {
|
|
174
167
|
const meta = product.metadata || {};
|
|
175
168
|
const resourceId = meta.resource_id;
|
|
176
|
-
if (resourceId == null)
|
|
177
|
-
return [];
|
|
169
|
+
if (resourceId == null) return [];
|
|
178
170
|
const startTime = meta.start_time;
|
|
179
171
|
const endTime = meta.end_time;
|
|
180
|
-
if (!startTime || !endTime)
|
|
181
|
-
return [];
|
|
172
|
+
if (!startTime || !endTime) return [];
|
|
182
173
|
const productId = Number(product.product_id);
|
|
183
174
|
const breakdown = meta.price_breakdown;
|
|
184
175
|
const result = [];
|
|
185
|
-
let cursor = (0,
|
|
186
|
-
const end = (0,
|
|
187
|
-
if (breakdown
|
|
188
|
-
const priceMap =
|
|
176
|
+
let cursor = (0, _dayjs.default)(startTime, 'YYYY-MM-DD HH:mm');
|
|
177
|
+
const end = (0, _dayjs.default)(endTime, 'YYYY-MM-DD HH:mm');
|
|
178
|
+
if (breakdown?.length) {
|
|
179
|
+
const priceMap = new Map();
|
|
189
180
|
for (const entry of breakdown) {
|
|
190
|
-
let entryCursor = (0,
|
|
191
|
-
const entryEnd = (0,
|
|
181
|
+
let entryCursor = (0, _dayjs.default)(entry.start_time, 'YYYY-MM-DD HH:mm');
|
|
182
|
+
const entryEnd = (0, _dayjs.default)(entry.end_time, 'YYYY-MM-DD HH:mm');
|
|
192
183
|
while (entryCursor.isBefore(entryEnd)) {
|
|
193
|
-
priceMap.set(entryCursor.format(
|
|
194
|
-
entryCursor = entryCursor.add(slotDurationMinutes,
|
|
184
|
+
priceMap.set(entryCursor.format('HH:mm'), entry.unit_price);
|
|
185
|
+
entryCursor = entryCursor.add(slotDurationMinutes, 'minute');
|
|
195
186
|
}
|
|
196
187
|
}
|
|
197
188
|
while (cursor.isBefore(end)) {
|
|
198
|
-
const slotEnd = cursor.add(slotDurationMinutes,
|
|
199
|
-
const hm = cursor.format(
|
|
189
|
+
const slotEnd = cursor.add(slotDurationMinutes, 'minute');
|
|
190
|
+
const hm = cursor.format('HH:mm');
|
|
200
191
|
const price = priceMap.get(hm) ?? 0;
|
|
201
192
|
result.push({
|
|
202
193
|
resourceId,
|
|
203
194
|
productId,
|
|
204
|
-
startTime: cursor.format(
|
|
205
|
-
endTime: slotEnd.format(
|
|
206
|
-
price: new
|
|
195
|
+
startTime: cursor.format('YYYY-MM-DD HH:mm'),
|
|
196
|
+
endTime: slotEnd.format('YYYY-MM-DD HH:mm'),
|
|
197
|
+
price: new _decimal.default(price).toFixed(2)
|
|
207
198
|
});
|
|
208
199
|
cursor = slotEnd;
|
|
209
200
|
}
|
|
210
201
|
} else {
|
|
211
202
|
const slotCount = meta.slot_count || 1;
|
|
212
|
-
const totalPrice = new
|
|
203
|
+
const totalPrice = new _decimal.default(product.selling_price || '0');
|
|
213
204
|
const perSlotPrice = slotCount > 0 ? totalPrice.div(slotCount).toFixed(2) : totalPrice.toFixed(2);
|
|
214
205
|
while (cursor.isBefore(end)) {
|
|
215
|
-
const slotEnd = cursor.add(slotDurationMinutes,
|
|
206
|
+
const slotEnd = cursor.add(slotDurationMinutes, 'minute');
|
|
216
207
|
result.push({
|
|
217
208
|
resourceId,
|
|
218
209
|
productId,
|
|
219
|
-
startTime: cursor.format(
|
|
220
|
-
endTime: slotEnd.format(
|
|
210
|
+
startTime: cursor.format('YYYY-MM-DD HH:mm'),
|
|
211
|
+
endTime: slotEnd.format('YYYY-MM-DD HH:mm'),
|
|
221
212
|
price: perSlotPrice
|
|
222
213
|
});
|
|
223
214
|
cursor = slotEnd;
|
|
224
215
|
}
|
|
225
216
|
}
|
|
226
217
|
return result;
|
|
227
|
-
}
|
|
228
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
229
|
-
0 && (module.exports = {
|
|
230
|
-
buildPriceBreakdown,
|
|
231
|
-
buildVenueBookingEntry,
|
|
232
|
-
buildVenueIdentityKey,
|
|
233
|
-
buildVenueResourceMetadata,
|
|
234
|
-
expandMergedSlotToIndividual,
|
|
235
|
-
mergeConsecutiveSlots
|
|
236
|
-
});
|
|
218
|
+
}
|