@pisell/pisellos 3.0.71 → 3.0.73

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 (33) hide show
  1. package/dist/modules/Cart/utils/cartProduct.js +41 -26
  2. package/dist/modules/Discount/index.d.ts +2 -0
  3. package/dist/modules/Discount/index.js +69 -36
  4. package/dist/modules/Discount/types.d.ts +16 -0
  5. package/dist/modules/Order/index.js +4 -1
  6. package/dist/modules/Order/utils.d.ts +1 -0
  7. package/dist/modules/Order/utils.js +9 -0
  8. package/dist/modules/Rules/index.d.ts +8 -0
  9. package/dist/modules/Rules/index.js +1033 -183
  10. package/dist/modules/Rules/types.d.ts +4 -1
  11. package/dist/solution/BookingByStep/index.js +1 -0
  12. package/dist/solution/ShopDiscount/index.d.ts +2 -0
  13. package/dist/solution/ShopDiscount/index.js +82 -19
  14. package/dist/solution/ShopDiscount/types.d.ts +4 -0
  15. package/dist/solution/ShopDiscount/utils.d.ts +55 -0
  16. package/dist/solution/ShopDiscount/utils.js +432 -3
  17. package/lib/modules/Cart/utils/cartProduct.js +35 -22
  18. package/lib/modules/Discount/index.d.ts +2 -0
  19. package/lib/modules/Discount/index.js +19 -4
  20. package/lib/modules/Discount/types.d.ts +16 -0
  21. package/lib/modules/Order/index.js +2 -0
  22. package/lib/modules/Order/utils.d.ts +1 -0
  23. package/lib/modules/Order/utils.js +11 -0
  24. package/lib/modules/Rules/index.d.ts +8 -0
  25. package/lib/modules/Rules/index.js +813 -172
  26. package/lib/modules/Rules/types.d.ts +4 -1
  27. package/lib/solution/BookingByStep/index.js +4 -0
  28. package/lib/solution/ShopDiscount/index.d.ts +2 -0
  29. package/lib/solution/ShopDiscount/index.js +58 -10
  30. package/lib/solution/ShopDiscount/types.d.ts +4 -0
  31. package/lib/solution/ShopDiscount/utils.d.ts +55 -0
  32. package/lib/solution/ShopDiscount/utils.js +266 -3
  33. package/package.json +1 -1
@@ -39,6 +39,7 @@ type ProductDetail = {
39
39
  original_price?: number | string;
40
40
  num?: number;
41
41
  quantity: number;
42
+ startDate?: any;
42
43
  };
43
44
  export interface RulesParamsHooks {
44
45
  getProduct: (product: Record<string, any>) => ProductDetail;
@@ -49,8 +50,10 @@ export interface RulesParamsHooks {
49
50
  origin_total?: number;
50
51
  price?: string | number;
51
52
  variant?: any[];
52
- original_price?: number;
53
+ original_price?: number | string;
53
54
  quantity?: number;
55
+ bundle?: any[];
56
+ main_product_selling_price?: string | number;
54
57
  }) => Record<string, any>;
55
58
  }
56
59
  export {};
@@ -2284,6 +2284,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2284
2284
  }
2285
2285
  });
2286
2286
  });
2287
+ this.core.effects.emit("".concat(this.store.cart.name, ":onUpdateBookingDate"), {});
2287
2288
  }
