@pisell/pisellos 2.1.119 → 2.1.120

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 (231) hide show
  1. package/dist/apis/picoding.d.ts +0 -0
  2. package/dist/apis/picoding.js +1 -0
  3. package/dist/model/index.d.ts +1 -0
  4. package/dist/model/index.js +1 -0
  5. package/dist/model/strategy/adapter/index.d.ts +7 -0
  6. package/dist/model/strategy/adapter/index.js +7 -0
  7. package/dist/model/strategy/adapter/itemRule/adapter.d.ts +59 -0
  8. package/dist/model/strategy/adapter/itemRule/adapter.js +439 -0
  9. package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +43 -0
  10. package/dist/model/strategy/adapter/itemRule/evaluator.js +169 -0
  11. package/dist/model/strategy/adapter/itemRule/examples.d.ts +64 -0
  12. package/dist/model/strategy/adapter/itemRule/examples.js +315 -0
  13. package/dist/model/strategy/adapter/itemRule/index.d.ts +5 -0
  14. package/dist/model/strategy/adapter/itemRule/index.js +5 -0
  15. package/dist/model/strategy/adapter/itemRule/type.d.ts +206 -0
  16. package/dist/model/strategy/adapter/itemRule/type.js +101 -0
  17. package/dist/model/strategy/adapter/promotion/adapter.d.ts +66 -0
  18. package/dist/model/strategy/adapter/promotion/adapter.js +271 -0
  19. package/dist/model/strategy/adapter/promotion/evaluator.d.ts +213 -0
  20. package/dist/model/strategy/adapter/promotion/evaluator.js +1206 -0
  21. package/dist/model/strategy/adapter/promotion/examples.d.ts +138 -0
  22. package/dist/model/strategy/adapter/promotion/examples.js +166 -0
  23. package/dist/model/strategy/adapter/promotion/index.d.ts +4 -0
  24. package/dist/model/strategy/adapter/promotion/index.js +0 -0
  25. package/dist/model/strategy/adapter/promotion/type.d.ts +447 -0
  26. package/dist/model/strategy/adapter/promotion/type.js +209 -0
  27. package/dist/model/strategy/adapter/type.d.ts +28 -0
  28. package/dist/model/strategy/adapter/type.js +1 -0
  29. package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +84 -0
  30. package/dist/model/strategy/adapter/walletPass/evaluator.js +502 -0
  31. package/dist/model/strategy/adapter/walletPass/example.d.ts +4 -0
  32. package/dist/model/strategy/adapter/walletPass/example.js +258 -0
  33. package/dist/model/strategy/adapter/walletPass/index.d.ts +32 -0
  34. package/dist/model/strategy/adapter/walletPass/index.js +182 -0
  35. package/dist/model/strategy/adapter/walletPass/locales.d.ts +1 -0
  36. package/dist/model/strategy/adapter/walletPass/locales.js +26 -0
  37. package/dist/model/strategy/adapter/walletPass/type.d.ts +187 -0
  38. package/dist/model/strategy/adapter/walletPass/type.js +1 -0
  39. package/dist/model/strategy/adapter/walletPass/utils.d.ts +50 -0
  40. package/dist/model/strategy/adapter/walletPass/utils.js +1104 -0
  41. package/dist/model/strategy/engine.d.ts +106 -0
  42. package/dist/model/strategy/engine.js +611 -0
  43. package/dist/model/strategy/index.d.ts +3 -0
  44. package/dist/model/strategy/index.js +8 -0
  45. package/dist/model/strategy/strategy-example.d.ts +5 -0
  46. package/dist/model/strategy/strategy-example.js +331 -0
  47. package/dist/model/strategy/type.d.ts +228 -0
  48. package/dist/model/strategy/type.js +94 -0
  49. package/dist/modules/Cart/utils/cartProduct.js +1 -0
  50. package/dist/modules/OpenData/index.d.ts +23 -0
  51. package/dist/modules/OpenData/index.js +167 -0
  52. package/dist/modules/OpenData/types.d.ts +73 -0
  53. package/dist/modules/OpenData/types.js +1 -0
  54. package/dist/modules/OpenData/utils.d.ts +2 -0
  55. package/dist/modules/OpenData/utils.js +75 -0
  56. package/dist/modules/Order/index.d.ts +58 -1
  57. package/dist/modules/Order/index.js +780 -29
  58. package/dist/modules/Order/types.d.ts +144 -12
  59. package/dist/modules/Order/utils.d.ts +25 -0
  60. package/dist/modules/Order/utils.js +225 -1
  61. package/dist/modules/Product/index.d.ts +1 -1
  62. package/dist/modules/Product/utils.js +2 -2
  63. package/dist/modules/ProductList/index.d.ts +1 -1
  64. package/dist/modules/ProductList/index.js +2 -1
  65. package/dist/modules/Quotation/index.d.ts +48 -0
  66. package/dist/modules/Quotation/index.js +245 -0
  67. package/dist/modules/Quotation/types.d.ts +42 -0
  68. package/dist/modules/Quotation/types.js +1 -0
  69. package/dist/modules/Rules/index.js +4 -1
  70. package/dist/modules/SalesSummary/index.d.ts +63 -0
  71. package/dist/modules/SalesSummary/index.js +174 -0
  72. package/dist/modules/SalesSummary/types.d.ts +59 -0
  73. package/dist/modules/SalesSummary/types.js +1 -0
  74. package/dist/modules/SalesSummary/utils.d.ts +30 -0
  75. package/dist/modules/SalesSummary/utils.js +513 -0
  76. package/dist/modules/ScanOrderLogger/index.d.ts +21 -0
  77. package/dist/modules/ScanOrderLogger/index.js +161 -0
  78. package/dist/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
  79. package/dist/modules/ScanOrderLogger/providers/feishu.js +95 -0
  80. package/dist/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
  81. package/dist/modules/ScanOrderLogger/providers/grafana.js +50 -0
  82. package/dist/modules/ScanOrderLogger/types.d.ts +46 -0
  83. package/dist/modules/ScanOrderLogger/types.js +1 -0
  84. package/dist/modules/Schedule/getDateIsInSchedule.js +11 -18
  85. package/dist/modules/Summary/utils.d.ts +3 -3
  86. package/dist/modules/Summary/utils.js +4 -4
  87. package/dist/modules/index.d.ts +4 -0
  88. package/dist/modules/index.js +5 -1
  89. package/dist/solution/BookingByStep/index.d.ts +1 -1
  90. package/dist/solution/BookingByStep/types.d.ts +3 -1
  91. package/dist/solution/BookingByStep/types.js +5 -1
  92. package/dist/solution/BookingTicket/index.d.ts +1 -1
  93. package/dist/solution/ScanOrder/index.d.ts +90 -0
  94. package/dist/solution/ScanOrder/index.js +1853 -0
  95. package/dist/solution/ScanOrder/types.d.ts +210 -0
  96. package/dist/solution/ScanOrder/types.js +16 -0
  97. package/dist/solution/ScanOrder/utils.d.ts +93 -0
  98. package/dist/solution/ScanOrder/utils.js +397 -0
  99. package/dist/solution/VenueBooking/index.d.ts +158 -0
  100. package/dist/solution/VenueBooking/index.js +2873 -0
  101. package/dist/solution/VenueBooking/sales-section-4-annotated.json +343 -0
  102. package/dist/solution/VenueBooking/types.d.ts +130 -0
  103. package/dist/solution/VenueBooking/types.js +21 -0
  104. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +10 -0
  105. package/dist/solution/VenueBooking/utils/dateSummary.js +102 -0
  106. package/dist/solution/VenueBooking/utils/resource.d.ts +4 -0
  107. package/dist/solution/VenueBooking/utils/resource.js +94 -0
  108. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +29 -0
  109. package/dist/solution/VenueBooking/utils/slotMerge.js +204 -0
  110. package/dist/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
  111. package/dist/solution/VenueBooking/utils/timeSlot.js +256 -0
  112. package/dist/solution/VenueBooking/utils.d.ts +1 -0
  113. package/dist/solution/VenueBooking/utils.js +1 -0
  114. package/dist/solution/index.d.ts +2 -0
  115. package/dist/solution/index.js +3 -1
  116. package/lib/apis/picoding.d.ts +0 -0
  117. package/lib/apis/picoding.js +0 -0
  118. package/lib/model/index.d.ts +1 -0
  119. package/lib/model/index.js +23 -0
  120. package/lib/model/strategy/adapter/index.d.ts +7 -0
  121. package/lib/model/strategy/adapter/index.js +57 -0
  122. package/lib/model/strategy/adapter/itemRule/adapter.d.ts +59 -0
  123. package/lib/model/strategy/adapter/itemRule/adapter.js +338 -0
  124. package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +43 -0
  125. package/lib/model/strategy/adapter/itemRule/evaluator.js +124 -0
  126. package/lib/model/strategy/adapter/itemRule/examples.d.ts +64 -0
  127. package/lib/model/strategy/adapter/itemRule/examples.js +269 -0
  128. package/lib/model/strategy/adapter/itemRule/index.d.ts +5 -0
  129. package/lib/model/strategy/adapter/itemRule/index.js +58 -0
  130. package/lib/model/strategy/adapter/itemRule/type.d.ts +206 -0
  131. package/lib/model/strategy/adapter/itemRule/type.js +46 -0
  132. package/lib/model/strategy/adapter/promotion/adapter.d.ts +66 -0
  133. package/lib/model/strategy/adapter/promotion/adapter.js +217 -0
  134. package/lib/model/strategy/adapter/promotion/evaluator.d.ts +213 -0
  135. package/lib/model/strategy/adapter/promotion/evaluator.js +844 -0
  136. package/lib/model/strategy/adapter/promotion/examples.d.ts +138 -0
  137. package/lib/model/strategy/adapter/promotion/examples.js +192 -0
  138. package/lib/model/strategy/adapter/promotion/index.d.ts +4 -0
  139. package/lib/model/strategy/adapter/promotion/index.js +0 -0
  140. package/lib/model/strategy/adapter/promotion/type.d.ts +447 -0
  141. package/lib/model/strategy/adapter/promotion/type.js +51 -0
  142. package/lib/model/strategy/adapter/type.d.ts +28 -0
  143. package/lib/model/strategy/adapter/type.js +17 -0
  144. package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +84 -0
  145. package/lib/model/strategy/adapter/walletPass/evaluator.js +424 -0
  146. package/lib/model/strategy/adapter/walletPass/example.d.ts +4 -0
  147. package/lib/model/strategy/adapter/walletPass/example.js +207 -0
  148. package/lib/model/strategy/adapter/walletPass/index.d.ts +32 -0
  149. package/lib/model/strategy/adapter/walletPass/index.js +142 -0
  150. package/lib/model/strategy/adapter/walletPass/locales.d.ts +1 -0
  151. package/lib/model/strategy/adapter/walletPass/locales.js +54 -0
  152. package/lib/model/strategy/adapter/walletPass/type.d.ts +187 -0
  153. package/lib/model/strategy/adapter/walletPass/type.js +17 -0
  154. package/lib/model/strategy/adapter/walletPass/utils.d.ts +50 -0
  155. package/lib/model/strategy/adapter/walletPass/utils.js +791 -0
  156. package/lib/model/strategy/engine.d.ts +106 -0
  157. package/lib/model/strategy/engine.js +450 -0
  158. package/lib/model/strategy/index.d.ts +3 -0
  159. package/lib/model/strategy/index.js +38 -0
  160. package/lib/model/strategy/strategy-example.d.ts +5 -0
  161. package/lib/model/strategy/strategy-example.js +318 -0
  162. package/lib/model/strategy/type.d.ts +228 -0
  163. package/lib/model/strategy/type.js +44 -0
  164. package/lib/modules/Cart/utils/cartProduct.js +1 -0
  165. package/lib/modules/OpenData/index.d.ts +23 -0
  166. package/lib/modules/OpenData/index.js +116 -0
  167. package/lib/modules/OpenData/types.d.ts +73 -0
  168. package/lib/modules/OpenData/types.js +17 -0
  169. package/lib/modules/OpenData/utils.d.ts +2 -0
  170. package/lib/modules/OpenData/utils.js +111 -0
  171. package/lib/modules/Order/index.d.ts +58 -1
  172. package/lib/modules/Order/index.js +423 -1
  173. package/lib/modules/Order/types.d.ts +144 -12
  174. package/lib/modules/Order/utils.d.ts +25 -0
  175. package/lib/modules/Order/utils.js +229 -0
  176. package/lib/modules/Product/index.d.ts +1 -1
  177. package/lib/modules/Product/utils.js +2 -2
  178. package/lib/modules/ProductList/index.d.ts +1 -1
  179. package/lib/modules/ProductList/index.js +2 -1
  180. package/lib/modules/Quotation/index.d.ts +48 -0
  181. package/lib/modules/Quotation/index.js +149 -0
  182. package/lib/modules/Quotation/types.d.ts +42 -0
  183. package/lib/modules/Quotation/types.js +17 -0
  184. package/lib/modules/Rules/index.js +4 -1
  185. package/lib/modules/SalesSummary/index.d.ts +63 -0
  186. package/lib/modules/SalesSummary/index.js +105 -0
  187. package/lib/modules/SalesSummary/types.d.ts +59 -0
  188. package/lib/modules/SalesSummary/types.js +17 -0
  189. package/lib/modules/SalesSummary/utils.d.ts +30 -0
  190. package/lib/modules/SalesSummary/utils.js +452 -0
  191. package/lib/modules/ScanOrderLogger/index.d.ts +21 -0
  192. package/lib/modules/ScanOrderLogger/index.js +135 -0
  193. package/lib/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
  194. package/lib/modules/ScanOrderLogger/providers/feishu.js +82 -0
  195. package/lib/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
  196. package/lib/modules/ScanOrderLogger/providers/grafana.js +52 -0
  197. package/lib/modules/ScanOrderLogger/types.d.ts +46 -0
  198. package/lib/modules/ScanOrderLogger/types.js +17 -0
  199. package/lib/modules/Schedule/getDateIsInSchedule.js +9 -11
  200. package/lib/modules/Summary/utils.d.ts +3 -3
  201. package/lib/modules/Summary/utils.js +4 -4
  202. package/lib/modules/index.d.ts +4 -0
  203. package/lib/modules/index.js +9 -1
  204. package/lib/solution/BookingByStep/index.d.ts +1 -1
  205. package/lib/solution/BookingByStep/types.d.ts +3 -1
  206. package/lib/solution/BookingByStep/types.js +10 -0
  207. package/lib/solution/BookingTicket/index.d.ts +1 -1
  208. package/lib/solution/ScanOrder/index.d.ts +90 -0
  209. package/lib/solution/ScanOrder/index.js +1071 -0
  210. package/lib/solution/ScanOrder/types.d.ts +210 -0
  211. package/lib/solution/ScanOrder/types.js +36 -0
  212. package/lib/solution/ScanOrder/utils.d.ts +93 -0
  213. package/lib/solution/ScanOrder/utils.js +359 -0
  214. package/lib/solution/VenueBooking/index.d.ts +158 -0
  215. package/lib/solution/VenueBooking/index.js +1545 -0
  216. package/lib/solution/VenueBooking/sales-section-4-annotated.json +343 -0
  217. package/lib/solution/VenueBooking/types.d.ts +130 -0
  218. package/lib/solution/VenueBooking/types.js +44 -0
  219. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +10 -0
  220. package/lib/solution/VenueBooking/utils/dateSummary.js +101 -0
  221. package/lib/solution/VenueBooking/utils/resource.d.ts +4 -0
  222. package/lib/solution/VenueBooking/utils/resource.js +80 -0
  223. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +29 -0
  224. package/lib/solution/VenueBooking/utils/slotMerge.js +209 -0
  225. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
  226. package/lib/solution/VenueBooking/utils/timeSlot.js +200 -0
  227. package/lib/solution/VenueBooking/utils.d.ts +1 -0
  228. package/lib/solution/VenueBooking/utils.js +69 -0
  229. package/lib/solution/index.d.ts +2 -0
  230. package/lib/solution/index.js +5 -1
  231. package/package.json +1 -1
