@pisell/pisellos 2.1.165 → 2.1.166

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 (78) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +3 -0
  3. package/dist/model/strategy/adapter/dataVariant/adapter.d.ts +50 -0
  4. package/dist/model/strategy/adapter/dataVariant/adapter.js +167 -0
  5. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +89 -0
  6. package/dist/model/strategy/adapter/dataVariant/evaluator.js +780 -0
  7. package/dist/model/strategy/adapter/dataVariant/examples.d.ts +39 -0
  8. package/dist/model/strategy/adapter/dataVariant/examples.js +277 -0
  9. package/dist/model/strategy/adapter/dataVariant/index.d.ts +4 -0
  10. package/dist/model/strategy/adapter/dataVariant/index.js +4 -0
  11. package/dist/model/strategy/adapter/dataVariant/type.d.ts +148 -0
  12. package/dist/model/strategy/adapter/dataVariant/type.js +54 -0
  13. package/dist/model/strategy/adapter/index.d.ts +4 -0
  14. package/dist/model/strategy/adapter/index.js +5 -1
  15. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  16. package/dist/modules/Discount/index.d.ts +5 -2
  17. package/dist/modules/Discount/index.js +21 -1
  18. package/dist/modules/Discount/types.d.ts +4 -0
  19. package/dist/modules/Order/index.d.ts +1 -0
  20. package/dist/modules/Order/index.js +18 -6
  21. package/dist/modules/Order/types.d.ts +2 -0
  22. package/dist/modules/ProductList/index.d.ts +3 -1
  23. package/dist/modules/ProductList/index.js +22 -11
  24. package/dist/modules/Schedule/getDateIsInSchedule.js +5 -0
  25. package/dist/solution/BookingByStep/index.d.ts +2 -2
  26. package/dist/solution/ScanOrder/index.js +1 -1
  27. package/dist/solution/ShopDiscount/index.js +16 -15
  28. package/dist/solution/VenueBooking/index.d.ts +40 -3
  29. package/dist/solution/VenueBooking/index.js +394 -261
  30. package/dist/solution/VenueBooking/types.d.ts +3 -1
  31. package/dist/solution/VenueBooking/types.js +1 -0
  32. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
  33. package/dist/solution/VenueBooking/utils/dateSummary.js +12 -25
  34. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +0 -6
  35. package/dist/solution/VenueBooking/utils/slotMerge.js +3 -9
  36. package/dist/solution/VenueBooking/utils/smartPricing.d.ts +70 -0
  37. package/dist/solution/VenueBooking/utils/smartPricing.js +233 -0
  38. package/dist/solution/VenueBooking/utils/timeSlot.d.ts +2 -0
  39. package/dist/solution/VenueBooking/utils/timeSlot.js +9 -4
  40. package/lib/index.d.ts +1 -0
  41. package/lib/index.js +3 -0
  42. package/lib/model/strategy/adapter/dataVariant/adapter.d.ts +50 -0
  43. package/lib/model/strategy/adapter/dataVariant/adapter.js +149 -0
  44. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +89 -0
  45. package/lib/model/strategy/adapter/dataVariant/evaluator.js +583 -0
  46. package/lib/model/strategy/adapter/dataVariant/examples.d.ts +39 -0
  47. package/lib/model/strategy/adapter/dataVariant/examples.js +293 -0
  48. package/lib/model/strategy/adapter/dataVariant/index.d.ts +4 -0
  49. package/lib/model/strategy/adapter/dataVariant/index.js +38 -0
  50. package/lib/model/strategy/adapter/dataVariant/type.d.ts +148 -0
  51. package/lib/model/strategy/adapter/dataVariant/type.js +31 -0
  52. package/lib/model/strategy/adapter/index.d.ts +4 -0
  53. package/lib/model/strategy/adapter/index.js +13 -2
  54. package/lib/modules/Discount/index.d.ts +5 -2
  55. package/lib/modules/Discount/index.js +11 -1
  56. package/lib/modules/Discount/types.d.ts +4 -0
  57. package/lib/modules/Order/index.d.ts +1 -0
  58. package/lib/modules/Order/index.js +11 -1
  59. package/lib/modules/Order/types.d.ts +2 -0
  60. package/lib/modules/ProductList/index.d.ts +3 -1
  61. package/lib/modules/ProductList/index.js +45 -39
  62. package/lib/modules/Schedule/getDateIsInSchedule.js +4 -0
  63. package/lib/solution/BookingByStep/index.d.ts +2 -2
  64. package/lib/solution/ScanOrder/index.js +1 -1
  65. package/lib/solution/ShopDiscount/index.js +3 -2
  66. package/lib/solution/VenueBooking/index.d.ts +40 -3
  67. package/lib/solution/VenueBooking/index.js +257 -111
  68. package/lib/solution/VenueBooking/types.d.ts +3 -1
  69. package/lib/solution/VenueBooking/types.js +1 -0
  70. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
  71. package/lib/solution/VenueBooking/utils/dateSummary.js +5 -10
  72. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +0 -6
  73. package/lib/solution/VenueBooking/utils/slotMerge.js +3 -4
  74. package/lib/solution/VenueBooking/utils/smartPricing.d.ts +70 -0
  75. package/lib/solution/VenueBooking/utils/smartPricing.js +180 -0
  76. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +2 -0
  77. package/lib/solution/VenueBooking/utils/timeSlot.js +7 -3
  78. package/package.json +1 -1
