@pisell/pisellos 0.10.49 → 0.10.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/modules/Discount/types.d.ts +2 -0
  2. package/dist/modules/FulfillmentTiming/index.d.ts +11 -0
  3. package/dist/modules/FulfillmentTiming/index.js +407 -0
  4. package/dist/modules/FulfillmentTiming/types.d.ts +67 -0
  5. package/dist/modules/FulfillmentTiming/types.js +1 -0
  6. package/dist/modules/OpenData/types.d.ts +6 -0
  7. package/dist/modules/Order/index.d.ts +19 -1
  8. package/dist/modules/Order/index.js +362 -217
  9. package/dist/modules/Order/pickupTiming.d.ts +46 -0
  10. package/dist/modules/Order/pickupTiming.js +53 -0
  11. package/dist/modules/Order/types.d.ts +11 -1
  12. package/dist/modules/Order/utils.d.ts +10 -0
  13. package/dist/modules/Order/utils.js +145 -85
  14. package/dist/modules/Rules/index.js +45 -26
  15. package/dist/modules/Rules/types.d.ts +4 -0
  16. package/dist/modules/index.d.ts +1 -0
  17. package/dist/modules/index.js +1 -0
  18. package/dist/server/modules/order/index.d.ts +8 -0
  19. package/dist/server/modules/order/index.js +506 -453
  20. package/dist/server/modules/order/types.d.ts +1 -0
  21. package/dist/server/utils/small-ticket.js +173 -95
  22. package/dist/solution/BaseSales/index.d.ts +23 -0
  23. package/dist/solution/BaseSales/index.js +1216 -1031
  24. package/dist/solution/BaseSales/pickupTiming.d.ts +37 -0
  25. package/dist/solution/BaseSales/pickupTiming.js +482 -0
  26. package/dist/solution/BaseSales/utils/parseSalesResponse.js +3 -0
  27. package/dist/solution/BookingByStep/index.d.ts +1 -1
  28. package/dist/solution/BookingTicket/utils/cartView.js +3 -1
  29. package/dist/solution/UnifiedBookingSales/index.d.ts +2 -0
  30. package/dist/solution/UnifiedBookingSales/index.js +583 -531
  31. package/lib/model/strategy/adapter/promotion/index.js +46 -1
  32. package/lib/modules/Discount/types.d.ts +2 -0
  33. package/lib/modules/FulfillmentTiming/index.d.ts +11 -0
  34. package/lib/modules/FulfillmentTiming/index.js +359 -0
  35. package/lib/modules/FulfillmentTiming/types.d.ts +67 -0
  36. package/lib/modules/FulfillmentTiming/types.js +5 -0
  37. package/lib/modules/OpenData/types.d.ts +6 -0
  38. package/lib/modules/Order/index.d.ts +19 -1
  39. package/lib/modules/Order/index.js +120 -7
  40. package/lib/modules/Order/pickupTiming.d.ts +46 -0
  41. package/lib/modules/Order/pickupTiming.js +61 -0
  42. package/lib/modules/Order/types.d.ts +11 -1
  43. package/lib/modules/Order/utils.d.ts +10 -0
  44. package/lib/modules/Order/utils.js +58 -4
  45. package/lib/modules/Rules/index.js +24 -13
  46. package/lib/modules/Rules/types.d.ts +4 -0
  47. package/lib/modules/index.d.ts +1 -0
  48. package/lib/modules/index.js +11 -0
  49. package/lib/server/modules/order/index.d.ts +8 -0
  50. package/lib/server/modules/order/index.js +19 -0
  51. package/lib/server/modules/order/types.d.ts +1 -0
  52. package/lib/server/utils/small-ticket.js +93 -22
  53. package/lib/solution/BaseSales/index.d.ts +23 -0
  54. package/lib/solution/BaseSales/index.js +104 -1
  55. package/lib/solution/BaseSales/pickupTiming.d.ts +37 -0
  56. package/lib/solution/BaseSales/pickupTiming.js +222 -0
  57. package/lib/solution/BaseSales/utils/parseSalesResponse.js +3 -0
  58. package/lib/solution/BookingByStep/index.d.ts +1 -1
  59. package/lib/solution/BookingTicket/utils/cartView.js +3 -1
  60. package/lib/solution/UnifiedBookingSales/index.d.ts +2 -0
  61. package/lib/solution/UnifiedBookingSales/index.js +20 -0
  62. package/package.json +1 -1
@@ -191,11 +191,17 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
191
191
  unavailableReason: UnavailableReason.AlreadyUsed
