@pisell/pisellos 0.0.128 → 0.0.130

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.
@@ -17,6 +17,7 @@ export declare class DiscountModule extends BaseModule implements Module, Discou
17
17
  loadPrepareConfig(params: {
18
18
  action?: 'create';
19
19
  with_good_pass: 0 | 1;
20
+ with_discount_card: 0 | 1;
20
21
  customer_id: number;
21
22
  }): Promise<Discount[]>;
22
23
  batchSearch(code: string): Promise<Discount[]>;
@@ -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); }); }; }
@@ -18,6 +24,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
18
24
  import { uniqueById } from "../../solution/ShopDiscount/utils";
19
25
  import { BaseModule } from "../BaseModule";
20
26
  import { DiscountHooks } from "./types";
27
+ import Decimal from 'decimal.js';
21
28
  export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
22
29
  _inherits(DiscountModule, _BaseModule);
23
30
  var _super = _createSuper(DiscountModule);
@@ -113,7 +120,7 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
113
120
  key: "loadPrepareConfig",
114
121
  value: function () {
115
122
  var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(params) {
116
- var _prepareConfig$data;
123
+ var _prepareConfig$data, _prepareConfig$data2;
117
124
  var prepareConfig, goodPassList;
118
125
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
119
126
  while (1) switch (_context3.prev = _context3.next) {
@@ -122,9 +129,10 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
122
129
  return this.request.post("/order/prepare/config", params);
123
130
  case 2:
124
131
  prepareConfig = _context3.sent;
125
- goodPassList = this.filterEnabledDiscountList((prepareConfig === null || prepareConfig === void 0 || (_prepareConfig$data = prepareConfig.data) === null || _prepareConfig$data === void 0 ? void 0 : _prepareConfig$data.good_pass_list) || []) || [];
132
+ goodPassList = this.filterEnabledDiscountList([].concat(_toConsumableArray((prepareConfig === null || prepareConfig === void 0 || (_prepareConfig$data = prepareConfig.data) === null || _prepareConfig$data === void 0 ? void 0 : _prepareConfig$data.good_pass_list) || []), _toConsumableArray((prepareConfig === null || prepareConfig === void 0 || (_prepareConfig$data2 = prepareConfig.data) === null || _prepareConfig$data2 === void 0 ? void 0 : _prepareConfig$data2.discount_card_list) || []))) || [];
133
+ this.setDiscountList(goodPassList);
126
134
  return _context3.abrupt("return", goodPassList);
127
- case 5:
135
+ case 6:
128
136
  case "end":
129
137
  return _context3.stop();
130
138
  }
@@ -147,7 +155,7 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
147
155
  return this.request.get("/machinecode/batch-search", {
148
156
  code: code,
149
157
  translate_flag: 1,
150
- tag: 'good_pass',
158
+ tags: ['good_pass', 'product_discount_card'],
151
159
  available: 1,
152
160
  relation_product: 1
153
161
  });
@@ -170,7 +178,7 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
170
178
  key: "filterEnabledDiscountList",
171
179
  value: function filterEnabledDiscountList(discountList) {
172
180
  return discountList.filter(function (discount) {
173
- return discount.limit_status === 'enable' && Number((discount === null || discount === void 0 ? void 0 : discount.par_value) || 0) - Number((discount === null || discount === void 0 ? void 0 : discount.used_par_value) || 0) > 0;
181
+ return discount.limit_status === 'enable' && new Decimal((discount === null || discount === void 0 ? void 0 : discount.par_value) || 0).minus(new Decimal((discount === null || discount === void 0 ? void 0 : discount.used_par_value) || 0)).greaterThan(0);
174
182
  });
175
183
  }
176
184
 
@@ -198,8 +206,8 @@ export var DiscountModule = /*#__PURE__*/function (_BaseModule) {
198
206
  }
199
207
  if (discount.appliedProductDetails) {
200
208
  return discount.appliedProductDetails.reduce(function (total, product) {
201
- var price = Number(product === null || product === void 0 ? void 0 : product.amount) || 0;
202
- return total + price;
209
+ var price = new Decimal((product === null || product === void 0 ? void 0 : product.amount) || 0);
210
+ return new Decimal(total).plus(price).toNumber();
203
211
  }, 0);
204
212
  }
205
213
  }
@@ -27,6 +27,7 @@ import { BaseModule } from "../BaseModule";
27
27
  import { RulesHooks } from "./types";
28
28
  import { uniqueById } from "../../solution/ShopDiscount/utils";
29
29
  import { getProductOriginTotalPrice, getProductTotalPrice } from "../Cart/utils";
30
+ import Decimal from 'decimal.js';
30
31
  export var RulesModule = /*#__PURE__*/function (_BaseModule) {
31
32
  _inherits(RulesModule, _BaseModule);
32
33
  var _super = _createSuper(RulesModule);
@@ -163,24 +164,49 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
163
164
  return !discount.isManualSelect;
164
165
  });
165
166
 