@@ -66,6 +66,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
66
66
  if (!this.store.tempOrder) {
67
67
  this.store.tempOrder = null;
68
68
  }
69
+ if (!Array.isArray(this.store.availableWalletIds)) {
70
+ this.store.availableWalletIds = [];
71
+ }
69
72
  this.request = this.core.getPlugin('request');
70
73
  this.window = this.core.getPlugin('window');
71
74
  otherParams = options.otherParams || {};
@@ -76,15 +79,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
76
79
  this.restoreTempOrderFromStorage();
77
80
  appPlugin = this.core.getPlugin('app');
78
81
  if (appPlugin) {
79
- _context.next = 14;
82
+ _context.next = 15;
80
83
  break;
81
84
  }
82
85
  throw new Error('Order 模块需要 app 插件支持');
83
- case 14:
86
+ case 15:
84
87
  app = appPlugin.getApp();
85
88
  this.logger = app.logger;
86
89
  this.logInfo('OrderModule initialized successfully');
87
- case 17:
90
+ case 18:
88
91
  case "end":
89
92
  return _context.stop();
90
93
  }
@@ -185,7 +188,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
185
188
  value: function () {
186
189
  var _loadDiscountConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(params) {
187
190
  var _this$store$discount, _this$store$tempOrder;
188
- var discountList, _this$store$discount2;
191
+ var prepareConfig, discountList, _this$store$discount2;
189
192
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
190
193
  while (1) switch (_context2.prev = _context2.next) {
191
194
  case 0:
@@ -196,17 +199,21 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
196
199
  with_good_pass: 1,
197
200
  with_discount_card: 1,
198
201
  with_wallet_pass_holder: 1,
202
+ with_available_wallet_flag: 1,
203
+ with_available_wallet_pass_flag: 1,
199
204
  request_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
200
205
  });
201
206
  case 2:
202
- discountList = _context2.sent;
207
+ prepareConfig = _context2.sent;
208
+ discountList = prepareConfig === null || prepareConfig === void 0 ? void 0 : prepareConfig.discountList;
209
+ this.store.availableWalletIds = (prepareConfig === null || prepareConfig === void 0 ? void 0 : prepareConfig.availableWalletIds) || [];
203
210
  if (discountList) {
204
211
  (_this$store$discount2 = this.store.discount) === null || _this$store$discount2 === void 0 || _this$store$discount2.setDiscountList(discountList);
205
212
  }
206
213
  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) {
207
214
  this.applyDiscount();
208
215
  }
209
- case 5:
216
+ case 7:
210
217
  case "end":
211
218
  return _context2.stop();
212
219
  }
@@ -223,6 +230,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
223
230
  var _this$store$discount3;
224
231
  return ((_this$store$discount3 = this.store.discount) === null || _this$store$discount3 === void 0 ? void 0 : _this$store$discount3.getDiscountList()) || [];
