@pisell/pisellos 2.2.180 → 2.2.182

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 (175) hide show
  1. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  2. package/dist/modules/BookingContext/index.d.ts +37 -0
  3. package/dist/modules/BookingContext/index.js +436 -0
  4. package/dist/modules/BookingContext/types.d.ts +102 -0
  5. package/dist/modules/BookingContext/types.js +51 -0
  6. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  7. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +276 -0
  8. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  9. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +137 -0
  10. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
  11. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +215 -0
  12. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  13. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  14. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  15. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  16. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  17. package/dist/modules/BookingContext/utils/index.js +11 -0
  18. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  19. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  20. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  21. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  22. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  23. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  24. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  25. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  26. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  27. package/dist/modules/BookingContext/utils/resources.js +486 -0
  28. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  29. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  30. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  31. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  32. package/dist/modules/Customer/index.d.ts +6 -0
  33. package/dist/modules/Customer/index.js +129 -83
  34. package/dist/modules/Customer/types.d.ts +2 -0
  35. package/dist/modules/Discount/index.js +4 -3
  36. package/dist/modules/Discount/types.d.ts +1 -0
  37. package/dist/modules/Order/index.d.ts +101 -10
  38. package/dist/modules/Order/index.js +1444 -490
  39. package/dist/modules/Order/types.d.ts +201 -18
  40. package/dist/modules/Order/types.js +31 -0
  41. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  42. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  43. package/dist/modules/Order/utils.d.ts +83 -1
  44. package/dist/modules/Order/utils.js +405 -61
  45. package/dist/modules/Product/index.d.ts +1 -1
  46. package/dist/modules/Quotation/index.d.ts +0 -1
  47. package/dist/modules/Quotation/index.js +23 -21
  48. package/dist/modules/Rules/index.d.ts +4 -0
  49. package/dist/modules/Rules/index.js +43 -39
  50. package/dist/modules/Rules/types.d.ts +1 -0
  51. package/dist/modules/SalesSummary/index.js +4 -2
  52. package/dist/modules/SalesSummary/utils.js +21 -7
  53. package/dist/modules/Schedule/index.js +6 -2
  54. package/dist/modules/index.d.ts +1 -0
  55. package/dist/modules/index.js +2 -1
  56. package/dist/server/index.js +87 -29
  57. package/dist/server/modules/order/index.d.ts +23 -0
  58. package/dist/server/modules/order/index.js +123 -46
  59. package/dist/server/modules/order/utils/filterOrders.js +20 -6
  60. package/dist/server/modules/products/index.d.ts +1 -1
  61. package/dist/server/modules/products/index.js +130 -113
  62. package/dist/server/modules/schedule/index.js +13 -6
  63. package/dist/solution/BaseSales/index.d.ts +89 -7
  64. package/dist/solution/BaseSales/index.js +1489 -366
  65. package/dist/solution/BaseSales/types.d.ts +67 -1
  66. package/dist/solution/BaseSales/types.js +3 -1
  67. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +275 -0
  68. package/dist/solution/BaseSales/utils/cartPromotion.js +1258 -0
  69. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
  70. package/dist/solution/BaseSales/utils/quotationPrice.js +237 -0
  71. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +68 -16
  72. package/dist/solution/BaseSales/utils.js +46 -8
  73. package/dist/solution/BookingByStep/index.d.ts +1 -1
  74. package/dist/solution/BookingTicket/index.d.ts +152 -2
  75. package/dist/solution/BookingTicket/index.js +848 -184
  76. package/dist/solution/BookingTicket/types.d.ts +2 -0
  77. package/dist/solution/BookingTicket/types.js +3 -0
  78. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
  79. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  80. package/dist/solution/BookingTicket/utils/cartView.js +4 -2
  81. package/dist/solution/ScanOrder/index.d.ts +9 -3
  82. package/dist/solution/ScanOrder/index.js +231 -128
  83. package/dist/solution/ScanOrder/utils.js +46 -8
  84. package/dist/solution/VenueBooking/index.d.ts +5 -2
  85. package/dist/solution/VenueBooking/index.js +103 -55
  86. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
  87. package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
  88. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  89. package/lib/modules/BookingContext/index.d.ts +37 -0
  90. package/lib/modules/BookingContext/index.js +297 -0
  91. package/lib/modules/BookingContext/types.d.ts +102 -0
  92. package/lib/modules/BookingContext/types.js +34 -0
  93. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  94. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +271 -0
  95. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  96. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +141 -0
  97. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
  98. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +198 -0
  99. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  100. package/lib/modules/BookingContext/utils/flexible.js +80 -0
  101. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  102. package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
  103. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  104. package/lib/modules/BookingContext/utils/index.js +43 -0
  105. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  106. package/lib/modules/BookingContext/utils/noResource.js +90 -0
  107. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  108. package/lib/modules/BookingContext/utils/productExtend.js +283 -0
  109. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  110. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  111. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  112. package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
  113. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  114. package/lib/modules/BookingContext/utils/resources.js +377 -0
  115. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  116. package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
  117. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  118. package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
  119. package/lib/modules/Customer/index.d.ts +6 -0
  120. package/lib/modules/Customer/index.js +26 -11
  121. package/lib/modules/Customer/types.d.ts +2 -0
  122. package/lib/modules/Discount/index.js +5 -1
  123. package/lib/modules/Discount/types.d.ts +1 -0
  124. package/lib/modules/Order/index.d.ts +101 -10
  125. package/lib/modules/Order/index.js +751 -114
  126. package/lib/modules/Order/types.d.ts +201 -18
  127. package/lib/modules/Order/types.js +1 -0
  128. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  129. package/lib/modules/Order/utils/manualProductDiscount.js +206 -0
  130. package/lib/modules/Order/utils.d.ts +83 -1
  131. package/lib/modules/Order/utils.js +340 -22
  132. package/lib/modules/Product/index.d.ts +1 -1
  133. package/lib/modules/Quotation/index.d.ts +0 -1
  134. package/lib/modules/Quotation/index.js +18 -15
  135. package/lib/modules/Rules/index.d.ts +4 -0
  136. package/lib/modules/Rules/index.js +26 -27
  137. package/lib/modules/Rules/types.d.ts +1 -0
  138. package/lib/modules/SalesSummary/index.js +4 -2
  139. package/lib/modules/SalesSummary/utils.js +21 -7
  140. package/lib/modules/Schedule/index.js +3 -1
  141. package/lib/modules/index.d.ts +1 -0
  142. package/lib/modules/index.js +3 -1
  143. package/lib/server/index.js +41 -4
  144. package/lib/server/modules/order/index.d.ts +23 -0
  145. package/lib/server/modules/order/index.js +46 -14
  146. package/lib/server/modules/order/utils/filterOrders.js +12 -4
  147. package/lib/server/modules/products/index.d.ts +1 -1
  148. package/lib/server/modules/products/index.js +30 -20
  149. package/lib/server/modules/schedule/index.js +2 -1
  150. package/lib/solution/BaseSales/index.d.ts +89 -7
  151. package/lib/solution/BaseSales/index.js +742 -23
  152. package/lib/solution/BaseSales/types.d.ts +67 -1
  153. package/lib/solution/BaseSales/types.js +3 -1
  154. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +275 -0
  155. package/lib/solution/BaseSales/utils/cartPromotion.js +836 -0
  156. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
  157. package/lib/solution/BaseSales/utils/quotationPrice.js +277 -0
  158. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +71 -12
  159. package/lib/solution/BaseSales/utils.js +46 -6
  160. package/lib/solution/BookingByStep/index.d.ts +1 -1
  161. package/lib/solution/BookingTicket/index.d.ts +152 -2
  162. package/lib/solution/BookingTicket/index.js +389 -9
  163. package/lib/solution/BookingTicket/types.d.ts +2 -0
  164. package/lib/solution/BookingTicket/types.js +6 -0
  165. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
  166. package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
  167. package/lib/solution/BookingTicket/utils/cartView.js +4 -2
  168. package/lib/solution/ScanOrder/index.d.ts +9 -3
  169. package/lib/solution/ScanOrder/index.js +147 -66
  170. package/lib/solution/ScanOrder/utils.js +46 -6
  171. package/lib/solution/VenueBooking/index.d.ts +5 -2
  172. package/lib/solution/VenueBooking/index.js +50 -14
  173. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
  174. package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
  175. package/package.json +1 -1