192
192
  };
193
193
  }
194
+ var scannedEntitlementPassIds = newDiscountList.filter(function (discount) {
195
+ return isEntitlementPass(discount);
196
+ }).map(function (discount) {
197
+ return discount.id;
198
+ });
199
+ var scannedEntitlementPassIdSet = new Set(scannedEntitlementPassIds.map(String));
194
200
 
195
- // 合并新旧折扣列表,并计算折扣结果,注意,如果旧折扣里有 isEditMode 为 true 的优惠券,则不合并
196
- // 保留之前扫码得到的商品券(isScan: true)
201
+ // 客户次卡必须保留在完整列表中;同一实例以本次扫码数据更新。
202
+ // 历史折扣不参与试算,商品券继续沿用仅保留扫码来源的规则。
197
203
  var filteredOldDiscountList = oldDiscountList.filter(function (discount) {
198
- return !discount.isEditMode && (!isFullCoveragePass(discount) || discount.isScan);
204
+ return !discount.isEditMode && (!isFullCoveragePass(discount) || isEntitlementPass(discount) || discount.isScan) && !scannedEntitlementPassIdSet.has(String(discount.id));
199
205
  });
200
206
  var mergedDiscountList = uniqueById([].concat(_toConsumableArray(filteredOldDiscountList), _toConsumableArray(newDiscountList)));
201
207
  var result = this.calcDiscount({
@@ -205,7 +211,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
205
211
  holders: holders,
206
212
  isFormSubject: isFormSubject
207
213
  }, {
208
- scan: true
214
+ scan: true,
215
+ preferredEntitlementPassIds: scannedEntitlementPassIds
209
216
  });
210
217
 
211
218
  // 检查是否有产品使用了新折扣
@@ -368,6 +375,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
368
375
  holders = _ref8.holders,
369
376
  isFormSubject = _ref8.isFormSubject,
370
377
  orderTotalAmount = _ref8.orderTotalAmount;
378
+ var preferredEntitlementPassIds = new Set(((options === null || options === void 0 ? void 0 : options.preferredEntitlementPassIds) || []).map(String));
371
379
  var resolveIsFormSubject = function resolveIsFormSubject(product) {
372
380
  return typeof isFormSubject === 'function' ? Boolean(isFormSubject(product)) : Boolean(isFormSubject);
373
381
  };
@@ -1179,7 +1187,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1179
1187
 
1180
1188
  // 判断优惠券是否适用于该商品
1181
1189
  if (isAvailableProduct && !isItemRewardProductDiscount && isLimitedProduct && timeLimit && isBundleAvailable && (_discount$config3 = discount.config) !== null && _discount$config3 !== void 0 && _discount$config3.isAvailable && (!isEntitlementPass(discount) || getRemainingEntitlementUses(discount, 0, 1) > 0)) {
1182
- var _discountApplicabilit, _discount$metadata4, _discount$metadata5;
1190
+ var _discountApplicabilit, _discount$metadata4, _discount$metadata5, _discount$metadata6;
1183
1191
  // 记录此优惠券适用的商品
1184
1192
  (_discountApplicabilit = discountApplicability.get(discount.id)) === null || _discountApplicabilit === void 0 || _discountApplicabilit.push(product.id);
1185
1193
 
@@ -1206,6 +1214,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1206
1214
  discount_product_id: discount.product_id
1207
1215
  },
1208
1216
  metadata: {
1217
+ encoded: ((_discount$metadata6 = discount.metadata) === null || _discount$metadata6 === void 0 ? void 0 : _discount$metadata6.encoded) || discount.encoded,
1209
1218
  num: num,
1210
1219
  discount_rule_uncheck_flag: discount === null || discount === void 0 ? void 0 : discount.discount_rule_uncheck_flag
1211
1220
  }
@@ -1406,7 +1415,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1406
1415
  return false;
1407
1416
  });
1408
1417
 
1409
- // 用户显式点击某张卡券时,本次选择优先于自动排序和扫码默认选择。
1418
+ // 识别用户本次显式选择的卡券,供次卡和折扣卡各自的优先级使用。
1410
1419
  // 目标仍必须在当前商品的 applicableDiscounts 中,因此不会绕过 Holder、时间或商品范围校验。
