@pisell/pisellos 0.0.128 → 0.0.129
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.
- package/dist/modules/Discount/index.d.ts +1 -0
- package/dist/modules/Discount/index.js +15 -7
- package/dist/modules/Rules/index.js +48 -19
- package/dist/solution/BookingByStep/index.js +30 -19
- package/dist/solution/ShopDiscount/index.js +9 -9
- package/lib/modules/Discount/index.d.ts +1 -0
- package/lib/modules/Discount/index.js +18 -6
- package/lib/modules/Rules/index.js +48 -17
- package/lib/solution/BookingByStep/index.js +12 -4
- package/lib/solution/ShopDiscount/index.js +7 -5
- package/package.json +1 -1
|
@@ -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
|
|
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
|
-
|
|
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' &&
|
|
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 =
|
|
202
|
-
return total
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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 =
|
|
182
|
-
var priceB =
|
|
183
|
-
return priceB
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
362
|
-
total: (product.origin_total || product.total)
|
|
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
|
}
|
|
@@ -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
|
-
|
|
2986
|
+
tempEndDate = dayjs(startDate).add(7, 'day').format('YYYY-MM-DD');
|
|
2981
2987
|
} else {
|
|
2982
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
3153
|
+
case 28:
|
|
3143
3154
|
if (!(dayjs(currentDate).isBefore(dayjs(endDate), 'day') || dayjs(currentDate).isSame(dayjs(endDate), 'day'))) {
|
|
3144
|
-
_context32.next =
|
|
3155
|
+
_context32.next = 34;
|
|
3145
3156
|
break;
|
|
3146
3157
|
}
|
|
3147
|
-
return _context32.delegateYield(_loop3(), "t0",
|
|
3148
|
-
case
|
|
3158
|
+
return _context32.delegateYield(_loop3(), "t0", 30);
|
|
3159
|
+
case 30:
|
|
3149
3160
|
if (!_context32.t0) {
|
|
3150
|
-
_context32.next =
|
|
3161
|
+
_context32.next = 32;
|
|
3151
3162
|
break;
|
|
3152
3163
|
}
|
|
3153
|
-
return _context32.abrupt("break",
|
|
3154
|
-
case
|
|
3155
|
-
_context32.next =
|
|
3164
|
+
return _context32.abrupt("break", 34);
|
|
3165
|
+
case 32:
|
|
3166
|
+
_context32.next = 28;
|
|
3156
3167
|
break;
|
|
3157
|
-
case
|
|
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
|
|
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
|
|
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,
|
|
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/
|
|
483
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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" &&
|
|
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 =
|
|
114
|
-
return total
|
|
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.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return
|
|
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 =
|
|
121
|
-
const priceB =
|
|
122
|
-
return priceB
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
263
|
-
total: (product.origin_total || product.total)
|
|
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
|
);
|
|
@@ -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
|
-
|
|
2084
|
+
tempEndDate = (0, import_dayjs.default)(startDate).add(7, "day").format("YYYY-MM-DD");
|
|
2081
2085
|
} else {
|
|
2082
|
-
|
|
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
|
|
307
|
-
|
|
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 {
|
|
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
|