@pisell/pisellos 2.3.49 → 2.3.51

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 (144) hide show
  1. package/dist/modules/Discount/index.d.ts +1 -0
  2. package/dist/modules/Discount/index.js +40 -11
  3. package/dist/modules/Discount/types.d.ts +1 -0
  4. package/dist/modules/Holder/index.d.ts +48 -0
  5. package/dist/modules/Holder/index.js +640 -0
  6. package/dist/modules/Holder/types.d.ts +123 -0
  7. package/dist/modules/Holder/types.js +1 -0
  8. package/dist/modules/Holder/utils.d.ts +13 -0
  9. package/dist/modules/Holder/utils.js +34 -0
  10. package/dist/modules/OpenData/index.js +2 -2
  11. package/dist/modules/Order/index.d.ts +4 -2
  12. package/dist/modules/Order/index.js +54 -25
  13. package/dist/modules/Order/types.d.ts +9 -0
  14. package/dist/modules/Order/utils.d.ts +10 -0
  15. package/dist/modules/Order/utils.js +35 -3
  16. package/dist/modules/Product/types.d.ts +1 -0
  17. package/dist/modules/ProductList/index.js +33 -14
  18. package/dist/modules/Quotation/index.d.ts +1 -1
  19. package/dist/modules/Quotation/index.js +2 -2
  20. package/dist/modules/ResourcePlanner/index.d.ts +24 -0
  21. package/dist/modules/ResourcePlanner/index.js +181 -0
  22. package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
  23. package/dist/modules/ResourcePlanner/planner.js +1069 -0
  24. package/dist/modules/ResourcePlanner/types.d.ts +227 -0
  25. package/dist/modules/ResourcePlanner/types.js +1 -0
  26. package/dist/modules/Rules/index.js +47 -13
  27. package/dist/modules/SalesSummary/index.js +12 -13
  28. package/dist/modules/ScanOrderLogger/index.d.ts +2 -0
  29. package/dist/modules/ScanOrderLogger/index.js +15 -2
  30. package/dist/modules/ScanOrderLogger/providers/feishu.js +45 -27
  31. package/dist/modules/ScanOrderLogger/types.d.ts +1 -0
  32. package/dist/modules/Schedule/index.d.ts +3 -1
  33. package/dist/modules/Schedule/index.js +21 -16
  34. package/dist/modules/Summary/utils.js +38 -13
  35. package/dist/modules/index.d.ts +2 -0
  36. package/dist/modules/index.js +3 -1
  37. package/dist/plugins/window.d.ts +1 -0
  38. package/dist/server/index.d.ts +14 -0
  39. package/dist/server/index.js +907 -793
  40. package/dist/solution/BaseSales/index.d.ts +7 -0
  41. package/dist/solution/BaseSales/index.js +64 -42
  42. package/dist/solution/BookingByStep/index.d.ts +17 -2
  43. package/dist/solution/BookingByStep/index.js +294 -215
  44. package/dist/solution/BookingByStep/types.d.ts +2 -1
  45. package/dist/solution/BookingByStep/types.js +3 -1
  46. package/dist/solution/BookingByStep/utils/capacity.js +17 -1
  47. package/dist/solution/BookingByStep/utils/timeslots.d.ts +3 -1
  48. package/dist/solution/BookingByStep/utils/timeslots.js +19 -12
  49. package/dist/solution/BookingTicket/index.js +2 -2
  50. package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  51. package/dist/solution/BookingTicket/utils/scan/handleScan.js +10 -2
  52. package/dist/solution/ScanOrder/index.d.ts +26 -14
  53. package/dist/solution/ScanOrder/index.js +1142 -739
  54. package/dist/solution/ScanOrder/types.d.ts +21 -1
  55. package/dist/solution/ScanOrder/utils.d.ts +8 -0
  56. package/dist/solution/ScanOrder/utils.js +66 -25
  57. package/dist/solution/ShopDiscount/index.d.ts +1 -0
  58. package/dist/solution/ShopDiscount/index.js +125 -87
  59. package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
  60. package/dist/solution/UnifiedBookingSales/index.js +1891 -0
  61. package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
  62. package/dist/solution/UnifiedBookingSales/types.js +11 -0
  63. package/dist/solution/VenueBooking/index.d.ts +39 -11
  64. package/dist/solution/VenueBooking/index.js +1167 -841
  65. package/dist/solution/VenueBooking/types.d.ts +3 -0
  66. package/dist/solution/VenueBooking/utils/resource.js +1 -0
  67. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -4
  68. package/dist/solution/VenueBooking/utils/slotMerge.js +10 -5
  69. package/dist/solution/index.d.ts +1 -0
  70. package/dist/solution/index.js +2 -1
  71. package/dist/types/index.d.ts +1 -0
  72. package/lib/model/strategy/adapter/promotion/index.js +51 -0
  73. package/lib/modules/Discount/index.d.ts +1 -0
  74. package/lib/modules/Discount/index.js +9 -0
  75. package/lib/modules/Discount/types.d.ts +1 -0
  76. package/lib/modules/Holder/index.d.ts +48 -0
  77. package/lib/modules/Holder/index.js +402 -0
  78. package/lib/modules/Holder/types.d.ts +123 -0
  79. package/lib/modules/Holder/types.js +17 -0
  80. package/lib/modules/Holder/utils.d.ts +13 -0
  81. package/lib/modules/Holder/utils.js +71 -0
  82. package/lib/modules/OpenData/index.js +1 -1
  83. package/lib/modules/Order/index.d.ts +4 -2
  84. package/lib/modules/Order/index.js +26 -10
  85. package/lib/modules/Order/types.d.ts +9 -0
  86. package/lib/modules/Order/utils.d.ts +10 -0
  87. package/lib/modules/Order/utils.js +36 -5
  88. package/lib/modules/Product/types.d.ts +1 -0
  89. package/lib/modules/ProductList/index.js +40 -31
  90. package/lib/modules/Quotation/index.d.ts +1 -1
  91. package/lib/modules/Quotation/index.js +2 -2
  92. package/lib/modules/ResourcePlanner/index.d.ts +24 -0
  93. package/lib/modules/ResourcePlanner/index.js +148 -0
  94. package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
  95. package/lib/modules/ResourcePlanner/planner.js +933 -0
  96. package/lib/modules/ResourcePlanner/types.d.ts +227 -0
  97. package/lib/modules/ResourcePlanner/types.js +17 -0
  98. package/lib/modules/Rules/index.js +33 -16
  99. package/lib/modules/SalesSummary/index.js +6 -7
  100. package/lib/modules/ScanOrderLogger/index.d.ts +2 -0
  101. package/lib/modules/ScanOrderLogger/index.js +13 -1
  102. package/lib/modules/ScanOrderLogger/providers/feishu.js +15 -6
  103. package/lib/modules/ScanOrderLogger/types.d.ts +1 -0
  104. package/lib/modules/Schedule/index.d.ts +3 -1
  105. package/lib/modules/Schedule/index.js +10 -8
  106. package/lib/modules/Summary/utils.js +21 -1
  107. package/lib/modules/index.d.ts +2 -0
  108. package/lib/modules/index.js +5 -1
  109. package/lib/plugins/window.d.ts +1 -0
  110. package/lib/server/index.d.ts +14 -0
  111. package/lib/server/index.js +72 -15
  112. package/lib/solution/BaseSales/index.d.ts +7 -0
  113. package/lib/solution/BaseSales/index.js +24 -8
  114. package/lib/solution/BookingByStep/index.d.ts +17 -2
  115. package/lib/solution/BookingByStep/index.js +60 -18
  116. package/lib/solution/BookingByStep/types.d.ts +2 -1
  117. package/lib/solution/BookingByStep/types.js +5 -0
  118. package/lib/solution/BookingByStep/utils/capacity.js +20 -1
  119. package/lib/solution/BookingByStep/utils/timeslots.d.ts +3 -1
  120. package/lib/solution/BookingByStep/utils/timeslots.js +19 -11
  121. package/lib/solution/BookingTicket/index.js +10 -2
  122. package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  123. package/lib/solution/BookingTicket/utils/scan/handleScan.js +2 -2
  124. package/lib/solution/ScanOrder/index.d.ts +26 -14
  125. package/lib/solution/ScanOrder/index.js +449 -182
  126. package/lib/solution/ScanOrder/types.d.ts +21 -1
  127. package/lib/solution/ScanOrder/utils.d.ts +8 -0
  128. package/lib/solution/ScanOrder/utils.js +31 -0
  129. package/lib/solution/ShopDiscount/index.d.ts +1 -0
  130. package/lib/solution/ShopDiscount/index.js +14 -0
  131. package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
  132. package/lib/solution/UnifiedBookingSales/index.js +1084 -0
  133. package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
  134. package/lib/solution/UnifiedBookingSales/types.js +33 -0
  135. package/lib/solution/VenueBooking/index.d.ts +39 -11
  136. package/lib/solution/VenueBooking/index.js +322 -110
  137. package/lib/solution/VenueBooking/types.d.ts +3 -0
  138. package/lib/solution/VenueBooking/utils/resource.js +1 -0
  139. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -4
  140. package/lib/solution/VenueBooking/utils/slotMerge.js +6 -4
  141. package/lib/solution/index.d.ts +1 -0
  142. package/lib/solution/index.js +3 -1
  143. package/lib/types/index.d.ts +1 -0
  144. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { ProductList, CartModule, ProductData, AccountModule, AccountListModule, DateModule, GuestListModule, OrderModule, PaymentModule, ResourceListModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule } from '../../modules';
