@pisell/pisellos 0.10.7 → 0.10.9

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 (124) hide show
  1. package/dist/core/index.js +0 -1
  2. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
  3. package/dist/model/strategy/adapter/dataVariant/evaluator.js +287 -101
  4. package/dist/model/strategy/adapter/dataVariant/type.d.ts +25 -0
  5. package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
  6. package/dist/model/strategy/adapter/walletPass/type.d.ts +5 -0
  7. package/dist/model/strategy/adapter/walletPass/utils.js +57 -26
  8. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +18 -12
  9. package/dist/modules/BookingContext/utils/productExtend.js +5 -9
  10. package/dist/modules/BookingContext/utils/timeSlices.js +24 -3
  11. package/dist/modules/Customer/index.d.ts +4 -0
  12. package/dist/modules/Customer/index.js +91 -59
  13. package/dist/modules/Customer/types.d.ts +2 -0
  14. package/dist/modules/Discount/index.d.ts +2 -0
  15. package/dist/modules/Discount/index.js +38 -5
  16. package/dist/modules/Discount/types.d.ts +11 -0
  17. package/dist/modules/Order/index.d.ts +32 -6
  18. package/dist/modules/Order/index.js +1165 -819
  19. package/dist/modules/Order/types.d.ts +32 -4
  20. package/dist/modules/Order/types.js +11 -0
  21. package/dist/modules/Order/utils/discountProductLineIdentity.d.ts +45 -0
  22. package/dist/modules/Order/utils/discountProductLineIdentity.js +227 -0
  23. package/dist/modules/Order/utils/virtualSettlement.d.ts +56 -0
  24. package/dist/modules/Order/utils/virtualSettlement.js +271 -0
  25. package/dist/modules/Order/utils.js +89 -48
  26. package/dist/modules/Payment/types.d.ts +2 -0
  27. package/dist/modules/Payment/utils.js +4 -1
  28. package/dist/modules/Payment/walletpass.d.ts +11 -0
  29. package/dist/modules/Payment/walletpass.js +235 -60
  30. package/dist/modules/Product/types.d.ts +23 -0
  31. package/dist/modules/ProductList/index.d.ts +15 -2
  32. package/dist/modules/ProductList/index.js +92 -13
  33. package/dist/modules/Rules/index.js +125 -52
  34. package/dist/modules/SalesSummary/index.d.ts +1 -0
  35. package/dist/modules/SalesSummary/index.js +4 -3
  36. package/dist/modules/SalesSummary/types.d.ts +1 -0
  37. package/dist/modules/SalesSummary/utils.d.ts +1 -0
  38. package/dist/modules/SalesSummary/utils.js +28 -2
  39. package/dist/server/index.d.ts +15 -0
  40. package/dist/server/index.js +894 -781
  41. package/dist/server/modules/order/index.d.ts +2 -0
  42. package/dist/server/modules/order/index.js +261 -96
  43. package/dist/server/modules/order/types.d.ts +1 -1
  44. package/dist/server/utils/small-ticket.js +2 -1
  45. package/dist/solution/BaseSales/index.d.ts +41 -7
  46. package/dist/solution/BaseSales/index.js +1405 -974
  47. package/dist/solution/BaseSales/utils/cartPromotion.js +26 -3
  48. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  49. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +79 -13
  50. package/dist/solution/BaseSales/utils.js +31 -20
  51. package/dist/solution/BookingByStep/index.d.ts +3 -3
  52. package/dist/solution/BookingTicket/index.d.ts +5 -1
  53. package/dist/solution/BookingTicket/index.js +221 -162
  54. package/dist/solution/BookingTicket/types.d.ts +3 -0
  55. package/dist/solution/BookingTicket/utils/addProductDecision.js +2 -1
  56. package/dist/solution/BookingTicket/utils/cartView.js +44 -32
  57. package/dist/solution/Sales/index.d.ts +1 -0
  58. package/dist/solution/Sales/index.js +16 -2
  59. package/dist/solution/ScanOrder/index.js +25 -64
  60. package/dist/solution/ScanOrder/utils.js +31 -20
  61. package/dist/solution/UnifiedBookingSales/index.d.ts +5 -4
  62. package/dist/solution/UnifiedBookingSales/index.js +51 -39
  63. package/lib/core/index.js +0 -1
  64. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
  65. package/lib/model/strategy/adapter/dataVariant/evaluator.js +170 -7
  66. package/lib/model/strategy/adapter/dataVariant/type.d.ts +25 -0
  67. package/lib/model/strategy/adapter/walletPass/evaluator.js +0 -2
  68. package/lib/model/strategy/adapter/walletPass/type.d.ts +5 -0
  69. package/lib/model/strategy/adapter/walletPass/utils.js +62 -11
  70. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +6 -1
  71. package/lib/modules/BookingContext/utils/productExtend.js +4 -3
  72. package/lib/modules/BookingContext/utils/timeSlices.js +18 -3
  73. package/lib/modules/Customer/index.d.ts +4 -0
  74. package/lib/modules/Customer/index.js +11 -0
  75. package/lib/modules/Customer/types.d.ts +2 -0
  76. package/lib/modules/Discount/index.d.ts +2 -0
  77. package/lib/modules/Discount/index.js +37 -3
  78. package/lib/modules/Discount/types.d.ts +11 -0
  79. package/lib/modules/Order/index.d.ts +32 -6
  80. package/lib/modules/Order/index.js +518 -148
  81. package/lib/modules/Order/types.d.ts +32 -4
  82. package/lib/modules/Order/utils/discountProductLineIdentity.d.ts +45 -0
  83. package/lib/modules/Order/utils/discountProductLineIdentity.js +170 -0
  84. package/lib/modules/Order/utils/virtualSettlement.d.ts +56 -0
  85. package/lib/modules/Order/utils/virtualSettlement.js +300 -0
  86. package/lib/modules/Order/utils.js +65 -21
  87. package/lib/modules/Payment/types.d.ts +2 -0
  88. package/lib/modules/Payment/utils.js +5 -1
  89. package/lib/modules/Payment/walletpass.d.ts +11 -0
  90. package/lib/modules/Payment/walletpass.js +198 -17
  91. package/lib/modules/Product/types.d.ts +23 -0
  92. package/lib/modules/ProductList/index.d.ts +15 -2
  93. package/lib/modules/ProductList/index.js +85 -3
  94. package/lib/modules/Rules/index.js +100 -20
  95. package/lib/modules/SalesSummary/index.d.ts +1 -0
  96. package/lib/modules/SalesSummary/index.js +10 -2
  97. package/lib/modules/SalesSummary/types.d.ts +1 -0
  98. package/lib/modules/SalesSummary/utils.d.ts +1 -0
  99. package/lib/modules/SalesSummary/utils.js +30 -2
  100. package/lib/server/index.d.ts +15 -0
  101. package/lib/server/index.js +105 -14
  102. package/lib/server/modules/order/index.d.ts +2 -0
  103. package/lib/server/modules/order/index.js +75 -5
  104. package/lib/server/modules/order/types.d.ts +1 -1
  105. package/lib/server/utils/small-ticket.js +1 -1
  106. package/lib/solution/BaseSales/index.d.ts +41 -7
  107. package/lib/solution/BaseSales/index.js +325 -39
  108. package/lib/solution/BaseSales/utils/cartPromotion.js +26 -2
  109. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  110. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +62 -12
  111. package/lib/solution/BaseSales/utils.js +29 -18
  112. package/lib/solution/BookingByStep/index.d.ts +3 -3
  113. package/lib/solution/BookingTicket/index.d.ts +5 -1
  114. package/lib/solution/BookingTicket/index.js +31 -6
  115. package/lib/solution/BookingTicket/types.d.ts +3 -0
  116. package/lib/solution/BookingTicket/utils/addProductDecision.js +2 -1
  117. package/lib/solution/BookingTicket/utils/cartView.js +43 -30
  118. package/lib/solution/Sales/index.d.ts +1 -0
  119. package/lib/solution/Sales/index.js +15 -3
  120. package/lib/solution/ScanOrder/index.js +17 -54
  121. package/lib/solution/ScanOrder/utils.js +29 -18
  122. package/lib/solution/UnifiedBookingSales/index.d.ts +5 -4
  123. package/lib/solution/UnifiedBookingSales/index.js +35 -26
  124. package/package.json +1 -1
