@pisell/pisellos 2.1.84 → 2.1.85

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.
Files changed (103) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +1 -0
  3. package/dist/model/index.d.ts +1 -0
  4. package/dist/model/index.js +1 -0
  5. package/dist/model/strategy/adapter/index.d.ts +3 -0
  6. package/dist/model/strategy/adapter/index.js +4 -0
  7. package/dist/model/strategy/adapter/type.d.ts +28 -0
  8. package/dist/model/strategy/adapter/type.js +1 -0
  9. package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +84 -0
  10. package/dist/model/strategy/adapter/walletPass/evaluator.js +497 -0
  11. package/dist/model/strategy/adapter/walletPass/example.d.ts +4 -0
  12. package/dist/model/strategy/adapter/walletPass/example.js +258 -0
  13. package/dist/model/strategy/adapter/walletPass/index.d.ts +32 -0
  14. package/dist/model/strategy/adapter/walletPass/index.js +182 -0
  15. package/dist/model/strategy/adapter/walletPass/locales.d.ts +1 -0
  16. package/dist/model/strategy/adapter/walletPass/locales.js +23 -0
  17. package/dist/model/strategy/adapter/walletPass/type.d.ts +168 -0
  18. package/dist/model/strategy/adapter/walletPass/type.js +1 -0
  19. package/dist/model/strategy/adapter/walletPass/utils.d.ts +76 -0
  20. package/dist/model/strategy/adapter/walletPass/utils.js +1043 -0
  21. package/dist/model/strategy/index.d.ts +94 -0
  22. package/dist/model/strategy/index.js +551 -0
  23. package/dist/model/strategy/strategy-example.d.ts +5 -0
  24. package/dist/model/strategy/strategy-example.js +331 -0
  25. package/dist/model/strategy/type.d.ts +228 -0
  26. package/dist/model/strategy/type.js +94 -0
  27. package/dist/modules/Cart/types.d.ts +2 -0
  28. package/dist/modules/Cart/utils/cartProduct.js +11 -0
  29. package/dist/modules/Cart/utils/changePrice.js +0 -6
  30. package/dist/modules/Discount/index.d.ts +0 -1
  31. package/dist/modules/Discount/index.js +1 -2
  32. package/dist/modules/Discount/types.d.ts +15 -0
  33. package/dist/modules/Payment/index.d.ts +2 -1
  34. package/dist/modules/Payment/index.js +10 -7
  35. package/dist/modules/Payment/utils.js +3 -0
  36. package/dist/modules/Payment/walletpass.d.ts +23 -0
  37. package/dist/modules/Payment/walletpass.js +191 -95
  38. package/dist/modules/Rules/index.d.ts +7 -2
  39. package/dist/modules/Rules/index.js +141 -19
  40. package/dist/modules/Rules/types.d.ts +1 -0
  41. package/dist/modules/Summary/index.js +5 -47
  42. package/dist/modules/Summary/types.d.ts +2 -0
  43. package/dist/modules/Summary/utils.d.ts +7 -1
  44. package/dist/modules/Summary/utils.js +27 -21
  45. package/dist/plugins/window.d.ts +2 -0
  46. package/dist/solution/BookingByStep/index.d.ts +1 -0
  47. package/dist/solution/BookingByStep/index.js +35 -84
  48. package/dist/solution/Checkout/index.js +2 -0
  49. package/dist/solution/ShopDiscount/index.d.ts +1 -0
  50. package/dist/solution/ShopDiscount/index.js +12 -3
  51. package/dist/solution/ShopDiscount/types.d.ts +1 -0
  52. package/lib/index.d.ts +1 -0
  53. package/lib/index.js +3 -1
  54. package/lib/model/index.d.ts +1 -0
  55. package/lib/model/index.js +23 -0
  56. package/lib/model/strategy/adapter/index.d.ts +3 -0
  57. package/lib/model/strategy/adapter/index.js +45 -0
  58. package/lib/model/strategy/adapter/type.d.ts +28 -0
  59. package/lib/model/strategy/adapter/type.js +17 -0
  60. package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +84 -0
  61. package/lib/model/strategy/adapter/walletPass/evaluator.js +421 -0
  62. package/lib/model/strategy/adapter/walletPass/example.d.ts +4 -0
  63. package/lib/model/strategy/adapter/walletPass/example.js +207 -0
  64. package/lib/model/strategy/adapter/walletPass/index.d.ts +32 -0
  65. package/lib/model/strategy/adapter/walletPass/index.js +142 -0
  66. package/lib/model/strategy/adapter/walletPass/locales.d.ts +1 -0
  67. package/lib/model/strategy/adapter/walletPass/locales.js +51 -0
  68. package/lib/model/strategy/adapter/walletPass/type.d.ts +168 -0
  69. package/lib/model/strategy/adapter/walletPass/type.js +17 -0
  70. package/lib/model/strategy/adapter/walletPass/utils.d.ts +76 -0
  71. package/lib/model/strategy/adapter/walletPass/utils.js +704 -0
  72. package/lib/model/strategy/index.d.ts +94 -0
  73. package/lib/model/strategy/index.js +413 -0
  74. package/lib/model/strategy/strategy-example.d.ts +5 -0
  75. package/lib/model/strategy/strategy-example.js +318 -0
  76. package/lib/model/strategy/type.d.ts +228 -0
  77. package/lib/model/strategy/type.js +44 -0
  78. package/lib/modules/Cart/types.d.ts +2 -0
  79. package/lib/modules/Cart/utils/cartProduct.js +9 -0
  80. package/lib/modules/Cart/utils/changePrice.js +0 -5
  81. package/lib/modules/Discount/index.d.ts +0 -1
  82. package/lib/modules/Discount/index.js +1 -2
  83. package/lib/modules/Discount/types.d.ts +15 -0
  84. package/lib/modules/Payment/index.d.ts +2 -1
  85. package/lib/modules/Payment/index.js +1 -0
  86. package/lib/modules/Payment/utils.js +3 -0
  87. package/lib/modules/Payment/walletpass.d.ts +23 -0
  88. package/lib/modules/Payment/walletpass.js +94 -17
  89. package/lib/modules/Rules/index.d.ts +7 -2
  90. package/lib/modules/Rules/index.js +285 -149
  91. package/lib/modules/Rules/types.d.ts +1 -0
  92. package/lib/modules/Summary/index.js +9 -22
  93. package/lib/modules/Summary/types.d.ts +2 -0
  94. package/lib/modules/Summary/utils.d.ts +7 -1
  95. package/lib/modules/Summary/utils.js +25 -21
  96. package/lib/plugins/window.d.ts +2 -0
  97. package/lib/solution/BookingByStep/index.d.ts +1 -0
  98. package/lib/solution/BookingByStep/index.js +3 -34
  99. package/lib/solution/Checkout/index.js +2 -0
  100. package/lib/solution/ShopDiscount/index.d.ts +1 -0
  101. package/lib/solution/ShopDiscount/index.js +7 -2
  102. package/lib/solution/ShopDiscount/types.d.ts +1 -0
  103. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { WalletPassEvaluator } from '../model';