225
232
  }
233
+ }, {
234
+ key: "getAvailableWalletIds",
235
+ value: function getAvailableWalletIds() {
236
+ return this.store.availableWalletIds || [];
237
+ }
226
238
  }, {
227
239
  key: "scanCode",
228
240
  value: function () {
@@ -15,6 +15,7 @@ export interface OrderState {
15
15
  discountList: any[];
16
16
  discount: DiscountModule | null;
17
17
  rules: RulesModule | null;
18
+ availableWalletIds?: number[];
18
19
  }
19
20
  /** 更新购物车行:仅传 SKU 时命中同 SKU 第一行;多行同 SKU 须传 identity_key / 选项指纹等 */
20
21
  export interface UpdateProductInOrderParams {
@@ -248,5 +249,6 @@ export interface OrderModuleAPI {
248
249
  action?: 'create';
249
250
  }) => Promise<void>;
250
251
  getDiscountList: () => Discount[];
252
+ getAvailableWalletIds: () => number[];
251
253
  applyDiscount: () => void;
252
254
  }
@@ -11,7 +11,7 @@ export declare class ProductList extends BaseModule implements Module {
11
11
  constructor(name?: string, version?: string);
12
12
  initialize(core: PisellCore, options: any): Promise<void>;
13
13
  storeChange(path?: string, value?: any): Promise<void>;
14
- loadProducts({ category_ids, product_ids, collection, menu_list_ids, customer_id: paramsCustomerId, with_count, schedule_datetime, schedule_date, cacheId, with_schedule, }: {
14
+ loadProducts({ category_ids, product_ids, collection, menu_list_ids, customer_id: paramsCustomerId, with_count, schedule_datetime, schedule_date, cacheId, with_schedule, with_extra, }: {
15
15
  category_ids?: number[];
16
16
  product_ids?: number[];
17
17
  collection?: number | string[];
@@ -22,6 +22,8 @@ export declare class ProductList extends BaseModule implements Module {
22
22
  menu_list_ids?: number[];
23
23
  with_count?: string[];
24
24
  with_schedule?: number;
25
+ /** 追加到默认 with 字段(如 dataVariants) */
26
+ with_extra?: string[];
25
27
  }): Promise<any>;
26
28
  loadProductsPrice({ ids, customer_id, schedule_date, channel, }: {
27
29
  ids?: number[];
@@ -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); }); }; }
@@ -85,11 +91,11 @@ export var ProductList = /*#__PURE__*/function (_BaseModule) {
85
91
  key: "loadProducts",
86
92
  value: function () {
87
93
  var _loadProducts = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref) {
88
- var _ref$category_ids, category_ids, _ref$product_ids, product_ids, _ref$collection, collection, _ref$menu_list_ids, menu_list_ids, paramsCustomerId, _ref$with_count, with_count, schedule_datetime, schedule_date, cacheId, with_schedule, userPlugin, customer_id, _userPlugin$get, productsData, sortedList;
94
+ var _ref$category_ids, category_ids, _ref$product_ids, product_ids, _ref$collection, collection, _ref$menu_list_ids, menu_list_ids, paramsCustomerId, _ref$with_count, with_count, schedule_datetime, schedule_date, cacheId, with_schedule, _ref$with_extra, with_extra, userPlugin, customer_id, _userPlugin$get, productsData, sortedList;
89
95
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
90
96
  while (1) switch (_context3.prev = _context3.next) {
91
97
  case 0:
92
- _ref$category_ids = _ref.category_ids, category_ids = _ref$category_ids === void 0 ? [] : _ref$category_ids, _ref$product_ids = _ref.product_ids, product_ids = _ref$product_ids === void 0 ? [] : _ref$product_ids, _ref$collection = _ref.collection, collection = _ref$collection === void 0 ? [] : _ref$collection, _ref$menu_list_ids = _ref.menu_list_ids, menu_list_ids = _ref$menu_list_ids === void 0 ? [] : _ref$menu_list_ids, paramsCustomerId = _ref.customer_id, _ref$with_count = _ref.with_count, with_count = _ref$with_count === void 0 ? [] : _ref$with_count, schedule_datetime = _ref.schedule_datetime, schedule_date = _ref.schedule_date, cacheId = _ref.cacheId, with_schedule = _ref.with_schedule;
98
+ _ref$category_ids = _ref.category_ids, category_ids = _ref$category_ids === void 0 ? [] : _ref$category_ids, _ref$product_ids = _ref.product_ids, product_ids = _ref$product_ids === void 0 ? [] : _ref$product_ids, _ref$collection = _ref.collection, collection = _ref$collection === void 0 ? [] : _ref$collection, _ref$menu_list_ids = _ref.menu_list_ids, menu_list_ids = _ref$menu_list_ids === void 0 ? [] : _ref$menu_list_ids, paramsCustomerId = _ref.customer_id, _ref$with_count = _ref.with_count, with_count = _ref$with_count === void 0 ? [] : _ref$with_count, schedule_datetime = _ref.schedule_datetime, schedule_date = _ref.schedule_date, cacheId = _ref.cacheId, with_schedule = _ref.with_schedule, _ref$with_extra = _ref.with_extra, with_extra = _ref$with_extra === void 0 ? [] : _ref$with_extra;
93
99
  // // 如果 schedule_ids 为空,则需要尝试从 schedule 模块里获取
94
100
  // if (!schedule_ids?.length) {
95
101
  // const schedule_ids_data = this.store.schedule
@@ -109,13 +115,13 @@ export var ProductList = /*#__PURE__*/function (_BaseModule) {
109
115
  } catch (error) {
110
116
  console.error(error);
111
117
  }
112
- // 如果没传schedule_date,则从
113
- _context3.next = 6;
118
+ _context3.prev = 4;
119
+ _context3.next = 7;
114
120
  return this.request.post("/product/query", {
115
121
  open_quotation: 1,
116
122
  open_bundle: 0,
117
123
  exclude_extension_type: ['product_party', 'product_event', 'product_series_event', 'product_package_ticket', 'ticket', 'event_item'],
118
- with: ['category', 'collection', 'resourceRelation'],
124
+ with: ['category', 'collection', 'resourceRelation'].concat(_toConsumableArray(with_extra)),
119
125
  status: 'published',
120
126
  num: 500,
121
127
  skip: 1,
@@ -124,20 +130,21 @@ export var ProductList = /*#__PURE__*/function (_BaseModule) {
124
130
  ids: product_ids,
125
131
  collection: collection,
126
132
  front_end_cache_id: cacheId,
127
- menu_list_ids: menu_list_ids,
128
133
  with_count: with_count,
129
134
  // client_schedule_ids: schedule_ids,
130
135
  schedule_date: schedule_date,
136
+ schedule_datetime: schedule_datetime,
131
137
  // application_code: this.otherParams?.channel === 'online_store' ? 'online-store' : this.otherParams?.channel,
132
138
  application_code: 'online-store',
133
139
  with_schedule: with_schedule,
134
- schedule_datetime: schedule_datetime,
135
- is_eject: 1
140
+ is_eject: 1,
141
+ menu_list_ids: menu_list_ids,
142
+ open_deposit: 1
136
143
  }, {
137
144
  useCache: true,
138
145
  customToast: function customToast() {}
139
146
  });
140
- case 6:
147
+ case 7:
141
148
  productsData = _context3.sent;
142
149
  sortedList = (productsData.data.list || []).slice().sort(function (a, b) {
143
150
  return Number(b.sort) - Number(a.sort);
@@ -150,11 +157,15 @@ export var ProductList = /*#__PURE__*/function (_BaseModule) {
150
157
  // }
151
158
  this.addProduct(sortedList);
152
159
  return _context3.abrupt("return", sortedList);
153
- case 10:
160
+ case 13:
161
+ _context3.prev = 13;
162
+ _context3.t0 = _context3["catch"](4);
163
+ return _context3.abrupt("return", _context3.t0);
164
+ case 16:
154
165
  case "end":
155
166
  return _context3.stop();
156
167
  }
157
- }, _callee3, this);
168
+ }, _callee3, this, [[4, 13]]);
158
169
  }));
159
170
  function loadProducts(_x5) {
160
171
  return _loadProducts.apply(this, arguments);
@@ -6,6 +6,11 @@ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol
6
6
  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); }
