@pisell/pisellos 2.1.98 → 2.1.100
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/effects/index.d.ts +2 -2
- package/dist/modules/Customer/types.d.ts +1 -1
- package/dist/modules/Payment/types.d.ts +7 -7
- package/dist/modules/Product/index.d.ts +1 -1
- package/dist/modules/Rules/types.d.ts +1 -1
- package/dist/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
- package/dist/modules/Schedule/type.d.ts +7 -7
- package/dist/modules/Schedule/types.d.ts +9 -9
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingByStep/utils/resources.d.ts +1 -1
- package/dist/solution/ShopDiscount/types.d.ts +1 -1
- package/dist/solution/ShopDiscount/utils.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/task.d.ts +2 -2
- package/dist/utils/watch.d.ts +2 -2
- package/lib/core/index.js +27 -28
- package/lib/effects/index.d.ts +2 -2
- package/lib/effects/index.js +3 -7
- package/lib/modules/Account/index.js +9 -10
- package/lib/modules/AccountList/index.js +14 -11
- package/lib/modules/BaseModule.js +6 -3
- package/lib/modules/Cart/index.js +14 -9
- package/lib/modules/Cart/utils/cartProduct.js +3 -6
- package/lib/modules/Customer/constants.js +1 -1
- package/lib/modules/Customer/index.js +18 -15
- package/lib/modules/Customer/types.d.ts +1 -1
- package/lib/modules/Date/index.js +10 -6
- package/lib/modules/Date/types.js +1 -0
- package/lib/modules/Discount/index.js +11 -6
- package/lib/modules/Guests/index.js +10 -15
- package/lib/modules/Order/index.js +10 -7
- package/lib/modules/Payment/cash.js +1 -1
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +1 -1
- package/lib/modules/Payment/eftpos.js +1 -1
- package/lib/modules/Payment/index.js +84 -73
- package/lib/modules/Payment/types.d.ts +7 -7
- package/lib/modules/Payment/utils.js +3 -6
- package/lib/modules/Payment/walletpass.js +31 -31
- package/lib/modules/Product/index.d.ts +1 -1
- package/lib/modules/Product/index.js +6 -5
- package/lib/modules/ProductList/index.js +5 -3
- package/lib/modules/Resource/index.js +8 -12
- package/lib/modules/Rules/index.js +21 -35
- package/lib/modules/Rules/types.d.ts +1 -1
- package/lib/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
- package/lib/modules/Schedule/index.js +8 -5
- package/lib/modules/Schedule/type.d.ts +7 -7
- package/lib/modules/Schedule/types.d.ts +9 -9
- package/lib/modules/Schedule/utils.js +2 -4
- package/lib/modules/Step/index.js +7 -4
- package/lib/modules/Summary/index.js +9 -4
- package/lib/modules/Summary/utils.js +8 -16
- package/lib/plugins/request.js +34 -33
- package/lib/plugins/window.js +101 -113
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +110 -177
- package/lib/solution/BookingByStep/utils/capacity.js +11 -16
- package/lib/solution/BookingByStep/utils/resources.d.ts +1 -1
- package/lib/solution/BookingByStep/utils/resources.js +4 -8
- package/lib/solution/BookingByStep/utils/stock.js +3 -6
- package/lib/solution/BookingByStep/utils/timeslots.js +24 -27
- package/lib/solution/BookingTicket/index.js +19 -14
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +3 -3
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +6 -6
- package/lib/solution/BookingTicket/utils/scan/index.js +3 -1
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +10 -9
- package/lib/solution/BuyTickets/index.js +15 -15
- package/lib/solution/Checkout/index.js +216 -211
- package/lib/solution/Checkout/utils/index.js +18 -22
- package/lib/solution/RegisterAndLogin/config.js +2 -2
- package/lib/solution/RegisterAndLogin/index.js +114 -110
- package/lib/solution/RegisterAndLogin/utils.js +9 -9
- package/lib/solution/ShopDiscount/index.js +16 -13
- package/lib/solution/ShopDiscount/types.d.ts +1 -1
- package/lib/solution/ShopDiscount/utils.d.ts +2 -2
- package/lib/solution/ShopDiscount/utils.js +1 -2
- package/lib/types/index.d.ts +1 -1
- package/lib/utils/task.d.ts +2 -2
- package/lib/utils/task.js +3 -3
- package/lib/utils/watch.d.ts +2 -2
- package/lib/utils/watch.js +5 -7
- package/package.json +16 -17
|
@@ -53,7 +53,7 @@ var formatDefaultCapacitys = ({
|
|
|
53
53
|
);
|
|
54
54
|
if (!item && (window == null ? void 0 : window.sendWarningLog)) {
|
|
55
55
|
window.sendWarningLog({
|
|
56
|
-
title: "
|
|
56
|
+
title: "\u672A\u627E\u5230\u5957\u9910 capacity \u914D\u7F6E",
|
|
57
57
|
content: [
|
|
58
58
|
{
|
|
59
59
|
key: "product_id",
|
|
@@ -151,19 +151,16 @@ function calculateCartItemsCapacityUsageByResourceType({
|
|
|
151
151
|
const resourcesInThisType = resourceTypeMap[formId];
|
|
152
152
|
const resourceIdsInThisType = resourcesInThisType.map((r) => r.id);
|
|
153
153
|
cartItems.forEach((cartItem) => {
|
|
154
|
-
if (!cartItem.start_time || !cartItem.end_time)
|
|
155
|
-
return;
|
|
154
|
+
if (!cartItem.start_time || !cartItem.end_time) return;
|
|
156
155
|
const itemStart = `${cartItem.start_date} ${cartItem.start_time}`;
|
|
157
156
|
const itemEnd = `${cartItem.end_date || cartItem.start_date} ${cartItem.end_time}`;
|
|
158
157
|
const hasTimeOverlap = !((0, import_dayjs.default)(itemEnd).isBefore((0, import_dayjs.default)(timeSlotStart)) || (0, import_dayjs.default)(itemStart).isAfter((0, import_dayjs.default)(timeSlotEnd)));
|
|
159
|
-
if (!hasTimeOverlap)
|
|
160
|
-
return;
|
|
158
|
+
if (!hasTimeOverlap) return;
|
|
161
159
|
const productResourceIds = getResourcesIdsByProduct(cartItem._productOrigin);
|
|
162
160
|
const hasResourceTypeOverlap = productResourceIds.some(
|
|
163
161
|
(id) => resourceIdsInThisType.includes(id)
|
|
164
162
|
);
|
|
165
|
-
if (!hasResourceTypeOverlap)
|
|
166
|
-
return;
|
|
163
|
+
if (!hasResourceTypeOverlap) return;
|
|
167
164
|
const { currentCapacity } = getCapacityInfoByCartItem(cartItem);
|
|
168
165
|
totalUsage += currentCapacity;
|
|
169
166
|
});
|
|
@@ -223,8 +220,7 @@ function checkTimeSlotCapacity(timeSlotStart, timeSlotEnd, cartItems, allResourc
|
|
|
223
220
|
});
|
|
224
221
|
for (const [formId, requiredCapacity] of Object.entries(requiredCapacityByType)) {
|
|
225
222
|
const resourcesInType = resourceTypeMap[formId];
|
|
226
|
-
if (resourcesInType.length === 0)
|
|
227
|
-
continue;
|
|
223
|
+
if (resourcesInType.length === 0) continue;
|
|
228
224
|
let resourceTypeConfig = null;
|
|
229
225
|
for (const cartItem of cartItems) {
|
|
230
226
|
if ((_b = (_a = cartItem._productOrigin) == null ? void 0 : _a.product_resource) == null ? void 0 : _b.resources) {
|
|
@@ -234,12 +230,11 @@ function checkTimeSlotCapacity(timeSlotStart, timeSlotEnd, cartItems, allResourc
|
|
|
234
230
|
return ((_a2 = r.id) == null ? void 0 : _a2.toString()) === formId && r.status === 1;
|
|
235
231
|
}
|
|
236
232
|
);
|
|
237
|
-
if (resourceTypeConfig)
|
|
238
|
-
break;
|
|
233
|
+
if (resourceTypeConfig) break;
|
|
239
234
|
}
|
|
240
235
|
}
|
|
241
236
|
const isMultipleBooking = (resourceTypeConfig == null ? void 0 : resourceTypeConfig.type) === "multiple";
|
|
242
|
-
console.log(`capacity.ts -
|
|
237
|
+
console.log(`capacity.ts - \u8D44\u6E90\u7C7B\u578B ${formId} \u914D\u7F6E:`, {
|
|
243
238
|
resourceTypeConfig,
|
|
244
239
|
type: resourceTypeConfig == null ? void 0 : resourceTypeConfig.type,
|
|
245
240
|
isMultipleBooking,
|
|
@@ -255,9 +250,9 @@ function checkTimeSlotCapacity(timeSlotStart, timeSlotEnd, cartItems, allResourc
|
|
|
255
250
|
totalAvailableCapacity += resource.capacity || 0;
|
|
256
251
|
}
|
|
257
252
|
});
|
|
258
|
-
console.log(`capacity.ts -
|
|
253
|
+
console.log(`capacity.ts - \u8D44\u6E90\u7C7B\u578B ${formId} \u591A\u4E2A\u9884\u7EA6\u68C0\u67E5: \u603B\u5BB9\u91CF ${totalAvailableCapacity}, \u9700\u6C42 ${requiredCapacity}`);
|
|
259
254
|
if (totalAvailableCapacity < requiredCapacity) {
|
|
260
|
-
console.log(
|
|
255
|
+
console.log(`\u8D44\u6E90\u7C7B\u578B ${formId} \u5BB9\u91CF\u4E0D\u8DB3: \u9700\u8981 ${requiredCapacity}, \u53EF\u7528 ${totalAvailableCapacity}`);
|
|
261
256
|
return {
|
|
262
257
|
success: false,
|
|
263
258
|
required: requiredCapacity,
|
|
@@ -274,9 +269,9 @@ function checkTimeSlotCapacity(timeSlotStart, timeSlotEnd, cartItems, allResourc
|
|
|
274
269
|
availableResourceCount++;
|
|
275
270
|
}
|
|
276
271
|
});
|
|
277
|
-
console.log(`capacity.ts -
|
|
272
|
+
console.log(`capacity.ts - \u8D44\u6E90\u7C7B\u578B ${formId} \u5355\u4E2A\u9884\u7EA6\u68C0\u67E5: \u53EF\u7528\u8D44\u6E90\u6570 ${availableResourceCount}, \u9700\u6C42 ${requiredCapacity}`);
|
|
278
273
|
if (availableResourceCount < requiredCapacity) {
|
|
279
|
-
console.log(
|
|
274
|
+
console.log(`\u8D44\u6E90\u7C7B\u578B ${formId} \u6570\u91CF\u4E0D\u8DB3: \u9700\u8981 ${requiredCapacity}, \u53EF\u7528 ${availableResourceCount}`);
|
|
280
275
|
return {
|
|
281
276
|
success: false,
|
|
282
277
|
required: requiredCapacity,
|
|
@@ -6,7 +6,7 @@ import { CartItem, ProductData } from '../../../modules';
|
|
|
6
6
|
* 3. 格式化资源相关 格式化资源列表 --> 格式化资源 --> 获取时间切片列表 --> 判断单个时间切片是否可用 formatResources
|
|
7
7
|
*
|
|
8
8
|
*/
|
|
9
|
-
type DateType = Dayjs;
|
|
9
|
+
declare type DateType = Dayjs;
|
|
10
10
|
export interface TimeSliceItem {
|
|
11
11
|
start_time: string;
|
|
12
12
|
end_time: string;
|
|
@@ -458,10 +458,8 @@ var getTimeSlicesByResources = ({
|
|
|
458
458
|
var _a, _b, _c, _d;
|
|
459
459
|
const aIsCombined = ((_b = (_a = a.metadata) == null ? void 0 : _a.combined_resource) == null ? void 0 : _b.status) === 1;
|
|
460
460
|
const bIsCombined = ((_d = (_c = b.metadata) == null ? void 0 : _c.combined_resource) == null ? void 0 : _d.status) === 1;
|
|
461
|
-
if (aIsCombined && !bIsCombined)
|
|
462
|
-
|
|
463
|
-
if (!aIsCombined && bIsCombined)
|
|
464
|
-
return -1;
|
|
461
|
+
if (aIsCombined && !bIsCombined) return 1;
|
|
462
|
+
if (!aIsCombined && bIsCombined) return -1;
|
|
465
463
|
return 0;
|
|
466
464
|
});
|
|
467
465
|
let timeSliceList = resources.reduce(
|
|
@@ -545,8 +543,7 @@ var getOthersCartSelectedResources = (cartItems, cartItemId, resourcesMap) => {
|
|
|
545
543
|
}, []);
|
|
546
544
|
};
|
|
547
545
|
function filterScheduleByDateRange(schedule, startDate, endDate) {
|
|
548
|
-
if (!(schedule == null ? void 0 : schedule.length))
|
|
549
|
-
return [];
|
|
546
|
+
if (!(schedule == null ? void 0 : schedule.length)) return [];
|
|
550
547
|
const start = new Date(startDate);
|
|
551
548
|
const end = new Date(endDate);
|
|
552
549
|
return schedule.filter((item) => {
|
|
@@ -612,8 +609,7 @@ function filterResourcesByFormItem(resources, form_id) {
|
|
|
612
609
|
}
|
|
613
610
|
function checkTwoResourcesIntersection(resource1, resource2) {
|
|
614
611
|
var _a, _b;
|
|
615
|
-
if (resource1.id === resource2.id)
|
|
616
|
-
return true;
|
|
612
|
+
if (resource1.id === resource2.id) return true;
|
|
617
613
|
if (((_a = resource1.metadata.combined_resource) == null ? void 0 : _a.status) === 1 && // 如果现在选择的是组合资源,需要判断
|
|
618
614
|
// 1、当前其他购物车里是否选了当前组合资源的子资源
|
|
619
615
|
// 2、如果其他购物车里的商品也是组合资源,出了组合资源本身的 id 需要判断,还需要判断子资源的 id 是否有交集
|
|
@@ -61,13 +61,10 @@ function checkProductStock({
|
|
|
61
61
|
const bundleRequiredQuantity = (bundleItem.num || 1) * quantity;
|
|
62
62
|
const isBundleTrackingEnabled = bundleItem.is_track === 1 || bundleItem.is_track === true;
|
|
63
63
|
const isBundleOverSoldDisabled = bundleItem.over_sold === 0;
|
|
64
|
-
if (!isBundleTrackingEnabled || !isBundleOverSoldDisabled)
|
|
65
|
-
|
|
66
|
-
if (bundleStockQuantity === void 0 || bundleStockQuantity === null)
|
|
67
|
-
continue;
|
|
64
|
+
if (!isBundleTrackingEnabled || !isBundleOverSoldDisabled) continue;
|
|
65
|
+
if (bundleStockQuantity === void 0 || bundleStockQuantity === null) continue;
|
|
68
66
|
const existingBundleQuantity = currentCartItems.reduce((total, cartItem) => {
|
|
69
|
-
if (!cartItem._bundleOrigin || !Array.isArray(cartItem._bundleOrigin))
|
|
70
|
-
return total;
|
|
67
|
+
if (!cartItem._bundleOrigin || !Array.isArray(cartItem._bundleOrigin)) return total;
|
|
71
68
|
cartItem._bundleOrigin.forEach((cartBundleItem) => {
|
|
72
69
|
if (cartBundleItem.bundle_product_id === bundleProductId) {
|
|
73
70
|
total += (cartBundleItem.num || 1) * (cartItem.num || 1);
|
|
@@ -43,8 +43,7 @@ function calculateResourceAvailableTime({
|
|
|
43
43
|
const matchingTimes = resource.times.filter((time) => {
|
|
44
44
|
return (0, import_dayjs.default)(time.start_at).isSame((0, import_dayjs.default)(timeSlots.start_at), "day");
|
|
45
45
|
});
|
|
46
|
-
if (matchingTimes.length === 0)
|
|
47
|
-
return 0;
|
|
46
|
+
if (matchingTimes.length === 0) return 0;
|
|
48
47
|
const overlaps = [];
|
|
49
48
|
for (const time of matchingTimes) {
|
|
50
49
|
const overlapStart = (0, import_dayjs.default)(time.start_at).isAfter((0, import_dayjs.default)(timeSlots.start_at)) ? (0, import_dayjs.default)(time.start_at) : (0, import_dayjs.default)(timeSlots.start_at);
|
|
@@ -53,8 +52,7 @@ function calculateResourceAvailableTime({
|
|
|
53
52
|
overlaps.push({ start: overlapStart, end: overlapEnd });
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
|
-
if (overlaps.length === 0)
|
|
57
|
-
return 0;
|
|
55
|
+
if (overlaps.length === 0) return 0;
|
|
58
56
|
overlaps.sort((a, b) => a.start.diff(b.start));
|
|
59
57
|
const merged = [];
|
|
60
58
|
let current = overlaps[0];
|
|
@@ -83,7 +81,7 @@ function findFastestAvailableResource({
|
|
|
83
81
|
const currentTime = (0, import_dayjs.default)();
|
|
84
82
|
let fastestTime = null;
|
|
85
83
|
let fastestResources = [];
|
|
86
|
-
console.log("[TimeslotUtils]
|
|
84
|
+
console.log("[TimeslotUtils] \u67E5\u627E\u6700\u5FEB\u53EF\u7528\u8D44\u6E90:", {
|
|
87
85
|
currentTime: currentTime.format("YYYY-MM-DD HH:mm:ss"),
|
|
88
86
|
resourceCount: resources.length,
|
|
89
87
|
currentCapacity,
|
|
@@ -96,14 +94,14 @@ function findFastestAvailableResource({
|
|
|
96
94
|
return isToday && isStillWorking;
|
|
97
95
|
});
|
|
98
96
|
if (todayTimes.length === 0) {
|
|
99
|
-
console.log(`[TimeslotUtils]
|
|
97
|
+
console.log(`[TimeslotUtils] \u8D44\u6E90 ${resource.id}(${resource.main_field}) \u4ECA\u65E5\u65E0\u53EF\u7528\u65F6\u95F4\u6BB5`);
|
|
100
98
|
continue;
|
|
101
99
|
}
|
|
102
100
|
for (const time of todayTimes) {
|
|
103
101
|
const workStartTime = (0, import_dayjs.default)(time.start_at);
|
|
104
102
|
const workEndTime = (0, import_dayjs.default)(time.end_at);
|
|
105
103
|
let nextAvailableTime = currentTime.isBefore(workStartTime) ? workStartTime : currentTime;
|
|
106
|
-
console.log(`[TimeslotUtils]
|
|
104
|
+
console.log(`[TimeslotUtils] \u68C0\u67E5\u8D44\u6E90 ${resource.id}(${resource.main_field}):`, {
|
|
107
105
|
workTime: `${workStartTime.format("HH:mm")}-${workEndTime.format("HH:mm")}`,
|
|
108
106
|
checkStartTime: nextAvailableTime.format("HH:mm:ss"),
|
|
109
107
|
eventCount: ((_a = time.event_list) == null ? void 0 : _a.length) || 0
|
|
@@ -119,7 +117,7 @@ function findFastestAvailableResource({
|
|
|
119
117
|
for (const event of relevantEvents) {
|
|
120
118
|
const eventStart = (0, import_dayjs.default)(event.start_at);
|
|
121
119
|
const eventEnd = (0, import_dayjs.default)(event.end_at);
|
|
122
|
-
console.log(`[TimeslotUtils]
|
|
120
|
+
console.log(`[TimeslotUtils] \u68C0\u67E5\u4E8B\u4EF6\u51B2\u7A81:`, {
|
|
123
121
|
resourceId: resource.id,
|
|
124
122
|
eventTime: `${eventStart.format("HH:mm")}-${eventEnd.format("HH:mm")}`,
|
|
125
123
|
checkTime: finalAvailableTime.format("HH:mm:ss"),
|
|
@@ -128,7 +126,7 @@ function findFastestAvailableResource({
|
|
|
128
126
|
if (resource.resourceType === "single" || (resource.capacity || 1) === 1) {
|
|
129
127
|
if (finalAvailableTime.isBefore(eventEnd) && eventStart.isBefore(finalAvailableTime.add(30, "minute"))) {
|
|
130
128
|
finalAvailableTime = eventEnd;
|
|
131
|
-
console.log(`[TimeslotUtils]
|
|
129
|
+
console.log(`[TimeslotUtils] \u53D1\u73B0\u65F6\u95F4\u51B2\u7A81\uFF0C\u8C03\u6574\u5230: ${finalAvailableTime.format("HH:mm:ss")}`);
|
|
132
130
|
}
|
|
133
131
|
} else {
|
|
134
132
|
const totalCapacity = resource.capacity || 0;
|
|
@@ -138,47 +136,46 @@ function findFastestAvailableResource({
|
|
|
138
136
|
const totalRequiredCapacity = currentUsedCapacity + currentCapacity + eventUsedCapacity;
|
|
139
137
|
if (totalRequiredCapacity > totalCapacity) {
|
|
140
138
|
finalAvailableTime = eventEnd;
|
|
141
|
-
console.log(`[TimeslotUtils]
|
|
139
|
+
console.log(`[TimeslotUtils] \u5BB9\u91CF\u4E0D\u8DB3\uFF0C\u8C03\u6574\u5230: ${finalAvailableTime.format("HH:mm:ss")}`);
|
|
142
140
|
}
|
|
143
141
|
}
|
|
144
142
|
}
|
|
145
143
|
}
|
|
146
144
|
if (finalAvailableTime.isAfter(workEndTime)) {
|
|
147
|
-
console.log(`[TimeslotUtils]
|
|
145
|
+
console.log(`[TimeslotUtils] \u8D44\u6E90 ${resource.id} \u53EF\u7528\u65F6\u95F4\u8D85\u51FA\u5DE5\u4F5C\u65F6\u95F4\uFF0C\u8DF3\u8FC7`);
|
|
148
146
|
continue;
|
|
149
147
|
}
|
|
150
|
-
console.log(`[TimeslotUtils]
|
|
148
|
+
console.log(`[TimeslotUtils] \u8D44\u6E90 ${resource.id}(${resource.main_field}) \u6700\u5FEB\u53EF\u7528\u65F6\u95F4: ${finalAvailableTime.format("HH:mm:ss")}`);
|
|
151
149
|
if (!fastestTime || finalAvailableTime.isBefore(fastestTime)) {
|
|
152
150
|
fastestTime = finalAvailableTime;
|
|
153
151
|
fastestResources = [resource];
|
|
154
|
-
console.log(`[TimeslotUtils]
|
|
152
|
+
console.log(`[TimeslotUtils] \u66F4\u65B0\u6700\u5FEB\u65F6\u95F4: ${fastestTime.format("HH:mm:ss")}, \u8D44\u6E90: ${resource.main_field}`);
|
|
155
153
|
} else if (finalAvailableTime.isSame(fastestTime)) {
|
|
156
154
|
fastestResources.push(resource);
|
|
157
|
-
console.log(`[TimeslotUtils]
|
|
155
|
+
console.log(`[TimeslotUtils] \u6DFB\u52A0\u76F8\u540C\u65F6\u95F4\u8D44\u6E90: ${resource.main_field}`);
|
|
158
156
|
}
|
|
159
157
|
break;
|
|
160
158
|
}
|
|
161
159
|
}
|
|
162
160
|
if (!fastestTime || fastestResources.length === 0) {
|
|
163
|
-
console.log("[TimeslotUtils]
|
|
161
|
+
console.log("[TimeslotUtils] \u672A\u627E\u5230\u53EF\u7528\u8D44\u6E90");
|
|
164
162
|
return null;
|
|
165
163
|
}
|
|
166
|
-
console.log(`[TimeslotUtils]
|
|
164
|
+
console.log(`[TimeslotUtils] \u627E\u5230 ${fastestResources.length} \u4E2A\u6700\u5FEB\u53EF\u7528\u8D44\u6E90\uFF0C\u65F6\u95F4: ${fastestTime.format("HH:mm:ss")}`);
|
|
167
165
|
if (fastestResources.length === 1) {
|
|
168
|
-
console.log(`[TimeslotUtils]
|
|
166
|
+
console.log(`[TimeslotUtils] \u8FD4\u56DE\u552F\u4E00\u6700\u5FEB\u8D44\u6E90: ${fastestResources[0].main_field}`);
|
|
169
167
|
return fastestResources[0];
|
|
170
168
|
}
|
|
171
169
|
let selectedResource = fastestResources[0];
|
|
172
170
|
let maxIdleTime = 0;
|
|
173
|
-
console.log(`[TimeslotUtils]
|
|
171
|
+
console.log(`[TimeslotUtils] \u6BD4\u8F83 ${fastestResources.length} \u4E2A\u8D44\u6E90\u7684\u7A7A\u95F2\u65F6\u95F4:`);
|
|
174
172
|
for (const resource of fastestResources) {
|
|
175
173
|
const workingTime = resource.times.find((time) => {
|
|
176
174
|
const isToday = (0, import_dayjs.default)(time.start_at).isSame(fastestTime, "day");
|
|
177
175
|
const isStillWorking = (0, import_dayjs.default)(time.end_at).isAfter(fastestTime);
|
|
178
176
|
return isToday && isStillWorking;
|
|
179
177
|
});
|
|
180
|
-
if (!workingTime)
|
|
181
|
-
continue;
|
|
178
|
+
if (!workingTime) continue;
|
|
182
179
|
const workEndTime = (0, import_dayjs.default)(workingTime.end_at);
|
|
183
180
|
let totalIdleTime = workEndTime.diff(fastestTime, "minute");
|
|
184
181
|
const relevantEvents = ((_c = workingTime.event_list) == null ? void 0 : _c.filter((event) => {
|
|
@@ -192,19 +189,19 @@ function findFastestAvailableResource({
|
|
|
192
189
|
const eventDuration = eventEnd.diff(eventStart, "minute");
|
|
193
190
|
totalIdleTime -= eventDuration;
|
|
194
191
|
}
|
|
195
|
-
console.log(`[TimeslotUtils]
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
192
|
+
console.log(`[TimeslotUtils] \u8D44\u6E90 ${resource.id}(${resource.main_field}):`, {
|
|
193
|
+
\u5DE5\u4F5C\u7ED3\u675F\u65F6\u95F4: workEndTime.format("HH:mm"),
|
|
194
|
+
\u603B\u5DE5\u4F5C\u65F6\u957F: workEndTime.diff(fastestTime, "minute") + "\u5206\u949F",
|
|
195
|
+
\u9884\u7EA6\u5360\u7528\u65F6\u957F: workEndTime.diff(fastestTime, "minute") - totalIdleTime + "\u5206\u949F",
|
|
196
|
+
\u5B9E\u9645\u7A7A\u95F2\u65F6\u957F: totalIdleTime + "\u5206\u949F"
|
|
200
197
|
});
|
|
201
198
|
if (totalIdleTime > maxIdleTime) {
|
|
202
199
|
maxIdleTime = totalIdleTime;
|
|
203
200
|
selectedResource = resource;
|
|
204
|
-
console.log(`[TimeslotUtils]
|
|
201
|
+
console.log(`[TimeslotUtils] \u66F4\u65B0\u6700\u4F73\u9009\u62E9: ${resource.main_field} (\u7A7A\u95F2${totalIdleTime}\u5206\u949F)`);
|
|
205
202
|
}
|
|
206
203
|
}
|
|
207
|
-
console.log(`[TimeslotUtils]
|
|
204
|
+
console.log(`[TimeslotUtils] \u6700\u7EC8\u9009\u62E9\u8D44\u6E90: ${selectedResource.main_field} (\u6700\u957F\u7A7A\u95F2${maxIdleTime}\u5206\u949F)`);
|
|
208
205
|
return selectedResource;
|
|
209
206
|
}
|
|
210
207
|
function filterConditionTimeSlots(times, startTime, endTime) {
|
|
@@ -41,27 +41,32 @@ var import_handleScan = require("./utils/scan/handleScan");
|
|
|
41
41
|
var import_scanCache = __toESM(require("./utils/scan/scanCache"));
|
|
42
42
|
__reExport(BookingTicket_exports, require("./types"), module.exports);
|
|
43
43
|
var BookingTicketImpl = class extends import_BaseModule.BaseModule {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
defaultName = "bookingTicket";
|
|
45
|
+
defaultVersion = "1.0.0";
|
|
46
|
+
isSolution = true;
|
|
47
|
+
request;
|
|
48
|
+
window;
|
|
49
|
+
shopStore;
|
|
50
|
+
store;
|
|
51
|
+
otherParams = {};
|
|
52
|
+
cacheId;
|
|
53
|
+
platform;
|
|
54
|
+
// 平台类型,用于判断是 PC / H5
|
|
55
|
+
scan;
|
|
51
56
|
async initialize(core, options) {
|
|
52
57
|
var _a, _b, _c;
|
|
53
58
|
this.core = core;
|
|
54
59
|
this.store = options.store || {};
|
|
55
60
|
this.otherParams = options.otherParams || {};
|
|
56
|
-
console.log("[BookingTicket]
|
|
61
|
+
console.log("[BookingTicket] \u521D\u59CB\u5316\u5B8C\u6210");
|
|
57
62
|
this.request = core.getPlugin("request");
|
|
58
63
|
this.window = core.getPlugin("window");
|
|
59
64
|
this.shopStore = core.getPlugin("shopStore");
|
|
60
65
|
if (!this.request) {
|
|
61
|
-
throw new Error("bookingTicket
|
|
66
|
+
throw new Error("bookingTicket\u89E3\u51B3\u65B9\u6848\u9700\u8981 request \u63D2\u4EF6\u652F\u6301");
|
|
62
67
|
}
|
|
63
68
|
if (!this.shopStore) {
|
|
64
|
-
throw new Error("bookingTicket
|
|
69
|
+
throw new Error("bookingTicket\u89E3\u51B3\u65B9\u6848\u9700\u8981 shopStore \u63D2\u4EF6\u652F\u6301");
|
|
65
70
|
}
|
|
66
71
|
let targetCacheData = {};
|
|
67
72
|
this.cacheId = (_a = this.otherParams) == null ? void 0 : _a.cacheId;
|
|
@@ -96,7 +101,7 @@ var BookingTicketImpl = class extends import_BaseModule.BaseModule {
|
|
|
96
101
|
}
|
|
97
102
|
});
|
|
98
103
|
} else {
|
|
99
|
-
throw new Error(
|
|
104
|
+
throw new Error(`\u6A21\u5757 ${step} \u4E0D\u5B58\u5728`);
|
|
100
105
|
}
|
|
101
106
|
});
|
|
102
107
|
this.core.effects.emit(`${this.name}:onInited`, {});
|
|
@@ -308,7 +313,7 @@ var BookingTicketImpl = class extends import_BaseModule.BaseModule {
|
|
|
308
313
|
try {
|
|
309
314
|
callback(d);
|
|
310
315
|
} catch (error) {
|
|
311
|
-
console.error("scanGlobalListener
|
|
316
|
+
console.error("scanGlobalListener\u4F20\u5165\u7684\u56DE\u8C03\u51FD\u6570\u5F02\u5E38", error);
|
|
312
317
|
}
|
|
313
318
|
};
|
|
314
319
|
const listener = { key: "global", callback: safeCallback };
|
|
@@ -325,7 +330,7 @@ var BookingTicketImpl = class extends import_BaseModule.BaseModule {
|
|
|
325
330
|
try {
|
|
326
331
|
callback(d);
|
|
327
332
|
} catch (error) {
|
|
328
|
-
console.error("scanCustomerListener
|
|
333
|
+
console.error("scanCustomerListener\u4F20\u5165\u7684\u56DE\u8C03\u51FD\u6570\u5F02\u5E38", error);
|
|
329
334
|
}
|
|
330
335
|
};
|
|
331
336
|
const listener = { key: "customer", callback: safeCallback };
|
|
@@ -344,7 +349,7 @@ var BookingTicketImpl = class extends import_BaseModule.BaseModule {
|
|
|
344
349
|
callback(d);
|
|
345
350
|
} catch (error) {
|
|
346
351
|
console.error(
|
|
347
|
-
`scanUniversalListener
|
|
352
|
+
`scanUniversalListener\u4F20\u5165\u7684\u56DE\u8C03\u51FD\u6570\u5F02\u5E38, key: ${key}`,
|
|
348
353
|
error
|
|
349
354
|
);
|
|
350
355
|
}
|
|
@@ -57,7 +57,7 @@ var searchWalletPass = async (request, code) => {
|
|
|
57
57
|
if ((res == null ? void 0 : res.code) == 200 && !!(res == null ? void 0 : res.data)) {
|
|
58
58
|
return { searchType: "walletPass", response: res };
|
|
59
59
|
}
|
|
60
|
-
throw new Error("
|
|
60
|
+
throw new Error("\u6CA1\u6709\u627E\u5230\u5BF9\u5E94\u7684\u8BC6\u522B\u7801");
|
|
61
61
|
} catch (error) {
|
|
62
62
|
throw error;
|
|
63
63
|
}
|
|
@@ -72,7 +72,7 @@ var searchWallet = async (request, code) => {
|
|
|
72
72
|
if ((res == null ? void 0 : res.code) == 200 && !!(res == null ? void 0 : res.data)) {
|
|
73
73
|
return { searchType: "wallet", response: res };
|
|
74
74
|
}
|
|
75
|
-
throw new Error("
|
|
75
|
+
throw new Error("\u6CA1\u6709\u627E\u5230\u5BF9\u5E94\u7684\u8BC6\u522B\u7801");
|
|
76
76
|
} catch (error) {
|
|
77
77
|
throw error;
|
|
78
78
|
}
|
|
@@ -104,7 +104,7 @@ var searchProduct = async (request, code) => {
|
|
|
104
104
|
if ((res == null ? void 0 : res.code) == 200 && ((_b = (_a = res == null ? void 0 : res.data) == null ? void 0 : _a.list) == null ? void 0 : _b.length) > 0) {
|
|
105
105
|
return { searchType: "product", response: res };
|
|
106
106
|
}
|
|
107
|
-
throw new Error("
|
|
107
|
+
throw new Error("\u6CA1\u6709\u627E\u5230\u5BF9\u5E94\u7684\u8BC6\u522B\u7801");
|
|
108
108
|
} catch (error) {
|
|
109
109
|
throw error;
|
|
110
110
|
}
|
|
@@ -66,28 +66,28 @@ var handleScanFn = (getRequestList, localSearch) => {
|
|
|
66
66
|
try {
|
|
67
67
|
const localResult = localSearch == null ? void 0 : localSearch(value);
|
|
68
68
|
if ((localResult == null ? void 0 : localResult.length) > 0) {
|
|
69
|
-
console.log("
|
|
69
|
+
console.log("\u672C\u5730\u641C\u7D22\u5230\u6570\u636E>>>>>>>", localResult);
|
|
70
70
|
return {
|
|
71
71
|
searchType: "local_product",
|
|
72
72
|
response: { data: { list: localResult } }
|
|
73
73
|
};
|
|
74
74
|
} else {
|
|
75
|
-
console.log("
|
|
75
|
+
console.log("\u672C\u5730\u641C\u7D22\u65E0\u6570\u636E>>>>>>>");
|
|
76
76
|
}
|
|
77
77
|
} catch (error) {
|
|
78
|
-
console.error("
|
|
78
|
+
console.error("\u672C\u5730\u641C\u7D22\u5230\u6570\u636E\u5931\u8D25>>>>>>>", error);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
try {
|
|
82
82
|
if (import_scanCache.default.has(value)) {
|
|
83
83
|
const result = import_scanCache.default.get(value);
|
|
84
|
-
console.log("
|
|
84
|
+
console.log("\u7F13\u5B58\u4E2D\u641C\u7D22\u5230\u6570\u636E>>>>>>>", result);
|
|
85
85
|
return result;
|
|
86
86
|
} else {
|
|
87
|
-
console.log("
|
|
87
|
+
console.log("\u7F13\u5B58\u4E2D\u65E0\u6570\u636E>>>>>>>");
|
|
88
88
|
}
|
|
89
89
|
} catch (error) {
|
|
90
|
-
console.error("
|
|
90
|
+
console.error("\u7F13\u5B58\u4E2D\u641C\u7D22\u6570\u636E\u5931\u8D25>>>>>>>", error);
|
|
91
91
|
}
|
|
92
92
|
const requestList = (getRequestList == null ? void 0 : getRequestList(value)) || [];
|
|
93
93
|
if (requestList.length === 0) {
|
|
@@ -35,8 +35,10 @@ module.exports = __toCommonJS(scan_exports);
|
|
|
35
35
|
var import_watch = __toESM(require("../../../../utils/watch"));
|
|
36
36
|
var import_task = __toESM(require("../../../../utils/task"));
|
|
37
37
|
var Scan = class {
|
|
38
|
+
solution;
|
|
39
|
+
watchKey;
|
|
40
|
+
listenerConfig = /* @__PURE__ */ new Map();
|
|
38
41
|
constructor(solution, watchKey) {
|
|
39
|
-
this.listenerConfig = /* @__PURE__ */ new Map();
|
|
40
42
|
this.solution = solution;
|
|
41
43
|
this.watchKey = watchKey;
|
|
42
44
|
this.initPeripheralsListener();
|
|
@@ -29,7 +29,7 @@ var compressData = (data) => {
|
|
|
29
29
|
}
|
|
30
30
|
return JSON.stringify(data);
|
|
31
31
|
} catch (error) {
|
|
32
|
-
console.warn("
|
|
32
|
+
console.warn("\u6570\u636E\u538B\u7F29\u5931\u8D25:", error);
|
|
33
33
|
return JSON.stringify(data);
|
|
34
34
|
}
|
|
35
35
|
};
|
|
@@ -40,17 +40,19 @@ var decompressData = (compressedData) => {
|
|
|
40
40
|
}
|
|
41
41
|
return JSON.parse(compressedData);
|
|
42
42
|
} catch (error) {
|
|
43
|
-
console.warn("
|
|
43
|
+
console.warn("\u6570\u636E\u89E3\u538B\u7F29\u5931\u8D25:", error);
|
|
44
44
|
return null;
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
47
|
var LRUCache = class {
|
|
48
|
+
head = null;
|
|
49
|
+
// 最久未使用的节点
|
|
50
|
+
tail = null;
|
|
51
|
+
// 最近使用的节点
|
|
52
|
+
keyMap = /* @__PURE__ */ new Map();
|
|
53
|
+
// key到节点的映射(只存储引用)
|
|
54
|
+
maxSize;
|
|
48
55
|
constructor(maxSize = 100) {
|
|
49
|
-
this.head = null;
|
|
50
|
-
// 最久未使用的节点
|
|
51
|
-
this.tail = null;
|
|
52
|
-
// 最近使用的节点
|
|
53
|
-
this.keyMap = /* @__PURE__ */ new Map();
|
|
54
56
|
this.maxSize = maxSize;
|
|
55
57
|
}
|
|
56
58
|
/**
|
|
@@ -58,8 +60,7 @@ var LRUCache = class {
|
|
|
58
60
|
* @param node 要移动的节点
|
|
59
61
|
*/
|
|
60
62
|
moveToTail(node) {
|
|
61
|
-
if (this.tail === node)
|
|
62
|
-
return;
|
|
63
|
+
if (this.tail === node) return;
|
|
63
64
|
if (node.prev) {
|
|
64
65
|
node.prev.next = node.next;
|
|
65
66
|
}
|
|
@@ -27,23 +27,26 @@ var import_modules = require("../../modules/");
|
|
|
27
27
|
var import_BaseModule = require("../../modules/BaseModule");
|
|
28
28
|
__reExport(BuyTickets_exports, require("./types"), module.exports);
|
|
29
29
|
var BuyTicketsImpl = class extends import_BaseModule.BaseModule {
|
|
30
|
+
// 提供给 baseModule 用的默认名称 和 默认版本
|
|
31
|
+
defaultName = "buyTickets";
|
|
32
|
+
defaultVersion = "1.0.0";
|
|
33
|
+
isSolution = true;
|
|
34
|
+
request;
|
|
35
|
+
window;
|
|
36
|
+
store;
|
|
37
|
+
otherParams = {};
|
|
30
38
|
constructor(name, version) {
|
|
31
39
|
super(name, version);
|
|
32
|
-
// 提供给 baseModule 用的默认名称 和 默认版本
|
|
33
|
-
this.defaultName = "buyTickets";
|
|
34
|
-
this.defaultVersion = "1.0.0";
|
|
35
|
-
this.isSolution = true;
|
|
36
|
-
this.otherParams = {};
|
|
37
40
|
}
|
|
38
41
|
async initialize(core, options) {
|
|
39
42
|
this.core = core;
|
|
40
43
|
this.store = options.store || {};
|
|
41
44
|
this.otherParams = options.otherParams || {};
|
|
42
|
-
console.log("[BuyTickets]
|
|
45
|
+
console.log("[BuyTickets] \u521D\u59CB\u5316\u5B8C\u6210");
|
|
43
46
|
this.request = core.getPlugin("request");
|
|
44
47
|
this.window = core.getPlugin("window");
|
|
45
48
|
if (!this.request) {
|
|
46
|
-
throw new Error("
|
|
49
|
+
throw new Error("\u8D2D\u7269\u8F66\u6A21\u5757\u9700\u8981 request \u63D2\u4EF6\u652F\u6301");
|
|
47
50
|
}
|
|
48
51
|
if (this.otherParams.prodctIds) {
|
|
49
52
|
await this.loadProductsByIds(this.otherParams.prodctIds);
|
|
@@ -75,7 +78,7 @@ var BuyTicketsImpl = class extends import_BaseModule.BaseModule {
|
|
|
75
78
|
}
|
|
76
79
|
async destroy() {
|
|
77
80
|
await this.core.effects.emit(`${this.name}:onDestroy`, {});
|
|
78
|
-
console.log("[BuyTickets]
|
|
81
|
+
console.log("[BuyTickets] \u5DF2\u9500\u6BC1");
|
|
79
82
|
}
|
|
80
83
|
// 获取当前绑定的所有商品
|
|
81
84
|
async getProducts() {
|
|
@@ -93,10 +96,8 @@ var BuyTicketsImpl = class extends import_BaseModule.BaseModule {
|
|
|
93
96
|
var _a, _b;
|
|
94
97
|
const mainProduct = await ((_a = this.store.mainProducts) == null ? void 0 : _a.getProduct(id));
|
|
95
98
|
const otherProduct = await ((_b = this.store.otherProducts) == null ? void 0 : _b.getProduct(id));
|
|
96
|
-
if (mainProduct)
|
|
97
|
-
|
|
98
|
-
if (otherProduct)
|
|
99
|
-
return otherProduct;
|
|
99
|
+
if (mainProduct) return mainProduct;
|
|
100
|
+
if (otherProduct) return otherProduct;
|
|
100
101
|
throw new Error(`Product not found: ${id}`);
|
|
101
102
|
}
|
|
102
103
|
// 商品列表页提交
|
|
@@ -105,13 +106,12 @@ var BuyTicketsImpl = class extends import_BaseModule.BaseModule {
|
|
|
105
106
|
...data,
|
|
106
107
|
products: this.getProducts()
|
|
107
108
|
});
|
|
108
|
-
if (res.status === false)
|
|
109
|
-
return res;
|
|
109
|
+
if (res.status === false) return res;
|
|
110
110
|
this.window.localStorage.setItem(
|
|
111
111
|
"buyTickets:listSubmit",
|
|
112
112
|
JSON.stringify({ ...data, products: this.getProducts() })
|
|
113
113
|
);
|
|
114
|
-
console.log("listSubmit
|
|
114
|
+
console.log("listSubmit \u5E94\u8BE5\u8D70\u903B\u8F91\u5C42\u7684 API \u53D1\u8BF7\u6C42\u4E86");
|
|
115
115
|
}
|
|
116
116
|
// 购物车提交
|
|
117
117
|
async cartSubmit(data) {
|