@@ -5,15 +5,15 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
5
5
  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."); }
6
6
  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; } }
7
7
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
10
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
8
11
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
9
12
  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."); }
10
13
  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); }
11
14
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
12
15
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
13
16
  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; }
14
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
15
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
16
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
17
17
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
18
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
19
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -45,6 +45,29 @@ function normalizeWalletAssetCode(code) {
45
45
  function getWalletAssetCodeKeys(asset) {
46
46
  return [asset === null || asset === void 0 ? void 0 : asset.code, asset === null || asset === void 0 ? void 0 : asset.encoded].map(normalizeWalletAssetCode).filter(Boolean);
47
47
  }
48
+
49
+ /**
50
+ * 保存货币类扫码资产自身的可用余额,供后续前端策略重新计算。
51
+ * 搜索接口的 recommended_usage_amount 已扣除了搜索时的已选券,不能作为
52
+ * 取消勾选后的永久上限。积分卡的 balance_par_value 是积分值,不能直接
53
+ * 当作货币金额,因此继续沿用接口推荐金额。
54
+ */
55
+ function withWalletAssetRecalculationBaseAmount(asset) {
56
+ var existingBaseAmount = Number(asset === null || asset === void 0 ? void 0 : asset._wallet_asset_recalculation_base_amount);
57
+ if (Number.isFinite(existingBaseAmount) && existingBaseAmount >= 0) {
58
+ return asset;
59
+ }
60
+ if (!['product_voucher', 'gift_card'].includes(asset === null || asset === void 0 ? void 0 : asset.tag)) {
61
+ return asset;
62
+ }
63
+ var balanceParValue = Number(asset === null || asset === void 0 ? void 0 : asset.balance_par_value);
64
+ if (!Number.isFinite(balanceParValue) || balanceParValue < 0) {
65
+ return asset;
66
+ }
67
+ return _objectSpread(_objectSpread({}, asset), {}, {
68
+ _wallet_asset_recalculation_base_amount: balanceParValue
69
+ });
70
+ }
48
71
  function isWalletAssetAvailable(asset) {
49
72
  if (!asset) return false;
50
73
  if (asset.unified_available_status !== undefined && Number(asset.unified_available_status) !== 1) {
@@ -81,6 +104,26 @@ function mergeWalletAssets() {
81
104
  });
82
105
  return merged;
83
106
  }
107
+
108
+ /**
109
+ * 聚合接口不保证 recalculate_list 顺序;派生抵扣额依赖选择顺序,
110
+ * 因此已选资产必须先恢复为 selectedIds 的顺序再进入策略计算。
111
+ */
112
+ function orderWalletAssetsByIds(assets, orderedIds) {
113
+ var assetByKey = new Map(assets.map(function (asset) {
114
+ return [getWalletAssetKey(asset), asset];
115
+ }));
116
+ var orderedKeys = new Set(orderedIds.map(function (id) {
117
+ return String(id);
118
+ }));
119
+ return [].concat(_toConsumableArray(orderedIds.map(function (id) {
120
+ return assetByKey.get(String(id));
121
+ }).filter(function (asset) {
122
+ return asset !== undefined;
123
+ })), _toConsumableArray(assets.filter(function (asset) {
124
+ return !orderedKeys.has(getWalletAssetKey(asset));
125
+ })));
126
+ }
84
127
  function createInitialWalletAssetsState() {
85
128
  return {
86
129
  status: 'idle',
@@ -228,6 +271,36 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
228
271
  });
229
272
  }