@@ -95,7 +95,7 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
95
95
  } else {
96
96
  this.store.currentPage = 1;
97
97
  }
98
- if (typeof (options === null || options === void 0 || (_options$initialState5 = options.initialState) === null || _options$initialState5 === void 0 ? void 0 : _options$initialState5.pageSize) === 'number') {
98
+ if (typeof (options === null || options === void 0 || (_options$initialState5 = options.initialState) === null || _options$initialState5 === void 0 ? void 0 : _options$initialState5.pageSize) === 'number' && options.initialState.pageSize > 1) {
99
99
  this.store.pageSize = options.initialState.pageSize;
100
100
  } else {
101
101
  this.store.pageSize = DEFAULT_PAGE_SIZE;
@@ -236,6 +236,52 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
236
236
  }
237
237
  return handleCustomerListError;
238
238
  }()
239
+ /**
240
+ * 查询客户列表但不写入 customerList / pagination 状态。
241
+ *
242
+ * 用于按 ID 补齐客户等内部查询,避免把临时的 num/searchParams 污染到滚动列表。
243
+ */
244
+ )
245
+ }, {
246
+ key: "queryCustomerList",
247
+ value: (function () {
248
+ var _queryCustomerList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
249
+ var params,
250
+ _yield$this$fetchCust,
251
+ customerList,
252
+ total,
253
+ page,
254
+ pageSize,
255
+ _args4 = arguments;
256
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
257
+ while (1) switch (_context4.prev = _context4.next) {
258
+ case 0:
259
+ params = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {};
260
+ _context4.next = 3;
261
+ return this.fetchCustomerListData(params);
262
+ case 3:
263
+ _yield$this$fetchCust = _context4.sent;
264
+ customerList = _yield$this$fetchCust.customerList;
265
+ total = _yield$this$fetchCust.total;
266
+ page = _yield$this$fetchCust.page;
267
+ pageSize = _yield$this$fetchCust.pageSize;
268
+ return _context4.abrupt("return", {
269
+ list: customerList,
270
+ total: total,
271
+ page: page,
272
+ pageSize: pageSize
273
+ });
274
+ case 9:
275
+ case "end":
276
+ return _context4.stop();
277
+ }
278
+ }, _callee4, this);
279
+ }));
280
+ function queryCustomerList() {
281
+ return _queryCustomerList.apply(this, arguments);
282
+ }
283
+ return queryCustomerList;
284
+ }()
239
285
  /**
240
286
  * 获取客户列表
241
287
  * @param params 查询参数
@@ -245,9 +291,9 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
245
291
  }, {
246
292
  key: "getCustomerList",
247
293
  value: (function () {
248
- var _getCustomerList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
294
+ var _getCustomerList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
249
295
  var params,
250
- _yield$this$fetchCust,
296
+ _yield$this$fetchCust2,
251
297
  customerList,
252
298
  total,
253
299
  page,
@@ -256,22 +302,22 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
256
302
  num,
257
303
  searchParams,
258
304
  response,
259
- _args4 = arguments;
260
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
261
- while (1) switch (_context4.prev = _context4.next) {
305
+ _args5 = arguments;
306
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
307
+ while (1) switch (_context5.prev = _context5.next) {
262
308
  case 0:
263
- params = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {};
264
- _context4.prev = 1;
309
+ params = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : {};
310
+ _context5.prev = 1;
265
311
  this.store.loading = true;
266
312
  this.store.error = null;
267
- _context4.next = 6;
313
+ _context5.next = 6;
268
314
  return this.fetchCustomerListData(params);
269
315
  case 6:
270
- _yield$this$fetchCust = _context4.sent;
271
- customerList = _yield$this$fetchCust.customerList;
272
- total = _yield$this$fetchCust.total;
273
- page = _yield$this$fetchCust.page;
274
- pageSize = _yield$this$fetchCust.pageSize;
316
+ _yield$this$fetchCust2 = _context5.sent;
317
+ customerList = _yield$this$fetchCust2.customerList;
318
+ total = _yield$this$fetchCust2.total;
319
+ page = _yield$this$fetchCust2.page;
320
+ pageSize = _yield$this$fetchCust2.pageSize;
275
321
  // 保存搜索条件(排除skip和num)
276
322
  skip = params.skip, num = params.num, searchParams = _objectWithoutProperties(params, _excluded2);
277
323
  this.store.searchParams = cloneDeep(searchParams);
@@ -286,9 +332,7 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
286
332
 
287
333
  // 设置客户列表(替换模式)
288
334
  this.store.customerList = cloneDeep(customerList);
289
- _context4.next = 20;
290
- return this.core.effects.emit("".concat(this.name, ":onCustomerListUpdate"), this.store);
291
- case 20:
335
+
292
336
  // 触发分页变化事件
293
337
  this.triggerPaginationChange({
294
338
  page: page,
@@ -302,24 +346,27 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
302
346
  page: page,
303
347
  pageSize: pageSize
304
348
  };
305
- return _context4.abrupt("return", response);
306
- case 25:
307
- _context4.prev = 25;
308
- _context4.t0 = _context4["catch"](1);
309
- _context4.next = 29;
310
- return this.handleCustomerListError(_context4.t0, 'fetch customer list');
311
- case 29:
312
- throw _context4.t0;
313
- case 30:
314
- _context4.prev = 30;
349
+ return _context5.abrupt("return", response);
350
+ case 23:
351
+ _context5.prev = 23;
352
+ _context5.t0 = _context5["catch"](1);
353
+ _context5.next = 27;
354
+ return this.handleCustomerListError(_context5.t0, 'fetch customer list');
355
+ case 27:
356
+ throw _context5.t0;
357
+ case 28:
358
+ _context5.prev = 28;
315
359
  this.store.loading = false;
316
360
  this.storeChange();
317
- return _context4.finish(30);
361
+ _context5.next = 33;
362
+ return this.core.effects.emit("".concat(this.name, ":onCustomerListUpdate"), this.store);
363
+ case 33:
364
+ return _context5.finish(28);
318
365
  case 34:
319
366
  case "end":
320
- return _context4.stop();
367
+ return _context5.stop();
321
368
  }
322
- }, _callee4, this, [[1, 25, 30, 34]]);
369
+ }, _callee5, this, [[1, 23, 28, 34]]);
323
370
  }));
324
371
  function getCustomerList() {
325
372
  return _getCustomerList.apply(this, arguments);
@@ -493,10 +540,10 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
493
540
  }, {
494
541
  key: "changeCustomerPage",
495
542
  value: (function () {
496
- var _changeCustomerPage = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(page, pageSize) {
543
+ var _changeCustomerPage = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(page, pageSize) {
497
544
  var targetPageSize, skip, num;
498
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
499
- while (1) switch (_context5.prev = _context5.next) {
545
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
546
+ while (1) switch (_context6.prev = _context6.next) {
500
547
  case 0:
501
548
  targetPageSize = pageSize || this.store.pageSize; // 先更新分页状态
502
549
  this.setPaginationInfo(page, targetPageSize);
@@ -504,18 +551,18 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
504
551
  // skip直接使用page,num使用pageSize
505
552
  skip = page;
506
553
  num = targetPageSize; // 自动调用获取客户列表,使用存储的搜索条件
507
- _context5.next = 6;
554
+ _context6.next = 6;
508
555
  return this.getCustomerList(_objectSpread({
509
556
  skip: skip,
510
557
  num: num
511
558
  }, this.store.searchParams));
512
559
  case 6:
513
- return _context5.abrupt("return", _context5.sent);
560
+ return _context6.abrupt("return", _context6.sent);
514
561
  case 7:
515
562
  case "end":
516
- return _context5.stop();
563
+ return _context6.stop();
517
564
  }
518
- }, _callee5, this);
565
+ }, _callee6, this);
519
566
  }));
520
567
  function changeCustomerPage(_x5, _x6) {
521
568
  return _changeCustomerPage.apply(this, arguments);
@@ -530,16 +577,16 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
530
577
  }, {
531
578
  key: "loadMoreCustomers",
532
579
  value: (function () {
533
- var _loadMoreCustomers = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
534
- var nextPage, _yield$this$fetchCust2, newCustomers, total, page, pageSize, updatedCustomerList, response;
535
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
536
- while (1) switch (_context6.prev = _context6.next) {
580
+ var _loadMoreCustomers = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
581
+ var nextPage, loadMoreParams, _yield$this$fetchCust3, newCustomers, total, page, pageSize, updatedCustomerList, response;
582
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
583
+ while (1) switch (_context7.prev = _context7.next) {
537
584
  case 0:
538
585
  if (!(!this.store.hasMore || this.store.loadingMore)) {
539
- _context6.next = 2;
586
+ _context7.next = 2;
540
587
  break;
541
588
  }
542
- return _context6.abrupt("return", {
589
+ return _context7.abrupt("return", {
543
590
  list: [],
544
591
  total: this.store.total,
545
592
  page: this.store.currentPage,
@@ -548,22 +595,21 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
548
595
  case 2:
549
596
  // 计算下一页
550
597
  nextPage = this.store.currentPage + 1;
551
- _context6.prev = 3;
598
+ _context7.prev = 3;
552
599
  this.store.loadingMore = true;
553
600
  this.store.error = null;
554
-
555
- // 使用公共方法获取数据,传入存储的搜索条件
556
- _context6.next = 8;
557
- return this.fetchCustomerListData(_objectSpread({
601
+ loadMoreParams = _objectSpread({
558
602
  skip: nextPage,
559
603
  num: this.store.pageSize
560
- }, this.store.searchParams));
561
- case 8:
562
- _yield$this$fetchCust2 = _context6.sent;
563
- newCustomers = _yield$this$fetchCust2.customerList;
564
- total = _yield$this$fetchCust2.total;
565
- page = _yield$this$fetchCust2.page;
566
- pageSize = _yield$this$fetchCust2.pageSize;
604
+ }, this.store.searchParams); // 使用公共方法获取数据,传入存储的搜索条件
605
+ _context7.next = 9;
606
+ return this.fetchCustomerListData(loadMoreParams);
607
+ case 9:
608
+ _yield$this$fetchCust3 = _context7.sent;
609
+ newCustomers = _yield$this$fetchCust3.customerList;
610
+ total = _yield$this$fetchCust3.total;
611
+ page = _yield$this$fetchCust3.page;
612
+ pageSize = _yield$this$fetchCust3.pageSize;
567
613
  // 将新数据追加到现有列表(追加模式)
568
614
  updatedCustomerList = [].concat(_toConsumableArray(this.store.customerList), _toConsumableArray(cloneDeep(newCustomers))); // 更新状态
569
615
  this.store.customerList = updatedCustomerList;
@@ -572,17 +618,14 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
572
618
  this.store.hasMore = page * pageSize < total;
573
619
 
574
620
  // 触发滚动加载特定事件
575
- _context6.next = 20;
621
+ _context7.next = 21;
576
622
  return this.core.effects.emit("".concat(this.name, ":onScrollLoadMore"), {
577
623
  newCustomers: newCustomers,
578
624
  allCustomers: this.store.customerList,
579
625
  currentPage: page,
580
626
  hasMore: this.store.hasMore
581
627
  });
582
- case 20:
583
- _context6.next = 22;
584
- return this.core.effects.emit("".concat(this.name, ":onCustomerListUpdate"), this.store);
585
- case 22:
628
+ case 21:
586
629
  // 触发分页变化事件
587
630
  this.triggerPaginationChange({
588
631
  page: page,
@@ -597,24 +640,27 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
597
640
  page: page,
598
641
  pageSize: pageSize
599
642
  };
600
- return _context6.abrupt("return", response);
601
- case 27:
602
- _context6.prev = 27;
603
- _context6.t0 = _context6["catch"](3);
604
- _context6.next = 31;
605
- return this.handleCustomerListError(_context6.t0, 'load more customers');
643
+ return _context7.abrupt("return", response);
644
+ case 26:
645
+ _context7.prev = 26;
646
+ _context7.t0 = _context7["catch"](3);
647
+ _context7.next = 30;
648
+ return this.handleCustomerListError(_context7.t0, 'load more customers');
649
+ case 30:
650
+ throw _context7.t0;
606
651
  case 31:
607
- throw _context6.t0;
608
- case 32:
609
- _context6.prev = 32;
652
+ _context7.prev = 31;
610
653
  this.store.loadingMore = false;
611
654
  this.storeChange();
612
- return _context6.finish(32);
655
+ _context7.next = 36;
656
+ return this.core.effects.emit("".concat(this.name, ":onCustomerListUpdate"), this.store);
613
657
  case 36:
658
+ return _context7.finish(31);
659
+ case 37:
614
660
  case "end":
615
- return _context6.stop();
661
+ return _context7.stop();
616
662
  }
617
- }, _callee6, this, [[3, 27, 32, 36]]);
663
+ }, _callee7, this, [[3, 26, 31, 37]]);
618
664
  }));
619
665
  function loadMoreCustomers() {
620
666
  return _loadMoreCustomers.apply(this, arguments);
@@ -630,15 +676,15 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
630
676
  }, {
631
677
  key: "resetAndLoadCustomers",
632
678
  value: (function () {
633
- var _resetAndLoadCustomers = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
679
+ var _resetAndLoadCustomers = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
634
680
  var params,
635
681
  resetParams,
636
682
  response,
637
- _args7 = arguments;
638
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
639
- while (1) switch (_context7.prev = _context7.next) {
683
+ _args8 = arguments;
684
+ return _regeneratorRuntime().wrap(function _callee8$(_context8) {
685
+ while (1) switch (_context8.prev = _context8.next) {
640
686
  case 0:
641
- params = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};
687
+ params = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {};
642
688
  // 重置状态
643
689
  this.store.customerList = [];
644
690
  this.store.currentPage = 1;
@@ -650,23 +696,23 @@ export var CustomerModule = /*#__PURE__*/function (_BaseModule) {
650
696
  skip: 1,
651
697
  num: params.num || this.store.pageSize
652
698
  }); // 调用普通的获取列表方法
