@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.
@@ -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 groupCount = cumulative ? Math.floor(totalUnits / x) : totalUnits >= x ? 1 : 0;
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: "appointment_booking" | "virtual";
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, defaults, nextTempOrder, TEMP_ORDER_KEYS;
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
- defaults = this.createDefaultTempOrderInstance();
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 = 11;
3234
+ _context33.next = 8;
3236
3235
  break;
3237
3236
  }
3238
- _context33.next = 11;
3237
+ _context33.next = 8;
3239
3238
  return this.recalculateSummary({
3240
3239
  createIfMissing: false
3241
3240
  });
3242
- case 11:
3241
+ case 8:
3243
3242
  this.persistTempOrder();
3244
3243
  return _context33.abrupt("return", nextTempOrder);
3245
- case 13:
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
- nextTempOrder.products = Array.isArray(raw.products) ? raw.products.map(function (p) {
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
- if (!Array.isArray(row.product_option_item)) row.product_option_item = [];
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 _iterator8 = _createForOfIteratorHelper(productList),
3380
- _step8;
3435
+ var _iterator9 = _createForOfIteratorHelper(productList),
3436
+ _step9;
3381
3437
  try {
3382
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
3383
- var product = _step8.value;
3438
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
3439
+ var product = _step9.value;
3384
3440
  var qty = product.num || 1;
3385
- var _iterator10 = _createForOfIteratorHelper(product.discount_list || []),
3386
- _step10;
3441
+ var _iterator11 = _createForOfIteratorHelper(product.discount_list || []),
3442
+ _step11;
3387
3443
  try {
3388
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
3389
- var pd = _step10.value;
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
- _iterator10.e(err);
3449
+ _iterator11.e(err);
3394
3450
  } finally {
3395
- _iterator10.f();
3451
+ _iterator11.f();
3396
3452
  }
3397
- var _iterator11 = _createForOfIteratorHelper(product.product_bundle || []),
3398
- _step11;
3453
+ var _iterator12 = _createForOfIteratorHelper(product.product_bundle || []),
3454
+ _step12;
3399
3455
  try {
3400
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
3401
- var _ref23, _bundle$num;
3402
- var bundle = _step11.value;
3403
- var bundleQty = new Decimal(Number(qty) || 1).times(Number((_ref23 = (_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 && _ref23 !== void 0 ? _ref23 : 1) || 1).toNumber();
3404
- var _iterator12 = _createForOfIteratorHelper((bundle === null || bundle === void 0 ? void 0 : bundle.discount_list) || []),
3405
- _step12;
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 (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
3408
- var _pd = _step12.value;
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
- _iterator12.e(err);
3468
+ _iterator13.e(err);
3413
3469
  } finally {
3414
- _iterator12.f();
3470
+ _iterator13.f();
3415
3471
  }
3416
3472
  }
3417
3473
  } catch (err) {
3418
- _iterator11.e(err);
3474
+ _iterator12.e(err);
3419
3475
  } finally {
3420
- _iterator11.f();
3476
+ _iterator12.f();
3421
3477
  }
3422
3478
  }
3423
3479
  } catch (err) {
3424
- _iterator8.e(err);
3480
+ _iterator9.e(err);
3425
3481
  } finally {
3426
- _iterator8.f();
3482
+ _iterator9.f();
3427
3483
  }
3428
- var _iterator9 = _createForOfIteratorHelper(discountList),
3429
- _step9;
3484
+ var _iterator10 = _createForOfIteratorHelper(discountList),
3485
+ _step10;
3430
3486
  try {
3431
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
3432
- var d = _step9.value;
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
- _iterator9.e(err);
3493
+ _iterator10.e(err);
3438
3494
  } finally {
3439
- _iterator9.f();
3495
+ _iterator10.f();
3440
3496
  }
3441
3497
  }
3442
3498
  }]);
@@ -397,6 +397,7 @@ export interface SubmitSalesOrderParams {
397
397
  products: OrderSubmitProduct[];
398
398
  bookings: OrderSubmitBooking[];
399
399
  payments: any[];
400
+ vouchers: any[];
400
401
  surcharges?: any[];
401
402
  relation_forms: any[];
402
403
  form_record_ids?: OrderSubmitFormRecord[];
@@ -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(): "duration" | "session" | "normal";
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
  *