1
2
  import { Plugin } from '../types';
2
3
  /**
3
4
  * WindowPlugin 接口定义
@@ -14,6 +15,7 @@ export interface WindowPlugin extends Plugin {
14
15
  document: Partial<Document>;
15
16
  history: History;
16
17
  interaction?: any;
18
+ getWalletPassEvaluator?: () => WalletPassEvaluator;
17
19
  }
18
20
  /**
19
21
  * 简单的 Storage 接口实现
@@ -144,6 +144,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
144
144
  getSummary(): Promise<{
145
145
  subtotal: string | number;
146
146
  total: string | number;
147
+ originTotal: string | number;
147
148
  taxTitle?: string | undefined;
148
149
  totalTaxFee?: string | number | undefined;
149
150
  isPriceIncludeTax?: 0 | 1 | undefined;
@@ -2552,63 +2552,14 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2552
2552
  var targetResourceTimes = allResources === null || allResources === void 0 || (_allResources$find = allResources.find(function (n) {
2553
2553
  return n.id === resource.id;
2554
2554
  })) === null || _allResources$find === void 0 ? void 0 : _allResources$find.times;
2555
- // 找到最晚的 end_at 还没用,因为可能存在资源工作时间是 10:00-19:00,但是资源的 times 里有 16:30-19:00 被 block 的情况
2556
- // 所以还需要排除掉 block 时间
2557
- function getEarliestBlockedStartTime(_ref11) {
2558
- var _earliestBlockStart;
2559
- var currentStartTime = _ref11.currentStartTime,
2560
- times = _ref11.times;
2561
- var currentStart = dayjs(currentStartTime);
2562
- var earliestBlockStart;
2563
- var _iterator3 = _createForOfIteratorHelper(times || []),
2564
- _step3;
2565
- try {
2566
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
2567
- var time = _step3.value;
2568
- var _iterator4 = _createForOfIteratorHelper(time.event_list || []),
2569
- _step4;
2570
- try {
2571
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
2572
- var event = _step4.value;
2573
- var eventStart = dayjs(event.start_at);
2574
- var eventEnd = dayjs(event.end_at);
2575
- if (eventStart.isBefore(currentStart) && eventEnd.isAfter(currentStart)) {
2576
- return currentStart.format('YYYY-MM-DD HH:mm');
2577
- }
2578
- if (eventStart.isAfter(currentStart)) {
2579
- if (!earliestBlockStart || eventStart.isBefore(earliestBlockStart)) {
2580
- earliestBlockStart = eventStart;
2581
- }
2582
- }
2583
- }
2584
- } catch (err) {
2585
- _iterator4.e(err);
2586
- } finally {
2587
- _iterator4.f();
2588
- }
2589
- }
2590
- } catch (err) {
2591
- _iterator3.e(err);
2592
- } finally {
2593
- _iterator3.f();
2594
- }
2595
- return (_earliestBlockStart = earliestBlockStart) === null || _earliestBlockStart === void 0 ? void 0 : _earliestBlockStart.format('YYYY-MM-DD HH:mm');
2596
- }
2597
2555
  var resourcesEndTime = targetResourceTimes.reduce(function (acc, curr) {
2598
2556
  return dayjs(curr.end_at).isAfter(dayjs(acc.end_at)) ? curr : acc;
2599
2557
  }, targetResourceTimes[0]);
2600
- var earliestBlockedStartTime = getEarliestBlockedStartTime({
2601
- currentStartTime: currentStartTime,
2602
- times: targetResourceTimes
2603
- });
2604
2558
 
2605
2559
  // 将 operating_day_boundary 转换为与 resourcesEndTime.end_at 相同日期的完整日期时间
2606
2560
  var resourceDate = dayjs(resourcesEndTime.end_at).format('YYYY-MM-DD');
2607
2561
  var operatingBoundaryDateTime = "".concat(resourceDate, " ").concat(operating_day_boundary.type === 'start_time' ? '23:59' : operating_day_boundary.time);
2608
- var endTimeCandidates = [resourcesEndTime.end_at, operatingBoundaryDateTime].concat(_toConsumableArray(earliestBlockedStartTime ? [earliestBlockedStartTime] : []));
2609
- var endTime = endTimeCandidates.reduce(function (earliest, value) {
2610
- return dayjs(value).isBefore(dayjs(earliest)) ? value : earliest;
2611
- }, endTimeCandidates[0]);
2562
+ var endTime = dayjs(resourcesEndTime.end_at).isBefore(dayjs(operatingBoundaryDateTime)) ? resourcesEndTime.end_at : operatingBoundaryDateTime;
2612
2563
  // 修复:如果 endTime 只是时间格式(如 "17:00"),需要加上日期
2613
2564
  var formattedEndTime;
2614
2565
  if (typeof endTime === 'string' && endTime.includes(':') && !endTime.includes(' ') && !endTime.includes('T')) {
@@ -2749,14 +2700,14 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2749
2700
  // 通过商品和 schedule 来获取视频可用的时间片、时间片内资源可用的数据
2750
2701
  }, {
2751
2702
  key: "getTimeslotBySchedule",
2752
- value: function getTimeslotBySchedule(_ref12) {
2703
+ value: function getTimeslotBySchedule(_ref11) {
2753
2704
  var _this$store$currentPr2,
2754
2705
  _targetProductData$pr,
2755
2706
  _this15 = this;
2756
- var date = _ref12.date,
2757
- scheduleIds = _ref12.scheduleIds,
2758
- resources = _ref12.resources,
2759
- product = _ref12.product;
2707
+ var date = _ref11.date,
2708
+ scheduleIds = _ref11.scheduleIds,
2709
+ resources = _ref11.resources,
2710
+ product = _ref11.product;
2760
2711
  var targetProduct = this.store.currentProduct;
2761
2712
  // 如果外面传递了product 优先用外面的
2762
2713
  var targetProductData = product || targetProduct;
@@ -3315,12 +3266,12 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3315
3266
  // 检查资源类型(单个预约 vs 多个预约)
3316
3267
  // 从商品配置中获取资源类型信息
3317
3268
  var resourceTypeConfig = null;
3318
- var _iterator5 = _createForOfIteratorHelper(items),
3319
- _step5;
3269
+ var _iterator3 = _createForOfIteratorHelper(items),
3270
+ _step3;
3320
3271
  try {
3321
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
3272
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
3322
3273
  var _cartItem$_productOri12;
3323
- var cartItem = _step5.value;
3274
+ var cartItem = _step3.value;
3324
3275
  if ((_cartItem$_productOri12 = cartItem._productOrigin) !== null && _cartItem$_productOri12 !== void 0 && (_cartItem$_productOri12 = _cartItem$_productOri12.product_resource) !== null && _cartItem$_productOri12 !== void 0 && _cartItem$_productOri12.resources) {
3325
3276
  resourceTypeConfig = cartItem._productOrigin.product_resource.resources.find(function (r) {
3326
3277
  return r.code === resourceCode && r.status === 1;
@@ -3329,9 +3280,9 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3329
3280
  }
3330
3281
  }
3331
3282
  } catch (err) {
3332
- _iterator5.e(err);
3283
+ _iterator3.e(err);
3333
3284
  } finally {
3334
- _iterator5.f();
3285
+ _iterator3.f();
3335
3286
  }
3336
3287
  var isMultipleBooking = ((_resourceTypeConfig = resourceTypeConfig) === null || _resourceTypeConfig === void 0 ? void 0 : _resourceTypeConfig.type) === 'multiple';
3337
3288
  var totalAvailable;
@@ -3534,17 +3485,17 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3534
3485
  */