230
273
 
274
+ /**
275
+ * 搜索接口只返回后端 Wallet Pass 数据,不包含前端策略 config。
276
+ * 在资产进入共享选择状态前补齐策略结果,避免增量重算回退到接口状态。
277
+ */
278
+ }, {
279
+ key: "formatSearchedWalletPaymentAssets",
280
+ value: function formatSearchedWalletPaymentAssets(assets) {
281
+ var _this$paymentModule$w3, _this$paymentModule$w4, _this$walletParams, _this$walletParams2;
282
+ if (!assets.length) return assets;
283
+ var assetsWithRecalculationBase = assets.map(withWalletAssetRecalculationBaseAmount);
284
+ var evaluator = (_this$paymentModule$w3 = this.paymentModule.window) === null || _this$paymentModule$w3 === void 0 || (_this$paymentModule$w4 = _this$paymentModule$w3.getWalletPassEvaluator) === null || _this$paymentModule$w4 === void 0 ? void 0 : _this$paymentModule$w4.call(_this$paymentModule$w3);
285
+ if (!(evaluator !== null && evaluator !== void 0 && evaluator.searchVoucherFormat)) return assetsWithRecalculationBase;
286
+ var hasCalculationProducts = this.walletAssetsCalculationContext.products.length > 0;
287
+ var products = hasCalculationProducts ? this.walletAssetsCalculationContext.products : ((_this$walletParams = this.walletParams) === null || _this$walletParams === void 0 ? void 0 : _this$walletParams.products) || [];
288
+ var orderTotalAmount = Number(hasCalculationProducts ? this.walletAssetsCalculationContext.orderTotalAmount : ((_this$walletParams2 = this.walletParams) === null || _this$walletParams2 === void 0 ? void 0 : _this$walletParams2.order_wait_pay_amount) || 0);
289
+ try {
290
+ var formattedAssets = evaluator.searchVoucherFormat({
291
+ orderTotalAmount: orderTotalAmount,
292
+ products: products,
293
+ vouchers: assetsWithRecalculationBase
294
+ });
295
+ return formattedAssets;
296
+ } catch (error) {
297
+ this.paymentModule.logWarning('[WalletPass] 搜索资产策略格式化失败,保留接口结果', {
298
+ error: error instanceof Error ? error.message : String(error)
299
+ });
300
+ return assetsWithRecalculationBase;
301
+ }
302
+ }
303
+
231
304
  /** 获取当前缓存中所有支付类 Wallet 资产的扫码 code。 */
232
305
  }, {
233
306
  key: "getSearchedWalletAssetCodes",
@@ -256,8 +329,19 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
256
329
  return code.toUpperCase();
257
330
  }));
258
331
  if (searchedCodeKeys.size === 0) return cachedAssets;
332
+ var cachedAssetByCode = new Map();
333
+ cachedAssets.forEach(function (item) {
334
+ getWalletAssetCodeKeys(item).forEach(function (code) {
335
+ cachedAssetByCode.set(code, item);
336
+ });
337
+ });
259
338
  var refreshedAssets = refreshedCandidates.filter(function (item) {
260
339
  return isWalletPaymentAsset(item) && searchedCodeKeys.has(String((item === null || item === void 0 ? void 0 : item.code) || '').trim().toUpperCase());
340
+ }).map(function (item) {
341
+ var cachedAsset = getWalletAssetCodeKeys(item).map(function (code) {
342
+ return cachedAssetByCode.get(code);
343
+ }).find(Boolean);
344
+ return withWalletAssetRecalculationBaseAmount(_objectSpread(_objectSpread({}, cachedAsset), item));
261
345
  });
