@pisell/pisellos 2.2.8 → 2.2.10

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 (61) hide show
  1. package/dist/modules/Cart/utils/cartProduct.js +41 -26
  2. package/dist/modules/Customer/index.js +1 -1
  3. package/dist/modules/Discount/index.d.ts +3 -0
  4. package/dist/modules/Discount/index.js +70 -37
  5. package/dist/modules/Discount/types.d.ts +16 -0
  6. package/dist/modules/Order/index.js +4 -1
  7. package/dist/modules/Order/utils.d.ts +1 -0
  8. package/dist/modules/Order/utils.js +9 -0
  9. package/dist/modules/Payment/cash.js +1 -1
  10. package/dist/modules/Payment/eftpos.js +1 -1
  11. package/dist/modules/Payment/index.js +101 -31
  12. package/dist/modules/Payment/types.d.ts +22 -2
  13. package/dist/modules/Payment/walletpass.js +8 -3
  14. package/dist/modules/Product/index.d.ts +1 -1
  15. package/dist/modules/ProductList/index.js +8 -9
  16. package/dist/modules/Rules/index.d.ts +16 -2
  17. package/dist/modules/Rules/index.js +1102 -200
  18. package/dist/modules/Rules/types.d.ts +8 -1
  19. package/dist/solution/BookingByStep/index.js +30 -8
  20. package/dist/solution/BookingByStep/utils/products.d.ts +6 -0
  21. package/dist/solution/BookingByStep/utils/products.js +10 -0
  22. package/dist/solution/BookingTicket/index.d.ts +1 -1
  23. package/dist/solution/Checkout/index.d.ts +2 -0
  24. package/dist/solution/Checkout/index.js +277 -88
  25. package/dist/solution/Checkout/types.d.ts +2 -0
  26. package/dist/solution/ShopDiscount/index.d.ts +5 -0
  27. package/dist/solution/ShopDiscount/index.js +96 -24
  28. package/dist/solution/ShopDiscount/types.d.ts +9 -1
  29. package/dist/solution/ShopDiscount/utils.d.ts +55 -0
  30. package/dist/solution/ShopDiscount/utils.js +432 -3
  31. package/lib/modules/Cart/utils/cartProduct.js +35 -22
  32. package/lib/modules/Customer/index.js +1 -1
  33. package/lib/modules/Discount/index.d.ts +3 -0
  34. package/lib/modules/Discount/index.js +20 -5
  35. package/lib/modules/Discount/types.d.ts +16 -0
  36. package/lib/modules/Order/index.js +2 -0
  37. package/lib/modules/Order/utils.d.ts +1 -0
  38. package/lib/modules/Order/utils.js +11 -0
  39. package/lib/modules/Payment/cash.js +1 -1
  40. package/lib/modules/Payment/eftpos.js +1 -1
  41. package/lib/modules/Payment/index.js +71 -11
  42. package/lib/modules/Payment/types.d.ts +22 -2
  43. package/lib/modules/Payment/walletpass.js +15 -4
  44. package/lib/modules/Product/index.d.ts +1 -1
  45. package/lib/modules/ProductList/index.js +0 -7
  46. package/lib/modules/Rules/index.d.ts +16 -2
  47. package/lib/modules/Rules/index.js +857 -184
  48. package/lib/modules/Rules/types.d.ts +8 -1
  49. package/lib/solution/BookingByStep/index.js +19 -2
  50. package/lib/solution/BookingByStep/utils/products.d.ts +6 -0
  51. package/lib/solution/BookingByStep/utils/products.js +8 -2
  52. package/lib/solution/BookingTicket/index.d.ts +1 -1
  53. package/lib/solution/Checkout/index.d.ts +2 -0
  54. package/lib/solution/Checkout/index.js +185 -25
  55. package/lib/solution/Checkout/types.d.ts +2 -0
  56. package/lib/solution/ShopDiscount/index.d.ts +5 -0
  57. package/lib/solution/ShopDiscount/index.js +67 -13
  58. package/lib/solution/ShopDiscount/types.d.ts +9 -1
  59. package/lib/solution/ShopDiscount/utils.d.ts +55 -0
  60. package/lib/solution/ShopDiscount/utils.js +266 -3
  61. package/package.json +2 -2