1411
1420
  var explicitlySelectedDiscount = (options === null || options === void 0 ? void 0 : options.isSelected) === true && options.discountId !== undefined ? applicableDiscounts.find(function (discount) {
1412
1421
  var discountType = discount.tag || discount.type || '';
@@ -1415,10 +1424,10 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1415
1424
  // 折扣卡会复用于整条商品行;商品券必须继续按单张拆分,不能复用该分支。
1416
1425
  var explicitlySelectedDiscountCard = explicitlySelectedDiscount && !isFullCoveragePass(explicitlySelectedDiscount) ? explicitlySelectedDiscount : undefined;
1417
1426
 
1418
- // 商品数量等变化会触发无 discountId 的重算。只要当前行已应用的折扣卡仍在
1427
+ // 商品数量等变化会触发无 discountId 的重算。只要当前行已应用的卡仍在
1419
1428
  // applicableDiscounts 中,就应保留该行选择,避免被自动排序中力度更大的卡替换。
1420
- var appliedDiscountCardIds = new Set((product.discount_list || []).filter(function (item) {
1421
- return ['discount_card', 'product_discount_card'].includes((item === null || item === void 0 ? void 0 : item.tag) || (item === null || item === void 0 ? void 0 : item.type));
1429
+ var appliedWalletDiscountIds = new Set((product.discount_list || []).filter(function (item) {
1430
+ return ['entitlement_pass', 'discount_card', 'product_discount_card'].includes((item === null || item === void 0 ? void 0 : item.tag) || (item === null || item === void 0 ? void 0 : item.type));
1422
1431
  }).map(function (item) {
1423
1432
  var _ref24, _item$discount$resour, _item$discount;
1424
1433
  return (_ref24 = (_item$discount$resour = item === null || item === void 0 || (_item$discount = item.discount) === null || _item$discount === void 0 ? void 0 : _item$discount.resource_id) !== null && _item$discount$resour !== void 0 ? _item$discount$resour : item === null || item === void 0 ? void 0 : item.resource_id) !== null && _ref24 !== void 0 ? _ref24 : item === null || item === void 0 ? void 0 : item.id;
@@ -1427,20 +1436,27 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1427
1436
  }).map(String));
1428
1437
  var appliedDiscountCard = options !== null && options !== void 0 && options.scan ? undefined : applicableDiscounts.find(function (discount) {
1429
1438
  var discountType = discount.tag || discount.type || '';
1430
- return discount.isSelected === true && ['discount_card', 'product_discount_card'].includes(discountType) && appliedDiscountCardIds.has(String(discount.id));
1439
+ return discount.isSelected === true && ['discount_card', 'product_discount_card'].includes(discountType) && appliedWalletDiscountIds.has(String(discount.id));
1440
+ });
1441
+ var appliedEntitlementPass = options !== null && options !== void 0 && options.scan || (options === null || options === void 0 ? void 0 : options.preserveEntitlementSelection) === false ? undefined : applicableDiscounts.find(function (discount) {
1442
+ return isEntitlementPass(discount) && discount.isSelected === true && appliedWalletDiscountIds.has(String(discount.id));
1431
1443
  });
1432
1444
 
1433
- // Entitlement Pass 始终按协议优先级使用;没有新卡时沿用原选择优先级。
1445
+ // 次卡内部按本次手选/扫码、当前行已应用、默认排序选择。
1434
1446
  var scannedSelectedDiscountCard = applicableDiscounts.find(function (n) {
1435
1447
  return n.isScan && n.isSelected && !isFullCoveragePass(n);
1436
1448
  });
1437
1449
  var selectedDiscountCard = explicitlySelectedDiscountCard || appliedDiscountCard || scannedSelectedDiscountCard;
1438
- var highestPriorityEntitlementPass = applicableDiscounts.find(function (discount) {
1450
+ var selectedEntitlementPass = (explicitlySelectedDiscount && isEntitlementPass(explicitlySelectedDiscount) ? explicitlySelectedDiscount : undefined) || applicableDiscounts.find(function (discount) {
1451
+ return isEntitlementPass(discount) && preferredEntitlementPassIds.has(String(discount.id));
1452
+ }) || appliedEntitlementPass || applicableDiscounts.find(function (discount) {
1439
1453
  return isEntitlementPass(discount);
1440
1454
  });
1441
- var selectedDiscount = highestPriorityEntitlementPass || explicitlySelectedDiscount || selectedDiscountCard || applicableDiscounts[0];
1442
- var prioritizedApplicableDiscounts = !highestPriorityEntitlementPass && explicitlySelectedDiscount && isFullCoveragePass(explicitlySelectedDiscount) ? [explicitlySelectedDiscount].concat(_toConsumableArray(applicableDiscounts.filter(function (discount) {
1443
- return isFullCoveragePass(discount) && String(discount.id) !== String(explicitlySelectedDiscount.id);
1455
+ // 手选优先;普通重算保留当前折扣卡,扫码和最优选择仍使用原有优先级。
1456
+ var selectedDiscount = explicitlySelectedDiscount || ((options === null || options === void 0 ? void 0 : options.preserveEntitlementSelection) !== false && preferredEntitlementPassIds.size === 0 ? appliedDiscountCard : undefined) || selectedEntitlementPass || selectedDiscountCard || applicableDiscounts[0];
1457
+ // 实际次数分配必须使用同一顺序,避免选中状态切换后仍将次数分配给默认卡。
1458
+ var prioritizedApplicableDiscounts = selectedDiscount && isFullCoveragePass(selectedDiscount) ? [selectedDiscount].concat(_toConsumableArray(applicableDiscounts.filter(function (discount) {
1459
+ return isFullCoveragePass(discount) && String(discount.id) !== String(selectedDiscount.id);
1444
1460
  })), _toConsumableArray(applicableDiscounts.filter(function (discount) {
1445
1461
  return !isFullCoveragePass(discount);
1446
1462
  }))) : applicableDiscounts;
@@ -1683,7 +1699,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1683
1699
  count: 1
1684
1700
  }];
1685
1701
  for (var i = 0; i < discountUsageGroups.length; i++) {
1686
- var _originProduct4, _selectedDiscount$con, _product$options, _product$options2, _selectedDiscount$met, _selectedDiscount$met2, _reapplyDiscountPerce;
1702
+ var _originProduct4, _selectedDiscount$con, _product$options, _product$options2, _selectedDiscount$met, _selectedDiscount$met2, _reapplyDiscountPerce, _selectedDiscount$met3;
1687
1703
  var _discountUsageGroups$ = discountUsageGroups[i],
1688
1704
  _selectedDiscount = _discountUsageGroups$.discount,
1689
1705
  appliedUseCount = _discountUsageGroups$.count;
@@ -1773,6 +1789,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1773
1789
  _num: isFullCoverage ? appliedUseCount : product.num,
1774
1790
  config: _selectedDiscount === null || _selectedDiscount === void 0 ? void 0 : _selectedDiscount.config,
1775
1791
  metadata: _objectSpread(_objectSpread({
1792
+ encoded: ((_selectedDiscount$met3 = _selectedDiscount.metadata) === null || _selectedDiscount$met3 === void 0 ? void 0 : _selectedDiscount$met3.encoded) || _selectedDiscount.encoded,
1776
1793
  num: isFullCoverage ? appliedUseCount : 1,
1777
1794
  discount_rule_uncheck_flag: _selectedDiscount === null || _selectedDiscount === void 0 ? void 0 : _selectedDiscount.discount_rule_uncheck_flag
1778
1795
  }, productDiscountDifference !== undefined && {
@@ -1830,7 +1847,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1830
1847
 
1831
1848
  // 同一卡实例的本次新增使用合并为一条,metadata.num 记录实际次数。
1832
1849
  for (var _i = 0; _i < fullCoveragePassUsageGroups.length; _i++) {
1833
- var _selectedDiscount2$me;
1850
+ var _selectedDiscount2$me, _selectedDiscount2$me2;
1834
1851
  var _fullCoveragePassUsag = fullCoveragePassUsageGroups[_i],
1835
1852
  _selectedDiscount2 = _fullCoveragePassUsag.discount,
1836
1853
  _appliedUseCount = _fullCoveragePassUsag.count;
@@ -1862,6 +1879,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1862
1879
  discount_product_id: _selectedDiscount2.product_id
1863
1880
  },
1864
1881
  metadata: {
1882
+ encoded: ((_selectedDiscount2$me2 = _selectedDiscount2.metadata) === null || _selectedDiscount2$me2 === void 0 ? void 0 : _selectedDiscount2$me2.encoded) || _selectedDiscount2.encoded,
1865
1883
  // 🔥 使用拆分后的唯一 _id
1866
1884
  custom_product_bundle_map_id: uniqueId,
1867
1885
  discount_rule_uncheck_flag: _selectedDiscount2 === null || _selectedDiscount2 === void 0 ? void 0 : _selectedDiscount2.discount_rule_uncheck_flag,
@@ -1901,7 +1919,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1901
1919
  }));
1902
1920
  }
1903
1921
  } else {
1904
- var _selectedDiscount3$me, _selectedDiscount3$me2, _reapplyDiscountPerce2, _flatItem$parentProdu9;
1922
+ var _selectedDiscount3$me, _selectedDiscount3$me2, _reapplyDiscountPerce2, _selectedDiscount3$me3, _flatItem$parentProdu9;
1905
1923
  // 折扣卡:不拆分数量,直接应用
1906
1924
  var _selectedDiscount3 = selectedDiscountCard || applicableDiscounts[0];
1907
1925
  markDiscountUsed(_selectedDiscount3);
@@ -1956,6 +1974,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1956
1974
  discount_product_id: _selectedDiscount3.product_id
1957
1975
  },
1958
1976
  metadata: _objectSpread({
1977
+ encoded: ((_selectedDiscount3$me3 = _selectedDiscount3.metadata) === null || _selectedDiscount3$me3 === void 0 ? void 0 : _selectedDiscount3$me3.encoded) || _selectedDiscount3.encoded,
1959
1978
  // 🔥 使用唯一的 _id
1960
1979
  custom_product_bundle_map_id: _uniqueId,
1961
1980
  discount_rule_uncheck_flag: _selectedDiscount3 === null || _selectedDiscount3 === void 0 ? void 0 : _selectedDiscount3.discount_rule_uncheck_flag,
@@ -2133,8 +2152,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2133
2152
 
2134
2153
  // 🔥 更新主商品自己的 discount_list 中的 num(quantity=1)
2135
2154
  var updatedMainDiscountList = mainProductData.discount_list.map(function (discount) {
2136
- var _discount$metadata6, _discount$metadata7;
2137
- if (discount !== null && discount !== void 0 && (_discount$metadata6 = discount.metadata) !== null && _discount$metadata6 !== void 0 && _discount$metadata6.custom_product_bundle_map_id) {
2155
+ var _discount$metadata7, _discount$metadata8;
2156
+ if (discount !== null && discount !== void 0 && (_discount$metadata7 = discount.metadata) !== null && _discount$metadata7 !== void 0 && _discount$metadata7.custom_product_bundle_map_id) {
2138
2157
  // bundle的discount_list保持不变
2139
2158
  return discount;
2140
2159
  }
@@ -2142,7 +2161,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2142
2161
  return _objectSpread(_objectSpread({}, discount), {}, {
2143
2162
  // num: 1,
2144
2163
  metadata: _objectSpread(_objectSpread({}, discount.metadata), {}, {
2145
- custom_product_bundle_map_id: discount === null || discount === void 0 || (_discount$metadata7 = discount.metadata) === null || _discount$metadata7 === void 0 ? void 0 : _discount$metadata7.custom_product_bundle_map_id,
2164
+ custom_product_bundle_map_id: discount === null || discount === void 0 || (_discount$metadata8 = discount.metadata) === null || _discount$metadata8 === void 0 ? void 0 : _discount$metadata8.custom_product_bundle_map_id,
2146
2165
  num: 1
2147
2166
  })
2148
2167
  });
@@ -2207,8 +2226,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2207
2226
 
2208
2227
  // 🔥 更新主商品自己的 discount_list 中的 num(quantity=原quantity-1)
2209
2228
  var updatedMainDiscountListOriginal = mainProductData.discount_list.map(function (discount) {
2210
- var _discount$metadata8, _discount$metadata9;
2211
- if (discount !== null && discount !== void 0 && (_discount$metadata8 = discount.metadata) !== null && _discount$metadata8 !== void 0 && _discount$metadata8.custom_product_bundle_map_id) {
2229
+ var _discount$metadata9, _discount$metadata10;
2230
+ if (discount !== null && discount !== void 0 && (_discount$metadata9 = discount.metadata) !== null && _discount$metadata9 !== void 0 && _discount$metadata9.custom_product_bundle_map_id) {
2212
2231
  // bundle的discount_list保持不变
2213
2232
  return discount;
2214
2233
  }
@@ -2216,7 +2235,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2216
2235
  return _objectSpread(_objectSpread({}, discount), {}, {
2217
2236
  metadata: _objectSpread(_objectSpread({}, discount.metadata), {}, {
2218
2237
  num: mainProductQuantity - 1,
2219
- custom_product_bundle_map_id: discount === null || discount === void 0 || (_discount$metadata9 = discount.metadata) === null || _discount$metadata9 === void 0 ? void 0 : _discount$metadata9.custom_product_bundle_map_id
2238
+ custom_product_bundle_map_id: discount === null || discount === void 0 || (_discount$metadata10 = discount.metadata) === null || _discount$metadata10 === void 0 ? void 0 : _discount$metadata10.custom_product_bundle_map_id
2220
2239
  })
2221
2240
  // num: mainProductQuantity - 1,
2222
2241
  });
@@ -2286,11 +2305,11 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2286
2305
  var nextBundleSellingPrice = (_ref28 = (_item$bundle_selling_ = item.bundle_selling_price) !== null && _item$bundle_selling_ !== void 0 ? _item$bundle_selling_ : item.price) !== null && _ref28 !== void 0 ? _ref28 : bundleItem.bundle_selling_price;
2287
2306
  // 🔥 更新 discount_list 中的 num,使其与拆分后的 item.num 一致
2288
2307
  var updatedDiscountList = (item.discount_list || []).map(function (discount) {
2289
- var _discount$metadata10;
2308
+ var _discount$metadata11;
2290
2309
  return _objectSpread(_objectSpread({}, discount), {}, {
2291
2310
  metadata: _objectSpread(_objectSpread({}, discount.metadata), {}, {
2292
2311
  num: item.num,
2293
- custom_product_bundle_map_id: discount === null || discount === void 0 || (_discount$metadata10 = discount.metadata) === null || _discount$metadata10 === void 0 ? void 0 : _discount$metadata10.custom_product_bundle_map_id
2312
+ custom_product_bundle_map_id: discount === null || discount === void 0 || (_discount$metadata11 = discount.metadata) === null || _discount$metadata11 === void 0 ? void 0 : _discount$metadata11.custom_product_bundle_map_id
2294
2313
  })
2295
2314
  // num: item.num, // 使用拆分后的 num
2296
2315
  });
@@ -29,6 +29,10 @@ export interface RulesCalcDiscountOptions {
29
29
  discountId?: number;
30
30
  selectedList?: SetDiscountSelectedParams[];
31
31
  scan?: boolean;
32
+ /** 本次扫码优先使用的次卡实例;普通重算不传,继续保留商品行当前选择。 */
33
+ preferredEntitlementPassIds?: number[];
34
+ /** 普通重算保留商品行已应用的次卡;最优选择传 false 恢复自动排序。 */
35
+ preserveEntitlementSelection?: boolean;
32
36
  /** Change time 重报价目标行:允许已选编辑态折扣卡重新应用到这些 booking 商品。 */
33
37
  reapplyBookingDiscountProductUids?: string[];
34
38
  }
@@ -17,6 +17,7 @@ export * from './Schedule';
17
17
  export * from './Quotation';
18
18
  export * from './ScanOrderLogger';
19
19
  export * from './OpenData';
20
+ export * from './FulfillmentTiming';
20
21
  export * from './BookingContext';
21
22
  export * from './Holder';
22
23
  export * from './ResourcePlanner';
@@ -17,6 +17,7 @@ export * from "./Schedule";
17
17
  export * from "./Quotation";
18
18
  export * from "./ScanOrderLogger";
19
19
  export * from "./OpenData";
20
+ export * from "./FulfillmentTiming";
20
21
  export * from "./BookingContext";
21
22
  export * from "./Holder";
22
23
  export * from "./ResourcePlanner";
@@ -24,6 +24,7 @@ export declare class OrderModule extends BaseModule implements Module {
24
24
  private lastRecentSqliteWriteCleanupAtMs;
25
25
  /** 最近一次 SSE 全量拉取完成时间 */
26
26
  private lastServerFullFetchAtMs;
27
+ private businessDayRefreshPromise;
27
28
  constructor(name?: string, version?: string);
28
29
  /**
29
30
  * 广播订单变更事件,兼容全量列表订阅并额外携带本次变更订单。
@@ -130,6 +131,13 @@ export declare class OrderModule extends BaseModule implements Module {
130
131
  loadOrdersByServer(options?: {
131
132
  trigger?: string;
132
133
  }): Promise<OrderData[]>;
134
+ /**
135
+ * 供展示屏按需补齐当前营业日的订单快照;成功标记复用全量拉取落库逻辑。
136
+ * 拉取或落库失败时不记录已刷新,下一次调用仍可重试。
137
+ */
138
+ refreshOrdersForCurrentBusinessDay(options?: {
139
+ trigger?: string;
140
+ }): Promise<void>;
133
141
  /**
134
142
  * 静默全量刷新:后台重新拉取全量 SSE 订单数据并更新本地
135
143
  * 拿到完整数据后一次性替换 store,触发订单变更与同步完成事件