262
346
  if (refreshedAssets.length > 0) {
263
347
  var replacedCodes = new Set(refreshedAssets.map(function (item) {
@@ -333,8 +417,14 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
333
417
  payment_order_id: payment_order_id
334
418
  };
335
419
 
336
- // 存储生成的参数到模块中
420
+ // 扫码可能早于异步 Wallet 初始化完成。walletParams 与前端增量重算
421
+ // 必须使用同一份当前购物车上下文,避免搜索按真实金额判断可用,
422
+ // 随后的 recalculateVouchers 却仍读取初始的 0 元/空商品上下文。
337
423
  this.walletParams = walletParams;
424
+ this.walletAssetsCalculationContext = {
425
+ orderTotalAmount: Number(walletParams.order_wait_pay_amount || 0),
426
+ products: Array.isArray(walletParams.products) ? walletParams.products : []
427
+ };
338
428
  this.paymentModule.logInfo('[WalletPass] 钱包默认参数已生成并存储', {
339
429
  customer_id: walletParams.customer_id,
340
430
  holder_id: walletParams.holder_id,
@@ -511,7 +601,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
511
601
  key: "initializeWalletDataAsync",
512
602
  value: (function () {
513
603
  var _initializeWalletDataAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(baseParams) {
514
- var _this$paymentModule$w3, _this$paymentModule$w4, identificationParams, _yield$Promise$all, _yield$Promise$all2, allList, orderBasicDetail, walletPassEvaluator, products, res, recommended, transformList, noApplicableVoucher, recommendedAmount;
604
+ var _this$paymentModule$w5, _this$paymentModule$w6, identificationParams, _yield$Promise$all, _yield$Promise$all2, allList, orderBasicDetail, walletPassEvaluator, products, res, recommended, transformList, noApplicableVoucher, recommendedAmount;
515
605
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
516
606
  while (1) switch (_context3.prev = _context3.next) {
517
607
  case 0:
@@ -530,7 +620,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
530
620
  _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
531
621
  allList = _yield$Promise$all2[0];
532
622
  orderBasicDetail = _yield$Promise$all2[1];
533
- walletPassEvaluator = (_this$paymentModule$w3 = this.paymentModule.window) === null || _this$paymentModule$w3 === void 0 || (_this$paymentModule$w4 = _this$paymentModule$w3.getWalletPassEvaluator) === null || _this$paymentModule$w4 === void 0 ? void 0 : _this$paymentModule$w4.call(_this$paymentModule$w3);
623
+ walletPassEvaluator = (_this$paymentModule$w5 = this.paymentModule.window) === null || _this$paymentModule$w5 === void 0 || (_this$paymentModule$w6 = _this$paymentModule$w5.getWalletPassEvaluator) === null || _this$paymentModule$w6 === void 0 ? void 0 : _this$paymentModule$w6.call(_this$paymentModule$w5);
534
624
  if (walletPassEvaluator) {
535
625
  _context3.next = 11;
536
626
  break;
@@ -550,7 +640,6 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
550
640
  vouchers: allList
551
641
  });
552
642
  recommended = res.recommended, transformList = res.transformList, noApplicableVoucher = res.noApplicableVoucher, recommendedAmount = res.recommendedAmount;
553
- console.log(res, 'resres12');
554
643
  this.walletRecommendList = recommended;
555
644
 
556
645
  // 存储初始化数据到内存中,供 useWalletPass 使用
@@ -570,19 +659,19 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
570
659
  noApplicableVoucher: noApplicableVoucher,
571
660
  products: products || []
572
661
  });
573
- case 20:
574
- _context3.prev = 20;
662
+ case 19:
663
+ _context3.prev = 19;
575
664
  _context3.t0 = _context3["catch"](0);
576
665
  this.paymentModule.logError('[WalletPass] 初始化钱包数据失败', _context3.t0, {
577
666
  customer_id: baseParams.customer_id,
578
667
  order_expect_amount: baseParams.order_expect_amount
579
668
  });
580
669
  throw _context3.t0;
581
- case 24:
670
+ case 23:
582
671
  case "end":
583
672
  return _context3.stop();
584
673
  }
585
- }, _callee3, this, [[0, 20]]);
674
+ }, _callee3, this, [[0, 19]]);
586
675
  }));