7
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; }
8
8
  import dayjs from "dayjs";
9
+ import isSameOrAfter from "dayjs/plugin/isSameOrAfter";
10
+ import isSameOrBefore from "dayjs/plugin/isSameOrBefore";
11
+ dayjs.extend(isSameOrAfter);
12
+ dayjs.extend(isSameOrBefore);
13
+
9
14
  // 获取时间是否在日程范围内
10
15
  export var getDateIsInSchedule = function getDateIsInSchedule(dateTime, scheduleList) {
11
16
  if (!dateTime || !scheduleList || scheduleList.length === 0) {
@@ -310,7 +310,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
310
310
  date: string;
311
311
  status: string;
312
312
  week: string;
313
- weekNum: 0 | 2 | 1 | 5 | 4 | 3 | 6;
313
+ weekNum: 0 | 1 | 5 | 4 | 2 | 3 | 6;
314
314
  }[]>;
315
315
  submitTimeSlot(timeSlots: TimeSliceItem): void;
316
316
  private getScheduleDataByIds;
@@ -329,7 +329,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
329
329
  count: number;
330
330
  left: number;
331
331
  summaryCount: number;
332
- status: "lots_of_space" | "filling_up_fast" | "sold_out";
332
+ status: "sold_out" | "lots_of_space" | "filling_up_fast";
333
333
  }[];