166
- // 优惠券按过期时间排序(即将过期优先)
167
+ // 优惠力度排序,传进来的数据里可能有商品券,也可能有优惠券
168
+ // 商品券(n.tag=good_pass)视为最优惠(免费),折扣券(n.tag=product_discount_card)按照n.par_value排序
169
+ // 如果最后拍出来商品券有多个,或者说没有商品券,但是有多个相同折扣的折扣券(比如 6 折券有 3张),则按照过期时间(n.expire_time)排序
167
170
  var sortedDiscountList = _toConsumableArray(filteredDiscountList).sort(function (a, b) {
168
- if (a.expire_time && b.expire_time) {
169
- var timeA = new Date(a.expire_time).getTime();
170
- var timeB = new Date(b.expire_time).getTime();
171
- return timeA - timeB;
171
+ // 1. 商品券优先级最高
172
+ if (a.tag === 'good_pass' && b.tag !== 'good_pass') return -1;
173
+ if (b.tag === 'good_pass' && a.tag !== 'good_pass') return 1;
174
+
175
+ // 2. 如果都是商品券或都不是商品券,按照类型和折扣力度排序
176
+ if (a.tag === 'good_pass' && b.tag === 'good_pass') {
177
+ // 都是商品券,按照过期时间排序
178
+ return compareByExpireTime(a, b);
179
+ } else if (a.tag === 'product_discount_card' && b.tag === 'product_discount_card') {
180
+ // 都是折扣券,按照par_value排序(折扣越大越优先,即par_value越小越优先)
181
+ if (a.par_value !== b.par_value) {
182
+ var valueA = new Decimal(a.par_value || 0);
183
+ var valueB = new Decimal(b.par_value || 0);
184
+ return valueA.minus(valueB).toNumber();
185
+ }
186
+ // 相同折扣的情况下,按照过期时间排序
187
+ return compareByExpireTime(a, b);
188
+ }
189
+
190
+ // 3. 其他情况按照过期时间排序
191
+ return compareByExpireTime(a, b);
192
+ function compareByExpireTime(itemA, itemB) {
193
+ if (itemA.expire_time && itemB.expire_time) {
194
+ var timeA = new Date(itemA.expire_time).getTime();
195
+ var timeB = new Date(itemB.expire_time).getTime();
196
+ return timeA - timeB;
197
+ }
198
+ // 有过期时间的优先级高于永久的
199
+ return itemA.expire_time ? -1 : itemB.expire_time ? 1 : 0;
172
200
  }
173
- // 有过期时间的优先级高于永久的
174
- return a.expire_time ? -1 : b.expire_time ? 1 : 0;
175
201
  });
176
202
 
177
203
  // 对productList按价格降序排序(用于应用优惠券时优先选择高价商品)
178
204
  var sortedProductList = _toConsumableArray(productList).sort(function (a, b) {
179
205
  var aProduct = _this3.hooks.getProduct(a);
180
206
  var bProduct = _this3.hooks.getProduct(b);
181
- var priceA = parseFloat(aProduct.price || '0');
182
- var priceB = parseFloat(bProduct.price || '0');
183
- return priceB - priceA;
207
+ var priceA = new Decimal(aProduct.price || '0');
208
+ var priceB = new Decimal(bProduct.price || '0');
209
+ return priceB.minus(priceA).toNumber();
184
210
  });
185
211
 
186
212
  // 标记已使用的优惠券
@@ -233,7 +259,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
233
259
  discount: {
234
260
  resource_id: discount.id,
235
261
  title: discount.format_title,
236
- original_amount: product.origin_total
262
+ original_amount: product.origin_total,
263
+ pre_value: discount.par_value
237
264
  }
238
265
  });
239
266
  discountApplicableProducts.set(discount.id, applicableProducts);
@@ -321,14 +348,16 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
321
348
 
322
349
  // 记录实际应用了优惠券的商品信息
323
350
  var appliedProducts = appliedDiscountProducts.get(selectedDiscount.id) || [];
351
+ var targetProductPrice = selectedDiscount.tag === 'good_pass' ? '0' : new Decimal(selectedDiscount.par_value || 0).div(100).mul(new Decimal(product.price || 0)).toFixed(2);
324
352
  var discountDetail = {
325
- amount: product.price,
326
- type: selectedDiscount.tag,
353
+ amount: selectedDiscount.tag === 'product_discount_card' ? new Decimal(product.price || 0).minus(new Decimal(targetProductPrice)).toNumber() : product.price,
354
+ type: selectedDiscount.tag === 'product_discount_card' ? 'discount_card' : selectedDiscount.tag,
327
355
  discount: {
328
356
  resource_id: selectedDiscount.id,
329
357
  title: selectedDiscount.format_title,
330
- original_amount: product.origin_total,
331
- product_id: selectedDiscount.product_id
358
+ original_amount: product.price,
359
+ product_id: selectedDiscount.product_id,
360
+ percent: selectedDiscount.par_value
332
361
  }
333
362
  };
334
363
  appliedProducts.push(discountDetail);