587
676
  function initializeWalletDataAsync(_x3) {
588
677
  return _initializeWalletDataAsync.apply(this, arguments);
@@ -598,8 +687,8 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
598
687
  key: "aggregateRecalculateWalletAssetsAsync",
599
688
  value: (function () {
600
689
  var _aggregateRecalculateWalletAssetsAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(businessData, selectedIds) {
601
- var _this$paymentModule$w5, _this$paymentModule$w6;
602
- var walletParams, customerId, requestParams, response, responseData, hasAggregateLists, recalculateList, customerWalletPassList, allList, walletPassEvaluator, evaluated, returnedSelectedKeys, authoritativeSelectedIds;
690
+ var _this$paymentModule$w7, _this$paymentModule$w8;
691
+ var walletParams, customerId, requestParams, response, responseData, hasAggregateLists, recalculateList, customerWalletPassList, orderedRecalculateList, allList, walletPassEvaluator, evaluated, returnedSelectedKeys, authoritativeSelectedIds;
603
692
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
604
693
  while (1) switch (_context4.prev = _context4.next) {
605
694
  case 0:
@@ -635,8 +724,9 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
635
724
  case 11:
636
725
  recalculateList = Array.isArray(responseData === null || responseData === void 0 ? void 0 : responseData.recalculate_list) ? responseData.recalculate_list : [];
637
726
  customerWalletPassList = Array.isArray(responseData === null || responseData === void 0 ? void 0 : responseData.customer_wallet_pass_list) ? responseData.customer_wallet_pass_list : [];
638
- allList = mergeWalletAssets(recalculateList, customerWalletPassList);
639
- walletPassEvaluator = (_this$paymentModule$w5 = this.paymentModule.window) === null || _this$paymentModule$w5 === void 0 || (_this$paymentModule$w6 = _this$paymentModule$w5.getWalletPassEvaluator) === null || _this$paymentModule$w6 === void 0 ? void 0 : _this$paymentModule$w6.call(_this$paymentModule$w5);
727
+ orderedRecalculateList = orderWalletAssetsByIds(recalculateList, selectedIds);
728
+ allList = mergeWalletAssets(orderedRecalculateList, customerWalletPassList);
729
+ walletPassEvaluator = (_this$paymentModule$w7 = this.paymentModule.window) === null || _this$paymentModule$w7 === void 0 || (_this$paymentModule$w8 = _this$paymentModule$w7.getWalletPassEvaluator) === null || _this$paymentModule$w8 === void 0 ? void 0 : _this$paymentModule$w8.call(_this$paymentModule$w7);
640
730
  evaluated = walletPassEvaluator !== null && walletPassEvaluator !== void 0 && walletPassEvaluator.getRecommendedVouchers ? walletPassEvaluator.getRecommendedVouchers({
641
731
  orderTotalAmount: walletParams.order_wait_pay_amount,
642
732
  products: walletParams.products,
@@ -647,8 +737,10 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
647
737
  noApplicableVoucher: allList.filter(function (item) {
648
738
  return !isWalletAssetAvailable(item);
649
739
  })
650
- };
651
- returnedSelectedKeys = new Set(recalculateList.filter(isWalletAssetAvailable).map(function (item) {
740
+ }; // 聚合接口只负责刷新资产数据;选中资格最终由前端 evaluator 重算。
741
+ // 这里仅移除接口完全未返回的资产,不能把 recalculate_list 当作
742
+ // 策略选中结果,否则 customer_wallet_pass_list 中的可用券会被误取消。
743
+ returnedSelectedKeys = new Set(allList.map(function (item) {
652
744
  return getWalletAssetKey(item);
653
745
  }));
654
746
  authoritativeSelectedIds = selectedIds.filter(function (id) {
@@ -677,7 +769,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
677
769
  products: walletParams.products || [],
678
770
  authoritativeSelectedIds: authoritativeSelectedIds
679
771
  });
680
- case 24:
772
+ case 25:
681
773
  case "end":
682
774
  return _context4.stop();
683
775
  }
@@ -692,7 +784,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
692
784
  key: "getWalletPassRecommendListAsync",
693
785
  value: function () {
694
786
  var _getWalletPassRecommendListAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(params) {
695
- var _this$walletParams, response;
787
+ var _this$walletParams3, response;
696
788
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
697
789
  while (1) switch (_context5.prev = _context5.next) {
698
790
  case 0:
@@ -701,7 +793,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
701
793
  customer_id: params.customer_id,
702
794
  order_expect_amount: params.order_expect_amount,
703
795
  sale_channel: params.sale_channel,
704
- payment_order_id: (_this$walletParams = this.walletParams) === null || _this$walletParams === void 0 ? void 0 : _this$walletParams.payment_order_id
796
+ payment_order_id: (_this$walletParams3 = this.walletParams) === null || _this$walletParams3 === void 0 ? void 0 : _this$walletParams3.payment_order_id
705
797
  });
706
798
  if (typeof params.payment_order_id === 'string' && params.payment_order_id.startsWith('LOCAL_')) {
707
799
  params.payment_order_id = undefined;
@@ -759,7 +851,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
759
851
  key: "getUserIdentificationCodeListAsync",
760
852
  value: function () {
761
853
  var _getUserIdentificationCodeListAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(params) {
762
- var _newParams$products, _newParams$prepare_pa, _this$walletParams2, newParams, platform, response, sortedData;
854
+ var _newParams$products, _newParams$prepare_pa, _this$walletParams4, newParams, platform, response, sortedData;
763
855
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
764
856
  while (1) switch (_context6.prev = _context6.next) {
765
857
  case 0:
@@ -794,7 +886,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
794
886
  available: newParams.available,
795
887
  prepare_payments_count: ((_newParams$prepare_pa = newParams.prepare_payments) === null || _newParams$prepare_pa === void 0 ? void 0 : _newParams$prepare_pa.length) || 0,
796
888
  filter_prepare_wallet_pass: newParams.filter_prepare_wallet_pass,
797
- payment_order_id: (_this$walletParams2 = this.walletParams) === null || _this$walletParams2 === void 0 ? void 0 : _this$walletParams2.payment_order_id
889
+ payment_order_id: (_this$walletParams4 = this.walletParams) === null || _this$walletParams4 === void 0 ? void 0 : _this$walletParams4.payment_order_id
798
890
  });
799
891
  _context6.next = 15;
800
892
  return this.paymentModule.request.post('/machinecode/prepare/deduction', newParams);
@@ -1033,6 +1125,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1033
1125
  selectedIds,
1034
1126
  selectionSources,
1035
1127
  scanSelectedAssets,
1128
+ manualEditAmountByKey,
1036
1129
  restoredSearchedAssets,
1037
1130
  searchedWalletAssetCodes,
1038
1131
  useAggregateRecalculate,
@@ -1075,11 +1168,20 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1075
1168
  scanSelectedAssets = preserveSelection ? this.walletAssetsState.selectedItems.filter(function (asset) {
1076
1169
  var assetId = getWalletAssetId(asset);
1077
1170
  return assetId !== undefined && assetId !== null && selectionSources[String(assetId)] === 'scan';
1078
- }) : []; // aggregate-recalculate 不接受空商品列表。
1171
+ }) : [];
1172
+ manualEditAmountByKey = new Map();
1173
+ if (preserveSelection) {
1174
+ this.walletAssetsState.selectedItems.forEach(function (asset) {
1175
+ if (typeof (asset === null || asset === void 0 ? void 0 : asset.edit_current_amount) !== 'number') return;
1176
+ manualEditAmountByKey.set(getWalletAssetKey(asset), asset.edit_current_amount);
1177
+ });
1178
+ }
1179
+
1180
+ // aggregate-recalculate 不接受空商品列表。
1079
1181
  // 清空购物车时保留扫码资产供后续加购恢复;只有手动 Remove/Clear
1080
1182
  // 会取消自动应用资格,商品变化导致的自动失效需要重新进入待选队列。
1081
1183
  if ((_businessData$product2 = businessData.products) !== null && _businessData$product2 !== void 0 && _businessData$product2.length) {
1082
- _context8.next = 22;
1184
+ _context8.next = 24;
1083
1185
  break;
1084
1186
  }
1085
1187
  this.queuePendingAutoSelectForAssets(scanSelectedAssets);
@@ -1117,7 +1219,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1117
1219
  totalSelectedAmount: 0,
1118
1220
  error: null
1119
1221
  }));
1120
- case 22:
1222
+ case 24:
1121
1223
  this.publishWalletAssetsState({
1122
1224
  status: 'loading',
1123
1225
  customerId: nextCustomerId,
@@ -1128,40 +1230,40 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1128
1230
  totalSelectedAmount: preserveSelection ? this.walletAssetsState.totalSelectedAmount : 0,
1129
1231
  error: null
1130
1232
  });
1131
- _context8.prev = 23;
1233
+ _context8.prev = 25;
1132
1234
  searchedWalletAssetCodes = preserveSelection ? this.getSearchedWalletAssetCodes() : [];
1133
1235
  useAggregateRecalculate = preserveSelection && (selectedIds.length > 0 || searchedWalletAssetCodes.length > 0);
1134
1236
  if (!useAggregateRecalculate) {
1135
- _context8.next = 32;
1237
+ _context8.next = 34;
1136
1238
  break;
1137
1239
  }
1138
- _context8.next = 29;
1240
+ _context8.next = 31;
1139
1241
  return this.aggregateRecalculateWalletAssetsAsync(businessData, selectedIds);
1140
- case 29:
1242
+ case 31:
1141
1243
  _context8.t0 = _context8.sent;
1142
- _context8.next = 33;
1244
+ _context8.next = 35;
1143
1245
  break;
1144
- case 32:
1246
+ case 34:
1145
1247
  _context8.t0 = null;
1146
- case 33:
1248
+ case 35:
1147
1249
  aggregateResult = _context8.t0;
1148
1250
  _context8.t1 = aggregateResult;
1149
1251
  if (_context8.t1) {
1150
- _context8.next = 39;
1252
+ _context8.next = 41;
1151
1253
  break;
1152
1254
  }
1153
- _context8.next = 38;
1255
+ _context8.next = 40;
1154
1256
  return this.initializeWalletDataFromBusinessAsync(businessData);
1155
- case 38:
1257
+ case 40:
1156
1258
  _context8.t1 = _context8.sent;
1157
- case 39:
1259
+ case 41:
1158
1260
  result = _context8.t1;
1159
1261
  if (!(requestSequence !== this.walletAssetsRequestSequence)) {
1160
- _context8.next = 42;
1262
+ _context8.next = 44;
1161
1263
  break;
1162
1264
  }
1163
1265
  return _context8.abrupt("return", this.getWalletAssetsState());
1164
- case 42:
1266
+ case 44:
1165
1267
  this.walletAssetsCalculationContext = {
1166
1268
  orderTotalAmount: Number(businessData.order_wait_pay_amount || 0),
1167
1269
  products: result.products || businessData.products || []
@@ -1184,17 +1286,20 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1184
1286
  }
1185
1287
  searchedWalletAssets = preserveSelection ? this.syncSearchedWalletAssets([].concat(_toConsumableArray(result.transformList || []), _toConsumableArray(result.noApplicableVoucher || []))) : [];
1186
1288
  if (!(requestSequence !== this.walletAssetsRequestSequence)) {
1187
- _context8.next = 48;
1289
+ _context8.next = 50;
1188
1290
  break;
1189
1291
  }
1190
1292
  return _context8.abrupt("return", this.getWalletAssetsState());
1191
- case 48:
1293
+ case 50:
1192
1294
  recommendedKeys = new Set((result.walletRecommendList || []).map(function (asset) {
1193
1295
  return getWalletAssetKey(asset);
1194
1296
  }));
1195
1297
  items = mergeWalletAssets(preserveSelection && !aggregateResult ? this.walletAssetsState.selectedItems : [], searchedWalletAssets, result.transformList || [], result.noApplicableVoucher || []).map(function (asset) {
1196
- return _objectSpread(_objectSpread({}, asset), {}, {
1197
- _wallet_asset_recommended: recommendedKeys.has(getWalletAssetKey(asset))
1298
+ var assetKey = getWalletAssetKey(asset);
1299
+ return _objectSpread(_objectSpread(_objectSpread({}, asset), manualEditAmountByKey.has(assetKey) ? {
1300
+ edit_current_amount: manualEditAmountByKey.get(assetKey)
1301
+ } : {}), {}, {
1302
+ _wallet_asset_recommended: recommendedKeys.has(assetKey)
1198
1303
  });
1199
1304
  });
1200
1305
  latestSelectedIds = preserveSelection ? authoritativeSelectedIds : [];
@@ -1231,15 +1336,15 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1231
1336
  });
1232
1337
  this.queuePendingAutoSelectForAssets(droppedScanSelectedAssets);
1233
1338
  return _context8.abrupt("return", nextState);
1234
- case 63:
1235
- _context8.prev = 63;
1236
- _context8.t2 = _context8["catch"](23);
1339
+ case 65:
1340
+ _context8.prev = 65;
1341
+ _context8.t2 = _context8["catch"](25);
1237
1342
  if (!(requestSequence !== this.walletAssetsRequestSequence)) {
1238
- _context8.next = 67;
1343
+ _context8.next = 69;
1239
1344
  break;
1240
1345
  }
1241
1346
  return _context8.abrupt("return", this.getWalletAssetsState());
1242
- case 67:
1347
+ case 69:
1243
1348
  this.paymentModule.logError('[WalletPass] 刷新共享钱包资产失败,保留刷新前状态', _context8.t2, {
1244
1349
  customer_id: businessData.customer_id,
1245
1350
  selected_ids: selectedIds,
@@ -1255,11 +1360,11 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1255
1360
  customerId: nextCustomerId,
1256
1361
  error: _context8.t2 instanceof Error ? _context8.t2.message : String(_context8.t2)
1257
1362
  }));
1258
- case 69:
1363
+ case 71:
1259
1364
  case "end":
1260
1365
  return _context8.stop();
1261
1366
  }
1262
- }, _callee8, this, [[23, 63]]);
1367
+ }, _callee8, this, [[25, 65]]);
1263
1368
  }));