1
+ import { ProductList, CartModule, ProductData, AccountModule, AccountListModule, DateModule, GuestListModule, OrderModule, PaymentModule, ResourceListModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule, HolderModule } from '../../modules';
2
2
  export interface BookingByStepState {
3
3
  cart: CartModule;
4
4
  summary: SummaryModule;
@@ -16,6 +16,7 @@ export interface BookingByStepState {
16
16
  schedule: ScheduleModule;
17
17
  salesSummary?: SalesSummaryModule;
18
18
  scanOrderLogger?: ScanOrderLoggerModule;
19
+ holder: HolderModule;
19
20
  }
20
21
  export declare function createModule<T extends keyof BookingByStepState>(moduleName: T, solutionName: string, name?: string, version?: string): BookingByStepState[T];
21
22
  export declare enum BookingByStepHooks {
@@ -1,4 +1,4 @@
1
- import { ProductList, CartModule, AccountListModule, DateModule, OrderModule, PaymentModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule } from "../../modules";
1
+ import { ProductList, CartModule, AccountListModule, DateModule, OrderModule, PaymentModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule, HolderModule } from "../../modules";
2
2
  export function createModule(moduleName, solutionName, name, version) {
3
3
  switch (moduleName) {
4
4
  case 'cart':
@@ -23,6 +23,8 @@ export function createModule(moduleName, solutionName, name, version) {
23
23
  return new ScheduleModule("".concat(solutionName, "_").concat(name || moduleName), version);
24
24
  case 'scanOrderLogger':
25
25
  return new ScanOrderLoggerModule("".concat(solutionName, "_").concat(name || moduleName), version);
26
+ case 'holder':
27
+ return new HolderModule("".concat(solutionName, "_").concat(name || moduleName), version);
26
28
  default:
27
29
  throw new Error("Unknown module type: ".concat(moduleName));
28
30
  }
@@ -23,11 +23,27 @@ export var formatDefaultCapacitys = function formatDefaultCapacitys(_ref) {
23
23
  product_bundle = _ref.product_bundle;
24
24
  if ((capacity === null || capacity === void 0 ? void 0 : capacity.type) === 'package') {
25
25
  return (product_bundle || []).map(function (d) {
26
+ var _window;
26
27
  var id = d.bundle_product_id;
27
28
  var variantId = d.bundle_variant_id;
28
29
  var item = ((capacity === null || capacity === void 0 ? void 0 : capacity.package) || []).find(function (item) {
29
- return item.product_id === id || item.product_id === variantId;
30
+ return item.product_id == id || item.product_id == variantId;
30
31
  });
32
+ if (!item && (_window = window) !== null && _window !== void 0 && _window.sendWarningLog) {
33
+ window.sendWarningLog({
34
+ title: '未找到套餐 capacity 配置',
35
+ content: [{
36
+ key: 'product_id',
37
+ value: id
38
+ }, {
39
+ key: 'variant_id',
40
+ value: variantId
41
+ }, {
42
+ key: 'package',
43
+ value: JSON.stringify((capacity === null || capacity === void 0 ? void 0 : capacity.package) || [])
44
+ }]
45
+ });
46
+ }
31
47
  return {
32
48
  id: id,
33
49
  value: item ? d.num || 0 : 0,
@@ -19,10 +19,12 @@ export declare function calculateResourceAvailableTime({ resource, timeSlots, cu
19
19
  * @param countMap 已预约数量映射
20
20
  * @returns 最快可用的资源
21
21
  */
22
- export declare function findFastestAvailableResource({ resources, currentCapacity, countMap, }: {
22
+ export declare function findFastestAvailableResource({ resources, currentCapacity, countMap, targetDate, durationMinutes, }: {
23
23
  resources: ResourceItem[];
24
24
  currentCapacity?: number;
25
25
  countMap?: Record<number, number>;
26
+ targetDate?: string | Dayjs;
27
+ durationMinutes?: number;
26
28
  }): ResourceItem | null;
27
29
  /**
28
30
  * 给定一个时间列表,通过开始和结束时间过滤出符合条件的时间段
@@ -91,8 +91,14 @@ export function findFastestAvailableResource(_ref2) {
91
91
  _ref2$currentCapacity = _ref2.currentCapacity,
92
92
  currentCapacity = _ref2$currentCapacity === void 0 ? 1 : _ref2$currentCapacity,
93
93
  _ref2$countMap = _ref2.countMap,
94
- countMap = _ref2$countMap === void 0 ? {} : _ref2$countMap;
94
+ countMap = _ref2$countMap === void 0 ? {} : _ref2$countMap,
95
+ targetDate = _ref2.targetDate,
96
+ _ref2$durationMinutes = _ref2.durationMinutes,
97
+ durationMinutes = _ref2$durationMinutes === void 0 ? 30 : _ref2$durationMinutes;
95
98
  var currentTime = dayjs();
99
+ var resolvedDuration = durationMinutes > 0 ? durationMinutes : 30;
100
+ var targetDay = targetDate ? dayjs(targetDate) : currentTime;
101
+ var isTargetDayToday = targetDay.isSame(currentTime, 'day');
96
102
  var fastestTime = null;
97
103
  var fastestResources = [];
98
104
  console.log('[TimeslotUtils] 查找最快可用资源:', {
@@ -108,17 +114,18 @@ export function findFastestAvailableResource(_ref2) {
108
114
  try {
109
115
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
110
116
  var _resource = _step2.value;
111
- // 获取资源当天且还在工作时间内的时间段
112
- var todayTimes = _resource.times.filter(function (time) {
113
- var isToday = dayjs(time.start_at).isSame(currentTime, 'day');
114
- var isStillWorking = dayjs(time.end_at).isAfter(currentTime);
115
- return isToday && isStillWorking;
117
+ // 获取资源在目标日期且还在工作时间内的时间段
118
+ var targetDayTimes = _resource.times.filter(function (time) {
119
+ var isSameTargetDay = dayjs(time.start_at).isSame(targetDay, 'day');
120
+ if (!isSameTargetDay) return false;
121
+ if (!isTargetDayToday) return true;
122
+ return dayjs(time.end_at).isAfter(currentTime);
116
123
  });
117
- if (todayTimes.length === 0) {
124
+ if (targetDayTimes.length === 0) {
118
125
  console.log("[TimeslotUtils] \u8D44\u6E90 ".concat(_resource.id, "(").concat(_resource.main_field, ") \u4ECA\u65E5\u65E0\u53EF\u7528\u65F6\u95F4\u6BB5"));
119
126
  continue;
120
127
  }
121
- var _iterator4 = _createForOfIteratorHelper(todayTimes),
128
+ var _iterator4 = _createForOfIteratorHelper(targetDayTimes),
122
129
  _step4;
123
130
  try {
124
131
  var _loop = function _loop() {
@@ -128,7 +135,7 @@ export function findFastestAvailableResource(_ref2) {
128
135
  var workEndTime = dayjs(time.end_at);
129
136
 
130
137
  // 确定检查的起始时间(当前时间 vs 工作开始时间)
131
- var nextAvailableTime = currentTime.isBefore(workStartTime) ? workStartTime : currentTime;
138
+ var nextAvailableTime = isTargetDayToday && currentTime.isAfter(workStartTime) ? currentTime : workStartTime;
132
139
  console.log("[TimeslotUtils] \u68C0\u67E5\u8D44\u6E90 ".concat(_resource.id, "(").concat(_resource.main_field, "):"), {
133
140
  workTime: "".concat(workStartTime.format('HH:mm'), "-").concat(workEndTime.format('HH:mm')),
134
141
  checkStartTime: nextAvailableTime.format('HH:mm:ss'),
@@ -165,7 +172,7 @@ export function findFastestAvailableResource(_ref2) {
165
172
  // 检查资源类型和容量
166
173
  if (_resource.resourceType === 'single' || (_resource.capacity || 1) === 1) {
167
174
  // 单人预约资源:检查时间冲突
168
- if (finalAvailableTime.isBefore(_eventEnd) && _eventStart.isBefore(finalAvailableTime.add(30, 'minute'))) {
175
+ if (finalAvailableTime.isBefore(_eventEnd) && _eventStart.isBefore(finalAvailableTime.add(resolvedDuration, 'minute'))) {
169
176
  // 有冲突,使用事件结束时间
170
177
  finalAvailableTime = _eventEnd;
171
178
  console.log("[TimeslotUtils] \u53D1\u73B0\u65F6\u95F4\u51B2\u7A81\uFF0C\u8C03\u6574\u5230: ".concat(finalAvailableTime.format('HH:mm:ss')));
@@ -177,7 +184,7 @@ export function findFastestAvailableResource(_ref2) {
177
184
  var eventUsedCapacity = _event.pax || 1;
178
185
 
179
186
  // 如果在事件时间范围内,检查容量是否足够
180
- if (finalAvailableTime.isBefore(_eventEnd) && _eventStart.isBefore(finalAvailableTime.add(30, 'minute'))) {
187
+ if (finalAvailableTime.isBefore(_eventEnd) && _eventStart.isBefore(finalAvailableTime.add(resolvedDuration, 'minute'))) {
181
188
  var totalRequiredCapacity = currentUsedCapacity + currentCapacity + eventUsedCapacity;
182
189
  if (totalRequiredCapacity > totalCapacity) {
183
190
  // 容量不足,使用事件结束时间
@@ -194,7 +201,7 @@ export function findFastestAvailableResource(_ref2) {
194
201
  } finally {
195
202
  _iterator5.f();
196
203
  }
197
- if (finalAvailableTime.isAfter(workEndTime)) {
204
+ if (finalAvailableTime.add(resolvedDuration, 'minute').isAfter(workEndTime)) {
198
205
  console.log("[TimeslotUtils] \u8D44\u6E90 ".concat(_resource.id, " \u53EF\u7528\u65F6\u95F4\u8D85\u51FA\u5DE5\u4F5C\u65F6\u95F4\uFF0C\u8DF3\u8FC7"));
199
206
  return 0; // continue
200
207
  }
@@ -1901,7 +1901,7 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
1901
1901
  var localSearch = function localSearch(v) {
1902
1902
  return _this5.store.products.findProductsByCodeOrBarcode(v);
1903
1903
  };
1904
- var scanCallback = handleGlobalScan(this.request, localSearch);
1904
+ var scanCallback = handleGlobalScan(this.request, localSearch, this.getSubmitOrderSalesChannel());
1905
1905
  var safeCallback = function safeCallback(d) {
1906
1906
  try {
1907
1907
  callback(d);
@@ -2395,7 +2395,7 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
2395
2395
  localSearch = function localSearch(v) {
2396
2396
  return _this6.store.products.findProductsByCodeOrBarcode(v);
2397
2397
  };
2398
- scanCallback = handleGlobalScan(this.request, localSearch);
2398
+ scanCallback = handleGlobalScan(this.request, localSearch, this.getSubmitOrderSalesChannel());
2399
2399
  _context28.next = 9;
2400
2400
  return scanCallback({
2401
2401
  type: 'nativeScanner',
@@ -2,9 +2,11 @@ import { RequestPlugin } from '../../../../plugins';
2
2
  /**
3
3
  * 处理全局扫码
4
4
  * @param request 请求插件
5
+ * @param localSearch 本地商品搜索
6
+ * @param channel 当前销售渠道
5
7
  * @returns 处理结果
6
8
  */
7
- export declare const handleGlobalScan: (request: RequestPlugin, localSearch: (v: string) => any[]) => (scanResult: {
9
+ export declare const handleGlobalScan: (request: RequestPlugin, localSearch: (v: string) => any[], channel?: string) => (scanResult: {
8
10
  type: string;
9
11
  value: string;
10
12
  }) => Promise<any>;
@@ -1,4 +1,10 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
2
8
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
3
9
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
4
10
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -150,16 +156,18 @@ var handleScanFn = function handleScanFn(getRequestList, localSearch) {
150
156
  /**
151
157
  * 处理全局扫码
152
158
  * @param request 请求插件
159
+ * @param localSearch 本地商品搜索
160
+ * @param channel 当前销售渠道
153
161
  * @returns 处理结果
154
162
  */
155
- export var handleGlobalScan = function handleGlobalScan(request, localSearch) {
163
+ export var handleGlobalScan = function handleGlobalScan(request, localSearch, channel) {
156
164
  var getRequestList = function getRequestList(value) {
157
165
  var requestList = [];
158
166
  // 如果value是已WL开头的,则认为是钱包识别码
159
167
  if (value.startsWith('WL')) {
160
168
  requestList = [searchWallet(request, value)];
161
169
  } else {
162
- requestList = [searchOrder(request, value), searchWalletPass(request, value), searchWallet(request, value), searchProduct(request, value)];
170
+ requestList = [].concat(_toConsumableArray(channel === 'kiosk' ? [] : [searchOrder(request, value)]), [searchWalletPass(request, value), searchWallet(request, value), searchProduct(request, value)]);
163
171
  }
164
172
  return requestList;
165
173
  };
@@ -1,8 +1,9 @@
1
1
  import { Module, ModuleOptions, PisellCore } from '../../types';
2
- import { BaseModule } from '../../modules/BaseModule';
3
- import { ScanOrderAddLogParams, ScanOrderAvailabilityInfo, ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderScanCodeResult } from './types';
2
+ import { BaseSalesImpl } from '../BaseSales';
3
+ import { ScanOrderAddLogParams, ScanOrderAvailabilityInfo, ScanOrderAllowAddItemsInfo, ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderReservationResourceSelectInfo, ScanOrderState, ScanOrderScanCodeResult, ScanOrderSyncAdditionalOrderResult } from './types';
4
4
  import type { UpdateOrderProductParams } from '../../modules/Order/types';
5
5
  import type { Discount } from '../../modules/Discount/types';
6
+ import { RequestPlugin, WindowPlugin } from '../../plugins';
6
7
  import { type CartItemSummary, type PaxInfo, type QuantityCheckResult, type QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
7
8
  import type { StrategyConfig } from '../../model/strategy/type';
8
9
  import type { ProductData } from '../../modules/Product/types';
@@ -15,16 +16,16 @@ interface ScanOrderItemRuleRuntimeConfig {
15
16
  submissionIndex?: number;
16
17
  custom?: Record<string, any>;
17
18
  }
18
- export declare class ScanOrderImpl extends BaseModule implements Module {
19
+ export declare class ScanOrderImpl extends BaseSalesImpl implements Module {
19
20
  protected defaultName: string;
20
21
  protected defaultVersion: string;
21
22
  isSolution: boolean;
22
- private initializeOptions;
23
- private store;
24
- private otherParams;
25
- private cacheId;
26
- private window;
27
- private request;
23
+ protected initializeOptions: ModuleOptions;
24
+ protected store: ScanOrderState;
25
+ protected otherParams: Record<string, any>;
26
+ protected cacheId: string | undefined;
27
+ window: WindowPlugin;
28
+ request: RequestPlugin;
28
29
  private itemRuleEvaluator;
29
30
  private itemRuleConfigs;
30
31
  private itemRuleConfigsPromise;
@@ -53,9 +54,10 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
53
54
  private registerCustomerLoginListeners;
54
55
  private refreshOrderMarketingAfterLogin;
55
56
  constructor(name?: string, version?: string);
57
+ protected getRegisteredModuleNames(): readonly string[];
58
+ protected createSubModule(moduleName: string): Module | null;
56
59
  /** 与 `otherParams.cacheId` 一致,供宿主在 URL 变化时判断是否需要重新注册模块 */
57
60
  getCacheId(): string | undefined;
58
- private destroyRegisteredChildModules;
59
61
  initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
60
62
  destroy(): Promise<void>;
61
63
  retryInit(): Promise<void>;
@@ -71,12 +73,14 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
71
73
  };
72
74
  getTempOrder(): import("../../modules/Order/types").OrderTempOrder | null;
73
75
  updateTempOrderNote(note: string): string;
76
+ updateTempOrderNote(note: string, sync: true): Promise<string>;
77
+ updateTempOrderNote(note: string, sync: boolean): string | Promise<string>;
74
78
  setPickupReferenceMode(mode: 'counter_pickup' | 'table_service'): {
75
- service_type: 'dine_in';
79
+ service_type: 'dine_in' | '';
76
80
  pickup_reference_mode: 'counter_pickup' | 'table_service';
77
81
  };
78
82
  setPickupRef(buzzer: string): string;
79
- private ensureTempOrder;
83
+ private ensureScanOrderTempOrder;
80
84
  addNewOrder(): Promise<import("../../modules/Order/types").OrderTempOrder>;
81
85
  restoreOrder(): Promise<import("../../modules/Order/types").OrderTempOrder>;
82
86
  getOrderProducts(): import("../../modules/Order/types").OrderProduct[];
@@ -92,7 +96,10 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
92
96
  }): Promise<void>;
93
97
  private findReservationRuleResource;
94
98
  private buildScanOrderResourceMetadata;
99
+ private prepareRetailAvailability;
95
100
  private buildSubmitPayloadEnhancer;
101
+ private isScanOrderMoreMode;
102
+ private submitScanOrderMore;
96
103
  submitScanOrder<T = any>(): Promise<T>;
97
104
  addProductToOrder(product: Partial<ScanOrderOrderProduct> & ScanOrderOrderProductIdentity): Promise<import("../../modules/Order/types").OrderProduct[]>;
98
105
  updateOrderProduct(params: UpdateOrderProductParams): Promise<import("../../modules/Order/types").OrderProduct[]>;
@@ -117,8 +124,10 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
117
124
  setItemRuleRuntimeConfig(config?: ScanOrderItemRuleRuntimeConfig): Promise<void>;
118
125
  private normalizeResourceState;
119
126
  private resolveResourceSelectType;
120
- private fetchResourceOccupyDetailByResourceId;
121
- checkResourceAvailable(resourceId: string, hasOrderId: boolean): Promise<ScanOrderAvailabilityInfo>;
127
+ private fetchResourceOccupyDetailsByResourceId;
128
+ private resolveAdditionalOrderFromOccupyDetail;
129
+ checkResourceAvailable(resourceId?: string | null, hasOrderId?: boolean): Promise<ScanOrderAvailabilityInfo>;
130
+ restorePreviousOrderData(): Promise<void>;
122
131
  getAdditionalOrderInfo(): Promise<{
123
132
  orderId: string;
124
133
  orderStatus: 'pending' | 'processing' | 'completed' | 'cancelled';
@@ -141,6 +150,9 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
141
150
  clearUIState(): void;
142
151
  setEntryPaxNumber(number: number): Promise<void>;
143
152
  getEntryPaxNumber(): number | null;
153
+ syncAdditionalOrderFromResource(resourceId?: string | null): Promise<ScanOrderSyncAdditionalOrderResult>;
154
+ getReservationResourceSelectType(): ScanOrderReservationResourceSelectInfo;
155
+ checkAllowAddItems(): ScanOrderAllowAddItemsInfo;
144
156
  getFulfillmentModes(): {
145
157
  enablePickup: boolean;
146
158
  enableTableService: boolean;