@@ -1,4 +1,5 @@
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 _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
2
3
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3
4
  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
5
  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); }
@@ -24,14 +25,17 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
24
25
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
25
26
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
27
  import { BaseModule } from "../BaseModule";
27
- import { generateDuration, getAllDiscountList, mergeRelationForms } from "./utils";
28
+ import { generateDuration, getAllDiscountList, mergeRelationForms, buildSubmitPayload, createDefaultTempOrder, createEmptySummary, formatDateTime, formatV1Product, isTempOrder } from "./utils";
28
29
  import { isNormalProduct } from "../Product/utils";
29
30
  import dayjs from 'dayjs';
31
+ import { getProductIdentityIndex, getSafeProductNum, isIdentityMatch, normalizeOrderProduct } from "../../solution/ScanOrder/utils";
32
+ import { DiscountModule } from "../Discount";
33
+ import { RulesModule } from "../Rules";
34
+ import { UnavailableReason } from "../Rules/types";
35
+ import Decimal from 'decimal.js';
30
36
  export var OrderModule = /*#__PURE__*/function (_BaseModule) {
31
37
  _inherits(OrderModule, _BaseModule);
32
38
  var _super = _createSuper(OrderModule);
33
- // LoggerManager 实例
34
-
35
39
  function OrderModule(name, version) {
36
40
  var _this;
37
41
  _classCallCheck(this, OrderModule);
@@ -41,30 +45,46 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
41
45
  _defineProperty(_assertThisInitialized(_this), "store", void 0);
42
46
  _defineProperty(_assertThisInitialized(_this), "request", void 0);
43
47
  _defineProperty(_assertThisInitialized(_this), "logger", void 0);
48
+ // LoggerManager 实例
49
+ _defineProperty(_assertThisInitialized(_this), "window", void 0);
50
+ _defineProperty(_assertThisInitialized(_this), "cacheId", void 0);
51
+ _defineProperty(_assertThisInitialized(_this), "salesSummaryModuleName", void 0);
52
+ _defineProperty(_assertThisInitialized(_this), "rulesHooksOverride", void 0);
44
53
  return _this;
45
54
  }
46
55
  _createClass(OrderModule, [{
47
56
  key: "initialize",
48
57
  value: function () {
49
58
  var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(core, options) {
50
- var appPlugin, app;
59
+ var _otherParams$rules;
60
+ var otherParams, appPlugin, app;
51
61
  return _regeneratorRuntime().wrap(function _callee$(_context) {
52
62
  while (1) switch (_context.prev = _context.next) {
53
63
  case 0:
54
64
  this.core = core;
55
65
  this.store = options.store;
66
+ if (!this.store.tempOrder) {
67
+ this.store.tempOrder = null;
68
+ }
56
69
  this.request = this.core.getPlugin('request');
70
+ this.window = this.core.getPlugin('window');
71
+ otherParams = options.otherParams || {};
72
+ this.cacheId = otherParams.cacheId;
73
+ this.salesSummaryModuleName = otherParams.salesSummaryModuleName;
74
+ this.rulesHooksOverride = (_otherParams$rules = otherParams.rules) === null || _otherParams$rules === void 0 ? void 0 : _otherParams$rules.hooks;
75
+ this.registerDiscountModules(options);
76
+ this.restoreTempOrderFromStorage();
57
77
  appPlugin = this.core.getPlugin('app');
58
78
  if (appPlugin) {
59
- _context.next = 6;
79
+ _context.next = 14;
60
80
  break;
61
81
  }
62
82
  throw new Error('Order 模块需要 app 插件支持');
63
- case 6:
83
+ case 14:
64
84
  app = appPlugin.getApp();
65
85
  this.logger = app.logger;
66
86
  this.logInfo('OrderModule initialized successfully');
67
- case 9:
87
+ case 17:
68
88
  case "end":
69
89
  return _context.stop();
70
90
  }
@@ -119,6 +139,638 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
119
139
  });
120
140
  }
121
141
  }
142
+
143
+ // ─── Discount: 子模块注册 ───
144
+ }, {
145
+ key: "registerDiscountModules",
146
+ value: function registerDiscountModules(options) {
147
+ var discount = new DiscountModule("".concat(this.name, "_discount"));
148
+ this.core.registerModule(discount, {
149
+ otherParams: {
150
+ fatherModule: this.name
151
+ }
152
+ });
153
+ this.store.discount = discount;
154
+ var rules = new RulesModule("".concat(this.name, "_rules"));
155
+ this.core.registerModule(rules, {
156
+ hooks: this.rulesHooksOverride || this.createDefaultRulesHooks()
157
+ });
158
+ this.store.rules = rules;
159
+ }
160
+ }, {
161
+ key: "createDefaultRulesHooks",
162
+ value: function createDefaultRulesHooks() {
163
+ return {
164
+ getProduct: function getProduct(product) {
165
+ var _product$_origin, _product$_origin2, _product$_origin3, _product$_origin4;
166
+ return {
167
+ id: product.product_id,
168
+ _id: product.identity_key ? "".concat(product.product_id, "_").concat(product.product_variant_id, "_").concat(product.identity_key) : "".concat(product.product_id, "_").concat(product.product_variant_id),
169
+ price: product.selling_price,
170
+ total: new Decimal(product.payment_price || product.selling_price || 0).times(product.num || 1).toNumber(),
171
+ origin_total: new Decimal(product.original_price || product.selling_price || 0).times(product.num || 1).toNumber(),
172
+ original_price: product.original_price,
173
+ quantity: product.num || 1,
174
+ num: product.num || 1,
175
+ discount_list: product.discount_list || [],
176
+ bundle: product.product_bundle || [],
177
+ booking_id: ((_product$_origin = product._origin) === null || _product$_origin === void 0 ? void 0 : _product$_origin.booking_id) || null,
178
+ isClient: false,
179
+ isManualDiscount: ((_product$_origin2 = product._origin) === null || _product$_origin2 === void 0 ? void 0 : _product$_origin2.isManualDiscount) || false,
180
+ holder_id: (_product$_origin3 = product._origin) === null || _product$_origin3 === void 0 ? void 0 : _product$_origin3.holder_id,
181
+ startDate: (_product$_origin4 = product._origin) === null || _product$_origin4 === void 0 ? void 0 : _product$_origin4.startDate
182
+ };
183
+ },
184
+ setProduct: function setProduct(product, values) {
185
+ var _values$discount_list, _values$quantity, _values$bundle;
186
+ return _objectSpread(_objectSpread({}, product), {}, {
187
+ selling_price: values.price !== undefined ? String(values.price) : product.selling_price,
188
+ payment_price: values.total !== undefined ? String(values.total) : product.payment_price,
189
+ original_price: values.original_price !== undefined ? String(values.original_price) : product.original_price,
190
+ discount_list: (_values$discount_list = values.discount_list) !== null && _values$discount_list !== void 0 ? _values$discount_list : product.discount_list,
191
+ num: (_values$quantity = values.quantity) !== null && _values$quantity !== void 0 ? _values$quantity : product.num,
192
+ product_bundle: (_values$bundle = values.bundle) !== null && _values$bundle !== void 0 ? _values$bundle : product.product_bundle,
193
+ metadata: _objectSpread(_objectSpread({}, product.metadata || {}), values.main_product_selling_price !== undefined ? {
194
+ main_product_selling_price: String(values.main_product_selling_price)
195
+ } : {})
196
+ });
197
+ }
198
+ };
199
+ }
200
+
201
+ // ─── Discount: 公共 API ───
202
+ }, {
203
+ key: "loadDiscountConfig",
204
+ value: function () {
205
+ var _loadDiscountConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(params) {
206
+ var _this$store$discount, _this$store$tempOrder;
207
+ var discountList, _this$store$discount2;
208
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
209
+ while (1) switch (_context2.prev = _context2.next) {
210
+ case 0:
211
+ _context2.next = 2;
212
+ return (_this$store$discount = this.store.discount) === null || _this$store$discount === void 0 ? void 0 : _this$store$discount.loadPrepareConfig({
213
+ customer_id: params.customerId,
214
+ action: params.action || 'create',
215
+ with_good_pass: 1,
216
+ with_discount_card: 1,
217
+ with_wallet_pass_holder: 1,
218
+ request_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
219
+ });
220
+ case 2:
221
+ discountList = _context2.sent;
222
+ if (discountList) {
223
+ (_this$store$discount2 = this.store.discount) === null || _this$store$discount2 === void 0 || _this$store$discount2.setDiscountList(discountList);
224
+ }
225
+ if ((_this$store$tempOrder = this.store.tempOrder) !== null && _this$store$tempOrder !== void 0 && (_this$store$tempOrder = _this$store$tempOrder.products) !== null && _this$store$tempOrder !== void 0 && _this$store$tempOrder.length) {
226
+ this.applyDiscount();
227
+ }
228
+ case 5:
229
+ case "end":
230
+ return _context2.stop();
231
+ }
232
+ }, _callee2, this);
233
+ }));
234
+ function loadDiscountConfig(_x3) {
235
+ return _loadDiscountConfig.apply(this, arguments);
236
+ }
237
+ return loadDiscountConfig;
238
+ }()
239
+ }, {
240
+ key: "getDiscountList",
241
+ value: function getDiscountList() {
242
+ var _this$store$discount3;
243
+ return ((_this$store$discount3 = this.store.discount) === null || _this$store$discount3 === void 0 ? void 0 : _this$store$discount3.getDiscountList()) || [];
244
+ }
245
+ }, {
246
+ key: "scanCode",
247
+ value: function () {
248
+ var _scanCode = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(code, customerId) {
249
+ var _this$store$discount4, _tempOrder$holder, _tempOrder$holder2;
250
+ var resultDiscountList, rulesModule, withScanList, currentSelected, tempOrder, holders, _ref, isAvailable, newDiscountList, unavailableReason, _this$store$discount5;
251
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
252
+ while (1) switch (_context3.prev = _context3.next) {
253
+ case 0:
254
+ _context3.next = 2;
255
+ return (_this$store$discount4 = this.store.discount) === null || _this$store$discount4 === void 0 ? void 0 : _this$store$discount4.batchSearch(code, customerId);
256
+ case 2:
257
+ _context3.t0 = _context3.sent;
258
+ if (_context3.t0) {
259
+ _context3.next = 5;
260
+ break;
261
+ }
262
+ _context3.t0 = [];
263
+ case 5:
264
+ resultDiscountList = _context3.t0;
265
+ rulesModule = this.store.rules;
266
+ if (rulesModule) {
267
+ _context3.next = 9;
268
+ break;
269
+ }
270
+ return _context3.abrupt("return", {
271
+ type: 'clientCalc',
272
+ isAvailable: false,
273
+ discountList: this.getDiscountList(),
274
+ unavailableReason: UnavailableReason.Unknown
275
+ });
276
+ case 9:
277
+ if (resultDiscountList.length) {
278
+ _context3.next = 11;
279
+ break;
280
+ }
281
+ return _context3.abrupt("return", {
282
+ type: 'server',
283
+ isAvailable: false,
284
+ discountList: this.getDiscountList()
285
+ });
286
+ case 11:
287
+ withScanList = resultDiscountList.map(function (item) {
288
+ return _objectSpread(_objectSpread({}, item), {}, {
289
+ isScan: true
290
+ });
291
+ });
292
+ currentSelected = this.getDiscountList().filter(function (n) {
293
+ return n.isSelected;
294
+ });
295
+ if (!(currentSelected.length && currentSelected.some(function (n) {
296
+ return withScanList.some(function (m) {
297
+ return m.id === n.id;
298
+ });
299
+ }))) {
300
+ _context3.next = 15;
301
+ break;
302
+ }
303
+ return _context3.abrupt("return", {
304
+ type: 'clientCalc',
305
+ isAvailable: true,
306
+ discountList: this.getDiscountList()
307
+ });
308
+ case 15:
309
+ tempOrder = this.store.tempOrder;
310
+ holders = tempOrder !== null && tempOrder !== void 0 && (_tempOrder$holder = tempOrder.holder) !== null && _tempOrder$holder !== void 0 && _tempOrder$holder.form_record_id ? [{
311
+ form_record_id: tempOrder.holder.form_record_id
312
+ }] : [];
313
+ _ref = rulesModule.isDiscountListAvailable({
314
+ productList: (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.products) || [],
315
+ oldDiscountList: this.getDiscountList(),
316
+ newDiscountList: withScanList,
317
+ holders: holders,
318
+ isFormSubject: !!(tempOrder !== null && tempOrder !== void 0 && (_tempOrder$holder2 = tempOrder.holder) !== null && _tempOrder$holder2 !== void 0 && _tempOrder$holder2.type) && tempOrder.holder.type === 'form'
319
+ }) || {
320
+ isAvailable: false,
321
+ discountList: this.getDiscountList()
322
+ }, isAvailable = _ref.isAvailable, newDiscountList = _ref.discountList, unavailableReason = _ref.unavailableReason;
323
+ if (isAvailable && newDiscountList) {
324
+ (_this$store$discount5 = this.store.discount) === null || _this$store$discount5 === void 0 || _this$store$discount5.setDiscountList(newDiscountList);
325
+ this.applyDiscount();
326
+ }
327
+ return _context3.abrupt("return", {
328
+ type: 'clientCalc',
329
+ isAvailable: isAvailable || false,
330
+ discountList: newDiscountList || this.getDiscountList(),
331
+ unavailableReason: unavailableReason
332
+ });
333
+ case 20:
334
+ case "end":
335
+ return _context3.stop();
336
+ }
337
+ }, _callee3, this);
338
+ }));
339
+ function scanCode(_x4, _x5) {
340
+ return _scanCode.apply(this, arguments);
341
+ }
342
+ return scanCode;
343
+ }()
344
+ }, {
345
+ key: "applyDiscount",
346
+ value: function applyDiscount() {
347
+ var _tempOrder$products, _this$store$discount6, _tempOrder$holder3, _tempOrder$holder4;
348
+ var tempOrder = this.store.tempOrder;
349
+ if (!(tempOrder !== null && tempOrder !== void 0 && (_tempOrder$products = tempOrder.products) !== null && _tempOrder$products !== void 0 && _tempOrder$products.length)) return;
350
+ var rulesModule = this.store.rules;
351
+ if (!rulesModule) return;
352
+ var discountList = ((_this$store$discount6 = this.store.discount) === null || _this$store$discount6 === void 0 ? void 0 : _this$store$discount6.getDiscountList()) || [];
353
+ var holders = (_tempOrder$holder3 = tempOrder.holder) !== null && _tempOrder$holder3 !== void 0 && _tempOrder$holder3.form_record_id ? [{
354
+ form_record_id: tempOrder.holder.form_record_id
355
+ }] : [];
356
+ var result = rulesModule.calcDiscount({
357
+ productList: tempOrder.products,
358
+ discountList: discountList,
359
+ holders: holders,
360
+ isFormSubject: !!((_tempOrder$holder4 = tempOrder.holder) !== null && _tempOrder$holder4 !== void 0 && _tempOrder$holder4.type) && tempOrder.holder.type === 'form'
361
+ });
362
+ if (result !== null && result !== void 0 && result.productList) {
363
+ tempOrder.products = result.productList;
364
+ }
365
+ if (result !== null && result !== void 0 && result.discountList) {
366
+ var _this$store$discount7;
367
+ OrderModule.populateSavedAmounts(result.productList || tempOrder.products, result.discountList);
368
+ (_this$store$discount7 = this.store.discount) === null || _this$store$discount7 === void 0 || _this$store$discount7.setDiscountList(result.discountList);
369
+ tempOrder.discount_list = result.discountList.filter(function (d) {
370
+ return d.isSelected;
371
+ });
372
+ }
373
+ }
374
+
375
+ // ─── TempOrder: 初始化入口 ───
376
+ }, {
377
+ key: "initTempOrder",
378
+ value: function initTempOrder(params) {
379
+ if (params.cacheId !== undefined) this.cacheId = params.cacheId;
380
+ if (params.salesSummaryModuleName !== undefined) this.salesSummaryModuleName = params.salesSummaryModuleName;
381
+ this.restoreTempOrderFromStorage();
382
+ }
383
+
384
+ // ─── TempOrder: localStorage 持久化 ───
385
+ }, {
386
+ key: "getTempOrderStorageKey",
387
+ value: function getTempOrderStorageKey() {
388
+ if (!this.cacheId) return null;
389
+ return "scanOrder:tempOrder:".concat(this.cacheId);
390
+ }
391
+ }, {
392
+ key: "restoreTempOrderFromStorage",
393
+ value: function restoreTempOrderFromStorage() {
394
+ var key = this.getTempOrderStorageKey();
395
+ if (!key) return;
396
+ if (!this.window) return;
397
+ var cachedData = this.window.localStorage.getItem(key);
398
+ if (!cachedData) return;
399
+ try {
400
+ var parsedData = JSON.parse(cachedData);
401
+ if (!isTempOrder(parsedData)) {
402
+ this.window.localStorage.removeItem(key);
403
+ return;
404
+ }
405
+ this.store.tempOrder = parsedData;
406
+ } catch (_unused) {
407
+ var _this$window;
408
+ (_this$window = this.window) === null || _this$window === void 0 || (_this$window = _this$window.localStorage) === null || _this$window === void 0 || _this$window.removeItem(key);
409
+ }
410
+ }
411
+ }, {
412
+ key: "persistTempOrder",
413
+ value: function persistTempOrder() {
414
+ var key = this.getTempOrderStorageKey();
415
+ if (!key || !this.store.tempOrder) return;
416
+ if (!this.window) return;
417
+ this.window.localStorage.setItem(key, JSON.stringify(this.store.tempOrder));
418
+ }
419
+
420
+ // ─── TempOrder: 创建 & 获取 ───
421
+ }, {
422
+ key: "createDefaultTempOrderInstance",
423
+ value: function createDefaultTempOrderInstance() {
424
+ return createDefaultTempOrder({
425
+ now: formatDateTime(new Date()),
426
+ summary: createEmptySummary()
427
+ });
428
+ }
429
+ }, {
430
+ key: "ensureTempOrder",
431
+ value: function ensureTempOrder() {
432
+ if (this.store.tempOrder) return this.store.tempOrder;
433
+ var newOrder = this.createDefaultTempOrderInstance();
434
+ this.store.tempOrder = newOrder;
435
+ this.persistTempOrder();
436
+ return newOrder;
437
+ }
438
+ }, {
439
+ key: "getTempOrder",
440
+ value: function getTempOrder() {
441
+ return this.store.tempOrder;
442
+ }
443
+ }, {
444
+ key: "addNewOrder",
445
+ value: function () {
446
+ var _addNewOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
447
+ var tempOrder;
448
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
449
+ while (1) switch (_context4.prev = _context4.next) {
450
+ case 0:
451
+ tempOrder = this.ensureTempOrder();
452
+ _context4.next = 3;
453
+ return this.recalculateSummary({
454
+ createIfMissing: true
455
+ });
456
+ case 3:
457
+ this.persistTempOrder();
458
+ return _context4.abrupt("return", tempOrder);
459
+ case 5:
460
+ case "end":
461
+ return _context4.stop();
462
+ }
463
+ }, _callee4, this);
464
+ }));
465
+ function addNewOrder() {
466
+ return _addNewOrder.apply(this, arguments);
467
+ }
468
+ return addNewOrder;
469
+ }()
470
+ }, {
471
+ key: "getOrderProducts",
472
+ value: function getOrderProducts() {
473
+ var tempOrder = this.ensureTempOrder();
474
+ return tempOrder.products;
475
+ }
476
+
477
+ // ─── TempOrder: 金额汇总 ───
478
+ }, {
479
+ key: "getSalesSummary",
480
+ value: function getSalesSummary() {
481
+ if (!this.salesSummaryModuleName) return null;
482
+ return this.core.getModule(this.salesSummaryModuleName);
483
+ }
484
+ }, {
485
+ key: "recalculateSummary",
486
+ value: function () {
487
+ var _recalculateSummary = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(options) {
488
+ var tempOrder, salesSummary, summary;
489
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
490
+ while (1) switch (_context5.prev = _context5.next) {
491
+ case 0:
492
+ tempOrder = options !== null && options !== void 0 && options.createIfMissing ? this.ensureTempOrder() : this.store.tempOrder;
493
+ if (tempOrder) {
494
+ _context5.next = 3;
495
+ break;
496
+ }
497
+ return _context5.abrupt("return", null);
498
+ case 3:
499
+ salesSummary = this.getSalesSummary();
500
+ if (salesSummary) {
501
+ _context5.next = 8;
502
+ break;
503
+ }
504
+ tempOrder.summary = createEmptySummary();
505
+ tempOrder.surcharge_fee = tempOrder.summary.surcharge_fee;
506
+ return _context5.abrupt("return", tempOrder.summary);
507
+ case 8:
508
+ _context5.next = 10;
509
+ return salesSummary.getSummary({
510
+ products: tempOrder.products
511
+ });
512
+ case 10:
513
+ summary = _context5.sent;
514
+ tempOrder.summary = summary;
515
+ if (summary.is_price_include_tax !== undefined) {
516
+ tempOrder.is_price_include_tax = summary.is_price_include_tax;
517
+ }
518
+ if (typeof summary.tax_title === 'string') {
519
+ tempOrder.tax_title = summary.tax_title;
520
+ }
521
+ tempOrder.surcharge_fee = summary.surcharge_fee;
522
+ tempOrder.surcharges = summary.surcharges || [];
523
+ tempOrder.deposit_amount = summary.deposit_amount || '0.00';
524
+ tempOrder.is_deposit = summary.deposit_amount !== '0.00' ? 1 : 0;
525
+ tempOrder.shop_discount = summary.discount_amount || '0.00';
526
+ return _context5.abrupt("return", tempOrder.summary);
527
+ case 20:
528
+ case "end":
529
+ return _context5.stop();
530
+ }
531
+ }, _callee5, this);
532
+ }));
533
+ function recalculateSummary(_x6) {
534
+ return _recalculateSummary.apply(this, arguments);
535
+ }
536
+ return recalculateSummary;
537
+ }()
538
+ }, {
539
+ key: "getScanOrderSummary",
540
+ value: function () {
541
+ var _getScanOrderSummary = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
542
+ var summary;
543
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
544
+ while (1) switch (_context6.prev = _context6.next) {
545
+ case 0:
546
+ _context6.next = 2;
547
+ return this.recalculateSummary({
548
+ createIfMissing: true
549
+ });
550
+ case 2:
551
+ summary = _context6.sent;
552
+ if (summary) {
553
+ _context6.next = 5;
554
+ break;
555
+ }
556
+ return _context6.abrupt("return", createEmptySummary());
557
+ case 5:
558
+ this.persistTempOrder();
559
+ return _context6.abrupt("return", summary);
560
+ case 7:
561
+ case "end":
562
+ return _context6.stop();
563
+ }
564
+ }, _callee6, this);
565
+ }));
566
+ function getScanOrderSummary() {
567
+ return _getScanOrderSummary.apply(this, arguments);
568
+ }
569
+ return getScanOrderSummary;
570
+ }() // ─── TempOrder: 备注 ───
571
+ }, {
572
+ key: "updateTempOrderNote",
573
+ value: function updateTempOrderNote(note) {
574
+ var tempOrder = this.ensureTempOrder();
575
+ tempOrder.note = String(note || '');
576
+ this.persistTempOrder();
577
+ return tempOrder.note;
578
+ }
579
+ }, {
580
+ key: "updateTempOrderContactsInfo",
581
+ value: function updateTempOrderContactsInfo(contactsInfo) {
582
+ var tempOrder = this.ensureTempOrder();
583
+ tempOrder.contacts_info = Array.isArray(contactsInfo) ? contactsInfo : [];
584
+ this.persistTempOrder();
585
+ return tempOrder.contacts_info;
586
+ }
587
+
588
+ // ─── TempOrder: 商品 CRUD ───
589
+ }, {
590
+ key: "addProductToOrder",
591
+ value: function () {
592
+ var _addProductToOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(product) {
593
+ var tempOrder, normalizedProduct, productIndex, targetProduct;
594
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
595
+ while (1) switch (_context7.prev = _context7.next) {
596
+ case 0:
597
+ tempOrder = this.ensureTempOrder();
598
+ normalizedProduct = normalizeOrderProduct(product);
599
+ productIndex = getProductIdentityIndex(tempOrder.products, normalizedProduct);
600
+ if (productIndex === -1) {
601
+ tempOrder.products.push(normalizedProduct);
602
+ } else {
603
+ targetProduct = tempOrder.products[productIndex];
604
+ tempOrder.products[productIndex] = _objectSpread(_objectSpread(_objectSpread({}, targetProduct), normalizedProduct), {}, {
605
+ num: getSafeProductNum(targetProduct.num + normalizedProduct.num),
606
+ _origin: normalizedProduct._origin || targetProduct._origin
607
+ });
608
+ }
609
+ this.applyDiscount();
610
+ _context7.next = 7;
611
+ return this.recalculateSummary({
612
+ createIfMissing: true
613
+ });
614
+ case 7:
615
+ this.persistTempOrder();
616
+ return _context7.abrupt("return", tempOrder.products);
617
+ case 9:
618
+ case "end":
619
+ return _context7.stop();
620
+ }
621
+ }, _callee7, this);
622
+ }));
623
+ function addProductToOrder(_x7) {
624
+ return _addProductToOrder.apply(this, arguments);
625
+ }
626
+ return addProductToOrder;
627
+ }()
628
+ }, {
629
+ key: "updateProductInOrder",
630
+ value: function () {
631
+ var _updateProductInOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(params) {
632
+ var product_id, product_variant_id, updates, tempOrder, productIndex, targetProduct, nextProduct;
633
+ return _regeneratorRuntime().wrap(function _callee8$(_context8) {
634
+ while (1) switch (_context8.prev = _context8.next) {
635
+ case 0:
636
+ product_id = params.product_id, product_variant_id = params.product_variant_id, updates = params.updates;
637
+ tempOrder = this.ensureTempOrder();
638
+ productIndex = getProductIdentityIndex(tempOrder.products, {
639
+ product_id: product_id,
640
+ product_variant_id: product_variant_id
641
+ });
642
+ if (!(productIndex === -1)) {
643
+ _context8.next = 5;
644
+ break;
645
+ }
646
+ throw new Error('[Order] 目标商品不存在,无法更新');
647
+ case 5:
648
+ targetProduct = tempOrder.products[productIndex];
649
+ nextProduct = _objectSpread(_objectSpread(_objectSpread({}, targetProduct), updates), {}, {
650
+ product_id: product_id,
651
+ product_variant_id: product_variant_id
652
+ });
653
+ nextProduct.num = getSafeProductNum(nextProduct.num);
654
+ tempOrder.products[productIndex] = nextProduct;
655
+ this.applyDiscount();
656
+ _context8.next = 12;
657
+ return this.recalculateSummary({
658
+ createIfMissing: true
659
+ });
660
+ case 12:
661
+ this.persistTempOrder();
662
+ return _context8.abrupt("return", tempOrder.products);
663
+ case 14:
664
+ case "end":
665
+ return _context8.stop();
666
+ }
667
+ }, _callee8, this);
668
+ }));
669
+ function updateProductInOrder(_x8) {
670
+ return _updateProductInOrder.apply(this, arguments);
671
+ }
672
+ return updateProductInOrder;
673
+ }()
674
+ }, {
675
+ key: "removeProductFromOrder",
676
+ value: function () {
677
+ var _removeProductFromOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(identity) {
678
+ var tempOrder, beforeProducts, removedByStrictIdentity;
679
+ return _regeneratorRuntime().wrap(function _callee9$(_context9) {
680
+ while (1) switch (_context9.prev = _context9.next) {
681
+ case 0:
682
+ tempOrder = this.ensureTempOrder();
683
+ beforeProducts = tempOrder.products;
684
+ tempOrder.products = tempOrder.products.filter(function (item) {
685
+ return !isIdentityMatch(item, identity);
686
+ });
687
+ removedByStrictIdentity = beforeProducts.length - tempOrder.products.length;
688
+ if (removedByStrictIdentity === 0 && identity.identity_key) {
689
+ tempOrder.products = tempOrder.products.filter(function (item) {
690
+ var isSameProduct = String(item.product_id) === String(identity.product_id) && String(item.product_variant_id) === String(identity.product_variant_id);
691
+ var hasNoIdentityKey = !item.identity_key;
692
+ return !(isSameProduct && hasNoIdentityKey);
693
+ });
694
+ }
695
+ this.applyDiscount();
696
+ _context9.next = 8;
697
+ return this.recalculateSummary({
698
+ createIfMissing: true
699
+ });
700
+ case 8:
701
+ this.persistTempOrder();
702
+ return _context9.abrupt("return", tempOrder.products);
703
+ case 10:
704
+ case "end":
705
+ return _context9.stop();
706
+ }
707
+ }, _callee9, this);
708
+ }));
709
+ function removeProductFromOrder(_x9) {
710
+ return _removeProductFromOrder.apply(this, arguments);
711
+ }
712
+ return removeProductFromOrder;
713
+ }() // ─── TempOrder: 提交 ───
714
+ }, {
715
+ key: "submitTempOrder",
716
+ value: function () {
717
+ var _submitTempOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(params) {
718
+ var _params$cacheId;
719
+ var tempOrder, effectiveCacheId, payload, result, products, moreResult;
720
+ return _regeneratorRuntime().wrap(function _callee10$(_context10) {
721
+ while (1) switch (_context10.prev = _context10.next) {
722
+ case 0:
723
+ tempOrder = this.ensureTempOrder();
724
+ this.persistTempOrder();
725
+ effectiveCacheId = (_params$cacheId = params === null || params === void 0 ? void 0 : params.cacheId) !== null && _params$cacheId !== void 0 ? _params$cacheId : this.cacheId;
726
+ payload = buildSubmitPayload({
727
+ tempOrder: tempOrder,
728
+ cacheId: effectiveCacheId
729
+ });
730
+ if (!tempOrder.order_id) {
731
+ _context10.next = 12;
732
+ break;
733
+ }
734
+ products = formatV1Product(payload.products);
735
+ _context10.next = 8;
736
+ return this.scanOrderMore({
737
+ query: {
738
+ order_id: tempOrder.order_id,
739
+ products: products,
740
+ request_unique_idempotency_token: payload.request_unique_idempotency_token
741
+ }
742
+ });
743
+ case 8:
744
+ moreResult = _context10.sent;
745
+ if (moreResult.code === 200) {
746
+ result = {
747
+ data: {
748
+ order_id: tempOrder.order_id
749
+ }
750
+ };
751
+ }
752
+ _context10.next = 15;
753
+ break;
754
+ case 12:
755
+ _context10.next = 14;
756
+ return this.submitScanOrder({
757
+ query: payload
758
+ });
759
+ case 14:
760
+ result = _context10.sent;
761
+ case 15:
762
+ return _context10.abrupt("return", result);
763
+ case 16:
764
+ case "end":
765
+ return _context10.stop();
766
+ }
767
+ }, _callee10, this);
768
+ }));
769
+ function submitTempOrder(_x10) {
770
+ return _submitTempOrder.apply(this, arguments);
771
+ }
772
+ return submitTempOrder;
773
+ }()
122
774
  }, {
123
775
  key: "createOrder",
124
776
  value: function createOrder(params) {
@@ -203,11 +855,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
203
855
  }, {
204
856
  key: "submitOrder",
205
857
  value: function () {
206
- var _submitOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(order) {
858
+ var _submitOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(order) {
207
859
  var _order$query$cartItem, _params$bookings, _params$relation_prod;
208
860
  var url, query, fetchUrl, params;
209
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
210
- while (1) switch (_context2.prev = _context2.next) {
861
+ return _regeneratorRuntime().wrap(function _callee11$(_context11) {
862
+ while (1) switch (_context11.prev = _context11.next) {
211
863
  case 0:
212
864
  this.logInfo('submitOrder called', {
213
865
  url: order.url,
@@ -227,14 +879,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
227
879
  relationProductsCount: ((_params$relation_prod = params.relation_products) === null || _params$relation_prod === void 0 ? void 0 : _params$relation_prod.length) || 0,
228
880
  scheduleDate: params.schedule_date
229
881
  });
230
- return _context2.abrupt("return", this.request.post(fetchUrl, params));
882
+ return _context11.abrupt("return", this.request.post(fetchUrl, params));
231
883
  case 6:
232
884
  case "end":
233
- return _context2.stop();
885
+ return _context11.stop();
234
886
  }
235
- }, _callee2, this);
887
+ }, _callee11, this);
236
888
  }));
237
- function submitOrder(_x3) {
889
+ function submitOrder(_x11) {
238
890
  return _submitOrder.apply(this, arguments);
239
891
  }
240
892
  return submitOrder;
@@ -252,11 +904,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
252
904
  }, {
253
905
  key: "createOrderByCheckout",
254
906
  value: (function () {
255
- var _createOrderByCheckout = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(params) {
907
+ var _createOrderByCheckout = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12(params) {
256
908
  var _params$bookings2, _params$relation_prod2, _params$payments, _params$payments2, _params$bookings3, _params$relation_prod3, _params$payments3;
257
909
  var _orderData$payments, _orderData$bookings, _orderData$relation_p, _orderData$payments2, _orderData$payments3, _orderData$bookings2, _orderData$relation_p2, _orderData$payments4, _orderData$payments5, _response$data, orderData, response;
258
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
259
- while (1) switch (_context3.prev = _context3.next) {
910
+ return _regeneratorRuntime().wrap(function _callee12$(_context12) {
911
+ while (1) switch (_context12.prev = _context12.next) {
260
912
  case 0:
261
913
  this.logInfo('createOrderByCheckout called', {
262
914
  type: params.type,
@@ -285,7 +937,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
285
937
  relationProductsCount: ((_params$relation_prod3 = params.relation_products) === null || _params$relation_prod3 === void 0 ? void 0 : _params$relation_prod3.length) || 0,
286
938
  paymentsCount: ((_params$payments3 = params.payments) === null || _params$payments3 === void 0 ? void 0 : _params$payments3.length) || 0
287
939
  });
288
- _context3.prev = 2;
940
+ _context12.prev = 2;
289
941
  // 构建订单数据,设置默认值并允许 params 覆盖
290
942
  orderData = _objectSpread({
291
943
  sales_channel: 'my_pisel',
@@ -349,10 +1001,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
349
1001
  });
350
1002
 
351
1003
  // 调用后端接口
352
- _context3.next = 10;
1004
+ _context12.next = 10;
353
1005
  return this.request.post('/order/checkout', orderData);
354
1006
  case 10:
355
- response = _context3.sent;
1007
+ response = _context12.sent;
356
1008
  this.logInfo('Order API called successfully', {
357
1009
  response: response
358
1010
  });
@@ -360,26 +1012,125 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
360
1012
  success: !!response,
361
1013
  hasOrderId: !!(response !== null && response !== void 0 && (_response$data = response.data) !== null && _response$data !== void 0 && _response$data.order_id || response !== null && response !== void 0 && response.order_id)
362
1014
  });
363
- return _context3.abrupt("return", response);
1015
+ return _context12.abrupt("return", response);
364
1016
  case 16:
365
- _context3.prev = 16;
366
- _context3.t0 = _context3["catch"](2);
367
- console.error('[Order] createOrderByCheckout 创建订单失败:', _context3.t0);
1017
+ _context12.prev = 16;
1018
+ _context12.t0 = _context12["catch"](2);
1019
+ console.error('[Order] createOrderByCheckout 创建订单失败:', _context12.t0);
368
1020
  this.logInfo('Order API called failed', {
369
- error: _context3.t0 instanceof Error ? _context3.t0.message : String(_context3.t0)
1021
+ error: _context12.t0 instanceof Error ? _context12.t0.message : String(_context12.t0)
370
1022
  });
371
- throw _context3.t0;
1023
+ throw _context12.t0;
372
1024
  case 21:
373
1025
  case "end":
374
- return _context3.stop();
1026
+ return _context12.stop();
375
1027
  }
376
- }, _callee3, this, [[2, 16]]);
1028
+ }, _callee12, this, [[2, 16]]);
377
1029
  }));