1264
1369
  function refreshWalletAssetsFromBusinessAsync(_x9) {
1265
1370
  return _refreshWalletAssetsFromBusinessAsync.apply(this, arguments);
@@ -1312,6 +1417,17 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1312
1417
  selectionSources: snapshot.state.selectionSources || {}
1313
1418
  }));
1314
1419
  }
1420
+ }, {
1421
+ key: "updateWalletAssetEditAmountInCaches",
1422
+ value: function updateWalletAssetEditAmountInCaches(assetKey, amount) {
1423
+ var updateAsset = function updateAsset(asset) {
1424
+ return getWalletAssetKey(asset) === assetKey ? _objectSpread(_objectSpread({}, asset), {}, {
1425
+ edit_current_amount: amount
1426
+ }) : asset;
1427
+ };
1428
+ this.searchResults = this.searchResults.map(updateAsset);
1429
+ return this.walletAssetsState.items.map(updateAsset);
1430
+ }
1315
1431
  }, {
1316
1432
  key: "selectWalletAsset",
1317
1433
  value: function selectWalletAsset(assetId, options) {
@@ -1328,6 +1444,7 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1328
1444
  });
1329
1445
  var selectionSources = _objectSpread({}, this.walletAssetsState.selectionSources);
1330
1446
  delete selectionSources[assetKey];