653
- _context7.next = 8;
699
+ _context8.next = 8;
654
700
  return this.getCustomerList(resetParams);
655
701
  case 8:
656
- response = _context7.sent;
657
- _context7.next = 11;
702
+ response = _context8.sent;
703
+ _context8.next = 11;
658
704
  return this.core.effects.emit("".concat(this.name, ":onScrollLoadComplete"), {
659
705
  customers: this.store.customerList,
660
706
  total: this.store.total,
661
707
  hasMore: this.store.hasMore
662
708
  });
663
709
  case 11:
664
- return _context7.abrupt("return", response);
710
+ return _context8.abrupt("return", response);
665
711
  case 12:
666
712
  case "end":
667
- return _context7.stop();
713
+ return _context8.stop();
668
714
  }
669
- }, _callee7, this);
715
+ }, _callee8, this);
670
716
  }));
671
717
  function resetAndLoadCustomers() {
672
718
  return _resetAndLoadCustomers.apply(this, arguments);
@@ -110,6 +110,8 @@ export interface CustomerState {
110
110
  export interface CustomerModuleAPI {
111
111
  /** 获取客户列表 */
112
112
  getCustomerList: (params?: ShopGetCustomerListParams) => Promise<ICustomerListResponse>;
113
+ /** 查询客户列表但不更新列表分页状态 */
114
+ queryCustomerList: (params?: ShopGetCustomerListParams) => Promise<ICustomerListResponse>;
113
115
  /** 设置客户列表 */
114
116
  setCustomerList: (customers: ShopCustomer[], total?: number) => void;
115
117
  /** 设置当前选择的客户 */
@@ -154,7 +154,7 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
154
154
  value: function () {
155
155
  var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(params) {
156
156
  var _prepareConfig$data, _prepareConfig$data2;
157
- var prepareConfig, goodPassList;
157
+ var prepareConfig, rawDiscountList, goodPassList;
158
158
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
159
159
  while (1) switch (_context4.prev = _context4.next) {
160
160
  case 0:
@@ -162,9 +162,10 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
162
162
  return this.request.post("/order/prepare/config", params);
163
163
  case 2:
164
164
  prepareConfig = _context4.sent;
165
- goodPassList = this.filterEnabledDiscountList([].concat(_toConsumableArray((prepareConfig === null || prepareConfig === void 0 || (_prepareConfig$data = prepareConfig.data) === null || _prepareConfig$data === void 0 ? void 0 : _prepareConfig$data.good_pass_list) || []), _toConsumableArray((prepareConfig === null || prepareConfig === void 0 || (_prepareConfig$data2 = prepareConfig.data) === null || _prepareConfig$data2 === void 0 ? void 0 : _prepareConfig$data2.discount_card_list) || []))) || []; // this.setDiscountList(goodPassList);
165
+ rawDiscountList = [].concat(_toConsumableArray((prepareConfig === null || prepareConfig === void 0 || (_prepareConfig$data = prepareConfig.data) === null || _prepareConfig$data === void 0 ? void 0 : _prepareConfig$data.good_pass_list) || []), _toConsumableArray((prepareConfig === null || prepareConfig === void 0 || (_prepareConfig$data2 = prepareConfig.data) === null || _prepareConfig$data2 === void 0 ? void 0 : _prepareConfig$data2.discount_card_list) || []));
166
+ goodPassList = this.filterEnabledDiscountList(rawDiscountList) || []; // this.setDiscountList(goodPassList);
166
167
  return _context4.abrupt("return", goodPassList);
167
- case 5:
168
+ case 6:
168
169
  case "end":
169
170
  return _context4.stop();
170
171
  }
@@ -140,6 +140,7 @@ export interface Discount {
140
140
  appliedProductDetails: ApplicableProductDetails[];
141
141
  isDisabledForProductUsed?: boolean;
142
142
  amount?: number;
143
+ customer_id?: number | string | null;
143
144
  extension_data?: ExtensionData[];
144
145
  total_order_behavior_count?: number;
145
146
  today_order_behavior_count?: number;
@@ -1,9 +1,9 @@
1
1
  import { Module, PisellCore, ModuleOptions } from '../../types';
2
2
  import { BaseModule } from '../BaseModule';
3
- import { OrderModuleAPI, CommitOrderParams, UpdateProductInOrderParams, CheckoutOrderParams, CancelOrderParams, ChangeBookingStatusParams } from './types';
3
+ import { OrderModuleAPI, CommitOrderParams, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, CheckoutOrderParams, CancelOrderParams, ChangeBookingStatusParams } from './types';
4
4
  import { CartItem } from '../Cart/types';
5
5
  import { type SubmitPayloadEnhancer } from './utils';
6
- import type { OrderAmountSnapshot, AddProductBookingInput, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView } from './types';
6
+ import type { OrderAmountSnapshot, AddProductBookingInput, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions } from './types';
7
7
  import type { ICustomer } from '../AccountList/types';
8
8
  import type { Discount } from '../Discount/types';
9
9
  import { UnavailableReason } from '../Rules/types';
@@ -20,11 +20,27 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
20
20
  private rulesHooksOverride?;
21
21
  private orderHooks?;
22
22
  private otherParams?;
23
+ /** 评估器引用;由 SalesSdkProvider 注入,未注入时 applyPromotion 静默跳过 */
24
+ private promotionEvaluator;
25
+ /** 赠品选择 resolver;由 SDK host bridge 注入 */
26
+ private giftSelectResolver;
27
+ /** applyPromotion 递归保护 flag(写路径同步调 applyPromotion,禁止重入) */
28
+ private isApplyingPromotion;
29
+ /** 最近一次 applyPromotion 的未满足促销提示 */
30
+ private lastUnfulfilledPromotions;
31
+ /** 最近一次 applyPromotion 的赠品操作 diff(debug / SDK 读取使用) */
32
+ private lastGiftActions;
33
+ /**
34
+ * 是否将 tempOrder 写入 IndexedDB 草稿(orders store)。
35
+ * BigSale 弹窗等短生命周期场景通过 setEnableTempOrderPersist(false) 关闭。
36
+ */
37
+ private draftPersistEnabled;
23
38
  /**
24
39
  * Populate `savedAmount` on each discount based on product-level discount details.
25
40
  * Only selected discounts get a non-zero value.
26
41
  */
27
42
  static populateSavedAmounts(productList: Array<Record<string, any>>, discountList: Array<Record<string, any>>): void;
43
+ private applyProductDiscountPrices;
28
44
  constructor(name?: string, version?: string);
29
45
  initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
30
46
  /**
@@ -43,8 +59,10 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
43
59
  private createDefaultRulesHooks;
44
60
  loadDiscountConfig(params: {
45
61
  customerId: number;
46
- action?: 'create';
47
- }): Promise<void>;
62
+ action?: 'create' | 'edit';
63
+ orderId?: number;
64
+ apply?: boolean;
65
+ }): Promise<Discount[]>;
48
66
  getDiscountList(): Discount[];
49
67
  scanCode(code: string, customerId?: number): Promise<{
50
68
  isAvailable: boolean;
@@ -52,34 +70,92 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
52
70
  type: 'server' | 'clientCalc';
53
71
  unavailableReason?: UnavailableReason;
54
72
  unavailableReasonKey?: string | null;
73
+ scannedDiscountList?: Discount[];
55
74
  }>;
56
75
  applyDiscount(): void;
76
+ /**
77
+ * 注入促销评估器。
78
+ *
79
+ * @example
80
+ * order.setPromotionEvaluator(appHelper.utils.promotionEvaluator);
81
+ */
82
+ setPromotionEvaluator(evaluator: OrderPromotionEvaluator | null): void;
83
+ /**
84
+ * 注入赠品选择 resolver。OS 需要补赠品时会 await 调用 resolver;缺省时跳过新增并 console.warn。
85
+ *
86
+ * @example
87
+ * order.setGiftSelectResolver(async (ctx) => {
88
+ * // SDK 内部决定弹窗 or 自动选第一项,返回完整 OrderProduct[]
89
+ * return giftSelectBridge.request(ctx);
90
+ * });
91
+ */
92
+ setGiftSelectResolver(resolver: OrderGiftSelectResolver | null): void;
93
+ /**
94
+ * 为商品目录追加促销标签,供上层 Sales 门面复用。
95
+ *
96
+ * @example
97
+ * const products = order.appendPromotionTags(catalogProducts);
98
+ */
99
+ appendPromotionTags<T extends Record<string, any>>(products: T[]): T[];
100
+ /**
101
+ * 应用购物车促销:计算 → 差异化赠品 → 写回 tempOrder.products → emit onPromotionApplied。
102
+ *
103
+ * 调用时机:写路径(add/update/remove/clear/setCustomer)末尾自动触发;外部一般无需手动调。
104
+ *
105
+ * 关键约束:
106
+ * - 不调用任何公开 CRUD API(如 removeProductFromOrder),全部内部 mutate tempOrder.products,避免事件风暴;
107
+ * - 用 `isApplyingPromotion` 防递归;
108
+ * - 多选项赠品依赖 giftSelectResolver,未注入则跳过且 console.warn;
109
+ * - 不主动调用 applyDiscount / recalculateSummary,调用方负责跟进。
110
+ */
111
+ applyPromotion(): Promise<void>;
112
+ /** 最近一次 applyPromotion 输出的未满足促销列表 */
113
+ getUnfulfilledPromotions(): OrderUnfulfilledPromotion[];
114
+ /** 最近一次 applyPromotion 输出的赠品操作 diff */
115
+ getLastGiftActions(): OrderLastGiftActions | null;
57
116
  initTempOrder(params: {
58
117
  cacheId?: string;
59
118
  salesSummaryModuleName?: string;
60
119
  }): void;
61
- private getTempOrderStorageKey;
62
- private restoreTempOrderFromStorage;
120
+ /**
121
+ * 控制 IndexedDB 草稿(saveDraft)是否写入。
122
+ * localStorage 版 tempOrder 持久化已废弃,此方法仅影响 saveDraft。
123
+ *
124
+ * @example
125
+ * order.setEnableTempOrderPersist(false); // BigSale 弹窗:跳过 ~1s 的 dbUpdate
126
+ */
127
+ setEnableTempOrderPersist(enabled: boolean): void;
128
+ /** 是否允许 saveDraft 写入 IndexedDB 草稿。 */
129
+ isTempOrderPersistEnabled(): boolean;
130
+ /** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化;草稿保存请使用 IndexedDB saveDraft。 */
63
131
  persistTempOrder(): void;
64
132
  private createDefaultTempOrderInstance;
65
133
  private createExternalSaleNumber;
66
134
  private ensureExternalSaleNumber;
67
135
  private ensureRequestUniqueIdempotencyToken;
136
+ private buildPaymentSyncIdempotencyToken;
68
137
  hasLocalDatabase(): boolean;
69
138
  private buildLocalOrderRecord;
70
139
  getLocalOrderByOrderId(orderId: number | string): Promise<Record<string, any> | null>;
71
140
  getLocalOrderByOrderNumber(orderNumber: string): Promise<Record<string, any> | null>;
72
141
  getLocalOrderByExternalSaleNumber(externalSaleNumber: string): Promise<Record<string, any> | null>;
73
142
  saveDraft(): Promise<void>;
143
+ private saveDraftInBackground;
74
144
  private hydrateTempOrderFromLocalRecord;
75
145
  private extractOrderIdFromSubmitResult;
76
146
  private calculatePaymentTotal;
147
+ private normalizePaymentSource;
148
+ private updateTempOrderPaymentStatus;
77
149
  private calculatePaidPaymentSummary;
78
150
  private calculatePaymentServiceFee;
151
+ private formatSummaryMetadataMoney;
152
+ private syncSummaryProductMetadata;
153
+ private calculateSummaryAmountGap;
79
154
  private getPaymentTargetAmount;
80
155
  ensureTempOrder(): OrderTempOrder;
81
156
  restoreOrder(): OrderTempOrder;
82
157
  getTempOrder(): OrderTempOrder | null;
158
+ replaceTempOrder(tempOrder: OrderTempOrder, options?: ReplaceTempOrderOptions): Promise<OrderTempOrder>;
83
159
  getOrderIdentity(): OrderIdentitySnapshot | null;
84
160
  getOrderSyncState(): OrderSyncState;
85
161
  getOrderAmountSnapshot(): OrderAmountSnapshot | null;
@@ -90,20 +166,27 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
90
166
  private ensureExtend;
91
167
  private captureProductRuntime;
92
168
  private createLinkedProductAndBooking;
169
+ private getBookingUniqueIdentificationNumber;
170
+ private findBookingIndexByUniqueIdentificationNumber;
171
+ private removeLinkedBookingsForProduct;
93
172
  private getSalesSummary;
94
173
  recalculateSummary(options?: {
95
174
  createIfMissing?: boolean;
96
175
  }): Promise<OrderSummary | null>;
97
176
  getOrderSummary(): Promise<OrderSummary>;
98
177
  updateTempOrderNote(note: string): string;
178
+ updateTempOrderNote(note: string, sync: true): Promise<string>;
179
+ updateTempOrderNote(note: string, sync: boolean): string | Promise<string>;
180
+ syncTempOrderNoteToRemote(orderId: number | string, note: string): Promise<string>;
99
181
  getTempOrderNote(): string;
100
182
  updateTempOrderShopDiscount(amount: string | number): string;
101
183
  updateTempOrderBuzzer(buzzer: string): string;
102
184
  updateTempOrderContactsInfo(contactsInfo: Record<string, any> | null): Record<string, any> | null;
185
+ private buildTempOrderCustomer;
103
186
  /**
104
187
  * 更新当前 tempOrder 的客户协议字段。
105
188
  *
106
- * PaymentModal 只需要修改订单里的客户字段;如果外部还有客户模块需要同步,
189
+ * PaymentModal 只需要修改订单里的客户事实;如果外部还有客户模块需要同步,
107
190
  * 应由调用方通过回调处理,不能把外部 UI 状态写进 tempOrder。
108
191
  */
109
192
  updateTempOrderCustomer(customer: UpdateTempOrderCustomerInput): OrderSnapshot['customer'];
@@ -148,8 +231,15 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
148
231
  private shouldMergeProductToOrder;
149
232
  addProductToOrder(product: Partial<OrderProduct> & OrderProductIdentity, booking?: AddProductBookingInput): Promise<OrderProduct[]>;
150
233
  private hasGoodPassDiscount;
151
- updateProductInOrder(params: UpdateProductInOrderParams): Promise<OrderProduct[]>;
234
+ updateOrderProduct(params: UpdateOrderProductParams): Promise<OrderProduct[]>;
235
+ updateOrderProductQuantity(params: UpdateOrderProductQuantityParams): Promise<OrderProduct[]>;
236
+ updateOrderBooking(params: UpdateOrderBookingParams): any[];
152
237
  removeProductFromOrder(identity: OrderProductIdentity): Promise<OrderProduct[]>;
238
+ /**
239
+ * 仅清空购物车行(products / bookings),不重置整单。
240
+ * 用于「仅清空商品」;客户、备注、支付等协议字段保持不变。
241
+ */
242
+ clearOrderCartLines(): Promise<OrderTempOrder>;
153
243
  /**
154
244
  * 提交当前 Sales tempOrder。
155
245
  *
@@ -174,7 +264,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
174
264
  private logSubmitBackendRejected;
175
265
  syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
176
266
  createOrder(params: CommitOrderParams['query']): {
177
- type: "virtual" | "appointment_booking";
267
+ type: "appointment_booking" | "virtual";
178
268
  platform: string;
179
269
  sales_channel: string;
180
270
  order_sales_channel: string;
@@ -221,8 +311,9 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
221
311
  hydrateTempOrderFromRecord(record: Record<string, any>, options?: {
222
312
  recalcOnHydrate?: boolean;
223
313
  }): Promise<OrderTempOrder>;
314
+ private normalizeTempOrderForRuntime;
224
315
  private normalizeHydratedOrderProduct;
225
316
  getLastOrderInfo(): Record<string, any> | undefined;
226
317
  getOrderInfo(order_id: number): Promise<any>;
227
318
  }
228
- export type { UpdateProductInOrderParams } from './types';
319
+ export type { UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';