@pisell/pisellos 0.0.79 → 0.0.80
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/modules/Cart/utils.js +12 -4
- package/dist/solution/BookingByStep/index.d.ts +1 -0
- package/dist/solution/BookingByStep/index.js +143 -14
- package/lib/modules/Cart/utils.js +7 -1
- package/lib/solution/BookingByStep/index.d.ts +1 -0
- package/lib/solution/BookingByStep/index.js +161 -15
- package/package.json +1 -1
|
@@ -550,6 +550,9 @@ export var getProductDeposit = function getProductDeposit(params) {
|
|
|
550
550
|
deposit_policy_data = _ref2.deposit_policy_data;
|
|
551
551
|
// 协议数据
|
|
552
552
|
protocols.push.apply(protocols, _toConsumableArray(deposit_policy_data || []));
|
|
553
|
+
// 是否存在定金,主商品has_deposit为1,但是自身没有定金设置,需要判定子商品是否存在定金,如果不存在最终判定也是不存在定金
|
|
554
|
+
var productHasDeposit = false;
|
|
555
|
+
|
|
553
556
|
// 判断主商品是否有定金规则
|
|
554
557
|
if (typeof deposit_fixed === 'string' && typeof deposit_percentage === 'string') {
|
|
555
558
|
var _handleProductDeposit = handleProductDeposit({
|
|
@@ -561,6 +564,7 @@ export var getProductDeposit = function getProductDeposit(params) {
|
|
|
561
564
|
result = _handleProductDeposit.result;
|
|
562
565
|
if (result) {
|
|
563
566
|
total = depositTotal;
|
|
567
|
+
productHasDeposit = true;
|
|
564
568
|
}
|
|
565
569
|
} else {
|
|
566
570
|
if (bundle !== null && bundle !== void 0 && bundle.length) {
|
|
@@ -573,16 +577,20 @@ export var getProductDeposit = function getProductDeposit(params) {
|
|
|
573
577
|
depositTotal = _handleProductDeposit2.depositTotal,
|
|
574
578
|
result = _handleProductDeposit2.result;
|
|
575
579
|
if (result) {
|
|
580
|
+
productHasDeposit = true;
|
|
576
581
|
return accumulator.plus(depositTotal);
|
|
577
582
|
}
|
|
578
583
|
return accumulator;
|
|
579
584
|
}, new Decimal(0));
|
|
580
585
|
}
|
|
581
586
|
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
587
|
+
if (productHasDeposit) {
|
|
588
|
+
return {
|
|
589
|
+
total: total.toNumber(),
|
|
590
|
+
protocols: protocols
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
return null;
|
|
586
594
|
}
|
|
587
595
|
return null;
|
|
588
596
|
};
|
|
@@ -147,6 +147,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
147
147
|
checkCartItems(type: ECartItemCheckType): string[];
|
|
148
148
|
destroy(): void;
|
|
149
149
|
getResourcesList(): any[];
|
|
150
|
+
checkResourceListForDate(): boolean;
|
|
150
151
|
getResourcesListByCartItem(id: string | number): {
|
|
151
152
|
id: number | undefined;
|
|
152
153
|
_id: string;
|
|
@@ -641,7 +641,9 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
641
641
|
key: "getAvailableDate",
|
|
642
642
|
value: function () {
|
|
643
643
|
var _getAvailableDate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13() {
|
|
644
|
-
var _this3 = this
|
|
644
|
+
var _this3 = this,
|
|
645
|
+
_dateRange$,
|
|
646
|
+
_dateRange$2;
|
|
645
647
|
var params,
|
|
646
648
|
products,
|
|
647
649
|
startDate,
|
|
@@ -684,8 +686,8 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
684
686
|
})];
|
|
685
687
|
}
|
|
686
688
|
dateRange = this.store.date.getDateRange();
|
|
687
|
-
tempStartDate = startDate || (dateRange === null || dateRange === void 0 ? void 0 :
|
|
688
|
-
tempEndDate = endDate || (dateRange === null || dateRange === void 0 ? void 0 :
|
|
689
|
+
tempStartDate = startDate || (dateRange === null || dateRange === void 0 || (_dateRange$ = dateRange[0]) === null || _dateRange$ === void 0 ? void 0 : _dateRange$.date);
|
|
690
|
+
tempEndDate = endDate || (dateRange === null || dateRange === void 0 || (_dateRange$2 = dateRange[1]) === null || _dateRange$2 === void 0 ? void 0 : _dateRange$2.date);
|
|
689
691
|
if (tempProducts.length) {
|
|
690
692
|
_context13.next = 11;
|
|
691
693
|
break;
|
|
@@ -1058,7 +1060,6 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1058
1060
|
// 如果现在选择的是组合资源,需要判断
|
|
1059
1061
|
// 1、当前其他购物车里是否选了当前组合资源的子资源
|
|
1060
1062
|
// 2、如果其他购物车里的商品也是组合资源,出了组合资源本身的 id 需要判断,还需要判断子资源的 id 是否有交集
|
|
1061
|
-
|
|
1062
1063
|
targetRes.metadata.combined_resource.resource_ids.includes(m.id) || targetRes.metadata.combined_resource.resource_ids.some(function (n) {
|
|
1063
1064
|
return m.metadata.combined_resource.resource_ids.includes(n);
|
|
1064
1065
|
}))) return true;
|
|
@@ -1282,6 +1283,134 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1282
1283
|
return arr;
|
|
1283
1284
|
}
|
|
1284
1285
|
|
|
1286
|
+
// 在日期那边点击下一步的时候,检查这一天购物车里的商品是不是都有资源可以用
|
|
1287
|
+
}, {
|
|
1288
|
+
key: "checkResourceListForDate",
|
|
1289
|
+
value: function checkResourceListForDate() {
|
|
1290
|
+
var dateRange = this.store.date.getDateRange();
|
|
1291
|
+
var resources = [];
|
|
1292
|
+
if (dateRange !== null && dateRange !== void 0 && dateRange.length) {
|
|
1293
|
+
dateRange.forEach(function (n) {
|
|
1294
|
+
if (n.resource) resources.push.apply(resources, _toConsumableArray(n.resource));
|
|
1295
|
+
});
|
|
1296
|
+
}
|
|
1297
|
+
// 如果此时 resources 为空,视作购物车里已经有了 dateRange 数据,此时 dateList 里明确就是那一天的数据
|
|
1298
|
+
if (!resources.length) {
|
|
1299
|
+
var dateList = this.store.date.getDateList();
|
|
1300
|
+
dateList.forEach(function (n) {
|
|
1301
|
+
if (n.resource) resources.push.apply(resources, _toConsumableArray(n.resource));
|
|
1302
|
+
});
|
|
1303
|
+
}
|
|
1304
|
+
var resourcesMap = getResourcesMap(cloneDeep(resources));
|
|
1305
|
+
var cartItems = this.store.cart.getItems();
|
|
1306
|
+
var arr = [];
|
|
1307
|
+
var capacityMap = {};
|
|
1308
|
+
cartItems.forEach(function (cartItem) {
|
|
1309
|
+
var _cartItem$_productOri4, _cartItem$_productOri5;
|
|
1310
|
+
var selectedResources = [];
|
|
1311
|
+
if (cartItem.holder_id) {
|
|
1312
|
+
selectedResources = getOthersSelectedResources(cartItems, cartItem.holder_id, resourcesMap);
|
|
1313
|
+
} else {
|
|
1314
|
+
selectedResources = getOthersCartSelectedResources(cartItems, cartItem._id, resourcesMap);
|
|
1315
|
+
}
|
|
1316
|
+
var formatCapacity = formatDefaultCapacitys({
|
|
1317
|
+
capacity: (_cartItem$_productOri4 = cartItem._productOrigin) === null || _cartItem$_productOri4 === void 0 ? void 0 : _cartItem$_productOri4.capacity,
|
|
1318
|
+
product_bundle: cartItem._origin.product.product_bundle
|
|
1319
|
+
});
|
|
1320
|
+
cartItem._origin.metadata.capacity = formatCapacity;
|
|
1321
|
+
var currentCapacity = getSumCapacity({
|
|
1322
|
+
capacity: formatCapacity
|
|
1323
|
+
});
|
|
1324
|
+
var productResources = getResourcesByProduct(resourcesMap, ((_cartItem$_productOri5 = cartItem._productOrigin) === null || _cartItem$_productOri5 === void 0 || (_cartItem$_productOri5 = _cartItem$_productOri5.product_resource) === null || _cartItem$_productOri5 === void 0 ? void 0 : _cartItem$_productOri5.resources) || [], selectedResources, currentCapacity);
|
|
1325
|
+
// 如果购物车里已经有了时间片,则需要按照时间片过滤
|
|
1326
|
+
if (cartItem._origin.start_time) {
|
|
1327
|
+
var startTime = dayjs("".concat(cartItem._origin.start_date, " ").concat(cartItem._origin.start_time));
|
|
1328
|
+
var endTime = dayjs("".concat(cartItem._origin.end_date, " ").concat(cartItem._origin.end_time));
|
|
1329
|
+
var resourcesUseableMap = {};
|
|
1330
|
+
productResources.forEach(function (n) {
|
|
1331
|
+
// 资源排下序,把单个资源靠前,组合资源排在后面
|
|
1332
|
+
n.renderList = n.renderList.sort(function (a, b) {
|
|
1333
|
+
var _a$metadata2, _b$metadata2;
|
|
1334
|
+
var aIsCombined = ((_a$metadata2 = a.metadata) === null || _a$metadata2 === void 0 || (_a$metadata2 = _a$metadata2.combined_resource) === null || _a$metadata2 === void 0 ? void 0 : _a$metadata2.status) === 1;
|
|
1335
|
+
var bIsCombined = ((_b$metadata2 = b.metadata) === null || _b$metadata2 === void 0 || (_b$metadata2 = _b$metadata2.combined_resource) === null || _b$metadata2 === void 0 ? void 0 : _b$metadata2.status) === 1;
|
|
1336
|
+
if (aIsCombined && !bIsCombined) return 1;
|
|
1337
|
+
if (!aIsCombined && bIsCombined) return -1;
|
|
1338
|
+
return 0;
|
|
1339
|
+
});
|
|
1340
|
+
n.renderList = n.renderList.filter(function (m) {
|
|
1341
|
+
var recordCount = capacityMap[m.id] || 0;
|
|
1342
|
+
// m.times 需要做个过滤,假设 timeSlice.start_at 是 09:30 timeSlice.end_at 是 11:30
|
|
1343
|
+
// time 是 time.start_at = 2025-05-26 10:30, time.end_at = 2025-05-26 12:30
|
|
1344
|
+
// 需要判断 time 的开始结束时间 是否包含timeSlice的开始结束时间
|
|
1345
|
+
var mTimes = m.times.filter(function (n) {
|
|
1346
|
+
return !dayjs(n.start_at).isAfter(dayjs(startTime)) && !dayjs(n.end_at).isBefore(dayjs(endTime));
|
|
1347
|
+
});
|
|
1348
|
+
// 如果在这个区间的时间一个都没有,可以直接认为这个资源不可用
|
|
1349
|
+
if (mTimes.length === 0) {
|
|
1350
|
+
return false;
|
|
1351
|
+
}
|
|
1352
|
+
var canUseArr = mTimes.map(function (item) {
|
|
1353
|
+
var res = getIsUsableByTimeItem({
|
|
1354
|
+
timeSlice: {
|
|
1355
|
+
start_time: startTime.format('HH:mm'),
|
|
1356
|
+
end_time: endTime.format('HH:mm'),
|
|
1357
|
+
start_at: startTime,
|
|
1358
|
+
end_at: endTime
|
|
1359
|
+
},
|
|
1360
|
+
time: item,
|
|
1361
|
+
resource: m,
|
|
1362
|
+
currentCount: recordCount + (currentCapacity || 0),
|
|
1363
|
+
resourcesUseableMap: resourcesUseableMap
|
|
1364
|
+
});
|
|
1365
|
+
// 如果仅仅是因为子资源容量不够,不应该标记子资源是被占用的情况
|
|
1366
|
+
if ((resourcesUseableMap === null || resourcesUseableMap === void 0 ? void 0 : resourcesUseableMap[m.id]) !== false && res.reason !== 'capacityOnly') {
|
|
1367
|
+
resourcesUseableMap[m.id] = res.usable;
|
|
1368
|
+
}
|
|
1369
|
+
return res.usable;
|
|
1370
|
+
});
|
|
1371
|
+
if (m.onlyComputed) return false;
|
|
1372
|
+
// 在已经选定时间的情况下,只要canUseTime 里有一个 false,那就代表不可用
|
|
1373
|
+
return !canUseArr.some(function (n) {
|
|
1374
|
+
return n === false;
|
|
1375
|
+
});
|
|
1376
|
+
});
|
|
1377
|
+
});
|
|
1378
|
+
} else {
|
|
1379
|
+
productResources.forEach(function (item) {
|
|
1380
|
+
// 如果资源的 capacity 已经小于了当前需要的 capacity ,则需要把资源给过滤掉
|
|
1381
|
+
// 同时,在这一步尝试去拉一下时间片,基于商品的时长,看每个资源是否还有空余时间能对这个商品做服务,如果没有则过滤
|
|
1382
|
+
item.renderList = item.renderList.filter(function (n) {
|
|
1383
|
+
var _cartItem$_productOri6;
|
|
1384
|
+
var recordCount = n.capacity || 0;
|
|
1385
|
+
if (n.onlyComputed) return false;
|
|
1386
|
+
// 查一下这个资源基于商品的可用时间片
|
|
1387
|
+
var timeSlots = getTimeSlicesByResource({
|
|
1388
|
+
resource: n,
|
|
1389
|
+
duration: ((_cartItem$_productOri6 = cartItem._productOrigin) === null || _cartItem$_productOri6 === void 0 || (_cartItem$_productOri6 = _cartItem$_productOri6.duration) === null || _cartItem$_productOri6 === void 0 ? void 0 : _cartItem$_productOri6.value) || 0,
|
|
1390
|
+
split: 10,
|
|
1391
|
+
currentDate: dateRange[0].date
|
|
1392
|
+
});
|
|
1393
|
+
return recordCount >= currentCapacity && timeSlots.length > 0;
|
|
1394
|
+
});
|
|
1395
|
+
});
|
|
1396
|
+
}
|
|
1397
|
+
arr.push({
|
|
1398
|
+
id: cartItem.id,
|
|
1399
|
+
// 这里返回的是购物车 id ,后面提交的时候要用的,用这个 id 绑定资源和时间
|
|
1400
|
+
_id: cartItem._id,
|
|
1401
|
+
// 这里返回的是购物车 id ,后面提交的时候要用的,用这个 id 绑定资源和时间
|
|
1402
|
+
productResources: productResources
|
|
1403
|
+
});
|
|
1404
|
+
});
|
|
1405
|
+
// 检查 productResources里是不是每一项资源的 renderList 里都有数据
|
|
1406
|
+
var hasResource = arr.every(function (n) {
|
|
1407
|
+
return n.productResources.every(function (m) {
|
|
1408
|
+
return m.renderList.length > 0;
|
|
1409
|
+
});
|
|
1410
|
+
});
|
|
1411
|
+
return hasResource;
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1285
1414
|
// 给单个购物车里的商品获取资源列表
|
|
1286
1415
|
}, {
|
|
1287
1416
|
key: "getResourcesListByCartItem",
|
|
@@ -1360,7 +1489,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1360
1489
|
}, {
|
|
1361
1490
|
key: "autoSelectAccountResources",
|
|
1362
1491
|
value: function autoSelectAccountResources(_ref8) {
|
|
1363
|
-
var _cartItem$
|
|
1492
|
+
var _cartItem$_productOri7, _allProductResources$;
|
|
1364
1493
|
var cartItem = _ref8.cartItem,
|
|
1365
1494
|
holder_id = _ref8.holder_id,
|
|
1366
1495
|
resources_code = _ref8.resources_code,
|
|
@@ -1409,15 +1538,15 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1409
1538
|
var resourcesMap = getResourcesMap(cloneDeep(AllResources));
|
|
1410
1539
|
var allCartItems = cloneDeep(this.store.cart.getItems());
|
|
1411
1540
|
var selectedResources = getOthersSelectedResources(allCartItems, holder_id, resourcesMap);
|
|
1412
|
-
var allProductResources = getResourcesByProduct(resourcesMap, ((_cartItem$
|
|
1541
|
+
var allProductResources = getResourcesByProduct(resourcesMap, ((_cartItem$_productOri7 = cartItem._productOrigin) === null || _cartItem$_productOri7 === void 0 || (_cartItem$_productOri7 = _cartItem$_productOri7.product_resource) === null || _cartItem$_productOri7 === void 0 ? void 0 : _cartItem$_productOri7.resources) || [], selectedResources, 1);
|
|
1413
1542
|
var resources = ((_allProductResources$ = allProductResources.find(function (n) {
|
|
1414
1543
|
return n.code === resources_code;
|
|
1415
1544
|
})) === null || _allProductResources$ === void 0 ? void 0 : _allProductResources$.renderList) || [];
|
|
1416
1545
|
// 资源排下序,把单个资源靠前,组合资源排在后面
|
|
1417
1546
|
resources.sort(function (a, b) {
|
|
1418
|
-
var _a$
|
|
1419
|
-
var aIsCombined = ((_a$
|
|
1420
|
-
var bIsCombined = ((_b$
|
|
1547
|
+
var _a$metadata3, _b$metadata3;
|
|
1548
|
+
var aIsCombined = ((_a$metadata3 = a.metadata) === null || _a$metadata3 === void 0 || (_a$metadata3 = _a$metadata3.combined_resource) === null || _a$metadata3 === void 0 ? void 0 : _a$metadata3.status) === 1;
|
|
1549
|
+
var bIsCombined = ((_b$metadata3 = b.metadata) === null || _b$metadata3 === void 0 || (_b$metadata3 = _b$metadata3.combined_resource) === null || _b$metadata3 === void 0 ? void 0 : _b$metadata3.status) === 1;
|
|
1421
1550
|
if (aIsCombined && !bIsCombined) return 1;
|
|
1422
1551
|
if (!aIsCombined && bIsCombined) return -1;
|
|
1423
1552
|
return 0;
|
|
@@ -1519,11 +1648,11 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1519
1648
|
}, {
|
|
1520
1649
|
key: "autoSelectAllProductResources",
|
|
1521
1650
|
value: function autoSelectAllProductResources(resources_code, timeSlots) {
|
|
1522
|
-
var _dateRange
|
|
1651
|
+
var _dateRange$3,
|
|
1523
1652
|
_this8 = this;
|
|
1524
1653
|
var dateRange = this.store.date.getDateRange();
|
|
1525
1654
|
var resources = [];
|
|
1526
|
-
if (dateRange !== null && dateRange !== void 0 && (_dateRange$ = dateRange[0]) !== null && _dateRange$ !== void 0 && _dateRange
|
|
1655
|
+
if (dateRange !== null && dateRange !== void 0 && (_dateRange$3 = dateRange[0]) !== null && _dateRange$3 !== void 0 && _dateRange$3.date) {
|
|
1527
1656
|
dateRange.forEach(function (n) {
|
|
1528
1657
|
if (n.resource) resources.push.apply(resources, _toConsumableArray(n.resource));
|
|
1529
1658
|
});
|
|
@@ -1925,9 +2054,9 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1925
2054
|
});
|
|
1926
2055
|
// 资源排下序,把单个资源靠前,组合资源排在后面
|
|
1927
2056
|
allProductResources.sort(function (a, b) {
|
|
1928
|
-
var _a$
|
|
1929
|
-
var aIsCombined = ((_a$
|
|
1930
|
-
var bIsCombined = ((_b$
|
|
2057
|
+
var _a$metadata4, _b$metadata4;
|
|
2058
|
+
var aIsCombined = ((_a$metadata4 = a.metadata) === null || _a$metadata4 === void 0 || (_a$metadata4 = _a$metadata4.combined_resource) === null || _a$metadata4 === void 0 ? void 0 : _a$metadata4.status) === 1;
|
|
2059
|
+
var bIsCombined = ((_b$metadata4 = b.metadata) === null || _b$metadata4 === void 0 || (_b$metadata4 = _b$metadata4.combined_resource) === null || _b$metadata4 === void 0 ? void 0 : _b$metadata4.status) === 1;
|
|
1931
2060
|
if (aIsCombined && !bIsCombined) return 1;
|
|
1932
2061
|
if (!aIsCombined && bIsCombined) return -1;
|
|
1933
2062
|
return 0;
|
|
@@ -445,6 +445,7 @@ var getProductDeposit = (params) => {
|
|
|
445
445
|
let total = new import_decimal.default(0);
|
|
446
446
|
const { deposit_fixed, deposit_percentage, deposit_policy_data } = (product == null ? void 0 : product.custom_deposit_data) || {};
|
|
447
447
|
protocols.push(...deposit_policy_data || []);
|
|
448
|
+
let productHasDeposit = false;
|
|
448
449
|
if (typeof deposit_fixed === "string" && typeof deposit_percentage === "string") {
|
|
449
450
|
const { depositTotal, result } = handleProductDeposit({
|
|
450
451
|
depositData: product == null ? void 0 : product.custom_deposit_data,
|
|
@@ -453,6 +454,7 @@ var getProductDeposit = (params) => {
|
|
|
453
454
|
});
|
|
454
455
|
if (result) {
|
|
455
456
|
total = depositTotal;
|
|
457
|
+
productHasDeposit = true;
|
|
456
458
|
}
|
|
457
459
|
} else {
|
|
458
460
|
if (bundle == null ? void 0 : bundle.length) {
|
|
@@ -463,13 +465,17 @@ var getProductDeposit = (params) => {
|
|
|
463
465
|
num: currentBundleProduct.num
|
|
464
466
|
});
|
|
465
467
|
if (result) {
|
|
468
|
+
productHasDeposit = true;
|
|
466
469
|
return accumulator.plus(depositTotal);
|
|
467
470
|
}
|
|
468
471
|
return accumulator;
|
|
469
472
|
}, new import_decimal.default(0));
|
|
470
473
|
}
|
|
471
474
|
}
|
|
472
|
-
|
|
475
|
+
if (productHasDeposit) {
|
|
476
|
+
return { total: total.toNumber(), protocols };
|
|
477
|
+
}
|
|
478
|
+
return null;
|
|
473
479
|
}
|
|
474
480
|
return null;
|
|
475
481
|
};
|
|
@@ -147,6 +147,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
147
147
|
checkCartItems(type: ECartItemCheckType): string[];
|
|
148
148
|
destroy(): void;
|
|
149
149
|
getResourcesList(): any[];
|
|
150
|
+
checkResourceListForDate(): boolean;
|
|
150
151
|
getResourcesListByCartItem(id: string | number): {
|
|
151
152
|
id: number | undefined;
|
|
152
153
|
_id: string;
|
|
@@ -204,7 +204,12 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
204
204
|
{ date, status: "available", week: "", weekNum: 0 }
|
|
205
205
|
]);
|
|
206
206
|
const scheduleIds = scheduleList.filter((n) => n.date === date).flatMap((n) => n.schedule_id);
|
|
207
|
-
return await this.loadProducts({
|
|
207
|
+
return await this.loadProducts({
|
|
208
|
+
schedule_ids: scheduleIds,
|
|
209
|
+
product_ids,
|
|
210
|
+
category_ids,
|
|
211
|
+
schedule_date: date
|
|
212
|
+
});
|
|
208
213
|
}
|
|
209
214
|
// 加载当前店铺下所有 schedule
|
|
210
215
|
async loadAllSchedule() {
|
|
@@ -342,6 +347,7 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
342
347
|
}
|
|
343
348
|
// 获取商品/服务的可用日期
|
|
344
349
|
async getAvailableDate(params = {}) {
|
|
350
|
+
var _a, _b;
|
|
345
351
|
let { products, startDate, endDate, type } = params;
|
|
346
352
|
if ((0, import_dayjs.default)(startDate).isBefore((0, import_dayjs.default)(), "day") && ((0, import_dayjs.default)(endDate).isAfter((0, import_dayjs.default)(), "day") || (0, import_dayjs.default)(endDate).isSame((0, import_dayjs.default)(), "day"))) {
|
|
347
353
|
startDate = (0, import_dayjs.default)().format("YYYY-MM-DD");
|
|
@@ -364,8 +370,8 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
364
370
|
];
|
|
365
371
|
}
|
|
366
372
|
let dateRange = this.store.date.getDateRange();
|
|
367
|
-
const tempStartDate = startDate || (dateRange == null ? void 0 : dateRange[0].date);
|
|
368
|
-
const tempEndDate = endDate || (dateRange == null ? void 0 : dateRange[1].date);
|
|
373
|
+
const tempStartDate = startDate || ((_a = dateRange == null ? void 0 : dateRange[0]) == null ? void 0 : _a.date);
|
|
374
|
+
const tempEndDate = endDate || ((_b = dateRange == null ? void 0 : dateRange[1]) == null ? void 0 : _b.date);
|
|
369
375
|
if (!tempProducts.length) {
|
|
370
376
|
return [];
|
|
371
377
|
}
|
|
@@ -514,9 +520,15 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
514
520
|
if (((_a3 = targetRes.metadata.combined_resource) == null ? void 0 : _a3.status) === 1 && // 如果现在选择的是组合资源,需要判断
|
|
515
521
|
// 1、当前其他购物车里是否选了当前组合资源的子资源
|
|
516
522
|
// 2、如果其他购物车里的商品也是组合资源,出了组合资源本身的 id 需要判断,还需要判断子资源的 id 是否有交集
|
|
517
|
-
(targetRes.metadata.combined_resource.resource_ids.includes(
|
|
518
|
-
|
|
519
|
-
|
|
523
|
+
(targetRes.metadata.combined_resource.resource_ids.includes(
|
|
524
|
+
m.id
|
|
525
|
+
) || targetRes.metadata.combined_resource.resource_ids.some(
|
|
526
|
+
(n) => {
|
|
527
|
+
return m.metadata.combined_resource.resource_ids.includes(
|
|
528
|
+
n
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
)))
|
|
520
532
|
return true;
|
|
521
533
|
if (((_b = m.metadata.combined_resource) == null ? void 0 : _b.status) === 1 && m.metadata.combined_resource.resource_ids.includes(targetRes.id))
|
|
522
534
|
return true;
|
|
@@ -718,6 +730,135 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
718
730
|
});
|
|
719
731
|
return arr;
|
|
720
732
|
}
|
|
733
|
+
// 在日期那边点击下一步的时候,检查这一天购物车里的商品是不是都有资源可以用
|
|
734
|
+
checkResourceListForDate() {
|
|
735
|
+
const dateRange = this.store.date.getDateRange();
|
|
736
|
+
const resources = [];
|
|
737
|
+
if (dateRange == null ? void 0 : dateRange.length) {
|
|
738
|
+
dateRange.forEach((n) => {
|
|
739
|
+
if (n.resource)
|
|
740
|
+
resources.push(...n.resource);
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
if (!resources.length) {
|
|
744
|
+
const dateList = this.store.date.getDateList();
|
|
745
|
+
dateList.forEach((n) => {
|
|
746
|
+
if (n.resource)
|
|
747
|
+
resources.push(...n.resource);
|
|
748
|
+
});
|
|
749
|
+
}
|
|
750
|
+
const resourcesMap = (0, import_utils.getResourcesMap)((0, import_lodash_es.cloneDeep)(resources));
|
|
751
|
+
const cartItems = this.store.cart.getItems();
|
|
752
|
+
const arr = [];
|
|
753
|
+
const capacityMap = {};
|
|
754
|
+
cartItems.forEach((cartItem) => {
|
|
755
|
+
var _a, _b, _c;
|
|
756
|
+
let selectedResources = [];
|
|
757
|
+
if (cartItem.holder_id) {
|
|
758
|
+
selectedResources = (0, import_resources.getOthersSelectedResources)(
|
|
759
|
+
cartItems,
|
|
760
|
+
cartItem.holder_id,
|
|
761
|
+
resourcesMap
|
|
762
|
+
);
|
|
763
|
+
} else {
|
|
764
|
+
selectedResources = (0, import_resources.getOthersCartSelectedResources)(
|
|
765
|
+
cartItems,
|
|
766
|
+
cartItem._id,
|
|
767
|
+
resourcesMap
|
|
768
|
+
);
|
|
769
|
+
}
|
|
770
|
+
const formatCapacity = (0, import_resources.formatDefaultCapacitys)({
|
|
771
|
+
capacity: (_a = cartItem._productOrigin) == null ? void 0 : _a.capacity,
|
|
772
|
+
product_bundle: cartItem._origin.product.product_bundle
|
|
773
|
+
});
|
|
774
|
+
cartItem._origin.metadata.capacity = formatCapacity;
|
|
775
|
+
const currentCapacity = (0, import_resources.getSumCapacity)({ capacity: formatCapacity });
|
|
776
|
+
const productResources = (0, import_resources.getResourcesByProduct)(
|
|
777
|
+
resourcesMap,
|
|
778
|
+
((_c = (_b = cartItem._productOrigin) == null ? void 0 : _b.product_resource) == null ? void 0 : _c.resources) || [],
|
|
779
|
+
selectedResources,
|
|
780
|
+
currentCapacity
|
|
781
|
+
);
|
|
782
|
+
if (cartItem._origin.start_time) {
|
|
783
|
+
const startTime = (0, import_dayjs.default)(
|
|
784
|
+
`${cartItem._origin.start_date} ${cartItem._origin.start_time}`
|
|
785
|
+
);
|
|
786
|
+
const endTime = (0, import_dayjs.default)(
|
|
787
|
+
`${cartItem._origin.end_date} ${cartItem._origin.end_time}`
|
|
788
|
+
);
|
|
789
|
+
const resourcesUseableMap = {};
|
|
790
|
+
productResources.forEach((n) => {
|
|
791
|
+
n.renderList = n.renderList.sort((a, b) => {
|
|
792
|
+
var _a2, _b2, _c2, _d;
|
|
793
|
+
const aIsCombined = ((_b2 = (_a2 = a.metadata) == null ? void 0 : _a2.combined_resource) == null ? void 0 : _b2.status) === 1;
|
|
794
|
+
const bIsCombined = ((_d = (_c2 = b.metadata) == null ? void 0 : _c2.combined_resource) == null ? void 0 : _d.status) === 1;
|
|
795
|
+
if (aIsCombined && !bIsCombined)
|
|
796
|
+
return 1;
|
|
797
|
+
if (!aIsCombined && bIsCombined)
|
|
798
|
+
return -1;
|
|
799
|
+
return 0;
|
|
800
|
+
});
|
|
801
|
+
n.renderList = n.renderList.filter((m) => {
|
|
802
|
+
const recordCount = capacityMap[m.id] || 0;
|
|
803
|
+
const mTimes = m.times.filter((n2) => {
|
|
804
|
+
return !(0, import_dayjs.default)(n2.start_at).isAfter((0, import_dayjs.default)(startTime)) && !(0, import_dayjs.default)(n2.end_at).isBefore((0, import_dayjs.default)(endTime));
|
|
805
|
+
});
|
|
806
|
+
if (mTimes.length === 0) {
|
|
807
|
+
return false;
|
|
808
|
+
}
|
|
809
|
+
const canUseArr = mTimes.map((item) => {
|
|
810
|
+
const res = (0, import_resources.getIsUsableByTimeItem)({
|
|
811
|
+
timeSlice: {
|
|
812
|
+
start_time: startTime.format("HH:mm"),
|
|
813
|
+
end_time: endTime.format("HH:mm"),
|
|
814
|
+
start_at: startTime,
|
|
815
|
+
end_at: endTime
|
|
816
|
+
},
|
|
817
|
+
time: item,
|
|
818
|
+
resource: m,
|
|
819
|
+
currentCount: recordCount + (currentCapacity || 0),
|
|
820
|
+
resourcesUseableMap
|
|
821
|
+
});
|
|
822
|
+
if ((resourcesUseableMap == null ? void 0 : resourcesUseableMap[m.id]) !== false && res.reason !== "capacityOnly") {
|
|
823
|
+
resourcesUseableMap[m.id] = res.usable;
|
|
824
|
+
}
|
|
825
|
+
return res.usable;
|
|
826
|
+
});
|
|
827
|
+
if (m.onlyComputed)
|
|
828
|
+
return false;
|
|
829
|
+
return !canUseArr.some((n2) => n2 === false);
|
|
830
|
+
});
|
|
831
|
+
});
|
|
832
|
+
} else {
|
|
833
|
+
productResources.forEach((item) => {
|
|
834
|
+
item.renderList = item.renderList.filter((n) => {
|
|
835
|
+
var _a2, _b2;
|
|
836
|
+
const recordCount = n.capacity || 0;
|
|
837
|
+
if (n.onlyComputed)
|
|
838
|
+
return false;
|
|
839
|
+
const timeSlots = (0, import_resources.getTimeSlicesByResource)({
|
|
840
|
+
resource: n,
|
|
841
|
+
duration: ((_b2 = (_a2 = cartItem._productOrigin) == null ? void 0 : _a2.duration) == null ? void 0 : _b2.value) || 0,
|
|
842
|
+
split: 10,
|
|
843
|
+
currentDate: dateRange[0].date
|
|
844
|
+
});
|
|
845
|
+
return recordCount >= currentCapacity && timeSlots.length > 0;
|
|
846
|
+
});
|
|
847
|
+
});
|
|
848
|
+
}
|
|
849
|
+
arr.push({
|
|
850
|
+
id: cartItem.id,
|
|
851
|
+
// 这里返回的是购物车 id ,后面提交的时候要用的,用这个 id 绑定资源和时间
|
|
852
|
+
_id: cartItem._id,
|
|
853
|
+
// 这里返回的是购物车 id ,后面提交的时候要用的,用这个 id 绑定资源和时间
|
|
854
|
+
productResources
|
|
855
|
+
});
|
|
856
|
+
});
|
|
857
|
+
const hasResource = arr.every(
|
|
858
|
+
(n) => n.productResources.every((m) => m.renderList.length > 0)
|
|
859
|
+
);
|
|
860
|
+
return hasResource;
|
|
861
|
+
}
|
|
721
862
|
// 给单个购物车里的商品获取资源列表
|
|
722
863
|
getResourcesListByCartItem(id) {
|
|
723
864
|
var _a, _b, _c;
|
|
@@ -852,7 +993,9 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
852
993
|
return -1;
|
|
853
994
|
return 0;
|
|
854
995
|
});
|
|
855
|
-
const resourcesUseableMap = [
|
|
996
|
+
const resourcesUseableMap = [
|
|
997
|
+
...selectedResources
|
|
998
|
+
].reduce((acc, n) => {
|
|
856
999
|
acc[n] = false;
|
|
857
1000
|
return acc;
|
|
858
1001
|
}, {});
|
|
@@ -1162,14 +1305,17 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
1162
1305
|
// 提交时间切片,绑定到对应购物车的商品上,更新购物车
|
|
1163
1306
|
submitTimeSlot(timeSlots) {
|
|
1164
1307
|
const cartItems = (0, import_lodash_es.cloneDeep)(this.store.cart.getItems());
|
|
1165
|
-
const itemsByAccount = cartItems.reduce(
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
acc[holderId]
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1308
|
+
const itemsByAccount = cartItems.reduce(
|
|
1309
|
+
(acc, item) => {
|
|
1310
|
+
const holderId = item.holder_id;
|
|
1311
|
+
if (!acc[holderId]) {
|
|
1312
|
+
acc[holderId] = [];
|
|
1313
|
+
}
|
|
1314
|
+
acc[holderId].push(item);
|
|
1315
|
+
return acc;
|
|
1316
|
+
},
|
|
1317
|
+
{}
|
|
1318
|
+
);
|
|
1173
1319
|
Object.values(itemsByAccount).forEach((accountItems) => {
|
|
1174
1320
|
let currentStartTime = timeSlots.start_at.format("YYYY-MM-DD HH:mm");
|
|
1175
1321
|
accountItems.forEach((item, index) => {
|