334
334
  /**
335
335
  * 找到多个资源的公共可用时间段
@@ -857,7 +857,7 @@ export var ScanOrderImpl = /*#__PURE__*/function (_BaseModule) {
857
857
  var tempOrder = this.store.order.ensureTempOrder();
858
858
  tempOrder.metadata = _objectSpread(_objectSpread({}, tempOrder.metadata || {}), {}, {
859
859
  shop_service_data: _objectSpread(_objectSpread({}, (tempOrder.metadata || {}).shop_service_data || {}), {}, {
860
- service_type: ((_this$otherParams4 = this.otherParams) === null || _this$otherParams4 === void 0 ? void 0 : _this$otherParams4.businessCode) === 'dine_in' ? 'dine_in' : 'take_away',
860
+ service_type: ((_this$otherParams4 = this.otherParams) === null || _this$otherParams4 === void 0 ? void 0 : _this$otherParams4.businessCode) === 'dine_in' ? 'dine_in' : '',
861
861
  pickup_reference_mode: mode
862
862
  })
863
863
  });
@@ -783,7 +783,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
783
783
  key: "loadPrepareConfig",
784
784
  value: function () {
785
785
  var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(params) {
786
- var _this$getCustomer2, _this$store$discount8, _this$getDiscountList, _this$store$discount9, _this$store$productLi2, orderId, customerId, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, filteredDiscountList, _result3;
786
+ var _this$getCustomer2, _this$store$discount8, _this$getDiscountList, _this$store$discount9, _this$store$productLi2, orderId, customerId, prepareConfig, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, filteredDiscountList, _result3;
787
787
  return _regeneratorRuntime().wrap(function _callee10$(_context10) {
788
788
  while (1) switch (_context10.prev = _context10.next) {
789
789
  case 0:
@@ -804,47 +804,48 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
804
804
  order_id: orderId
805
805
  } : {}));
806
806
  case 5:
807
- goodPassList = _context10.sent;
807
+ prepareConfig = _context10.sent;
808
+ goodPassList = (prepareConfig === null || prepareConfig === void 0 ? void 0 : prepareConfig.discountList) || [];
808
809
  scanDiscount = (_this$getDiscountList = this.getDiscountList()) === null || _this$getDiscountList === void 0 ? void 0 : _this$getDiscountList.filter(function (item) {
809
810
  return item.isScan;
810
811
  }); // goodPassList 里可能有 scanDiscount 重合的部分,goodPassList 需要剔除
811
812
  scanDiscountIds = scanDiscount.map(function (n) {
812
813
  return n.id;
813
814
  });
814
- newGoodPassList = goodPassList === null || goodPassList === void 0 ? void 0 : goodPassList.filter(function (n) {
815
+ newGoodPassList = goodPassList.filter(function (n) {
815
816
  return !scanDiscountIds.includes(n.id);
816
817
  });
817
818
  newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || [])); // 存储原始优惠券列表
818
819
  this.store.originalDiscountList = newDiscountList;
819
- _context10.next = 13;
820
+ _context10.next = 14;
820
821
  return (_this$store$discount9 = this.store.discount) === null || _this$store$discount9 === void 0 ? void 0 : _this$store$discount9.setOriginalDiscountList(newDiscountList);
821
- case 13:
822
+ case 14:
822
823
  // 根据当前预约时间过滤优惠券列表
823
824
  filteredDiscountList = this.filterDiscountListByBookingTime(newDiscountList, this.store.currentBookingTime);
824
825
  this.store.filteredDiscountList = filteredDiscountList;
825
826
  this.setDiscountList(filteredDiscountList || []);
826
827
  if (!((_this$store$productLi2 = this.store.productList) !== null && _this$store$productLi2 !== void 0 && _this$store$productLi2.length)) {
827
- _context10.next = 20;
828
+ _context10.next = 21;
828
829
  break;
829
830
  }
830
831
  _result3 = this.calcDiscount(this.store.productList);
831
- _context10.next = 20;
832
+ _context10.next = 21;
832
833
  return this.core.effects.emit("".concat(this.name, ":onLoadPrepareCalcResult"), _result3);
833
- case 20:
834
- _context10.next = 22;
834
+ case 21:
835
+ _context10.next = 23;
835
836
  return this.core.effects.emit("".concat(this.name, ":onLoadDiscountList"), filteredDiscountList);
836
- case 22:
837
- _context10.next = 27;
837
+ case 23:
838
+ _context10.next = 28;
838
839
  break;
839
- case 24:
840
- _context10.prev = 24;
840
+ case 25:
841
+ _context10.prev = 25;
841
842
  _context10.t0 = _context10["catch"](0);
842
843
  console.error('[ShopDiscount] 加载准备配置出错:', _context10.t0);
843
- case 27:
844
+ case 28:
844
845
  case "end":
845
846
  return _context10.stop();
846
847
  }
847
- }, _callee10, this, [[0, 24]]);
848
+ }, _callee10, this, [[0, 25]]);
848
849
  }));