2288
2289
  }, {
2289
2290
  key: "getScheduleDataByIds",
@@ -18,6 +18,8 @@ export declare class ShopDiscountImpl extends BaseModule implements Module {
18
18
  private initializePlugins;
19
19
  private registerDependentModules;
20
20
  private registerEventListeners;
21
+ getCurrentBookingTime(): string | null;
22
+ private filterDiscountListByBookingTime;
21
23
  setCustomer(customer: Customer): Promise<void>;
22
24
  calcDiscount(productList: Record<string, any>[], options?: {
23
25
  discountId: number;
@@ -28,6 +28,7 @@ import { BaseModule } from "../../modules/BaseModule";
28
28
  import { ShopDiscountHooks } from "./types";
29
29
  import { DiscountModule } from "../../modules/Discount";
30
30
  import { RulesModule } from "../../modules/Rules";
31
+ import { filterDiscountListByBookingTime as _filterDiscountListByBookingTime, isAllNormalProduct } from "./utils";
31
32
  import Decimal from 'decimal.js';
32
33
  export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
33
34
  _inherits(ShopDiscountImpl, _BaseModule);
@@ -49,7 +50,10 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
49
50
  customer: null,
50
51
  productList: [],
51
52
  discount: null,
52
- rules: null
53
+ rules: null,
54
+ originalDiscountList: [],
55
+ currentBookingTime: "",
56
+ filteredDiscountList: []
53
57
  };
54
58
  return _this;
55
59
  }
@@ -206,6 +210,55 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
206
210
 
207
211
  // =========== 公共 API ===========
208
212
 
213
+ // 设置预约时间
214
+ // public async setBookingTime(bookingTime: string | null): Promise<void> {
215
+ // if (this.store.currentBookingTime !== bookingTime) {
216
+ // this.store.currentBookingTime = bookingTime;
217
+ //
218
+ // // 更新过滤后的优惠券列表
219
+ // await this.updateFilteredDiscountList();
220
+ // }
221
+ // }
222
+
223
+ // 获取当前预约时间
224
+ }, {
225
+ key: "getCurrentBookingTime",
226
+ value: function getCurrentBookingTime() {
227
+ return this.store.currentBookingTime;
228
+ }
229
+
230
+ // 根据预约时间过滤优惠券列表
231
+ }, {
232
+ key: "filterDiscountListByBookingTime",
233
+ value: function filterDiscountListByBookingTime(discountList, bookingTime) {
234
+ // 如果全部是普通商品,不需要过滤,直接返回当前数据
235
+ if (isAllNormalProduct(this.store.productList || [])) {
236
+ return discountList;
237
+ }
238
+
239
+ // 否则使用 bookingTime 进行过滤
240
+ return _filterDiscountListByBookingTime(discountList, bookingTime);
241
+ }
242
+
243
+ // 更新过滤后的优惠券列表
244
+ // private async updateFilteredDiscountList(): Promise<void> {
245
+ // const originalList = this.store.originalDiscountList;
246
+ // const filteredList = this.filterDiscountListByBookingTime(originalList, this.store.currentBookingTime);
247
+ //
248
+ // this.store.filteredDiscountList = filteredList;
249
+ //
250
+ // // 更新 DiscountModule 中的优惠券列表
251
+ // this.setDiscountList(filteredList);
252
+ //
253
+ // if (this.store.productList?.length) {
254
+ // const result = this.calcDiscount(this.store.productList);
255
+ // await this.core.effects.emit(
256
+ // ShopDiscountHooks.onLoadPrepareCalcResult,
257
+ // result,
258
+ // );
259
+ // }
260
+ // }
261
+
209
262
  // 设置客户
210
263
  }, {
211
264
  key: "setCustomer",
@@ -481,7 +534,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
481
534
  if (index !== -1) {
482
535
  editModeDiscountList[index] = _objectSpread(_objectSpread({}, editModeDiscountList[index]), {}, {
483
536
  amount: new Decimal(discount.amount || 0).plus(new Decimal(editModeDiscountList[index].amount || 0)).toNumber(),
484
- savedAmount: new Decimal(discount.amount || 0).times((product === null || product === void 0 ? void 0 : product.num) || 1).plus(new Decimal(editModeDiscountList[index].savedAmount || 0)).toNumber()
537
+ savedAmount: new Decimal(discount.amount || 0).times((product === null || product === void 0 ? void 0 : product.quantity) || (product === null || product === void 0 ? void 0 : product.num) || 1).plus(new Decimal(editModeDiscountList[index].savedAmount || 0)).toNumber()
485
538
  });
486
539
  } else {
487
540
  var _discount$discount2, _discount$discount3, _discount$discount4;
@@ -491,7 +544,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
491
544
  editModeDiscountList.push(_objectSpread(_objectSpread({}, discount), {}, {
492
545
  isEditMode: true,
493
546
  limited_relation_product_data: {},
494
- savedAmount: discount.amount * ((product === null || product === void 0 ? void 0 : product.num) || 1),
547
+ savedAmount: discount.amount * ((product === null || product === void 0 ? void 0 : product.quantity) || (product === null || product === void 0 ? void 0 : product.num) || 1),
495
548
  isAvailable: true,
496
549
  id: ((_discount$discount2 = discount.discount) === null || _discount$discount2 === void 0 ? void 0 : _discount$discount2.resource_id) || discount.id,
497
550
  format_title: ((_discount$discount3 = discount.discount) === null || _discount$discount3 === void 0 ? void 0 : _discount$discount3.title) || discount.format_title,
@@ -512,16 +565,19 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
512
565
  var targetProduct = productList.find(function (n) {
513
566
  return n.id === id;
514
567
  });
568
+ if (!targetProduct) return false;
515
569
  var product = (_this3$hooks2 = _this3.hooks) === null || _this3$hooks2 === void 0 ? void 0 : _this3$hooks2.getProduct(targetProduct);
516
570
  // 如果 product.total 是 0有可能是她已经用过商品券或者折扣卡导致的 0,所以此时还需要判断 origin_total 是否为 0
517
571
  return Number(product === null || product === void 0 ? void 0 : product.total) === 0 && (Number(product === null || product === void 0 ? void 0 : product.origin_total) === 0 || !(product !== null && product !== void 0 && product.origin_total));
518
572
  };
519
- var allUsedProductIds = newDiscountList.map(function (n) {
573
+ var allUsedProductIds = newDiscountList.filter(function (item) {
574
+ return !(item !== null && item !== void 0 && item.isEditMode);
575
+ }).map(function (n) {
520
576
  var _n$appliedProductDeta;
521
- return n.isSelected ? (_n$appliedProductDeta = n.appliedProductDetails) === null || _n$appliedProductDeta === void 0 ? void 0 : _n$appliedProductDeta.map(function (n) {
577
+ return n.isSelected ? ((_n$appliedProductDeta = n.appliedProductDetails) === null || _n$appliedProductDeta === void 0 ? void 0 : _n$appliedProductDeta.map(function (n) {
522
578
  var _n$discount;
523
579
  return (_n$discount = n.discount) === null || _n$discount === void 0 ? void 0 : _n$discount.product_id;
524
- }) : [];
580
+ })) || n.product_id : [];
525
581
  }).flat();
526
582
  newDiscountList.forEach(function (item) {
527
583
  var _item$applicableProdu;
@@ -601,7 +657,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
601
657
  key: "loadPrepareConfig",
602
658
  value: function () {
603
659
  var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(params) {
604
- var _this$getCustomer2, _this$store$discount7, _this$getDiscountList, _this$store$productLi, customerId, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, result;
660
+ var _this$getCustomer2, _this$store$discount7, _this$getDiscountList, _this$store$discount8, _this$store$productLi, customerId, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, filteredDiscountList, result;
605
661
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
606
662
  while (1) switch (_context8.prev = _context8.next) {
607
663
  case 0:
@@ -627,30 +683,37 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
627
683
  newGoodPassList = goodPassList === null || goodPassList === void 0 ? void 0 : goodPassList.filter(function (n) {
628
684
  return !scanDiscountIds.includes(n.id);
629
685
  });
630
- newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || []));
631
- this.setDiscountList(newDiscountList || []);
686
+ newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || [])); // 存储原始优惠券列表
687
+ this.store.originalDiscountList = newDiscountList;
688
+ _context8.next = 12;
689
+ return (_this$store$discount8 = this.store.discount) === null || _this$store$discount8 === void 0 ? void 0 : _this$store$discount8.setOriginalDiscountList(newDiscountList);
690
+ case 12:
691
+ // 根据当前预约时间过滤优惠券列表
692
+ filteredDiscountList = this.filterDiscountListByBookingTime(newDiscountList, this.store.currentBookingTime);
693
+ this.store.filteredDiscountList = filteredDiscountList;
694
+ this.setDiscountList(filteredDiscountList || []);
632
695
  if (!((_this$store$productLi = this.store.productList) !== null && _this$store$productLi !== void 0 && _this$store$productLi.length)) {
633
- _context8.next = 14;
696
+ _context8.next = 19;
634
697
  break;
635
698
  }
636
699
  result = this.calcDiscount(this.store.productList);
637
- _context8.next = 14;
700
+ _context8.next = 19;
638
701
  return this.core.effects.emit(ShopDiscountHooks.onLoadPrepareCalcResult, result);
639
- case 14:
640
- _context8.next = 16;
641
- return this.core.effects.emit(ShopDiscountHooks.onLoadDiscountList, newDiscountList);
642
- case 16:
702
+ case 19:
643
703
  _context8.next = 21;
704
+ return this.core.effects.emit(ShopDiscountHooks.onLoadDiscountList, filteredDiscountList);
705
+ case 21:
706
+ _context8.next = 26;
644
707
  break;
645
- case 18:
646
- _context8.prev = 18;
708
+ case 23:
709
+ _context8.prev = 23;
647
710
  _context8.t0 = _context8["catch"](0);
648
711
  console.error('[ShopDiscount] 加载准备配置出错:', _context8.t0);
649
- case 21:
712
+ case 26:
650
713
  case "end":
651
714
  return _context8.stop();
652
715
  }
653
- }, _callee8, this, [[0, 18]]);
716
+ }, _callee8, this, [[0, 23]]);
654
717
  }));
