@pisell/pisellos 2.2.182 → 2.2.184
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/model/strategy/adapter/promotion/evaluator.js +3 -2
- package/dist/modules/Order/index.d.ts +3 -1
- package/dist/modules/Order/index.js +107 -51
- package/dist/modules/Order/types.d.ts +1 -0
- package/dist/modules/Product/index.d.ts +1 -1
- package/dist/solution/BaseSales/utils/cartPromotion.d.ts +12 -0
- package/dist/solution/BaseSales/utils/cartPromotion.js +271 -130
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +9 -0
- package/lib/model/strategy/adapter/promotion/evaluator.js +2 -1
- package/lib/modules/Order/index.d.ts +3 -1
- package/lib/modules/Order/index.js +65 -61
- package/lib/modules/Order/types.d.ts +1 -0
- package/lib/modules/Product/index.d.ts +1 -1
- package/lib/solution/BaseSales/utils/cartPromotion.d.ts +12 -0
- package/lib/solution/BaseSales/utils/cartPromotion.js +118 -12
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +7 -0
- package/package.json +1 -1
|
@@ -747,9 +747,10 @@ export var PromotionEvaluator = /*#__PURE__*/function () {
|
|
|
747
747
|
return b.price - a.price;
|
|
748
748
|
});
|
|
749
749
|
|
|
750
|
-
// 3.
|
|
750
|
+
// 3. 计算可以凑成多少组(cumulative 缺省视为 true,与 adapter 一致)
|
|
751
751
|
var totalUnits = unitProducts.length;
|
|
752
|
-
var
|
|
752
|
+
var isCumulative = cumulative !== false;
|
|
753
|
+
var groupCount = isCumulative ? Math.floor(totalUnits / x) : totalUnits >= x ? 1 : 0;
|
|
753
754
|
var promotionUnits = groupCount * x;
|
|
754
755
|
|
|
755
756
|
// 4. 分离参与促销的和不参与的商品
|
|
@@ -264,7 +264,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
264
264
|
private logSubmitBackendRejected;
|
|
265
265
|
syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
|
|
266
266
|
createOrder(params: CommitOrderParams['query']): {
|
|
267
|
-
type: "
|
|
267
|
+
type: "virtual" | "appointment_booking";
|
|
268
268
|
platform: string;
|
|
269
269
|
sales_channel: string;
|
|
270
270
|
order_sales_channel: string;
|
|
@@ -312,6 +312,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
312
312
|
recalcOnHydrate?: boolean;
|
|
313
313
|
}): Promise<OrderTempOrder>;
|
|
314
314
|
private normalizeTempOrderForRuntime;
|
|
315
|
+
private normalizeHydratedProductOptionItem;
|
|
316
|
+
private resolveHydratedProductOptions;
|
|
315
317
|
private normalizeHydratedOrderProduct;
|
|
316
318
|
getLastOrderInfo(): Record<string, any> | undefined;
|
|
317
319
|
getOrderInfo(order_id: number): Promise<any>;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
4
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
1
5
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
6
|
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."); }
|
|
3
7
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
@@ -2108,7 +2112,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
2108
2112
|
}) : null;
|
|
2109
2113
|
productToAdd = (linked === null || linked === void 0 ? void 0 : linked.product) || product;
|
|
2110
2114
|
incomingFingerprint = buildProductLineFingerprint(productToAdd.product_option_item, productToAdd.product_bundle);
|
|
2111
|
-
normalizedIncoming = normalizeOrderProduct(productToAdd);
|
|
2115
|
+
normalizedIncoming = mergeOrderProductDisplayFields(productToAdd, normalizeOrderProduct(productToAdd));
|
|
2112
2116
|
normalizedIncoming.discount_list = normalizeOrderProductDiscountList(normalizedIncoming.discount_list);
|
|
2113
2117
|
hasIncomingGoodPass = this.hasGoodPassDiscount(normalizedIncoming);
|
|
2114
2118
|
shouldForceNewLine = !!booking;
|
|
@@ -2156,11 +2160,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
2156
2160
|
} else {
|
|
2157
2161
|
targetProduct = matchedProduct;
|
|
2158
2162
|
targetUid = (_targetProduct$metada = targetProduct.metadata) === null || _targetProduct$metada === void 0 ? void 0 : _targetProduct$metada.unique_identification_number;
|
|
2159
|
-
normalizedProduct = normalizeOrderProduct(_objectSpread(_objectSpread({}, productToAdd), {}, {
|
|
2163
|
+
normalizedProduct = mergeOrderProductDisplayFields(targetProduct, normalizeOrderProduct(_objectSpread(_objectSpread({}, productToAdd), {}, {
|
|
2160
2164
|
metadata: _objectSpread(_objectSpread({}, productToAdd.metadata || {}), {}, {
|
|
2161
2165
|
unique_identification_number: targetUid
|
|
2162
2166
|
})
|
|
2163
|
-
}));
|
|
2167
|
+
})));
|
|
2164
2168
|
normalizedProduct.discount_list = normalizeOrderProductDiscountList(normalizedProduct.discount_list);
|
|
2165
2169
|
tempOrder.products[matchedIndex] = _objectSpread(_objectSpread(_objectSpread({}, targetProduct), normalizedProduct), {}, {
|
|
2166
2170
|
metadata: _objectSpread(_objectSpread(_objectSpread({}, targetProduct.metadata || {}), normalizedProduct.metadata || {}), {}, {
|
|
@@ -2286,7 +2290,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
2286
2290
|
}
|
|
2287
2291
|
// normalizeOrderProduct 幂等:v2 metadata 存在 → 保留 main_product_* 折扣重算 composite;
|
|
2288
2292
|
// 否则 → 把顶层 selling_price 视作 source,派生 main_product_* 并写 price_schema_version: 2。
|
|
2289
|
-
normalizedProduct = normalizeOrderProduct(nextProduct);
|
|
2293
|
+
normalizedProduct = mergeOrderProductDisplayFields(nextProduct, normalizeOrderProduct(nextProduct));
|
|
2290
2294
|
normalizedProduct.discount_list = normalizeOrderProductDiscountList(normalizedProduct.discount_list);
|
|
2291
2295
|
if (booking) {
|
|
2292
2296
|
productUid = String(((_normalizedProduct$me = normalizedProduct.metadata) === null || _normalizedProduct$me === void 0 ? void 0 : _normalizedProduct$me.unique_identification_number) || ((_targetProduct$metada3 = targetProduct.metadata) === null || _targetProduct$metada3 === void 0 ? void 0 : _targetProduct$metada3.unique_identification_number) || unique_identification_number || createUuidV4());
|
|
@@ -3187,6 +3191,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
3187
3191
|
_context32.next = 2;
|
|
3188
3192
|
return this.request.get("/order/sales/".concat(order_id), {
|
|
3189
3193
|
with: ['products', 'bookings', 'payments', 'customer', 'summary', 'contacts_info']
|
|
3194
|
+
}, {
|
|
3195
|
+
osServer: true
|
|
3190
3196
|
});
|
|
3191
3197
|
case 2:
|
|
3192
3198
|
res = _context32.sent;
|
|
@@ -3215,34 +3221,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
3215
3221
|
key: "hydrateTempOrderFromRecord",
|
|
3216
3222
|
value: (function () {
|
|
3217
3223
|
var _hydrateTempOrderFromRecord = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee31(record, options) {
|
|
3218
|
-
var raw,
|
|
3224
|
+
var raw, nextTempOrder;
|
|
3219
3225
|
return _regeneratorRuntime().wrap(function _callee31$(_context33) {
|
|
3220
3226
|
while (1) switch (_context33.prev = _context33.next) {
|
|
3221
3227
|
case 0:
|
|
3222
3228
|
raw = record && _typeof(record) === 'object' && record.data && record.order_id == null ? record.data : record || {};
|
|
3223
|
-
|
|
3224
|
-
nextTempOrder = _objectSpread({}, defaults);
|
|
3225
|
-
TEMP_ORDER_KEYS = ['order_id', 'external_sale_number', 'order_number', 'shop_order_number', 'shop_full_order_number', 'type', 'business_code', 'platform', 'sales_channel', 'order_sales_channel', 'vouchers', 'status', 'payment_status', 'shipping_status', 'customer_id', 'customer_name', 'country_calling_code', 'phone', 'email', 'customer', 'is_price_include_tax', 'tax_title', 'tax_country_code', 'currency_code', 'currency_symbol', 'currency_format', 'is_deposit', 'deposit_amount', 'shop_discount', 'surcharge_fee', 'note', 'buzzer', 'delivery_type', 'table_number', 'schedule_date', 'created_at', 'request_unique_idempotency_token'];
|
|
3226
|
-
TEMP_ORDER_KEYS.forEach(function (key) {
|
|
3227
|
-
if (raw[key] !== undefined) {
|
|
3228
|
-
nextTempOrder[key] = raw[key];
|
|
3229
|
-
}
|
|
3230
|
-
});
|
|
3229
|
+
nextTempOrder = this.normalizeTempOrderForRuntime(raw);
|
|
3231
3230
|
this.store.tempOrder = nextTempOrder;
|
|
3232
3231
|
this.store.summary = raw.summary && _typeof(raw.summary) === 'object' ? _objectSpread(_objectSpread({}, createEmptySummary()), raw.summary) : createEmptySummary();
|
|
3233
3232
|
this.store.lastOrderInfo = raw.lastOrderInfo || raw;
|
|
3234
3233
|
if (!(options !== null && options !== void 0 && options.recalcOnHydrate)) {
|
|
3235
|
-
_context33.next =
|
|
3234
|
+
_context33.next = 8;
|
|
3236
3235
|
break;
|
|
3237
3236
|
}
|
|
3238
|
-
_context33.next =
|
|
3237
|
+
_context33.next = 8;
|
|
3239
3238
|
return this.recalculateSummary({
|
|
3240
3239
|
createIfMissing: false
|
|
3241
3240
|
});
|
|
3242
|
-
case
|
|
3241
|
+
case 8:
|
|
3243
3242
|
this.persistTempOrder();
|
|
3244
3243
|
return _context33.abrupt("return", nextTempOrder);
|
|
3245
|
-
case
|
|
3244
|
+
case 10:
|
|
3246
3245
|
case "end":
|
|
3247
3246
|
return _context33.stop();
|
|
3248
3247
|
}
|
|
@@ -3273,7 +3272,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
3273
3272
|
delete nextTempOrder.holder_id;
|
|
3274
3273
|
nextTempOrder.metadata = raw.metadata && _typeof(raw.metadata) === 'object' ? _objectSpread({}, raw.metadata) : {};
|
|
3275
3274
|
nextTempOrder.holder = raw.holder && _typeof(raw.holder) === 'object' ? _objectSpread({}, raw.holder) : null;
|
|
3276
|
-
|
|
3275
|
+
var rawProducts = Array.isArray(raw.products) ? raw.products : [];
|
|
3276
|
+
nextTempOrder.products = rawProducts.length > 0 ? rawProducts.map(function (p) {
|
|
3277
3277
|
return _this10.normalizeHydratedOrderProduct(p);
|
|
3278
3278
|
}) : [];
|
|
3279
3279
|
nextTempOrder.bookings = Array.isArray(raw.bookings) ? raw.bookings.map(function (b) {
|
|
@@ -3300,11 +3300,66 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
3300
3300
|
}) : {
|
|
3301
3301
|
productsByUid: {}
|
|
3302
3302
|
};
|
|
3303
|
+
var tempOrderExtend = nextTempOrder._extend;
|
|
3304
|
+
var productsByUid = tempOrderExtend.productsByUid || {};
|
|
3305
|
+
var _iterator8 = _createForOfIteratorHelper(nextTempOrder.products.entries()),
|
|
3306
|
+
_step8;
|
|
3307
|
+
try {
|
|
3308
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
3309
|
+
var _product$metadata6, _ref23, _ref24, _existed$origin, _rawProduct$metadata;
|
|
3310
|
+
var _step8$value = _slicedToArray(_step8.value, 2),
|
|
3311
|
+
index = _step8$value[0],
|
|
3312
|
+
product = _step8$value[1];
|
|
3313
|
+
var uid = (_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.unique_identification_number;
|
|
3314
|
+
if (!uid) continue;
|
|
3315
|
+
var existed = productsByUid[uid] && _typeof(productsByUid[uid]) === 'object' ? productsByUid[uid] : {};
|
|
3316
|
+
var rawProduct = rawProducts[index] && _typeof(rawProducts[index]) === 'object' ? rawProducts[index] : product;
|
|
3317
|
+
var origin = (_ref23 = (_ref24 = (_existed$origin = existed.origin) !== null && _existed$origin !== void 0 ? _existed$origin : rawProduct._origin) !== null && _ref24 !== void 0 ? _ref24 : (_rawProduct$metadata = rawProduct.metadata) === null || _rawProduct$metadata === void 0 ? void 0 : _rawProduct$metadata.origin) !== null && _ref23 !== void 0 ? _ref23 : rawProduct;
|
|
3318
|
+
productsByUid[uid] = _objectSpread(_objectSpread({}, existed), {}, {
|
|
3319
|
+
origin: cloneDeep(origin)
|
|
3320
|
+
});
|
|
3321
|
+
}
|
|
3322
|
+
} catch (err) {
|
|
3323
|
+
_iterator8.e(err);
|
|
3324
|
+
} finally {
|
|
3325
|
+
_iterator8.f();
|
|
3326
|
+
}
|
|
3327
|
+
tempOrderExtend.productsByUid = productsByUid;
|
|
3303
3328
|
if ((options === null || options === void 0 ? void 0 : options.ensureIdentity) !== false) {
|
|
3304
3329
|
this.ensureExternalSaleNumber(nextTempOrder);
|
|
3305
3330
|
}
|
|
3331
|
+
nextTempOrder.vouchers = raw.vouchers || [];
|
|
3306
3332
|
return nextTempOrder;
|
|
3307
3333
|
}
|
|
3334
|
+
}, {
|
|
3335
|
+
key: "normalizeHydratedProductOptionItem",
|
|
3336
|
+
value: function normalizeHydratedProductOptionItem(optionItem) {
|
|
3337
|
+
var _ref25, _optionItem$num, _ref26, _optionItem$price;
|
|
3338
|
+
var rawNum = (_ref25 = (_optionItem$num = optionItem === null || optionItem === void 0 ? void 0 : optionItem.num) !== null && _optionItem$num !== void 0 ? _optionItem$num : optionItem === null || optionItem === void 0 ? void 0 : optionItem.quantity) !== null && _ref25 !== void 0 ? _ref25 : 1;
|
|
3339
|
+
var parsedNum = Number(rawNum);
|
|
3340
|
+
var rawPrice = (_ref26 = (_optionItem$price = optionItem === null || optionItem === void 0 ? void 0 : optionItem.price) !== null && _optionItem$price !== void 0 ? _optionItem$price : optionItem === null || optionItem === void 0 ? void 0 : optionItem.add_price) !== null && _ref26 !== void 0 ? _ref26 : 0;
|
|
3341
|
+
var parsedPrice = Number(rawPrice);
|
|
3342
|
+
return {
|
|
3343
|
+
option_group_item_id: optionItem === null || optionItem === void 0 ? void 0 : optionItem.option_group_item_id,
|
|
3344
|
+
option_group_id: optionItem === null || optionItem === void 0 ? void 0 : optionItem.option_group_id,
|
|
3345
|
+
num: Number.isFinite(parsedNum) && parsedNum > 0 ? parsedNum : 1,
|
|
3346
|
+
price: Number.isFinite(parsedPrice) ? parsedPrice : 0
|
|
3347
|
+
};
|
|
3348
|
+
}
|
|
3349
|
+
}, {
|
|
3350
|
+
key: "resolveHydratedProductOptions",
|
|
3351
|
+
value: function resolveHydratedProductOptions(row) {
|
|
3352
|
+
var _row$product_sku,
|
|
3353
|
+
_this11 = this;
|
|
3354
|
+
if (Array.isArray(row.product_option_item) && row.product_option_item.length > 0) {
|
|
3355
|
+
return row.product_option_item;
|
|
3356
|
+
}
|
|
3357
|
+
var skuOptions = (_row$product_sku = row.product_sku) === null || _row$product_sku === void 0 ? void 0 : _row$product_sku.option;
|
|
3358
|
+
if (!Array.isArray(skuOptions)) return [];
|
|
3359
|
+
return skuOptions.map(function (optionItem) {
|
|
3360
|
+
return _this11.normalizeHydratedProductOptionItem(optionItem || {});
|
|
3361
|
+
});
|
|
3362
|
+
}
|
|
3308
3363
|
}, {
|
|
3309
3364
|
key: "normalizeHydratedOrderProduct",
|
|
3310
3365
|
value: function normalizeHydratedOrderProduct(product) {
|
|
@@ -3312,7 +3367,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
3312
3367
|
if (row.num === undefined && row.product_quantity !== undefined) {
|
|
3313
3368
|
row.num = row.product_quantity;
|
|
3314
3369
|
}
|
|
3315
|
-
|
|
3370
|
+
row.product_option_item = this.resolveHydratedProductOptions(row);
|
|
3316
3371
|
if (!Array.isArray(row.product_bundle)) row.product_bundle = [];
|
|
3317
3372
|
if (!row.metadata || _typeof(row.metadata) !== 'object') row.metadata = {};
|
|
3318
3373
|
var existingIdentity = row.metadata.unique_identification_number || row.unique_identification_number;
|
|
@@ -3322,6 +3377,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
3322
3377
|
var normalized = normalizeOrderProduct(row);
|
|
3323
3378
|
normalized.discount_list = normalizeOrderProductDiscountList(normalized.discount_list);
|
|
3324
3379
|
var result = _objectSpread(_objectSpread(_objectSpread({}, row), normalized), {}, {
|
|
3380
|
+
product_sku: row.product_sku,
|
|
3325
3381
|
metadata: _objectSpread(_objectSpread({}, row.metadata), normalized.metadata)
|
|
3326
3382
|
});
|
|
3327
3383
|
if (result.metadata) delete result.metadata.price_schema_version;
|
|
@@ -3376,67 +3432,67 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
3376
3432
|
var amount = new Decimal(discount.amount || 0).times(qty).plus(((_discount$metadata = discount.metadata) === null || _discount$metadata === void 0 ? void 0 : _discount$metadata.product_discount_difference) || 0);
|
|
3377
3433
|
savedMap.set(discountKey, (savedMap.get(discountKey) || new Decimal(0)).plus(amount));
|
|
3378
3434
|
};
|
|
3379
|
-
var
|
|
3380
|
-
|
|
3435
|
+
var _iterator9 = _createForOfIteratorHelper(productList),
|
|
3436
|
+
_step9;
|
|
3381
3437
|
try {
|
|
3382
|
-
for (
|
|
3383
|
-
var product =
|
|
3438
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
3439
|
+
var product = _step9.value;
|
|
3384
3440
|
var qty = product.num || 1;
|
|
3385
|
-
var
|
|
3386
|
-
|
|
3441
|
+
var _iterator11 = _createForOfIteratorHelper(product.discount_list || []),
|
|
3442
|
+
_step11;
|
|
3387
3443
|
try {
|
|
3388
|
-
for (
|
|
3389
|
-
var pd =
|
|
3444
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
3445
|
+
var pd = _step11.value;
|
|
3390
3446
|
addDiscountAmount(pd, qty);
|
|
3391
3447
|
}
|
|
3392
3448
|
} catch (err) {
|
|
3393
|
-
|
|
3449
|
+
_iterator11.e(err);
|
|
3394
3450
|
} finally {
|
|
3395
|
-
|
|
3451
|
+
_iterator11.f();
|
|
3396
3452
|
}
|
|
3397
|
-
var
|
|
3398
|
-
|
|
3453
|
+
var _iterator12 = _createForOfIteratorHelper(product.product_bundle || []),
|
|
3454
|
+
_step12;
|
|
3399
3455
|
try {
|
|
3400
|
-
for (
|
|
3401
|
-
var
|
|
3402
|
-
var bundle =
|
|
3403
|
-
var bundleQty = new Decimal(Number(qty) || 1).times(Number((
|
|
3404
|
-
var
|
|
3405
|
-
|
|
3456
|
+
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
3457
|
+
var _ref27, _bundle$num;
|
|
3458
|
+
var bundle = _step12.value;
|
|
3459
|
+
var bundleQty = new Decimal(Number(qty) || 1).times(Number((_ref27 = (_bundle$num = bundle === null || bundle === void 0 ? void 0 : bundle.num) !== null && _bundle$num !== void 0 ? _bundle$num : bundle === null || bundle === void 0 ? void 0 : bundle.quantity) !== null && _ref27 !== void 0 ? _ref27 : 1) || 1).toNumber();
|
|
3460
|
+
var _iterator13 = _createForOfIteratorHelper((bundle === null || bundle === void 0 ? void 0 : bundle.discount_list) || []),
|
|
3461
|
+
_step13;
|
|
3406
3462
|
try {
|
|
3407
|
-
for (
|
|
3408
|
-
var _pd =
|
|
3463
|
+
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
3464
|
+
var _pd = _step13.value;
|
|
3409
3465
|
addDiscountAmount(_pd, bundleQty);
|
|
3410
3466
|
}
|
|
3411
3467
|
} catch (err) {
|
|
3412
|
-
|
|
3468
|
+
_iterator13.e(err);
|
|
3413
3469
|
} finally {
|
|
3414
|
-
|
|
3470
|
+
_iterator13.f();
|
|
3415
3471
|
}
|
|
3416
3472
|
}
|
|
3417
3473
|
} catch (err) {
|
|
3418
|
-
|
|
3474
|
+
_iterator12.e(err);
|
|
3419
3475
|
} finally {
|
|
3420
|
-
|
|
3476
|
+
_iterator12.f();
|
|
3421
3477
|
}
|
|
3422
3478
|
}
|
|
3423
3479
|
} catch (err) {
|
|
3424
|
-
|
|
3480
|
+
_iterator9.e(err);
|
|
3425
3481
|
} finally {
|
|
3426
|
-
|
|
3482
|
+
_iterator9.f();
|
|
3427
3483
|
}
|
|
3428
|
-
var
|
|
3429
|
-
|
|
3484
|
+
var _iterator10 = _createForOfIteratorHelper(discountList),
|
|
3485
|
+
_step10;
|
|
3430
3486
|
try {
|
|
3431
|
-
for (
|
|
3432
|
-
var d =
|
|
3487
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
3488
|
+
var d = _step10.value;
|
|
3433
3489
|
var key = d.id;
|
|
3434
3490
|
d.savedAmount = d.isSelected && key != null && savedMap.has(key) ? savedMap.get(key).toNumber() : 0;
|
|
3435
3491
|
}
|
|
3436
3492
|
} catch (err) {
|
|
3437
|
-
|
|
3493
|
+
_iterator10.e(err);
|
|
3438
3494
|
} finally {
|
|
3439
|
-
|
|
3495
|
+
_iterator10.f();
|
|
3440
3496
|
}
|
|
3441
3497
|
}
|
|
3442
3498
|
}]);
|
|
@@ -49,5 +49,5 @@ export declare class Product extends BaseModule implements Module {
|
|
|
49
49
|
getCategories(): ProductCategory[];
|
|
50
50
|
setOtherParams(key: string, value: any): void;
|
|
51
51
|
getOtherParams(): any;
|
|
52
|
-
getProductType(): "
|
|
52
|
+
getProductType(): "normal" | "duration" | "session";
|
|
53
53
|
}
|
|
@@ -176,6 +176,18 @@ export declare function getOrderProductOriginalPriceForPromotion(product: any):
|
|
|
176
176
|
export declare function mergeIdenticalPromotionCartLines(products: any[]): any[];
|
|
177
177
|
/** 获取行 uid(统一以 `metadata.unique_identification_number` 为唯一键) */
|
|
178
178
|
export declare function getOrderProductUid(product: any): string;
|
|
179
|
+
/**
|
|
180
|
+
* 促销评估前合并同 SKU 拆分行(含促销/原价行),避免加购后仅前 2 件享受优惠。
|
|
181
|
+
* 带 `booking_uid` 的预约行不参与合并(每次加车独立 booking + 商品行)。
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* consolidateMainProductsForPromotion([
|
|
185
|
+
* { item: promoLineNum2, originalListIndex: 0 },
|
|
186
|
+
* { item: regularLineNum2, originalListIndex: 1 },
|
|
187
|
+
* ]);
|
|
188
|
+
* // => 单行 num=4,清除 _promotion 后重新评估
|
|
189
|
+
*/
|
|
190
|
+
export declare function buildConsolidateKeyForPromotion(item: any): string;
|
|
179
191
|
/**
|
|
180
192
|
* 从策略配置的 product_match 规则提取可参与商品列表。
|
|
181
193
|
*
|