849
850
  function loadPrepareConfig(_x10) {
850
851
  return _loadPrepareConfig.apply(this, arguments);
@@ -3,6 +3,7 @@ import { BaseModule } from '../../modules/BaseModule';
3
3
  import { VenueBookingAddLogParams, VenueBookingSlotConfig, VenueDateSummaryItem, VenueSlotSelection, VenueTimeSlotGrid } from './types';
4
4
  import type { ScanOrderOrderProduct, ScanOrderOrderProductIdentity } from '../ScanOrder/types';
5
5
  import type { UpdateProductInOrderParams } from '../../modules/Order/types';
6
+ import type { ScheduleItem } from '../../modules/Schedule/types';
6
7
  import type { OpenDataAvailabilityResult } from '../../modules/OpenData';
7
8
  import type { ProductData } from '../../modules/Product/types';
8
9
  import { type CartItemSummary, type PaxInfo, type QuantityCheckResult, type QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
@@ -36,10 +37,17 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
36
37
  private loginEffectDisposers;
37
38
  private customerLoginRefreshInFlight;
38
39
  private customerLoginRefreshIdInFlight;
40
+ /** 最近一次确认登录的客户;登录事件与 user 插件更新之间可能存在时序差。 */
41
+ private smartPricingCustomerId;
39
42
  private loadAllProductsInFlight;
40
43
  private productsLoaded;
41
44
  private loadOpenDataConfigInFlight;
42
45
  private static readonly OPEN_DATA_CACHE_TTL;
46
+ /** 按日期缓存 slot 智能定价 Map,避免同周重复 resolveProducts */
47
+ private slotPriceMapCache;
48
+ /** loadProducts 后缓存的全量商品(venue + addon),供分段算价复用 */
49
+ private smartPricingProductCatalog;
50
+ private static readonly PISELL1_LOGIN_SUCCESS;
43
51
  private getLoggerContext;
44
52
  private safeStringify;
45
53
  private pickErrorMessage;
@@ -68,6 +76,22 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
68
76
  passed: boolean | null;
69
77
  failures: QuantityCheckResult[];
70
78
  };
79
+ /** 清除 slot 价格分段缓存(商品重载 / 登录后 customerId 变化时调用) */
80
+ private clearSlotPriceMapCache;
81
+ /** 读取当前登录 customerId */
82
+ private resolveCustomerIdForSmartPricing;
83
+ private resolveAvailableWalletIdsForSmartPricing;
84
+ /** 读取 schedule 全量列表,供智能定价 schedule_match 使用 */
85
+ private getScheduleListForSmartPricing;
86
+ /** 构建智能定价上下文,对齐 OS Server buildProductFormatterContext */
87
+ private buildSmartPricingContext;
88
+ /** venue + addon 全量商品,供智能定价评估 */
89
+ private getAllProductsForSmartPricing;
90
+ private getSlotPriceMapCacheKey;
91
+ /**
92
+ * 按 schedule 分段构建 slot 价格 Map,带实例级缓存。
93
+ */
94
+ private buildSlotPriceMapForDate;
71
95
  loadAllProducts(): Promise<{
72
96
  venueProducts: ProductData[];
73
97
  addonProducts: ProductData[];
@@ -140,8 +164,7 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
140
164
  setSlotConfig(config: Partial<VenueBookingSlotConfig>): void;
141
165
  getSlotConfig(): VenueBookingSlotConfig;
142
166
  loadSchedules(): Promise<void>;
143
- private injectScheduleResolverToQuotation;
144
- getScheduleListByIds(ids: number[]): import("../../modules/Schedule/types").ScheduleItem[];
167
+ getScheduleListByIds(ids: number[]): ScheduleItem[];
145
168
  getTempOrder(): import("./types").ScanOrderTempOrder | null;
146
169
  updateTempOrderNote(note: string): string;
147
170
  updateTempOrderContactsInfo(contactsInfo: any[]): any[];
@@ -149,7 +172,12 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
149
172
  onCustomerLogin(params: {
150
173
  customerId: number;
151
174
  }): Promise<void>;
152
- private recalculateOrderPricesFromQuotation;
175
+ private recalculateOrderPricesFromSmartPricing;
176
+ /**
177
+ * DataVariant 重算价格后,同步刷新订单展示、Rules 与 Summary 共用的价格口径。
178
+ * Rules 会在本轮结束后根据当前客户的 discountList 重新写入实际折扣。
179
+ */
180
+ private resetProductPriceForSmartPricing;
153
181
  scanCode(code: string, customerId?: number): Promise<{
154
182
  isAvailable: boolean;
155
183
  discountList: import("../../modules/Discount").Discount[];
@@ -164,6 +192,15 @@ export declare class VenueBookingImpl extends BaseModule implements Module {
164
192
  discountId: number;
165
193
  isSelected: boolean;
166
194
  }): Promise<import("../../modules/Discount").Discount[]>;
195
+ /**
196
+ * 统一 VenueBooking 折扣后的订单行价。
197
+ *
198
+ * Rules 的 `discount_list.amount` 是已经按适用规则计算出的每件优惠额;它是这里唯一
199
+ * 的折扣金额来源。使用智能定价写入的 source_product_price 减去该金额,再同步
200
+ * selling_price 与 Summary 使用的 main_product_selling_price,避免 UI 的购物车行价、
201
+ * 小计和提交订单各自读取到不同的价格字段。
202
+ */
203
+ private normalizeDiscountedOrderPrices;
167
204
  addNewOrder(): Promise<import("./types").ScanOrderTempOrder>;
168
205
  getOrderProducts(): ScanOrderOrderProduct[];
169
206
  getSummary(): Promise<import("./types").ScanOrderSummary>;