1447
+ var nextItems = this.walletAssetsState.items;
1331
1448
  if (options.selected) {
1332
1449
  if (!asset || !isWalletAssetAvailable(asset)) {
1333
1450
  return this.getWalletAssetsState();
@@ -1336,8 +1453,9 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1336
1453
  selectionSources[assetKey] = options.source || 'manual';
1337
1454
  } else if (asset) {
1338
1455
  this.clearPendingAutoSelectForAsset(asset);
1456
+ nextItems = this.updateWalletAssetEditAmountInCaches(assetKey, undefined);
1339
1457
  }
1340
- var nextState = this.recalculateWalletAssets(this.walletAssetsState.items, selectedIds, selectionSources);
1458
+ var nextState = this.recalculateWalletAssets(nextItems, selectedIds, selectionSources);
1341
1459
  if (options.selected && asset && nextState.selectedIds.some(function (id) {
1342
1460
  return String(id) === assetKey;
1343
1461
  })) {
@@ -1345,11 +1463,49 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1345
1463
  }
1346
1464
  return nextState;
1347
1465
  }
1466
+
1467
+ /**
1468
+ * 更新已选资产的手动金额。只允许在当前实际抵扣额内向下调整,
1469
+ * 金额为 0 时沿用 legacy 行为取消选择。
1470
+ */
1471
+ }, {
1472
+ key: "updateWalletAssetAmount",
1473
+ value: function updateWalletAssetAmount(assetId, amount) {
1474
+ var assetKey = String(assetId);
1475
+ var committedKeys = new Set(this.walletAssetsState.committedIds.map(function (id) {
1476
+ return String(id);
1477
+ }));
1478
+ var selectedKeys = new Set(this.walletAssetsState.selectedIds.map(function (id) {
1479
+ return String(id);
1480
+ }));
1481
+ var asset = this.walletAssetsState.items.find(function (item) {
1482
+ return getWalletAssetKey(item) === assetKey;
1483
+ });
1484
+ var requestedAmount = Number(amount);
1485
+ if (!asset || committedKeys.has(assetKey) || !selectedKeys.has(assetKey) || !Number.isFinite(requestedAmount) || requestedAmount < 0) {
1486
+ return this.getWalletAssetsState();
1487
+ }
1488
+ var selectedIds = _toConsumableArray(this.walletAssetsState.selectedIds);
1489
+ var selectionSources = _objectSpread({}, this.walletAssetsState.selectionSources);
1490
+ if (requestedAmount === 0) {
1491
+ var _nextItems = this.updateWalletAssetEditAmountInCaches(assetKey, undefined);
1492
+ delete selectionSources[assetKey];
1493
+ this.clearPendingAutoSelectForAsset(asset);
1494
+ return this.recalculateWalletAssets(_nextItems, selectedIds.filter(function (id) {
1495
+ return String(id) !== assetKey;
1496
+ }), selectionSources);
1497
+ }
1498
+ var currentDeductionAmount = getWalletAssetDeductionAmount(asset);
1499
+ var editAmount = Math.min(requestedAmount, currentDeductionAmount);
1500
+ if (editAmount <= 0) return this.getWalletAssetsState();
1501
+ var nextItems = this.updateWalletAssetEditAmountInCaches(assetKey, editAmount);
1502
+ return this.recalculateWalletAssets(nextItems, selectedIds, selectionSources);
1503
+ }
1348
1504
  }, {
1349
1505
  key: "scanWalletAssetAsync",
1350
1506
  value: function () {
1351
1507
  var _scanWalletAssetAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(code) {
1352
- var normalizedCode, selectedAsset, result, paymentAssets, asset, items, recalculatedState, assetId, selected, isSelected;
1508
+ var normalizedCode, selectedAsset, result, paymentAssets, asset, items, recalculatedState, assetId, recalculatedAsset, selected, isSelected, selectedStateAsset, resolvedAsset;
1353
1509
  return _regeneratorRuntime().wrap(function _callee9$(_context9) {
1354
1510
  while (1) switch (_context9.prev = _context9.next) {
1355
1511
  case 0:
@@ -1386,12 +1542,15 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1386
1542
  }));
1387
1543
  case 9:
1388
1544
  result = _context9.sent;
1389
- paymentAssets = result.data.filter(isWalletPaymentAsset);
1545
+ paymentAssets = this.formatSearchedWalletPaymentAssets(result.data.filter(isWalletPaymentAsset));
1546
+ if (paymentAssets.length > 0) {
1547
+ this.searchResults = mergeWalletAssets(this.searchResults, paymentAssets);
1548
+ }
1390
1549
  asset = paymentAssets.find(function (item) {
1391
1550
  return String((item === null || item === void 0 ? void 0 : item.code) || '') === normalizedCode;
1392
1551
  }) || paymentAssets[0];
1393
1552
  if (!(!asset || result.type === 'walletCode')) {
1394
- _context9.next = 14;
1553
+ _context9.next = 15;
1395
1554
  break;
1396
1555
  }
1397
1556
  return _context9.abrupt("return", {
@@ -1400,30 +1559,37 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1400
1559
  selected: false,
1401
1560
  state: this.getWalletAssetsState()
1402
1561
  });
1403
- case 14:
1562
+ case 15:
1404
1563
  items = mergeWalletAssets(this.walletAssetsState.items, [asset]);
1405
1564
  recalculatedState = this.recalculateWalletAssets(items, this.walletAssetsState.selectedIds, this.walletAssetsState.selectionSources);
1406
1565
  assetId = getWalletAssetId(asset);
1407
- selected = this.walletAssetsBehavior.autoSelectAfterSearch && assetId !== undefined && isWalletAssetAvailable(asset) ? this.selectWalletAsset(assetId, {
1566
+ recalculatedAsset = assetId === undefined ? undefined : recalculatedState.items.find(function (item) {
1567
+ return getWalletAssetKey(item) === String(assetId);
1568
+ });
1569
+ selected = this.walletAssetsBehavior.autoSelectAfterSearch && assetId !== undefined && isWalletAssetAvailable(recalculatedAsset) ? this.selectWalletAsset(assetId, {
1408
1570
  selected: true,
1409
1571
  source: 'scan'
1410
1572
  }) : recalculatedState;
1411
1573
  isSelected = assetId !== undefined && selected.selectedIds.some(function (id) {
1412
1574
  return String(id) === String(assetId);
1413
1575
  });
1576
+ selectedStateAsset = assetId === undefined ? undefined : selected.items.find(function (item) {
1577
+ return getWalletAssetKey(item) === String(assetId);
1578
+ });
1579
+ resolvedAsset = selectedStateAsset || recalculatedAsset || asset;
1414
1580
  if (isSelected) {
1415
- this.clearPendingAutoSelectForAsset(asset);
1581
+ this.clearPendingAutoSelectForAsset(resolvedAsset);
1416
1582
  } else if (this.walletAssetsBehavior.autoSelectAfterSearch) {
1417
1583
  this.pendingAutoSelectSearchCodes.add(normalizeWalletAssetCode(normalizedCode));
1418
- this.queuePendingAutoSelectForAssets([asset]);
1584
+ this.queuePendingAutoSelectForAssets([resolvedAsset]);
1419
1585
  }
1420
1586
  return _context9.abrupt("return", {
1421
1587
  type: result.type,
1422
- asset: asset,
1588
+ asset: resolvedAsset,
1423
1589
  selected: isSelected,
1424
1590
  state: selected
1425
1591
  });
1426
- case 21:
1592
+ case 25:
1427
1593
  case "end":
1428
1594
  return _context9.stop();
1429
1595
  }
@@ -1438,7 +1604,16 @@ export var WalletPassPaymentImpl = /*#__PURE__*/function () {
1438
1604
  key: "clearWalletAssetSelection",
1439
1605
  value: function clearWalletAssetSelection() {
1440
1606
  this.pendingAutoSelectSearchCodes.clear();
1441
- return this.recalculateWalletAssets(this.walletAssetsState.items, [], {});
1607
+ var selectedKeys = new Set(this.walletAssetsState.selectedIds.map(function (id) {
1608
+ return String(id);
1609
+ }));
1610
+ var clearSelectedEditAmount = function clearSelectedEditAmount(asset) {
1611
+ return selectedKeys.has(getWalletAssetKey(asset)) ? _objectSpread(_objectSpread({}, asset), {}, {
1612
+ edit_current_amount: undefined
1613
+ }) : asset;
1614
+ };
1615
+ this.searchResults = this.searchResults.map(clearSelectedEditAmount);
1616
+ return this.recalculateWalletAssets(this.walletAssetsState.items.map(clearSelectedEditAmount), [], {});
1442
1617
  }
1443
1618
  }, {
1444
1619
  key: "setCommittedWalletAssets",
@@ -23,12 +23,25 @@ export interface ProductDataVariant {
23
23
  module_data_id: number;
24
24
  /** 关联 data_variant_rule.id */
25
25
  data_variant_rule_id: number;
26
+ /** 多货币结算等业务类型 */
27
+ business_type?: 'multi_currency_settlement' | string;
28
+ /** 数据状态;多货币结算仅处理 enable 记录 */
29
+ status?: 'enable' | 'disable' | string;
26
30
  /** 命中策略后覆盖到商品上的字段 */
27
31
  data: Record<string, any>;
28
32
  created_at: string | null;
29
33
  updated_at: string | null;
30
34
  deleted_at: string | null;
31
35
  }
36
+ export interface ProductSettlementOption extends Record<string, any> {
37
+ settlement_type: 'legal_currency' | 'virtual_currency' | string;
38
+ currency_product_id?: number;
39
+ price: string;
40
+ data_variant_id?: number;
41
+ data_variant_rule_id: number | string;
42
+ available: boolean;
43
+ disabled_reason?: string;
44
+ }
32
45
  /**
33
46
  * 商品基本信息接口
34
47
  */
@@ -61,6 +74,8 @@ export interface ProductData {
61
74
  sum_stock: number;
62
75
  /** 商品价格 */
63
76
  price: string;
77
+ /** 当前上下文解析出的可选结算货币 */
78
+ available_settlement_options?: ProductSettlementOption[];
64
79
  /** 商品原价 */
65
80
  original_price: string;
66
81
  /** 商品成本价 */
@@ -237,6 +252,14 @@ export interface ProductData {
237
252
  option_group_count: number;
238
253
  /** 智能定价变体列表,/product/query with dataVariants 返回 */
239
254
  data_variants?: ProductDataVariant[];
255
+ /**
256
+ * 商品接口规则计算结果;data_variant_ids 按优先级从高到低排列。
257
+ * 空数组表示规则已经计算完成但没有命中 Data Variant。
258
+ */
259
+ metadata?: {
260
+ data_variant_ids?: Array<number | string>;
261
+ [key: string]: any;
262
+ };
240
263
  /** 服务时长 */
241
264
  service_times?: any;
242
265
  }