@@ -339,7 +368,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
339
368
  if (product.isClient) {
340
369
  processedProductsMap.set(product._id, _this3.hooks.setProduct(originProduct, {
341
370
  discount_list: [discountDetail],
342
- price: 0,
371
+ price: new Decimal(targetProductPrice).toNumber(),
343
372
  origin_total: getProductOriginTotalPrice({
344
373
  product: {
345
374
  original_price: product.original_price
@@ -349,7 +378,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
349
378
  }),
350
379
  total: getProductTotalPrice({
351
380
  product: {
352
- price: '0'
381
+ price: targetProductPrice
353
382
  },
354
383
  bundle: product.bundle,
355
384
  options: product.options
@@ -358,8 +387,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
358
387
  } else {
359
388
  processedProductsMap.set(product._id, _this3.hooks.setProduct(originProduct, {
360
389
  discount_list: [discountDetail],
361
- price: 0,
362
- total: (product.origin_total || product.total) - product.price,
390
+ price: new Decimal(targetProductPrice).toNumber(),
391
+ total: new Decimal(product.origin_total || product.total || 0).minus(new Decimal(product.price || 0)).toNumber(),
363
392
  origin_total: product.origin_total || product.total
364
393
  }));
365
394
  }
@@ -2019,7 +2019,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2019
2019
  };
2020
2020
  }
2021
2021
  if (recordTimeSlots) {
2022
- var _item$_productOrigin4, _item$_productOrigin5;
2022
+ var _item$_productOrigin4, _item$_productOrigin5, _item$_productOrigin6;
2023
2023
  // 同一账号下,如果当前商品不是第一个,则需要根据上一个商品的 end_time 和 duration 计算出当前商品的 start_time 和 end_time
2024
2024
  // 前提:当前资源是单个预约才需要这么做
2025
2025
  var currentResourceConfig = (_item$_productOrigin4 = item._productOrigin) === null || _item$_productOrigin4 === void 0 || (_item$_productOrigin4 = _item$_productOrigin4.product_resource) === null || _item$_productOrigin4 === void 0 || (_item$_productOrigin4 = _item$_productOrigin4.resources) === null || _item$_productOrigin4 === void 0 ? void 0 : _item$_productOrigin4.find(function (n) {
@@ -2027,10 +2027,10 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2027
2027
  });
2028
2028
  var resourceBookingType = (currentResourceConfig === null || currentResourceConfig === void 0 ? void 0 : currentResourceConfig.type) || 'single';
2029
2029
  // 只有 duration 类商品需要这个操作
2030
- if (index !== 0 && recordTimeSlots && resourceBookingType === 'single' && (_item$_productOrigin5 = item._productOrigin) !== null && _item$_productOrigin5 !== void 0 && _item$_productOrigin5.duration) {
2031
- var _item$_productOrigin6, _item$_productOrigin7;
2032
- var start_at = dayjs(recordTimeSlots.end_time).add(((_item$_productOrigin6 = item._productOrigin) === null || _item$_productOrigin6 === void 0 || (_item$_productOrigin6 = _item$_productOrigin6.duration) === null || _item$_productOrigin6 === void 0 ? void 0 : _item$_productOrigin6.value) || 10, 'minutes');
2033
- var end_at = start_at.add(((_item$_productOrigin7 = item._productOrigin) === null || _item$_productOrigin7 === void 0 || (_item$_productOrigin7 = _item$_productOrigin7.duration) === null || _item$_productOrigin7 === void 0 ? void 0 : _item$_productOrigin7.value) || 10, 'minutes');
2030
+ if (index !== 0 && recordTimeSlots && (currentResourceConfig === null || currentResourceConfig === void 0 ? void 0 : currentResourceConfig.type) === 'single' && (_item$_productOrigin5 = item._productOrigin) !== null && _item$_productOrigin5 !== void 0 && _item$_productOrigin5.duration && ((_item$_productOrigin6 = item._productOrigin) === null || _item$_productOrigin6 === void 0 || (_item$_productOrigin6 = _item$_productOrigin6.duration) === null || _item$_productOrigin6 === void 0 ? void 0 : _item$_productOrigin6.type) !== 'flexible') {
2031
+ var _item$_productOrigin7, _item$_productOrigin8;
2032
+ var start_at = dayjs(recordTimeSlots.end_time).add(((_item$_productOrigin7 = item._productOrigin) === null || _item$_productOrigin7 === void 0 || (_item$_productOrigin7 = _item$_productOrigin7.duration) === null || _item$_productOrigin7 === void 0 ? void 0 : _item$_productOrigin7.value) || 10, 'minutes');
2033
+ var end_at = start_at.add(((_item$_productOrigin8 = item._productOrigin) === null || _item$_productOrigin8 === void 0 || (_item$_productOrigin8 = _item$_productOrigin8.duration) === null || _item$_productOrigin8 === void 0 ? void 0 : _item$_productOrigin8.value) || 10, 'minutes');
2034
2034
  recordTimeSlots = {
2035
2035
  start_time: start_at.format('HH:mm'),
2036
2036
  end_time: end_at.format('HH:mm'),
@@ -2078,12 +2078,12 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2078
2078
  errorList.push(item._id);
2079
2079
  }
2080
2080
  } else {
2081
- var _item$_productOrigin8, _productResources$fin;
2081
+ var _item$_productOrigin9, _productResources$fin;
2082
2082
  // 这里必须每次循环重新读,避免前一次循环操作了购物车,导致数据变更
2083
2083
  var allCartItems = cloneDeep(_this10.store.cart.getItems());
2084
2084
  // 如果没有传递 timeSlots,代表是第一种资源,则直接拿商品的 duration,到资源列表里找一个公共可用的
2085
2085
  var selectedResources = [];
2086
- var _resources = cloneDeep(((_item$_productOrigin8 = item._productOrigin) === null || _item$_productOrigin8 === void 0 || (_item$_productOrigin8 = _item$_productOrigin8.product_resource) === null || _item$_productOrigin8 === void 0 ? void 0 : _item$_productOrigin8.resources) || []);
2086
+ var _resources = cloneDeep(((_item$_productOrigin9 = item._productOrigin) === null || _item$_productOrigin9 === void 0 || (_item$_productOrigin9 = _item$_productOrigin9.product_resource) === null || _item$_productOrigin9 === void 0 ? void 0 : _item$_productOrigin9.resources) || []);
2087
2087
  var currentResourcesRenderList = [];
2088
2088
  _resources.forEach(function (n) {
2089
2089
  var _n$renderList;
@@ -2198,8 +2198,8 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2198
2198
  var maxCutOffTime = undefined;
2199
2199
  var maxCutOffTimeValue = dayjs();
2200
2200
  cartItems.forEach(function (item) {
2201
- var _item$_productOrigin9, _item$_productOrigin10, _item$_productOrigin11, _item$_productOrigin12;
2202
- (_item$_productOrigin9 = item._productOrigin) === null || _item$_productOrigin9 === void 0 || (_item$_productOrigin9 = _item$_productOrigin9.product_resource) === null || _item$_productOrigin9 === void 0 || (_item$_productOrigin9 = _item$_productOrigin9.resources) === null || _item$_productOrigin9 === void 0 || _item$_productOrigin9.forEach(function (n) {
2201
+ var _item$_productOrigin10, _item$_productOrigin11, _item$_productOrigin12, _item$_productOrigin13;
2202
+ (_item$_productOrigin10 = item._productOrigin) === null || _item$_productOrigin10 === void 0 || (_item$_productOrigin10 = _item$_productOrigin10.product_resource) === null || _item$_productOrigin10 === void 0 || (_item$_productOrigin10 = _item$_productOrigin10.resources) === null || _item$_productOrigin10 === void 0 || _item$_productOrigin10.forEach(function (n) {
2203
2203
  // TODO: 少了个 status 的判断
2204
2204
  if (n.code === resources_code) {
2205
2205
  resources.push.apply(resources, _toConsumableArray(n.renderList || []));
@@ -2212,10 +2212,10 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2212
2212
  if (item.resource_id) {
2213
2213
  resourceIds.push(item.resource_id);
2214
2214
  }
2215
- resourcesTypeId = item === null || item === void 0 || (_item$_productOrigin10 = item._productOrigin) === null || _item$_productOrigin10 === void 0 || (_item$_productOrigin10 = _item$_productOrigin10.product_resource) === null || _item$_productOrigin10 === void 0 || (_item$_productOrigin10 = _item$_productOrigin10.resources) === null || _item$_productOrigin10 === void 0 || (_item$_productOrigin10 = _item$_productOrigin10.find(function (n) {
2215
+ resourcesTypeId = item === null || item === void 0 || (_item$_productOrigin11 = item._productOrigin) === null || _item$_productOrigin11 === void 0 || (_item$_productOrigin11 = _item$_productOrigin11.product_resource) === null || _item$_productOrigin11 === void 0 || (_item$_productOrigin11 = _item$_productOrigin11.resources) === null || _item$_productOrigin11 === void 0 || (_item$_productOrigin11 = _item$_productOrigin11.find(function (n) {
2216
2216
  return n.code === resources_code;
2217
- })) === null || _item$_productOrigin10 === void 0 ? void 0 : _item$_productOrigin10.id;
2218
- if ((_item$_productOrigin11 = item._productOrigin) !== null && _item$_productOrigin11 !== void 0 && _item$_productOrigin11.cut_off_time && ((_item$_productOrigin12 = item._productOrigin) === null || _item$_productOrigin12 === void 0 ? void 0 : _item$_productOrigin12.cut_off_time.type) === 'advance') {
2217
+ })) === null || _item$_productOrigin11 === void 0 ? void 0 : _item$_productOrigin11.id;
2218
+ if ((_item$_productOrigin12 = item._productOrigin) !== null && _item$_productOrigin12 !== void 0 && _item$_productOrigin12.cut_off_time && ((_item$_productOrigin13 = item._productOrigin) === null || _item$_productOrigin13 === void 0 ? void 0 : _item$_productOrigin13.cut_off_time.type) === 'advance') {
2219
2219
  var currentCutOffTime = dayjs().add(item._productOrigin.cut_off_time.unit, item._productOrigin.cut_off_time.unit_type);
2220
2220
  if (currentCutOffTime.isAfter(maxCutOffTimeValue, 'minute')) {
2221
2221
  maxCutOffTimeValue = currentCutOffTime;
@@ -2243,13 +2243,13 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2243
2243
  cartItems.forEach(function (item) {
2244
2244
  // 单个预约累加账号 多个预约取最大值
2245
2245
  if (isSingleResource) {
2246
- var _item$_productOrigin13;
2247
- accountDuration += ((_item$_productOrigin13 = item._productOrigin) === null || _item$_productOrigin13 === void 0 || (_item$_productOrigin13 = _item$_productOrigin13.duration) === null || _item$_productOrigin13 === void 0 ? void 0 : _item$_productOrigin13.value) || 10;
2248
- } else {
2249
2246
  var _item$_productOrigin14;
2250
- if (accountDuration < (((_item$_productOrigin14 = item._productOrigin) === null || _item$_productOrigin14 === void 0 || (_item$_productOrigin14 = _item$_productOrigin14.duration) === null || _item$_productOrigin14 === void 0 ? void 0 : _item$_productOrigin14.value) || 10)) {
2251
- var _item$_productOrigin15;
2252
- accountDuration = ((_item$_productOrigin15 = item._productOrigin) === null || _item$_productOrigin15 === void 0 || (_item$_productOrigin15 = _item$_productOrigin15.duration) === null || _item$_productOrigin15 === void 0 ? void 0 : _item$_productOrigin15.value) || 10;
2247
+ accountDuration += ((_item$_productOrigin14 = item._productOrigin) === null || _item$_productOrigin14 === void 0 || (_item$_productOrigin14 = _item$_productOrigin14.duration) === null || _item$_productOrigin14 === void 0 ? void 0 : _item$_productOrigin14.value) || 10;
2248
+ } else {
2249
+ var _item$_productOrigin15;
2250
+ if (accountDuration < (((_item$_productOrigin15 = item._productOrigin) === null || _item$_productOrigin15 === void 0 || (_item$_productOrigin15 = _item$_productOrigin15.duration) === null || _item$_productOrigin15 === void 0 ? void 0 : _item$_productOrigin15.value) || 10)) {
2251
+ var _item$_productOrigin16;
2252
+ accountDuration = ((_item$_productOrigin16 = item._productOrigin) === null || _item$_productOrigin16 === void 0 || (_item$_productOrigin16 = _item$_productOrigin16.duration) === null || _item$_productOrigin16 === void 0 ? void 0 : _item$_productOrigin16.value) || 10;
2253
2253
  }
2254
2254
  }
2255
2255
  });
@@ -2286,8 +2286,8 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2286
2286
  }
2287
2287
  var resourcesUseableMap = {};
2288
2288
  var hasFlexibleDuration = cartItems.some(function (item) {
2289
- var _item$_productOrigin16;
2290
- return ((_item$_productOrigin16 = item._productOrigin) === null || _item$_productOrigin16 === void 0 || (_item$_productOrigin16 = _item$_productOrigin16.duration) === null || _item$_productOrigin16 === void 0 ? void 0 : _item$_productOrigin16.type) === 'flexible';
2289
+ var _item$_productOrigin17;
2290
+ return ((_item$_productOrigin17 = item._productOrigin) === null || _item$_productOrigin17 === void 0 || (_item$_productOrigin17 = _item$_productOrigin17.duration) === null || _item$_productOrigin17 === void 0 ? void 0 : _item$_productOrigin17.type) === 'flexible';
2291
2291
  });
2292
2292
  var operating_day_boundary = (_this$shopStore$get = this.shopStore.get('core')) === null || _this$shopStore$get === void 0 || (_this$shopStore$get = _this$shopStore$get.core) === null || _this$shopStore$get === void 0 || (_this$shopStore$get = _this$shopStore$get.operating_day_boundary) === null || _this$shopStore$get === void 0 ? void 0 : _this$shopStore$get.time;
2293
2293
  var timeSlots = getTimeSlicesByResources({
@@ -2338,9 +2338,9 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2338
2338
  var _newResources$;
2339
2339
  var newResources = cloneDeep(item._origin.resources);
2340
2340
  newResources.forEach(function (resource) {
2341
- var _item$_productOrigin17;
2341
+ var _item$_productOrigin18;
2342
2342
  // 如果商品配置的是灵活时长,开始时间设置为提交的时间,结束时间从资源的可用最晚时间和店铺营业结束时间里取一个最早的
2343
- if (((_item$_productOrigin17 = item._productOrigin) === null || _item$_productOrigin17 === void 0 || (_item$_productOrigin17 = _item$_productOrigin17.duration) === null || _item$_productOrigin17 === void 0 ? void 0 : _item$_productOrigin17.type) === 'flexible') {
2343
+ if (((_item$_productOrigin18 = item._productOrigin) === null || _item$_productOrigin18 === void 0 || (_item$_productOrigin18 = _item$_productOrigin18.duration) === null || _item$_productOrigin18 === void 0 ? void 0 : _item$_productOrigin18.type) === 'flexible') {
2344
2344
  var _allResources$find;
2345
2345
  item.duration = {
2346
2346
  type: 'minutes',
@@ -2366,9 +2366,9 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2366
2366
  }
2367
2367
  resource.endTime = formattedEndTime.format('YYYY-MM-DD HH:mm');
2368
2368
  } else {
2369
- var _item$_productOrigin18;
2369
+ var _item$_productOrigin19;
2370
2370
  resource.startTime = currentStartTime;
2371
- resource.endTime = dayjs(currentStartTime).add(((_item$_productOrigin18 = item._productOrigin) === null || _item$_productOrigin18 === void 0 || (_item$_productOrigin18 = _item$_productOrigin18.duration) === null || _item$_productOrigin18 === void 0 ? void 0 : _item$_productOrigin18.value) || 10, 'minutes').format('YYYY-MM-DD HH:mm');
2371
+ resource.endTime = dayjs(currentStartTime).add(((_item$_productOrigin19 = item._productOrigin) === null || _item$_productOrigin19 === void 0 || (_item$_productOrigin19 = _item$_productOrigin19.duration) === null || _item$_productOrigin19 === void 0 ? void 0 : _item$_productOrigin19.value) || 10, 'minutes').format('YYYY-MM-DD HH:mm');
2372
2372
  }
2373
2373
  // delete resource.times;
2374
2374
  });
@@ -2592,7 +2592,8 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2592
2592
  _ref11$quantity = _ref11.quantity,
2593
2593
  quantity = _ref11$quantity === void 0 ? 1 : _ref11$quantity;
2594
2594
  var productData = _objectSpread(_objectSpread({}, origin), {}, {
2595
- product_variant_id: product_variant_id
2595
+ product_variant_id: product_variant_id,
2596
+ rowKey: rowKey
2596
2597
  });
2597
2598
  if (!account) {
2598
2599
  var activeAccount = this.getActiveAccount();
@@ -2611,7 +2612,10 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2611
2612
  _id: targetCartItem._id,
2612
2613
  product: _objectSpread(_objectSpread({}, targetCartItem._productOrigin), {}, {
2613
2614
  quantity: (targetCartItem.num || 1) + quantity
2614
- })
2615
+ }),
2616
+ bundle: targetCartItem._bundleOrigin,
2617
+ options: targetCartItem._optionsOrigin,
2618
+ quantity: (targetCartItem.num || 1) + quantity
2615
2619
  });
2616
2620
  return;
2617
2621
  }
@@ -2949,6 +2953,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2949
2953
  startDate,
2950
2954
  endDate,
2951
2955
  endDateAfterMonth,
2956
+ tempEndDate,
2952
2957
  tempProducts,
2953
2958
  schedule,
2954
2959
  filteredSchedule,
@@ -2976,17 +2981,23 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2976
2981
  // 优化策略:
2977
2982
  // 在 endDate 添加完一个月以后,如果 endDate 还小于 startDate + 7 天,则还需要 endDate+7 天
2978
2983
  endDateAfterMonth = dayjs().add(1, 'month').format('YYYY-MM-DD');
2984
+ tempEndDate = endDateAfterMonth;
2979
2985
  if (dayjs(startDate).add(7, 'day').isAfter(dayjs(endDateAfterMonth), 'day')) {
2980
- endDate = dayjs(startDate).add(7, 'day').format('YYYY-MM-DD');
2986
+ tempEndDate = dayjs(startDate).add(7, 'day').format('YYYY-MM-DD');
2981
2987
  } else {
2982
- endDate = endDateAfterMonth;
2988
+ tempEndDate = endDateAfterMonth;
2989
+ }
2990
+ // 如果这么算出来的 tempEndDate 还小于 endDate,则需要把 endDate 置为 tempEndDate
2991
+ if (dayjs(tempEndDate).isBefore(dayjs(endDate), 'day')) {
2992
+ tempEndDate = endDate || '';
2983
2993
  }
2994
+ endDate = tempEndDate;
2984
2995
  // 如果当前打开了某个的商品详情弹窗,则应该默认用这个商品
2985
2996
  tempProducts = (_this$store$currentPr3 = this.store.currentProduct) === null || _this$store$currentPr3 === void 0 ? void 0 : _this$store$currentPr3.getData();
2986
2997
  schedule = (_this$store$currentPr4 = this.store.currentProduct) === null || _this$store$currentPr4 === void 0 ? void 0 : _this$store$currentPr4.getOtherParams()['schedule'];
2987
2998
  filteredSchedule = filterScheduleByDateRange(schedule, startDate || '', endDate || ''); // 1.后端返回的数据,确定资源在每一天的可用和使用情况
2988
2999
  tempResourceIds = getResourcesIdsByProduct(tempProducts);
2989
- _context32.next = 11;
3000
+ _context32.next = 14;
2990
3001
  return this.store.date.fetchResourceDates({
2991
3002
  query: {
2992
3003
  start_date: startDate || '',
@@ -2994,17 +3005,17 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
2994
3005
  resource_ids: tempResourceIds
2995
3006
  }
2996
3007
  });
2997
- case 11:
3008
+ case 14:
2998
3009
  res = _context32.sent;
2999
3010
  // 先去读缓存结果,因为正常 UI 调用的是 7 天,而下面我会直接计算 30 天(最少也是 14 天),所以先去读缓存结果,如果缓存结果存在,则直接返回
3000
3011
  // TODO 优化关于为什么要放在接口后,因为在获取时间切片的时候还需要读一次接口数据,其实可以直接从这个结果里拿了,需要优化
3001
3012
  cache = (_this$store$currentPr5 = this.store.currentProduct) === null || _this$store$currentPr5 === void 0 ? void 0 : _this$store$currentPr5.getOtherParams()['timeSlotBySchedule'];
3002
3013
  if (!cache) {
3003
- _context32.next = 17;
3014
+ _context32.next = 20;
3004
3015
  break;
3005
3016
  }
3006
3017
  if (!(dayjs(params.startDate).isSameOrAfter(dayjs(cache.startDate), 'day') && dayjs(params.endDate).isSameOrBefore(dayjs(cache.endDate), 'day'))) {
3007
- _context32.next = 17;
3018
+ _context32.next = 20;
3008
3019
  break;
3009
3020
  }
3010
3021
  this.store.date.setDateList(cache.dateList);
@@ -3012,7 +3023,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3012
3023
  dateList: cache.dateList,
3013
3024
  firstAvailableDate: cache.firstAvailableDate
3014
3025
  });
3015
- case 17:
3026
+ case 20:
3016
3027
  // 2. 商品 schedule 数据,确定日程在每一天的时间片
3017
3028
  // 3. 把后端返回的和 schedule 的数据进行合并,确定每一天的可用和使用情况
3018
3029
  dates = [];
@@ -3139,22 +3150,22 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3139
3150
  }
3140
3151
  }, _loop3);
3141
3152
  });
3142
- case 25:
3153
+ case 28:
3143
3154
  if (!(dayjs(currentDate).isBefore(dayjs(endDate), 'day') || dayjs(currentDate).isSame(dayjs(endDate), 'day'))) {
3144
- _context32.next = 31;
3155
+ _context32.next = 34;
3145
3156
  break;
3146
3157
  }
3147
- return _context32.delegateYield(_loop3(), "t0", 27);
3148
- case 27:
3158
+ return _context32.delegateYield(_loop3(), "t0", 30);
3159
+ case 30:
3149
3160
  if (!_context32.t0) {
3150
- _context32.next = 29;
3161
+ _context32.next = 32;
3151
3162
  break;
3152
3163
  }
3153
- return _context32.abrupt("break", 31);
3154
- case 29:
3155
- _context32.next = 25;
3164
+ return _context32.abrupt("break", 34);
3165
+ case 32:
3166
+ _context32.next = 28;
3156
3167
  break;
3157
- case 31:
3168
+ case 34:
3158
3169
  // 最终把资源数据也加到日期内
3159
3170
  dates = handleAvailableDateByResource(res.data, dates);
3160
3171
  this.store.date.setDateList(dates);
@@ -3170,7 +3181,7 @@ export var BookingByStepImpl = /*#__PURE__*/function (_BaseModule) {
3170
3181
  dateList: dates,
3171
3182
  firstAvailableDate: firstAvailableDate
3172
3183
  });
3173
- case 35:
3184
+ case 38:
3174
3185
  case "end":
3175
3186
  return _context32.stop();
3176
3187
  }
@@ -1,7 +1,5 @@
1
- var _excluded = ["wallet_pass_list"];
2
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); }
3
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
2
+ function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure " + obj); }
5
3
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
6
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."); }
7
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); }
@@ -196,7 +194,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
196
194
  _this2.loadPrepareConfig({
197
195
  customerId: customer.id,
198
196
  action: 'create',
199
- with_good_pass: 1
197
+ with_good_pass: 1,
198
+ with_discount_card: 1
200
199
  });
201
200
  });
202
201
  }
@@ -473,14 +472,14 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
473
472
  key: "getCustomerWallet",
474
473
  value: function () {
475
474
  var _getCustomerWallet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(id) {
476
- var result, _result$data, wallet_pass_list, customer;
475
+ var result, customer;
477
476
  return _regeneratorRuntime().wrap(function _callee7$(_context7) {
478
477
  while (1) switch (_context7.prev = _context7.next) {
479
478
  case 0:
480
479
  _context7.prev = 0;
481
480
  _context7.next = 3;
482
- return this.request.get("/customer/info/wallet/".concat(id), {
483
- wallet_pass_tags: ['good_pass']
481
+ return this.request.get("/customer/info/".concat(id), {
482
+ with_trashed: 1
484
483
  });
485
484
  case 3:
486
485
  result = _context7.sent;
@@ -488,7 +487,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
488
487
  _context7.next = 9;
489
488
  break;
490
489
  }
491
- _result$data = result.data, wallet_pass_list = _result$data.wallet_pass_list, customer = _objectWithoutProperties(_result$data, _excluded);
490
+ customer = Object.assign({}, (_objectDestructuringEmpty(result.data), result.data));
492
491
  this.setCustomer(customer);
493
492
  _context7.next = 9;
494
493
  return this.core.effects.emit(ShopDiscountHooks.onScanCustomerChange, customer);
@@ -526,7 +525,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
526
525
  return (_this$store$discount7 = this.store.discount) === null || _this$store$discount7 === void 0 ? void 0 : _this$store$discount7.loadPrepareConfig({
527
526
  customer_id: customerId,
528
527
  action: 'create',
529
- with_good_pass: 1
528
+ with_good_pass: 1,
529
+ with_discount_card: 1
530
530
  });
531
531
  case 4:
532
532
  goodPassList = _context8.sent;
@@ -17,6 +17,7 @@ export declare class DiscountModule extends BaseModule implements Module, Discou
17
17
  loadPrepareConfig(params: {
18
18
  action?: 'create';
19
19
  with_good_pass: 0 | 1;
20
+ with_discount_card: 0 | 1;
20
21
  customer_id: number;
21
22
  }): Promise<Discount[]>;
22
23
  batchSearch(code: string): Promise<Discount[]>;
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
 
19
29
  // src/modules/Discount/index.ts
@@ -25,6 +35,7 @@ module.exports = __toCommonJS(Discount_exports);
25
35
  var import_utils = require("../../solution/ShopDiscount/utils");
26
36
  var import_BaseModule = require("../BaseModule");
27
37
  var import_types = require("./types");
38
+ var import_decimal = __toESM(require("decimal.js"));
28
39
  var DiscountModule = class extends import_BaseModule.BaseModule {
29
40
  constructor(name, version) {
30
41
  super(name, version);
@@ -68,21 +79,22 @@ var DiscountModule = class extends import_BaseModule.BaseModule {
68
79
  return this.store.discountList;
69
80
  }
70
81
  async loadPrepareConfig(params) {
71
- var _a;
82
+ var _a, _b;
72
83
  const prepareConfig = await this.request.post(
73
84
  `/order/prepare/config`,
74
85
  params
75
86
  );
76
87
  const goodPassList = this.filterEnabledDiscountList(
77
- ((_a = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _a.good_pass_list) || []
88
+ [...((_a = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _a.good_pass_list) || [], ...((_b = prepareConfig == null ? void 0 : prepareConfig.data) == null ? void 0 : _b.discount_card_list) || []]
78
89
  ) || [];
90
+ this.setDiscountList(goodPassList);
79
91
  return goodPassList;
80
92
  }
81
93
  async batchSearch(code) {
82
94
  const result = await this.request.get(`/machinecode/batch-search`, {
83
95
  code,
84
96
  translate_flag: 1,
85
- tag: "good_pass",
97
+ tags: ["good_pass", "product_discount_card"],
86
98
  available: 1,
87
99
  relation_product: 1
88
100
  });
@@ -91,7 +103,7 @@ var DiscountModule = class extends import_BaseModule.BaseModule {
91
103
  }
92
104
  filterEnabledDiscountList(discountList) {
93
105
  return discountList.filter(
94
- (discount) => discount.limit_status === "enable" && Number((discount == null ? void 0 : discount.par_value) || 0) - Number((discount == null ? void 0 : discount.used_par_value) || 0) > 0
106
+ (discount) => discount.limit_status === "enable" && new import_decimal.default((discount == null ? void 0 : discount.par_value) || 0).minus(new import_decimal.default((discount == null ? void 0 : discount.used_par_value) || 0)).greaterThan(0)
95
107
  );
96
108
  }
97
109
  // 根据productIds去重
@@ -110,8 +122,8 @@ var DiscountModule = class extends import_BaseModule.BaseModule {
110
122
  }
111
123
  if (discount.appliedProductDetails) {
112
124
  return discount.appliedProductDetails.reduce((total, product) => {
113
- const price = Number(product == null ? void 0 : product.amount) || 0;
114
- return total + price;
125
+ const price = new import_decimal.default((product == null ? void 0 : product.amount) || 0);
126
+ return new import_decimal.default(total).plus(price).toNumber();
115
127
  }, 0);
116
128
  }
117
129
  }
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
 
19
29
  // src/modules/Rules/index.ts
@@ -26,6 +36,7 @@ var import_BaseModule = require("../BaseModule");
26
36
  var import_types = require("./types");
27
37
  var import_utils = require("../../solution/ShopDiscount/utils");
28
38
  var import_utils2 = require("../Cart/utils");
39
+ var import_decimal = __toESM(require("decimal.js"));
29
40
  var RulesModule = class extends import_BaseModule.BaseModule {
30
41
  constructor(name, version) {
31
42
  super(name, version);
@@ -107,19 +118,36 @@ var RulesModule = class extends import_BaseModule.BaseModule {
107
118
  return !discount.isManualSelect;
108
119
  });
109
120
  const sortedDiscountList = [...filteredDiscountList].sort((a, b) => {
110
- if (a.expire_time && b.expire_time) {
111
- const timeA = new Date(a.expire_time).getTime();
112
- const timeB = new Date(b.expire_time).getTime();
113
- return timeA - timeB;
121
+ if (a.tag === "good_pass" && b.tag !== "good_pass")
122
+ return -1;
123
+ if (b.tag === "good_pass" && a.tag !== "good_pass")
124
+ return 1;
125
+ if (a.tag === "good_pass" && b.tag === "good_pass") {
126
+ return compareByExpireTime(a, b);
127
+ } else if (a.tag === "product_discount_card" && b.tag === "product_discount_card") {
128
+ if (a.par_value !== b.par_value) {
129
+ const valueA = new import_decimal.default(a.par_value || 0);
130
+ const valueB = new import_decimal.default(b.par_value || 0);
131
+ return valueA.minus(valueB).toNumber();
132
+ }
133
+ return compareByExpireTime(a, b);
134
+ }
135
+ return compareByExpireTime(a, b);
136
+ function compareByExpireTime(itemA, itemB) {
137
+ if (itemA.expire_time && itemB.expire_time) {
138
+ const timeA = new Date(itemA.expire_time).getTime();
139
+ const timeB = new Date(itemB.expire_time).getTime();
140
+ return timeA - timeB;
141
+ }
142
+ return itemA.expire_time ? -1 : itemB.expire_time ? 1 : 0;
114
143
  }
115
- return a.expire_time ? -1 : b.expire_time ? 1 : 0;
116
144
  });
117
145
  const sortedProductList = [...productList].sort((a, b) => {
118
146
  const aProduct = this.hooks.getProduct(a);
119
147
  const bProduct = this.hooks.getProduct(b);
120
- const priceA = parseFloat(aProduct.price || "0");
121
- const priceB = parseFloat(bProduct.price || "0");
122
- return priceB - priceA;
148
+ const priceA = new import_decimal.default(aProduct.price || "0");
149
+ const priceB = new import_decimal.default(bProduct.price || "0");
150
+ return priceB.minus(priceA).toNumber();
123
151
  });
124
152
  const usedDiscounts = /* @__PURE__ */ new Map();
125
153
  const discountApplicability = /* @__PURE__ */ new Map();
@@ -146,7 +174,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
146
174
  discount: {
147
175
  resource_id: discount.id,
148
176
  title: discount.format_title,
149
- original_amount: product.origin_total
177
+ original_amount: product.origin_total,
178
+ pre_value: discount.par_value
150
179
  }
151
180
  });
152
181
  discountApplicableProducts.set(discount.id, applicableProducts);
@@ -220,14 +249,16 @@ var RulesModule = class extends import_BaseModule.BaseModule {
220
249
  }
221
250
  usedDiscounts.set(selectedDiscount.id, true);
222
251
  const appliedProducts = appliedDiscountProducts.get(selectedDiscount.id) || [];
252
+ const targetProductPrice = selectedDiscount.tag === "good_pass" ? "0" : new import_decimal.default(selectedDiscount.par_value || 0).div(100).mul(new import_decimal.default(product.price || 0)).toFixed(2);
223
253
  const discountDetail = {
224
- amount: product.price,
225
- type: selectedDiscount.tag,
254
+ amount: selectedDiscount.tag === "product_discount_card" ? new import_decimal.default(product.price || 0).minus(new import_decimal.default(targetProductPrice)).toNumber() : product.price,
255
+ type: selectedDiscount.tag === "product_discount_card" ? "discount_card" : selectedDiscount.tag,
226
256
  discount: {
227
257
  resource_id: selectedDiscount.id,
228
258
  title: selectedDiscount.format_title,
229
- original_amount: product.origin_total,
230
- product_id: selectedDiscount.product_id
259
+ original_amount: product.price,
260
+ product_id: selectedDiscount.product_id,
261
+ percent: selectedDiscount.par_value
231
262
  }
232
263
  };
233
264
  appliedProducts.push(discountDetail);
@@ -237,7 +268,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
237
268
  product._id,
238
269
  this.hooks.setProduct(originProduct, {
239
270
  discount_list: [discountDetail],
240
- price: 0,
271
+ price: new import_decimal.default(targetProductPrice).toNumber(),
241
272
  origin_total: (0, import_utils2.getProductOriginTotalPrice)({
242
273
  product: {
243
274
  original_price: product.original_price
@@ -247,7 +278,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
247
278
  }),
248
279
  total: (0, import_utils2.getProductTotalPrice)({
249
280
  product: {
250
- price: "0"
281
+ price: targetProductPrice
251
282
  },
252
283
  bundle: product.bundle,
253
284
  options: product.options
@@ -259,8 +290,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
259
290
  product._id,
260
291
  this.hooks.setProduct(originProduct, {
261
292
  discount_list: [discountDetail],
262
- price: 0,
263
- total: (product.origin_total || product.total) - product.price,
293
+ price: new import_decimal.default(targetProductPrice).toNumber(),
294
+ total: new import_decimal.default(product.origin_total || product.total || 0).minus(new import_decimal.default(product.price || 0)).toNumber(),
264
295
  origin_total: product.origin_total || product.total
265
296
  })
266
297
  );
@@ -1295,7 +1295,7 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
1295
1295
  const selectForCartResources = (cartItems2) => {
1296
1296
  let recordTimeSlots = (0, import_lodash_es.cloneDeep)(timeSlots);
1297
1297
  cartItems2.forEach((item, index) => {
1298
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
1298
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
1299
1299
  const formatCapacity = (0, import_resources.formatDefaultCapacitys)({
1300
1300
  capacity: (_a2 = item._productOrigin) == null ? void 0 : _a2.capacity,
1301
1301
  product_bundle: item._origin.product.product_bundle
@@ -1314,13 +1314,13 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
1314
1314
  (n) => n.code === resources_code
1315
1315
  );
1316
1316
  const resourceBookingType = (currentResourceConfig == null ? void 0 : currentResourceConfig.type) || "single";
1317
- if (index !== 0 && recordTimeSlots && resourceBookingType === "single" && ((_e = item._productOrigin) == null ? void 0 : _e.duration)) {
1317
+ if (index !== 0 && recordTimeSlots && (currentResourceConfig == null ? void 0 : currentResourceConfig.type) === "single" && ((_e = item._productOrigin) == null ? void 0 : _e.duration) && ((_g = (_f = item._productOrigin) == null ? void 0 : _f.duration) == null ? void 0 : _g.type) !== "flexible") {
1318
1318
  let start_at = (0, import_dayjs.default)(recordTimeSlots.end_time).add(
1319
- ((_g = (_f = item._productOrigin) == null ? void 0 : _f.duration) == null ? void 0 : _g.value) || 10,
1319
+ ((_i = (_h = item._productOrigin) == null ? void 0 : _h.duration) == null ? void 0 : _i.value) || 10,
1320
1320
  "minutes"
1321
1321
  );
1322
1322
  let end_at = start_at.add(
1323
- ((_i = (_h = item._productOrigin) == null ? void 0 : _h.duration) == null ? void 0 : _i.value) || 10,
1323
+ ((_k = (_j = item._productOrigin) == null ? void 0 : _j.duration) == null ? void 0 : _k.value) || 10,
1324
1324
  "minutes"
1325
1325
  );
1326
1326
  recordTimeSlots = {
@@ -1374,7 +1374,7 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
1374
1374
  const allCartItems = (0, import_lodash_es.cloneDeep)(this.store.cart.getItems());
1375
1375
  let selectedResources = [];
1376
1376
  const resources2 = (0, import_lodash_es.cloneDeep)(
1377
- ((_k = (_j = item._productOrigin) == null ? void 0 : _j.product_resource) == null ? void 0 : _k.resources) || []
1377
+ ((_m = (_l = item._productOrigin) == null ? void 0 : _l.product_resource) == null ? void 0 : _m.resources) || []
1378
1378
  );
1379
1379
  const currentResourcesRenderList = [];
1380
1380
  resources2.forEach((n) => {
@@ -1422,11 +1422,11 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
1422
1422
  return recordCount >= currentCapacity;
1423
1423
  });
1424
1424
  });
1425
- const targetRenderList = (_l = productResources.find(
1425
+ const targetRenderList = (_n = productResources.find(
1426
1426
  (n) => n.code === resources_code
1427
- )) == null ? void 0 : _l.renderList;
1427
+ )) == null ? void 0 : _n.renderList;
1428
1428
  if (targetRenderList && targetRenderList.length > 0) {
1429
- if ((_m = item._origin.resources) == null ? void 0 : _m.some(
1429
+ if ((_o = item._origin.resources) == null ? void 0 : _o.some(
1430
1430
  (n) => n.form_id === targetRenderList[0].form_id
1431
1431
  )) {
1432
1432
  return;
@@ -1796,7 +1796,7 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
1796
1796
  account
1797
1797
  }) {
1798
1798
  const { bundle, options, origin, product_variant_id, rowKey, quantity = 1 } = product || {};
1799
- const productData = { ...origin, product_variant_id };
1799
+ const productData = { ...origin, product_variant_id, rowKey };
1800
1800
  if (!account) {
1801
1801
  const activeAccount = this.getActiveAccount();
1802
1802
  if (activeAccount) {
@@ -1815,7 +1815,10 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
1815
1815
  product: {
1816
1816
  ...targetCartItem._productOrigin,
1817
1817
  quantity: (targetCartItem.num || 1) + quantity
1818
- }
1818
+ },
1819
+ bundle: targetCartItem._bundleOrigin,
1820
+ options: targetCartItem._optionsOrigin,
1821
+ quantity: (targetCartItem.num || 1) + quantity
1819
1822
  });
1820
1823
  return;
1821
1824
  }
@@ -2076,11 +2079,16 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
2076
2079
  startDate = (0, import_dayjs.default)().format("YYYY-MM-DD");
2077
2080
  }
2078
2081
  const endDateAfterMonth = (0, import_dayjs.default)().add(1, "month").format("YYYY-MM-DD");
2082
+ let tempEndDate = endDateAfterMonth;
2079
2083
  if ((0, import_dayjs.default)(startDate).add(7, "day").isAfter((0, import_dayjs.default)(endDateAfterMonth), "day")) {
2080
- endDate = (0, import_dayjs.default)(startDate).add(7, "day").format("YYYY-MM-DD");
2084
+ tempEndDate = (0, import_dayjs.default)(startDate).add(7, "day").format("YYYY-MM-DD");
2081
2085
  } else {
2082
- endDate = endDateAfterMonth;
2086
+ tempEndDate = endDateAfterMonth;
2087
+ }
2088
+ if ((0, import_dayjs.default)(tempEndDate).isBefore((0, import_dayjs.default)(endDate), "day")) {
2089
+ tempEndDate = endDate || "";
2083
2090
  }
2091
+ endDate = tempEndDate;
2084
2092
  let tempProducts;
2085
2093
  tempProducts = (_a = this.store.currentProduct) == null ? void 0 : _a.getData();
2086
2094
  const schedule = (_b = this.store.currentProduct) == null ? void 0 : _b.getOtherParams()["schedule"];
@@ -118,7 +118,8 @@ var ShopDiscountImpl = class extends import_BaseModule.BaseModule {
118
118
  this.loadPrepareConfig({
119
119
  customerId: customer.id,
120
120
  action: "create",
121
- with_good_pass: 1
121
+ with_good_pass: 1,
122
+ with_discount_card: 1
122
123
  });
123
124
  }
124
125
  );
@@ -303,11 +304,11 @@ var ShopDiscountImpl = class extends import_BaseModule.BaseModule {
303
304
  // 获取客户钱包信息
304
305
  async getCustomerWallet(id) {
305
306
  try {
306
- const result = await this.request.get(`/customer/info/wallet/${id}`, {
307
- wallet_pass_tags: ["good_pass"]
307
+ const result = await this.request.get(`/customer/info/${id}`, {
308
+ with_trashed: 1
308
309
  });
309
310
  if (result == null ? void 0 : result.data) {
310
- const { wallet_pass_list, ...customer } = result.data;
311
+ const { ...customer } = result.data;
311
312
  this.setCustomer(customer);
312
313
  await this.core.effects.emit(
313
314
  import_types.ShopDiscountHooks.onScanCustomerChange,
@@ -326,7 +327,8 @@ var ShopDiscountImpl = class extends import_BaseModule.BaseModule {
326
327
  const goodPassList = await ((_b = this.store.discount) == null ? void 0 : _b.loadPrepareConfig({
327
328
  customer_id: customerId,
328
329
  action: "create",
329
- with_good_pass: 1
330
+ with_good_pass: 1,
331
+ with_discount_card: 1
330
332
  }));
331
333
  const scanDiscount = (_c = this.getDiscountList()) == null ? void 0 : _c.filter(
332
334
  (item) => item.isScan
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "0.0.128",
4
+ "version": "0.0.130",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",