3535
3486
  }, {
3536
3487
  key: "convertProductToCartItem",
3537
- value: function convertProductToCartItem(_ref13) {
3538
- var product = _ref13.product,
3539
- date = _ref13.date,
3540
- account = _ref13.account;
3541
- var _ref14 = product || {},
3542
- bundle = _ref14.bundle,
3543
- options = _ref14.options,
3544
- origin = _ref14.origin,
3545
- product_variant_id = _ref14.product_variant_id,
3546
- _ref14$quantity = _ref14.quantity,
3547
- quantity = _ref14$quantity === void 0 ? 1 : _ref14$quantity;
3488
+ value: function convertProductToCartItem(_ref12) {
3489
+ var product = _ref12.product,
3490
+ date = _ref12.date,
3491
+ account = _ref12.account;
3492
+ var _ref13 = product || {},
3493
+ bundle = _ref13.bundle,
3494
+ options = _ref13.options,
3495
+ origin = _ref13.origin,
3496
+ product_variant_id = _ref13.product_variant_id,
3497
+ _ref13$quantity = _ref13.quantity,
3498
+ quantity = _ref13$quantity === void 0 ? 1 : _ref13$quantity;
3548
3499
 
3549
3500
  // 处理商品数据,类似 addProductToCart 中的逻辑
3550
3501
  var productData = _objectSpread(_objectSpread({}, origin), {}, {
@@ -3599,11 +3550,11 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3599
3550
  }
3600
3551
  }, {
3601
3552
  key: "checkMaxDurationCapacityForDetailNums",
3602
- value: function checkMaxDurationCapacityForDetailNums(_ref15) {
3553
+ value: function checkMaxDurationCapacityForDetailNums(_ref14) {
3603
3554
  var _this17 = this;
3604
- var product = _ref15.product,
3605
- date = _ref15.date,
3606
- account = _ref15.account;
3555
+ var product = _ref14.product,
3556
+ date = _ref14.date,
3557
+ account = _ref14.account;
3607
3558
  var cartItems = this.store.cart.getItems().filter(function (item) {
3608
3559
  return !isNormalProduct(item._productOrigin);
3609
3560
  });
@@ -3748,12 +3699,12 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3748
3699
  // 检查资源类型(单个预约 vs 多个预约)
3749
3700
  // 从商品配置中获取资源类型信息
3750
3701
  var resourceTypeConfig = null;
3751
- var _iterator6 = _createForOfIteratorHelper(items),
3752
- _step6;
3702
+ var _iterator4 = _createForOfIteratorHelper(items),
3703
+ _step4;
3753
3704
  try {
3754
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
3705
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
3755
3706
  var _cartItem$_productOri15;
3756
- var cartItem = _step6.value;
3707
+ var cartItem = _step4.value;
3757
3708
  if ((_cartItem$_productOri15 = cartItem._productOrigin) !== null && _cartItem$_productOri15 !== void 0 && (_cartItem$_productOri15 = _cartItem$_productOri15.product_resource) !== null && _cartItem$_productOri15 !== void 0 && _cartItem$_productOri15.resources) {
3758
3709
  resourceTypeConfig = cartItem._productOrigin.product_resource.resources.find(function (r) {
3759
3710
  return r.code === resourceCode && r.status === 1;
@@ -3762,9 +3713,9 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3762
3713
  }
3763
3714
  }
3764
3715
  } catch (err) {
3765
- _iterator6.e(err);
3716
+ _iterator4.e(err);
3766
3717
  } finally {
3767
- _iterator6.f();
3718
+ _iterator4.f();
3768
3719
  }
3769
3720
  var isMultipleBooking = ((_resourceTypeConfig2 = resourceTypeConfig) === null || _resourceTypeConfig2 === void 0 ? void 0 : _resourceTypeConfig2.type) === 'multiple';
3770
3721
  var totalAvailable;
@@ -4135,12 +4086,12 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
4135
4086
  }, {
4136
4087
  key: "getTimeslotsScheduleByDateRange",
4137
4088
  value: (function () {
4138
- var _getTimeslotsScheduleByDateRange = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27(_ref16) {
4089
+ var _getTimeslotsScheduleByDateRange = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27(_ref15) {
4139
4090
  var startDate, endDate, scheduleIds, resources, dates, currentDate, end, results, _i5, _dates, date;
4140
4091
  return _regeneratorRuntime().wrap(function _callee27$(_context28) {
4141
4092
  while (1) switch (_context28.prev = _context28.next) {
4142
4093
  case 0:
4143
- startDate = _ref16.startDate, endDate = _ref16.endDate, scheduleIds = _ref16.scheduleIds, resources = _ref16.resources;
4094
+ startDate = _ref15.startDate, endDate = _ref15.endDate, scheduleIds = _ref15.scheduleIds, resources = _ref15.resources;
4144
4095
  console.log('appoimentBooking-session-date-getTimeslotsScheduleByDateRange', {
4145
4096
  startDate: startDate,
4146
4097
  endDate: endDate,
@@ -403,6 +403,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
403
403
  product_id: item.product_id,
404
404
  product_variant_id: item.product_variant_id,
405
405
  quantity: item.num,
406
+ is_price_include_tax: item.is_price_include_tax,
406
407
  // 商品是否含税:1;0
407
408
  is_charge_tax: (_item$is_charge_tax = item.is_charge_tax) !== null && _item$is_charge_tax !== void 0 ? _item$is_charge_tax : 0,
408
409
  // 若商品不含税,计算得到的税费,单位(元)
@@ -427,6 +428,7 @@ export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
427
428
  },
428
429
  product_bundle: item.product_bundle.map(function (bundle) {
429
430
  return {
431
+ is_price_include_tax: item.is_price_include_tax,
430
432
  bundle_id: bundle.bundle_id,
431
433
  bundle_product_id: bundle.bundle_product_id,
432
434
  bundle_variant_id: bundle.bundle_variant_id,
@@ -22,6 +22,7 @@ export declare class ShopDiscountImpl extends BaseModule implements Module {
22
22
  getCurrentBookingTime(): string | null;
23
23
  private filterDiscountListByBookingTime;
24
24
  setCustomer(customer: Customer): Promise<void>;
25
+ setOriginTotalAmount(amount: number): void;
25
26
  setHolders(holders: {
26
27
  form_record_id: number;
27
28
  }[]): void;
@@ -56,6 +56,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
56
56
  originalDiscountList: [],
57
57
  currentBookingTime: "",
58
58
  filteredDiscountList: [],
59
+ orderTotalAmount: 0,
59
60
  bookingSubject: undefined
60
61
  };
61
62
  return _this;
@@ -288,7 +289,14 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
288
289
  return _setCustomer.apply(this, arguments);
289
290
  }
290
291
  return setCustomer;
291
- }() // 设置holders
292
+ }()
293
+ }, {
294
+ key: "setOriginTotalAmount",
295
+ value: function setOriginTotalAmount(amount) {
296
+ this.store.orderTotalAmount = amount;
297
+ }
298
+
299
+ // 设置holders
292
300
  }, {
293
301
  key: "setHolders",
294
302
  value: function setHolders(holders) {
@@ -317,6 +325,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
317
325
  productList: productList,
318
326
  discountList: this.getDiscountList(),
319
327
  holders: this.store.holders || [],
328
+ orderTotalAmount: this.store.orderTotalAmount || 0,
320
329
  isFormSubject: ((_this$store$bookingSu = this.store.bookingSubject) === null || _this$store$bookingSu === void 0 ? void 0 : _this$store$bookingSu.type) === 'form'
321
330
  }, options) || {
322
331
  productList: productList,
@@ -458,6 +467,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
458
467
  oldDiscountList: this.getDiscountList(),
459
468
  newDiscountList: withScanList,
460
469
  holders: this.store.holders || [],
470
+ orderTotalAmount: this.store.orderTotalAmount || 0,
461
471
  isFormSubject: ((_this$store$bookingSu2 = this.store.bookingSubject) === null || _this$store$bookingSu2 === void 0 ? void 0 : _this$store$bookingSu2.type) === 'form'
462
472
  }) || {
463
473
  isAvailable: false,
@@ -745,8 +755,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
745
755
  action: 'create',
746
756
  with_good_pass: 1,
747
757
  with_discount_card: 1,
748
- with_wallet_pass_holder: 1,
749
- request_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
758
+ with_wallet_pass_holder: 1
750
759
  });
751
760
  case 4:
752
761
  goodPassList = _context9.sent;
@@ -31,6 +31,7 @@ export interface ShopDiscountState {
31
31
  originalDiscountList: Discount[];
32
32
  currentBookingTime: string | null;
33
33
  filteredDiscountList: Discount[];
34
+ orderTotalAmount?: number;
34
35
  bookingSubject?: {
35
36
  type?: 'form' | 'customer';
36
37
  [key: string]: any;
package/lib/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './types';
6
6
  export * from './modules';
7
7
  export * from './plugins';
8
8
  export * from './solution';
9
+ export * from './model';
9
10
  export { PisellOSCore } from './core';
10
11
  import PisellOSCore from './core';
11
12
  export default PisellOSCore;
package/lib/index.js CHANGED
@@ -38,6 +38,7 @@ __reExport(src_exports, require("./types"), module.exports);
38
38
  __reExport(src_exports, require("./modules"), module.exports);
39
39
  __reExport(src_exports, require("./plugins"), module.exports);
40
40
  __reExport(src_exports, require("./solution"), module.exports);
41
+ __reExport(src_exports, require("./model"), module.exports);
41
42
  var import_core = require("./core");
42
43
  var import_core2 = __toESM(require("./core"));
43
44
  var src_default = import_core2.default;
@@ -47,5 +48,6 @@ var src_default = import_core2.default;
47
48
  ...require("./types"),
48
49
  ...require("./modules"),
49
50
  ...require("./plugins"),
50
- ...require("./solution")
51
+ ...require("./solution"),
52
+ ...require("./model")
51
53
  });
@@ -0,0 +1 @@
1
+ export * from './strategy';
@@ -0,0 +1,23 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/model/index.ts
17
+ var model_exports = {};
18
+ module.exports = __toCommonJS(model_exports);
19
+ __reExport(model_exports, require("./strategy"), module.exports);
20
+ // Annotate the CommonJS export names for ESM import in node:
21
+ 0 && (module.exports = {
22
+ ...require("./strategy")
23
+ });
@@ -0,0 +1,3 @@
1
+ export * from './type';
2
+ export { default as WalletPassAdapter } from './walletPass';
3
+ export { WalletPassEvaluator } from './walletPass/evaluator';
@@ -0,0 +1,45 @@
1
+ var __create = Object.create;
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/model/strategy/adapter/index.ts
31
+ var adapter_exports = {};
32
+ __export(adapter_exports, {
33
+ WalletPassAdapter: () => import_walletPass.default,
34
+ WalletPassEvaluator: () => import_evaluator.WalletPassEvaluator
35
+ });
36
+ module.exports = __toCommonJS(adapter_exports);
37
+ __reExport(adapter_exports, require("./type"), module.exports);
38
+ var import_walletPass = __toESM(require("./walletPass"));
39
+ var import_evaluator = require("./walletPass/evaluator");
40
+ // Annotate the CommonJS export names for ESM import in node:
41
+ 0 && (module.exports = {
42
+ WalletPassAdapter,
43
+ WalletPassEvaluator,
44
+ ...require("./type")
45
+ });
@@ -0,0 +1,28 @@
1
+ import { EvaluationResult, RuntimeContext } from '../type';
2
+ export interface BusinessAdapter {
3
+ /**
4
+ * 适配器名称
5
+ */
6
+ name: string;
7
+ /**
8
+ * 适配器版本
9
+ */
10
+ version: string;
11
+ /**
12
+ * 准备运行时上下文
13
+ * 将业务数据转换为策略引擎可识别的上下文
14
+ */
15
+ prepareContext(businessData: any): RuntimeContext;
16
+ /**
17
+ * 转换执行结果
18
+ * 将策略引擎的通用结果转换为业务层需要的格式
19
+ */
20
+ transformResult(result: EvaluationResult, businessData?: any): any;
21
+ /**
22
+ * 根据业务数据重新格式化配置
23
+ */
24
+ formatConfig(result: EvaluationResult, businessData?: any): {
25
+ result: EvaluationResult;
26
+ businessData?: any;
27
+ };
28
+ }
@@ -0,0 +1,17 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
+
15
+ // src/model/strategy/adapter/type.ts
16
+ var type_exports = {};
17
+ module.exports = __toCommonJS(type_exports);
@@ -0,0 +1,84 @@
1
+ import { StrategyConfig } from '../../type';
2
+ import { Voucher, Product, VoucherEvaluationResult, EvaluatorInput } from './type';
3
+ /**
4
+ * Wallet Pass 评估器
5
+ * 用于评估哪些 voucher 可以在当前订单中使用
6
+ */
7
+ export declare class WalletPassEvaluator {
8
+ private engine;
9
+ private strategyConfigs;
10
+ private locale;
11
+ constructor();
12
+ setStrategyConfigs(strategyConfigs: StrategyConfig[]): void;
13
+ getStrategyConfigs(): StrategyConfig[];
14
+ setLocale(locale: string): void;
15
+ getText(key: string): string;
16
+ /**
17
+ * 搜索券的格式
18
+ * @param input 输入
19
+ * @returns 返回搜索券的格式
20
+ */
21
+ searchVoucherFormat(input: EvaluatorInput): Voucher[];
22
+ /**
23
+ * 评估可用的 vouchers
24
+ */
25
+ evaluate(input: EvaluatorInput): VoucherEvaluationResult[];
26
+ /** 检查代金券/折扣卡是否可用 并返回config */
27
+ checkVoucherAvailability(input: EvaluatorInput): {
28
+ isAvailable: boolean;
29
+ config: {
30
+ [x: string]: any;
31
+ };
32
+ };
33
+ /**
34
+ * 获取推荐券
35
+ * @param input 输入
36
+ * @returns 返回推荐券列表
37
+ */
38
+ getRecommendedVouchers(input: EvaluatorInput): {
39
+ recommendedAmount: any;
40
+ recommended: any[];
41
+ transformList: any[];
42
+ noApplicableVoucher: Voucher[];
43
+ };
44
+ enhanceWithReason(voucher: any): any;
45
+ /**
46
+ * 优惠券处理函数
47
+ * @param applicableVouchers 可用的券列表
48
+ * @param orderTotalAmount 订单总金额
49
+ * @param products 订单商品列表
50
+ * @returns 返回推荐券列表和全部列表,每个券包含 _available_max_amount 和 _unified_available_status
51
+ */
52
+ processVouchers(vouchers: Voucher[], orderTotalAmount: number, products: Product[]): {
53
+ recommended: any[];
54
+ transformList: any[];
55
+ };
56
+ /**
57
+ * 重新计算优惠券状态(基于已选券的增量计算)
58
+ * @param allVouchers 所有原始券列表
59
+ * @param selectedVouchers 已选中的券列表(按选中顺序)
60
+ * @param orderTotalAmount 订单总金额
61
+ * @param products 订单商品列表
62
+ * @returns 返回更新后的所有券列表和已选券的详细抵扣信息
63
+ */
64
+ recalculateVouchers(allVouchers: any[], selectedVouchers: any[], orderTotalAmount: number, products: any[]): {
65
+ allWithUpdatedStatus: any[];
66
+ selectedWithDetails: any[];
67
+ };
68
+ /**
69
+ * 查找适用于指定 voucher 的策略配置
70
+ */
71
+ private findApplicableStrategies;
72
+ /**
73
+ * 检查策略中是否包含指定的 voucher ID
74
+ */
75
+ private checkVoucherInStrategy;
76
+ /**
77
+ * 递归检查条件组中是否包含 voucher ID
78
+ */
79
+ private checkVoucherInConditionGroup;
80
+ /**
81
+ * 计算适用商品的总金额和数量
82
+ */
83
+ private calculateApplicableProducts;
84
+ }