@pisell/pisellos 2.0.47 → 2.0.49

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.
@@ -109,8 +109,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
109
109
 
110
110
  // 编辑商品已有商品券
111
111
  if (productList.every(function (item) {
112
- var _item$discount_list;
113
- return item.booking_id && (((_item$discount_list = item.discount_list) === null || _item$discount_list === void 0 ? void 0 : _item$discount_list.length) || item.price == 0);
112
+ var _product$discount_lis;
113
+ var product = _this2.hooks.getProduct(item);
114
+ return product.booking_id && (((_product$discount_lis = product.discount_list) === null || _product$discount_lis === void 0 ? void 0 : _product$discount_lis.length) || (newDiscountList[0].tag === 'good_pass' ? product.price == 0 : product.total == 0));
114
115
  })) {
115
116
  return {
116
117
  isAvailable: false,
@@ -278,14 +279,14 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
278
279
  sortedProductList.forEach(function (originProduct) {
279
280
  var product = _this3.hooks.getProduct(originProduct);
280
281
  addModeDiscount.forEach(function (discount) {
281
- var _product$discount_lis, _product$discount_lis2;
282
+ var _product$discount_lis2, _product$discount_lis3;
282
283
  var limitedData = discount === null || discount === void 0 ? void 0 : discount.limited_relation_product_data;
283
284
 
284
285
  // 是符合折扣的商品
285
286
  var isLimitedProduct = limitedData.type === 'product_all' || limitedData.product_ids && limitedData.product_ids.includes(product.id);
286
287
 
287
288
  // 编辑的商品 使用了优惠券不可用
288
- var isAvailableProduct = !(product !== null && product !== void 0 && product.booking_id && product !== null && product !== void 0 && (_product$discount_lis = product.discount_list) !== null && _product$discount_lis !== void 0 && _product$discount_lis.length && product !== null && product !== void 0 && (_product$discount_lis2 = product.discount_list) !== null && _product$discount_lis2 !== void 0 && _product$discount_lis2.every(function (discount) {
289
+ var isAvailableProduct = !(product !== null && product !== void 0 && product.booking_id && product !== null && product !== void 0 && (_product$discount_lis2 = product.discount_list) !== null && _product$discount_lis2 !== void 0 && _product$discount_lis2.length && product !== null && product !== void 0 && (_product$discount_lis3 = product.discount_list) !== null && _product$discount_lis3 !== void 0 && _product$discount_lis3.every(function (discount) {
289
290
  return discount.id && ['good_pass', 'discount_card', 'product_discount_card'].includes(discount.tag || discount.type);
290
291
  }));
291
292
 
@@ -318,9 +319,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
318
319
 
319
320
  // 然后再处理应用哪些优惠券,此时只考虑filteredDiscountList中的优惠券
320
321
  sortedProductList.forEach(function (originProduct, i) {
321
- var _product$discount_lis3, _product$discount_lis4, _product$discount_lis5, _product$discount_lis6, _product$discount_lis7, _product$discount_lis8;
322
+ var _product$discount_lis4, _product$discount_lis5, _product$discount_lis6, _product$discount_lis7, _product$discount_lis8, _product$discount_lis9;
322
323
  var product = _this3.hooks.getProduct(originProduct);
323
- if (product !== null && product !== void 0 && product.booking_id && (_product$discount_lis3 = product.discount_list) !== null && _product$discount_lis3 !== void 0 && _product$discount_lis3.length && product !== null && product !== void 0 && (_product$discount_lis4 = product.discount_list) !== null && _product$discount_lis4 !== void 0 && _product$discount_lis4.every(function (discount) {
324
+ if (product !== null && product !== void 0 && product.booking_id && (_product$discount_lis4 = product.discount_list) !== null && _product$discount_lis4 !== void 0 && _product$discount_lis4.length && product !== null && product !== void 0 && (_product$discount_lis5 = product.discount_list) !== null && _product$discount_lis5 !== void 0 && _product$discount_lis5.every(function (discount) {
324
325
  return discount.id && ['good_pass', 'discount_card', 'product_discount_card'].includes(discount.tag || discount.type);
325
326
  })) {
326
327
  processedProductsMap.set(product._id, [originProduct]);
@@ -330,7 +331,10 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
330
331
  // 找到适用于此商品的所有优惠券,仅考虑isSelected不为false的优惠券
331
332
  var applicableDiscounts = sortedDiscountList.filter(function (discount) {
332
333
  // 如果商品价格为 0,其实不需要使用任何优惠券,直接 return true
333
- if (Number(product.price) === 0 && discount.tag === 'good_pass' || Number(product.total) === 0 && discount.tag !== 'good_pass' || !product.price) return false;
334
+ // 商品券时主商品价格为0不可用
335
+ if ((Number(product.price) === 0 || !product.price) && (discount.tag || discount.type) === 'good_pass') return false;
336
+ // 折扣卡时总价为0时不可用
337
+ if ((Number(product.total) === 0 || !product.total) && (discount.tag || discount.type) !== 'good_pass') return false;
334
338
  // 如果优惠券已被使用,则跳过
335
339
  var targetUsedDiscounts = usedDiscounts.get(discount.id);
336
340
  if (targetUsedDiscounts && (discount.tag || discount.type) === 'good_pass') return false;
@@ -346,15 +350,20 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
346
350
  });
347
351
 
348
352
  // 选择第一个适用的优惠券(已经按过期时间排序)
349
- var selectedDiscount = applicableDiscounts[0];
353
+ // 如果有 isScan 且 isSelected 的折扣卡,则优先选中,否则再选择第一个
354
+ // 用于处理:先手动扫描了一张折扣卡,扫描完以后带入客户信息,但是之前那张折扣卡不是最优惠的情况
355
+ var selectedDiscountCard = applicableDiscounts.find(function (n) {
356
+ return n.isScan && n.isSelected && (n.tag || n.type) !== 'good_pass';
357
+ });
358
+ var selectedDiscount = selectedDiscountCard || applicableDiscounts[0];
350
359
 
351
360
  // 如果是手动折扣,则不适用优惠券
352
- var isManualDiscount = typeof product.isManualDiscount === 'boolean' ? product.isManualDiscount : product.total != product.origin_total && (!((_product$discount_lis5 = product.discount_list) !== null && _product$discount_lis5 !== void 0 && _product$discount_lis5.length) || (product === null || product === void 0 || (_product$discount_lis6 = product.discount_list) === null || _product$discount_lis6 === void 0 || (_product$discount_lis7 = _product$discount_lis6.every) === null || _product$discount_lis7 === void 0 ? void 0 : _product$discount_lis7.call(_product$discount_lis6, function (item) {
361
+ var isManualDiscount = typeof product.isManualDiscount === 'boolean' ? product.isManualDiscount : product.total != product.origin_total && (!((_product$discount_lis6 = product.discount_list) !== null && _product$discount_lis6 !== void 0 && _product$discount_lis6.length) || (product === null || product === void 0 || (_product$discount_lis7 = product.discount_list) === null || _product$discount_lis7 === void 0 || (_product$discount_lis8 = _product$discount_lis7.every) === null || _product$discount_lis8 === void 0 ? void 0 : _product$discount_lis8.call(_product$discount_lis7, function (item) {
353
362
  return item.type === 'product';
354
363
  })));
355
364
 
356
365
  // 勾选时覆盖手动折扣
357
- if (options !== null && options !== void 0 && options.discountId && (_product$discount_lis8 = product.discount_list) !== null && _product$discount_lis8 !== void 0 && _product$discount_lis8.some(function (item) {
366
+ if (options !== null && options !== void 0 && options.discountId && (_product$discount_lis9 = product.discount_list) !== null && _product$discount_lis9 !== void 0 && _product$discount_lis9.some(function (item) {
358
367
  var _item$discount;
359
368
  return ((_item$discount = item.discount) === null || _item$discount === void 0 ? void 0 : _item$discount.resource_id) === options.discountId;
360
369
  })) {
@@ -416,7 +425,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
416
425
  }));
417
426
  }
418
427
  for (var _i = 0; _i < splitCount; _i++) {
419
- var _selectedDiscount = applicableDiscounts[_i];
428
+ var _originProduct$_produ, _product$discount_lis10;
429
+ // 如果用过折扣卡,也就不存在拆分的情况了,这里直接使用上面计算出来的折扣卡
430
+ var _selectedDiscount = selectedDiscountCard || applicableDiscounts[_i];
420
431
  // 标记优惠券为已使用
421
432
  usedDiscounts.set(_selectedDiscount.id, true);
422
433
 
@@ -425,6 +436,14 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
425
436
 
426
437
  // 优先从 origin_total拿,可能会拿不到(比如用户端预约在没有配置 original_price 的情况下)
427
438
  var productOriginTotal = product.origin_total || product.total || 0;
439
+ // 如果originProduct?._productInit?.original_price为 0,product.origin_total可能为空,此时取 product.total
440
+ if (Number((originProduct === null || originProduct === void 0 || (_originProduct$_produ = originProduct._productInit) === null || _originProduct$_produ === void 0 ? void 0 : _originProduct$_produ.original_price) || 0) > 0 && product.origin_total && product.total && product.origin_total !== product.total) {
441
+ productOriginTotal = product.total;
442
+ }
443
+ // 如果当前 product 有 discount_list,则必须从 origin_total 拿
444
+ if ((_product$discount_lis10 = product.discount_list) !== null && _product$discount_lis10 !== void 0 && _product$discount_lis10.length) {
445
+ productOriginTotal = product.origin_total;
446
+ }
428
447
 
429
448
  // 计算使用折扣卡/商品券以后,单个商品的总 total
430
449
  var targetProductTotal = _selectedDiscount.tag === 'good_pass' ? new Decimal(productOriginTotal).minus(new Decimal(product.price || 0)).toNumber() : new Decimal(100).minus(_selectedDiscount.par_value || 0).div(100).mul(new Decimal(productOriginTotal)).toNumber();
@@ -1436,7 +1436,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
1436
1436
  var resources = [];
1437
1437
  if (dateRange !== null && dateRange !== void 0 && dateRange.length) {
1438
1438
  dateRange.forEach(function (n) {
1439
- resources.push.apply(resources, _toConsumableArray(_this10.store.date.getResourcesListByDate(n.date) || []));
1439
+ if (n.resource) resources.push.apply(resources, _toConsumableArray(n.resource));
1440
1440
  });
1441
1441
  }
1442
1442
  var cartItems = this.store.cart.getItems().filter(function (n) {
@@ -1673,10 +1673,18 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
1673
1673
  }
1674
1674
  // 如果此时 resources 为空,视作购物车里已经有了 dateRange 数据,此时 dateList 里明确就是那一天的数据
1675
1675
  if (!AllResources.length) {
1676
- var dateList = this.store.date.getDateList();
1677
- dateList.forEach(function (n) {
1678
- if (n.resource) AllResources.push.apply(AllResources, _toConsumableArray(n.resource));
1676
+ var firstDateCartItem = cartItems === null || cartItems === void 0 ? void 0 : cartItems.find(function (n) {
1677
+ return n.start_date;
1679
1678
  });
1679
+ if (firstDateCartItem !== null && firstDateCartItem !== void 0 && firstDateCartItem.start_date) {
1680
+ var dateResources = this.store.date.getResourcesListByDate(firstDateCartItem.start_date);
1681
+ AllResources.push.apply(AllResources, _toConsumableArray(dateResources || []));
1682
+ } else {
1683
+ var dateList = this.store.date.getDateList();
1684
+ dateList.forEach(function (n) {
1685
+ if (n.resource) AllResources.push.apply(AllResources, _toConsumableArray(n.resource));
1686
+ });
1687
+ }
1680
1688
  }
1681
1689
  var resourcesMap = getResourcesMap(cloneDeep(AllResources));
1682
1690
  var allCartItems = cloneDeep(this.store.cart.getItems());
@@ -71,7 +71,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
71
71
  }
72
72
  if (productList.every((item) => {
73
73
  var _a;
74
- return item.booking_id && (((_a = item.discount_list) == null ? void 0 : _a.length) || item.price == 0);
74
+ const product = this.hooks.getProduct(item);
75
+ return product.booking_id && (((_a = product.discount_list) == null ? void 0 : _a.length) || (newDiscountList[0].tag === "good_pass" ? product.price == 0 : product.total == 0));
75
76
  })) {
76
77
  return {
77
78
  isAvailable: false,
@@ -206,14 +207,16 @@ var RulesModule = class extends import_BaseModule.BaseModule {
206
207
  });
207
208
  console.log(sortedProductList, "sortedProductListsortedProductList");
208
209
  sortedProductList.forEach((originProduct, i) => {
209
- var _a, _b, _c, _d, _e, _f;
210
+ var _a, _b, _c, _d, _e, _f, _g, _h;
210
211
  const product = this.hooks.getProduct(originProduct);
211
212
  if ((product == null ? void 0 : product.booking_id) && ((_a = product.discount_list) == null ? void 0 : _a.length) && ((_b = product == null ? void 0 : product.discount_list) == null ? void 0 : _b.every((discount) => discount.id && ["good_pass", "discount_card", "product_discount_card"].includes(discount.tag || discount.type)))) {
212
213
  processedProductsMap.set(product._id, [originProduct]);
213
214
  return;
214
215
  }
215
216
  const applicableDiscounts = sortedDiscountList.filter((discount) => {
216
- if (Number(product.price) === 0 && discount.tag === "good_pass" || Number(product.total) === 0 && discount.tag !== "good_pass" || !product.price)
217
+ if ((Number(product.price) === 0 || !product.price) && (discount.tag || discount.type) === "good_pass")
218
+ return false;
219
+ if ((Number(product.total) === 0 || !product.total) && (discount.tag || discount.type) !== "good_pass")
217
220
  return false;
218
221
  const targetUsedDiscounts = usedDiscounts.get(discount.id);
219
222
  if (targetUsedDiscounts && (discount.tag || discount.type) === "good_pass")
@@ -226,7 +229,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
226
229
  }
227
230
  return false;
228
231
  });
229
- const selectedDiscount = applicableDiscounts[0];
232
+ const selectedDiscountCard = applicableDiscounts.find((n) => n.isScan && n.isSelected && (n.tag || n.type) !== "good_pass");
233
+ const selectedDiscount = selectedDiscountCard || applicableDiscounts[0];
230
234
  let isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : product.total != product.origin_total && (!((_c = product.discount_list) == null ? void 0 : _c.length) || ((_e = (_d = product == null ? void 0 : product.discount_list) == null ? void 0 : _d.every) == null ? void 0 : _e.call(_d, (item) => item.type === "product")));
231
235
  if ((options == null ? void 0 : options.discountId) && ((_f = product.discount_list) == null ? void 0 : _f.some((item) => {
232
236
  var _a2;
@@ -290,10 +294,16 @@ var RulesModule = class extends import_BaseModule.BaseModule {
290
294
  }));
291
295
  }
292
296
  for (let i2 = 0; i2 < splitCount; i2++) {
293
- const selectedDiscount2 = applicableDiscounts[i2];
297
+ const selectedDiscount2 = selectedDiscountCard || applicableDiscounts[i2];
294
298
  usedDiscounts.set(selectedDiscount2.id, true);
295
299
  const appliedProducts = appliedDiscountProducts.get(selectedDiscount2.id) || [];
296
- const productOriginTotal = product.origin_total || product.total || 0;
300
+ let productOriginTotal = product.origin_total || product.total || 0;
301
+ if (Number(((_g = originProduct == null ? void 0 : originProduct._productInit) == null ? void 0 : _g.original_price) || 0) > 0 && product.origin_total && product.total && product.origin_total !== product.total) {
302
+ productOriginTotal = product.total;
303
+ }
304
+ if ((_h = product.discount_list) == null ? void 0 : _h.length) {
305
+ productOriginTotal = product.origin_total;
306
+ }
297
307
  const targetProductTotal = selectedDiscount2.tag === "good_pass" ? new import_decimal.default(productOriginTotal).minus(new import_decimal.default(product.price || 0)).toNumber() : new import_decimal.default(100).minus(selectedDiscount2.par_value || 0).div(100).mul(new import_decimal.default(productOriginTotal)).toNumber();
298
308
  const discountDetail = {
299
309
  amount: new import_decimal.default(productOriginTotal).minus(new import_decimal.default(targetProductTotal)).toNumber(),
@@ -826,7 +826,8 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
826
826
  const resources = [];
827
827
  if (dateRange == null ? void 0 : dateRange.length) {
828
828
  dateRange.forEach((n) => {
829
- resources.push(...this.store.date.getResourcesListByDate(n.date) || []);
829
+ if (n.resource)
830
+ resources.push(...n.resource);
830
831
  });
831
832
  }
832
833
  const cartItems = this.store.cart.getItems().filter((n) => !(0, import_utils4.isNormalProduct)(n._productOrigin));
@@ -1055,11 +1056,17 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
1055
1056
  });
1056
1057
  }
1057
1058
  if (!AllResources.length) {
1058
- const dateList = this.store.date.getDateList();
1059
- dateList.forEach((n) => {
1060
- if (n.resource)
1061
- AllResources.push(...n.resource);
1062
- });
1059
+ const firstDateCartItem = cartItems == null ? void 0 : cartItems.find((n) => n.start_date);
1060
+ if (firstDateCartItem == null ? void 0 : firstDateCartItem.start_date) {
1061
+ const dateResources = this.store.date.getResourcesListByDate(firstDateCartItem.start_date);
1062
+ AllResources.push(...dateResources || []);
1063
+ } else {
1064
+ const dateList = this.store.date.getDateList();
1065
+ dateList.forEach((n) => {
1066
+ if (n.resource)
1067
+ AllResources.push(...n.resource);
1068
+ });
1069
+ }
1063
1070
  }
1064
1071
  const resourcesMap = (0, import_utils.getResourcesMap)((0, import_lodash_es.cloneDeep)(AllResources));
1065
1072
  const allCartItems = (0, import_lodash_es.cloneDeep)(this.store.cart.getItems());
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "2.0.47",
4
+ "version": "2.0.49",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",