655
718
  function loadPrepareConfig(_x8) {
656
719
  return _loadPrepareConfig.apply(this, arguments);
@@ -1,5 +1,6 @@
1
1
  import { DiscountModule } from '../../modules/Discount';
2
2
  import { RulesModule } from '../../modules/Rules';
3
+ import { Discount } from "../../modules/Discount/types";
3
4
  export declare enum ShopDiscountHooks {
4
5
  onInited = "shopDiscount:onInited",
5
6
  onDestroy = "shopDiscount:onDestroy",
@@ -22,4 +23,7 @@ export interface ShopDiscountState {
22
23
  discount: DiscountModule | null;
23
24
  rules: RulesModule | null;
24
25
  productList: Record<string, any>[];
26
+ originalDiscountList: Discount[];
27
+ currentBookingTime: string | null;
28
+ filteredDiscountList: Discount[];
25
29
  }
@@ -1,5 +1,7 @@
1
1
  import { Discount } from "../../modules/Discount/types";
2
2
  export declare const uniqueById: <T>(arr: T[], key?: string) => T[];
3
+ export declare const isNormalProductByDurationSchedule: (item: any) => boolean;
4
+ export declare const isAllNormalProduct: (items: any[]) => boolean;
3
5
  /**
4
6
  * 获取折扣金额 基于折扣卡类型计算
5
7
  * 商品券:直接返回商品价格
@@ -10,3 +12,56 @@ export declare const uniqueById: <T>(arr: T[], key?: string) => T[];
10
12
  * @returns
11
13
  */
12
14
  export declare const getDiscountAmount: (discount: Discount, total: number, price: number) => number;
15
+ export declare const getDiscountListAmountTotal: (discount: Discount[]) => any;
16
+ /**
17
+ * 获取折扣金额 计算每个折扣的金额
18
+ * @param discount
19
+ * @returns
20
+ */
21
+ export declare const getDiscountListAmount: (discount: Discount[]) => any;
22
+ export interface ScheduleItem {
23
+ id: number;
24
+ name: string | {
25
+ [key: string]: string;
26
+ };
27
+ type: 'standard' | 'time-slots' | 'designation';
28
+ start_time: string | null;
29
+ end_time: string | null;
30
+ repeat_type: 'none' | 'daily' | 'weekly';
31
+ repeat_rule: {
32
+ end: {
33
+ type: 'never' | 'date' | 'occurrence';
34
+ end_date: string | null;
35
+ occurrence: number | null;
36
+ };
37
+ frequency: number;
38
+ excluded_date: Array<{
39
+ start: string;
40
+ end: string;
41
+ }>;
42
+ included_date: Array<{
43
+ start: string;
44
+ end: string;
45
+ }>;
46
+ frequency_date: number[];
47
+ } | null;
48
+ designation: Array<{
49
+ start_date: string;
50
+ start_time: string;
51
+ end_date: string;
52
+ end_time: string;
53
+ }> | null;
54
+ is_all: number;
55
+ time_slot: Array<{
56
+ start_time: string;
57
+ end_time: string;
58
+ }>;
59
+ }
60
+ export declare const getDateIsInSchedule: (dateTime: string, scheduleList: ScheduleItem[]) => boolean;
61
+ /**
62
+ * 根据预约时间过滤优惠券列表
63
+ * @param discountList 优惠券列表
64
+ * @param bookingTime 预约时间 (格式: YYYY-MM-DD HH:mm:ss)
65
+ * @returns 过滤后的优惠券列表
66
+ */
67
+ export declare const filterDiscountListByBookingTime: (discountList: Discount[], bookingTime: string | null) => Discount[];