378
- function createOrderByCheckout(_x4) {
1030
+ function createOrderByCheckout(_x12) {
379
1031
  return _createOrderByCheckout.apply(this, arguments);
380
1032
  }
381
1033
  return createOrderByCheckout;
382
1034
  }())
1035
+ }, {
1036
+ key: "submitScanOrder",
1037
+ value: function () {
1038
+ var _submitScanOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(params) {
1039
+ var url, query, fetchUrl;
1040
+ return _regeneratorRuntime().wrap(function _callee13$(_context13) {
1041
+ while (1) switch (_context13.prev = _context13.next) {
1042
+ case 0:
1043
+ url = params.url, query = params.query;
1044
+ fetchUrl = url || '/order/sales/checkout';
1045
+ return _context13.abrupt("return", this.request.post(fetchUrl, query));
1046
+ case 3:
1047
+ case "end":
1048
+ return _context13.stop();
1049
+ }
1050
+ }, _callee13, this);
1051
+ }));
1052
+ function submitScanOrder(_x13) {
1053
+ return _submitScanOrder.apply(this, arguments);
1054
+ }
1055
+ return submitScanOrder;
1056
+ }()
1057
+ }, {
1058
+ key: "scanOrderMore",
1059
+ value: function () {
1060
+ var _scanOrderMore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14(params) {
1061
+ var url, query, fetchUrl, requestBody;
1062
+ return _regeneratorRuntime().wrap(function _callee14$(_context14) {
1063
+ while (1) switch (_context14.prev = _context14.next) {
1064
+ case 0:
1065
+ url = params.url, query = params.query;
1066
+ fetchUrl = url || "/order/order/product/".concat(query.order_id);
1067
+ requestBody = {
1068
+ products: query.products,
1069
+ request_unique_idempotency_token: query.request_unique_idempotency_token
1070
+ };
1071
+ return _context14.abrupt("return", this.request.put(fetchUrl, requestBody));
1072
+ case 4:
1073
+ case "end":
1074
+ return _context14.stop();
1075
+ }
1076
+ }, _callee14, this);
1077
+ }));
1078
+ function scanOrderMore(_x14) {
1079
+ return _scanOrderMore.apply(this, arguments);
1080
+ }
1081
+ return scanOrderMore;
1082
+ }()
1083
+ }], [{
1084
+ key: "populateSavedAmounts",
1085
+ value:
1086
+ /**
1087
+ * Populate `savedAmount` on each discount based on product-level discount details.
1088
+ * Only selected discounts get a non-zero value.
1089
+ */
1090
+ function populateSavedAmounts(productList, discountList) {
1091
+ var savedMap = new Map();
1092
+ var _iterator = _createForOfIteratorHelper(productList),
1093
+ _step;
1094
+ try {
1095
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1096
+ var product = _step.value;
1097
+ var qty = product.num || 1;
1098
+ var _iterator3 = _createForOfIteratorHelper(product.discount_list || []),
1099
+ _step3;
1100
+ try {
1101
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
1102
+ var _pd$discount, _pd$metadata;
1103
+ var pd = _step3.value;
1104
+ var discountKey = ((_pd$discount = pd.discount) === null || _pd$discount === void 0 ? void 0 : _pd$discount.resource_id) || pd.id;
1105
+ if (discountKey == null) continue;
1106
+ var amount = new Decimal(pd.amount || 0).times(qty).plus(((_pd$metadata = pd.metadata) === null || _pd$metadata === void 0 ? void 0 : _pd$metadata.product_discount_difference) || 0);
1107
+ savedMap.set(discountKey, (savedMap.get(discountKey) || new Decimal(0)).plus(amount));
1108
+ }
1109
+ } catch (err) {
1110
+ _iterator3.e(err);
1111
+ } finally {
1112
+ _iterator3.f();
1113
+ }
1114
+ }
1115
+ } catch (err) {
1116
+ _iterator.e(err);
1117
+ } finally {
1118
+ _iterator.f();
1119
+ }
1120
+ var _iterator2 = _createForOfIteratorHelper(discountList),
1121
+ _step2;
1122
+ try {
1123
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
1124
+ var d = _step2.value;
1125
+ var key = d.id;
1126
+ d.savedAmount = d.isSelected && key != null && savedMap.has(key) ? savedMap.get(key).toNumber() : 0;
1127
+ }
1128
+ } catch (err) {
1129
+ _iterator2.e(err);
1130
+ } finally {
1131
+ _iterator2.f();
1132
+ }
1133
+ }
383
1134
  }]);
384
1135
  return OrderModule;
385
1136
  }(BaseModule);