@@ -103,6 +103,8 @@ export interface UpdateLocalOrderParams {
103
103
  cartSummary: CartSummaryItem[];
104
104
  /** total 信息(用于拆解金额) */
105
105
  totalInfo: any;
106
+ /** 云端已存在的支付项(可选,用于处理订单在其他设备或云端生成的场景) */
107
+ existPayment?: PaymentItem[];
106
108
  }
107
109
  /**
108
110
  * 本地订单数据结构 (基于 appointmentDemo.json)
@@ -18,7 +18,12 @@ 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>;
24
+ setHolders(holders: {
25
+ form_record_id: number;
26
+ }[]): void;
22
27
  calcDiscount(productList: Record<string, any>[], options?: SetDiscountSelectedParams): {
23
28
  productList: Record<string, any>[];
24
29
  discountList: Discount[];
@@ -27,6 +27,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
27
27
  import { BaseModule } from "../../modules/BaseModule";
28
28
  import { DiscountModule } from "../../modules/Discount";
29
29
  import { RulesModule } from "../../modules/Rules";
30
+ import { filterDiscountListByBookingTime as _filterDiscountListByBookingTime, isAllNormalProduct } from "./utils";
30
31
  import Decimal from 'decimal.js';
31
32
  import { isBoolean } from 'lodash-es';
32
33
  export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
@@ -50,7 +51,10 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
50
51
  productList: [],
51
52
  discount: null,
52
53
  rules: null,
53
- originalDiscountList: []
54
+ originalDiscountList: [],
55
+ currentBookingTime: "",
56
+ filteredDiscountList: [],
57
+ holders: []
54
58
  };
55
59
  return _this;
56
60
  }
@@ -207,6 +211,55 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
207
211
 
208
212
  // =========== 公共 API ===========
209
213
 
214
+ // 设置预约时间
215
+ // public async setBookingTime(bookingTime: string | null): Promise<void> {
216
+ // if (this.store.currentBookingTime !== bookingTime) {
217
+ // this.store.currentBookingTime = bookingTime;
218
+ //
219
+ // // 更新过滤后的优惠券列表
220
+ // await this.updateFilteredDiscountList();
221
+ // }
222
+ // }
223
+
224
+ // 获取当前预约时间
225
+ }, {
226
+ key: "getCurrentBookingTime",
227
+ value: function getCurrentBookingTime() {
228
+ return this.store.currentBookingTime;
229
+ }
230
+
231
+ // 根据预约时间过滤优惠券列表
232
+ }, {
233
+ key: "filterDiscountListByBookingTime",
234
+ value: function filterDiscountListByBookingTime(discountList, bookingTime) {
235
+ // 如果全部是普通商品,不需要过滤,直接返回当前数据
236
+ if (isAllNormalProduct(this.store.productList || [])) {
237
+ return discountList;
238
+ }
239
+
240
+ // 否则使用 bookingTime 进行过滤
241
+ return _filterDiscountListByBookingTime(discountList, bookingTime);
242
+ }
243
+
244
+ // 更新过滤后的优惠券列表
245
+ // private async updateFilteredDiscountList(): Promise<void> {
246
+ // const originalList = this.store.originalDiscountList;
247
+ // const filteredList = this.filterDiscountListByBookingTime(originalList, this.store.currentBookingTime);
248
+ //
249
+ // this.store.filteredDiscountList = filteredList;
250
+ //
251
+ // // 更新 DiscountModule 中的优惠券列表
252
+ // this.setDiscountList(filteredList);
253
+ //
254
+ // if (this.store.productList?.length) {
255
+ // const result = this.calcDiscount(this.store.productList);
256
+ // await this.core.effects.emit(
257
+ // ShopDiscountHooks.onLoadPrepareCalcResult,
258
+ // result,
259
+ // );
260
+ // }
261
+ // }
262
+
210
263
  // 设置客户
211
264
  }, {
212
265
  key: "setCustomer",
@@ -233,7 +286,14 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
233
286
  return _setCustomer.apply(this, arguments);
234
287
  }
235
288
  return setCustomer;
236
- }() // 计算优惠券
289
+ }() // 设置holders
290
+ }, {
291
+ key: "setHolders",
292
+ value: function setHolders(holders) {
293
+ this.store.holders = holders;
294
+ }
295
+
296
+ // 计算优惠券
237
297
  }, {
238
298
  key: "calcDiscount",
239
299
  value: function calcDiscount(productList, options) {
@@ -247,7 +307,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
247
307
  }
248
308
  var _ref = rulesModule.calcDiscount({
249
309
  productList: productList,
250
- discountList: this.getDiscountList()
310
+ discountList: this.getDiscountList(),
311
+ holders: this.store.holders || []
251
312
  }, options) || {
252
313
  productList: productList,
253
314
  discountList: this.getDiscountList()
@@ -385,7 +446,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
385
446
  _ref2 = rulesModule.isDiscountListAvailable({
386
447
  productList: this.store.productList || [],
387
448
  oldDiscountList: this.getDiscountList(),
388
- newDiscountList: withScanList
449
+ newDiscountList: withScanList,
450
+ holders: this.store.holders || []
389
451
  }) || {
390
452
  isAvailable: false,
391
453
  productList: this.store.productList || [],
@@ -497,7 +559,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
497
559
  if (index !== -1) {
498
560
  editModeDiscountList[index] = _objectSpread(_objectSpread({}, editModeDiscountList[index]), {}, {
499
561
  amount: new Decimal(discount.amount || 0).plus(new Decimal(editModeDiscountList[index].amount || 0)).toNumber(),
500
- 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()
562
+ 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()
501
563
  });
502
564
  } else {
503
565
  var _discount$discount2, _discount$discount3, _discount$discount4;
@@ -508,7 +570,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
508
570
  name: discount.name || discount.discount.title.auto,
509
571
  isEditMode: true,
510
572
  limited_relation_product_data: {},
511
- savedAmount: discount.amount * ((product === null || product === void 0 ? void 0 : product.num) || 1),
573
+ savedAmount: discount.amount * ((product === null || product === void 0 ? void 0 : product.quantity) || (product === null || product === void 0 ? void 0 : product.num) || 1),
512
574
  isAvailable: true,
513
575
  id: ((_discount$discount2 = discount.discount) === null || _discount$discount2 === void 0 ? void 0 : _discount$discount2.resource_id) || discount.id,
514
576
  format_title: ((_discount$discount3 = discount.discount) === null || _discount$discount3 === void 0 ? void 0 : _discount$discount3.title) || discount.format_title,
@@ -529,17 +591,20 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
529
591
  var targetProduct = productList.find(function (n) {
530
592
  return n.id === id;
531
593
  });
594
+ if (!targetProduct) return false;
532
595
  var product = (_this3$hooks2 = _this3.hooks) === null || _this3$hooks2 === void 0 ? void 0 : _this3$hooks2.getProduct(targetProduct);
533
596
  // 如果 product.total 是小于等于0有可能是她已经用过商品券或者折扣卡导致的,或者本身就是负数价格,所以此时还需要判断 origin_total 是否小于等于0
534
597
  // 如果 product.vouchersApplicable是布尔值,并且是 false,也当做免费商品处理,此商品不可用优惠券或折扣卡
535
598
  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)) || isBoolean(product === null || product === void 0 ? void 0 : product.vouchersApplicable) && !(product !== null && product !== void 0 && product.vouchersApplicable);
536
599
  };
537
- var allUsedProductIds = newDiscountList.map(function (n) {
600
+ var allUsedProductIds = newDiscountList.filter(function (item) {
601
+ return !(item !== null && item !== void 0 && item.isEditMode);
602
+ }).map(function (n) {
538
603
  var _n$appliedProductDeta;
539
- return n.isSelected ? (_n$appliedProductDeta = n.appliedProductDetails) === null || _n$appliedProductDeta === void 0 ? void 0 : _n$appliedProductDeta.map(function (n) {
604
+ return n.isSelected ? ((_n$appliedProductDeta = n.appliedProductDetails) === null || _n$appliedProductDeta === void 0 ? void 0 : _n$appliedProductDeta.map(function (n) {
540
605
  var _n$discount;
541
606
  return (_n$discount = n.discount) === null || _n$discount === void 0 ? void 0 : _n$discount.product_id;
542
- }) : [];
607
+ })) || n.product_id : [];
543
608
  }).flat();
544
609
  newDiscountList.forEach(function (item) {
545
610
  var _item$applicableProdu;
@@ -652,7 +717,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
652
717
  key: "loadPrepareConfig",
653
718
  value: function () {
654
719
  var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(params) {
655
- var _this$getCustomer2, _this$store$discount7, _this$getDiscountList, _this$store$productLi2, customerId, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, _result3;
720
+ var _this$getCustomer2, _this$store$discount7, _this$getDiscountList, _this$store$discount8, _this$store$productLi2, customerId, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, filteredDiscountList, _result3;
656
721
  return _regeneratorRuntime().wrap(function _callee9$(_context9) {
657
722
  while (1) switch (_context9.prev = _context9.next) {
658
723
  case 0:
@@ -665,7 +730,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
665
730
  customer_id: customerId,
666
731
  action: 'create',
667
732
  with_good_pass: 1,
668
- with_discount_card: 1
733
+ with_discount_card: 1,
734
+ with_wallet_pass_holder: 1
669
735
  });
670
736
  case 4:
671
737
  goodPassList = _context9.sent;
@@ -678,31 +744,37 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
678
744
  newGoodPassList = goodPassList === null || goodPassList === void 0 ? void 0 : goodPassList.filter(function (n) {
679
745
  return !scanDiscountIds.includes(n.id);
680
746
  });
681
- newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || []));
747
+ newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || [])); // 存储原始优惠券列表
682
748
  this.store.originalDiscountList = newDiscountList;
683
- this.setDiscountList(newDiscountList || []);
749
+ _context9.next = 12;
750
+ return (_this$store$discount8 = this.store.discount) === null || _this$store$discount8 === void 0 ? void 0 : _this$store$discount8.setOriginalDiscountList(newDiscountList);
751
+ case 12:
752
+ // 根据当前预约时间过滤优惠券列表
753
+ filteredDiscountList = this.filterDiscountListByBookingTime(newDiscountList, this.store.currentBookingTime);
754
+ this.store.filteredDiscountList = filteredDiscountList;
755
+ this.setDiscountList(filteredDiscountList || []);
684
756
  if (!((_this$store$productLi2 = this.store.productList) !== null && _this$store$productLi2 !== void 0 && _this$store$productLi2.length)) {
685
- _context9.next = 15;
757
+ _context9.next = 19;
686
758
  break;
687
759
  }
688
760
  _result3 = this.calcDiscount(this.store.productList);
689
- _context9.next = 15;
761
+ _context9.next = 19;
690
762
  return this.core.effects.emit("".concat(this.name, ":onLoadPrepareCalcResult"), _result3);
691
- case 15:
692
- _context9.next = 17;
693
- return this.core.effects.emit("".concat(this.name, ":onLoadDiscountList"), newDiscountList);
694
- case 17:
695
- _context9.next = 22;
696
- break;
697
763
  case 19:
698
- _context9.prev = 19;
764
+ _context9.next = 21;
765
+ return this.core.effects.emit("".concat(this.name, ":onLoadDiscountList"), filteredDiscountList);
766
+ case 21:
767
+ _context9.next = 26;
768
+ break;
769
+ case 23:
770
+ _context9.prev = 23;
699
771
  _context9.t0 = _context9["catch"](0);
700
772
  console.error('[ShopDiscount] 加载准备配置出错:', _context9.t0);
701
- case 22:
773
+ case 26:
702
774
  case "end":
703
775
  return _context9.stop();
704
776
  }
705
- }, _callee9, this, [[0, 19]]);
777
+ }, _callee9, this, [[0, 23]]);
706
778
  }));
707
779
  function loadPrepareConfig(_x9) {
708
780
  return _loadPrepareConfig.apply(this, arguments);
@@ -1,5 +1,6 @@
1
- import { DiscountModule, Discount } from '../../modules/Discount';
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",
@@ -23,6 +24,13 @@ export interface ShopDiscountState {
23
24
  rules: RulesModule | null;
24
25
  productList: Record<string, any>[];
25
26
  originalDiscountList: Discount[];
27
+ holders?: {
28
+ form_record_id: number;
29
+ form_id?: number;
30
+ main_field?: string;
31
+ }[];
32
+ currentBookingTime: string | null;
33
+ filteredDiscountList: Discount[];
26
34
  }
27
35
  export interface SetDiscountSelectedParams {
28
36
  discountId: number;
@@ -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[];