@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.
- package/dist/core/index.js +0 -1
- package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
- package/dist/model/strategy/adapter/dataVariant/evaluator.js +287 -101
- package/dist/model/strategy/adapter/dataVariant/type.d.ts +25 -0
- package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
- package/dist/model/strategy/adapter/walletPass/type.d.ts +5 -0
- package/dist/model/strategy/adapter/walletPass/utils.js +57 -26
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +18 -12
- package/dist/modules/BookingContext/utils/productExtend.js +5 -9
- package/dist/modules/BookingContext/utils/timeSlices.js +24 -3
- package/dist/modules/Customer/index.d.ts +4 -0
- package/dist/modules/Customer/index.js +91 -59
- package/dist/modules/Customer/types.d.ts +2 -0
- package/dist/modules/Discount/index.d.ts +2 -0
- package/dist/modules/Discount/index.js +38 -5
- package/dist/modules/Discount/types.d.ts +11 -0
- package/dist/modules/Order/index.d.ts +32 -6
- package/dist/modules/Order/index.js +1165 -819
- package/dist/modules/Order/types.d.ts +32 -4
- package/dist/modules/Order/types.js +11 -0
- package/dist/modules/Order/utils/discountProductLineIdentity.d.ts +45 -0
- package/dist/modules/Order/utils/discountProductLineIdentity.js +227 -0
- package/dist/modules/Order/utils/virtualSettlement.d.ts +56 -0
- package/dist/modules/Order/utils/virtualSettlement.js +271 -0
- package/dist/modules/Order/utils.js +89 -48
- package/dist/modules/Payment/types.d.ts +2 -0
- package/dist/modules/Payment/utils.js +4 -1
- package/dist/modules/Payment/walletpass.d.ts +11 -0
- package/dist/modules/Payment/walletpass.js +235 -60
- package/dist/modules/Product/types.d.ts +23 -0
- package/dist/modules/ProductList/index.d.ts +15 -2
- package/dist/modules/ProductList/index.js +92 -13
- package/dist/modules/Rules/index.js +125 -52
- package/dist/modules/SalesSummary/index.d.ts +1 -0
- package/dist/modules/SalesSummary/index.js +4 -3
- package/dist/modules/SalesSummary/types.d.ts +1 -0
- package/dist/modules/SalesSummary/utils.d.ts +1 -0
- package/dist/modules/SalesSummary/utils.js +28 -2
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.js +894 -781
- package/dist/server/modules/order/index.d.ts +2 -0
- package/dist/server/modules/order/index.js +261 -96
- package/dist/server/modules/order/types.d.ts +1 -1
- package/dist/server/utils/small-ticket.js +2 -1
- package/dist/solution/BaseSales/index.d.ts +41 -7
- package/dist/solution/BaseSales/index.js +1405 -974
- package/dist/solution/BaseSales/utils/cartPromotion.js +26 -3
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +79 -13
- package/dist/solution/BaseSales/utils.js +31 -20
- package/dist/solution/BookingByStep/index.d.ts +3 -3
- package/dist/solution/BookingTicket/index.d.ts +5 -1
- package/dist/solution/BookingTicket/index.js +221 -162
- package/dist/solution/BookingTicket/types.d.ts +3 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +2 -1
- package/dist/solution/BookingTicket/utils/cartView.js +44 -32
- package/dist/solution/Sales/index.d.ts +1 -0
- package/dist/solution/Sales/index.js +16 -2
- package/dist/solution/ScanOrder/index.js +25 -64
- package/dist/solution/ScanOrder/utils.js +31 -20
- package/dist/solution/UnifiedBookingSales/index.d.ts +5 -4
- package/dist/solution/UnifiedBookingSales/index.js +51 -39
- package/lib/core/index.js +0 -1
- package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +170 -7
- package/lib/model/strategy/adapter/dataVariant/type.d.ts +25 -0
- package/lib/model/strategy/adapter/walletPass/evaluator.js +0 -2
- package/lib/model/strategy/adapter/walletPass/type.d.ts +5 -0
- package/lib/model/strategy/adapter/walletPass/utils.js +62 -11
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +6 -1
- package/lib/modules/BookingContext/utils/productExtend.js +4 -3
- package/lib/modules/BookingContext/utils/timeSlices.js +18 -3
- package/lib/modules/Customer/index.d.ts +4 -0
- package/lib/modules/Customer/index.js +11 -0
- package/lib/modules/Customer/types.d.ts +2 -0
- package/lib/modules/Discount/index.d.ts +2 -0
- package/lib/modules/Discount/index.js +37 -3
- package/lib/modules/Discount/types.d.ts +11 -0
- package/lib/modules/Order/index.d.ts +32 -6
- package/lib/modules/Order/index.js +518 -148
- package/lib/modules/Order/types.d.ts +32 -4
- package/lib/modules/Order/utils/discountProductLineIdentity.d.ts +45 -0
- package/lib/modules/Order/utils/discountProductLineIdentity.js +170 -0
- package/lib/modules/Order/utils/virtualSettlement.d.ts +56 -0
- package/lib/modules/Order/utils/virtualSettlement.js +300 -0
- package/lib/modules/Order/utils.js +65 -21
- package/lib/modules/Payment/types.d.ts +2 -0
- package/lib/modules/Payment/utils.js +5 -1
- package/lib/modules/Payment/walletpass.d.ts +11 -0
- package/lib/modules/Payment/walletpass.js +198 -17
- package/lib/modules/Product/types.d.ts +23 -0
- package/lib/modules/ProductList/index.d.ts +15 -2
- package/lib/modules/ProductList/index.js +85 -3
- package/lib/modules/Rules/index.js +100 -20
- package/lib/modules/SalesSummary/index.d.ts +1 -0
- package/lib/modules/SalesSummary/index.js +10 -2
- package/lib/modules/SalesSummary/types.d.ts +1 -0
- package/lib/modules/SalesSummary/utils.d.ts +1 -0
- package/lib/modules/SalesSummary/utils.js +30 -2
- package/lib/server/index.d.ts +15 -0
- package/lib/server/index.js +105 -14
- package/lib/server/modules/order/index.d.ts +2 -0
- package/lib/server/modules/order/index.js +75 -5
- package/lib/server/modules/order/types.d.ts +1 -1
- package/lib/server/utils/small-ticket.js +1 -1
- package/lib/solution/BaseSales/index.d.ts +41 -7
- package/lib/solution/BaseSales/index.js +325 -39
- package/lib/solution/BaseSales/utils/cartPromotion.js +26 -2
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +62 -12
- package/lib/solution/BaseSales/utils.js +29 -18
- package/lib/solution/BookingByStep/index.d.ts +3 -3
- package/lib/solution/BookingTicket/index.d.ts +5 -1
- package/lib/solution/BookingTicket/index.js +31 -6
- package/lib/solution/BookingTicket/types.d.ts +3 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +2 -1
- package/lib/solution/BookingTicket/utils/cartView.js +43 -30
- package/lib/solution/Sales/index.d.ts +1 -0
- package/lib/solution/Sales/index.js +15 -3
- package/lib/solution/ScanOrder/index.js +17 -54
- package/lib/solution/ScanOrder/utils.js +29 -18
- package/lib/solution/UnifiedBookingSales/index.d.ts +5 -4
- package/lib/solution/UnifiedBookingSales/index.js +35 -26
- 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$
|
|
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$
|
|
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
|
|
574
|
-
_context3.prev =
|
|
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
|
|
670
|
+
case 23:
|
|
582
671
|
case "end":
|
|
583
672
|
return _context3.stop();
|
|
584
673
|
}
|
|
585
|
-
}, _callee3, this, [[0,
|
|
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$
|
|
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
|
-
|
|
639
|
-
|
|
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
|
-
|
|
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
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
}) : [];
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
1237
|
+
_context8.next = 34;
|
|
1136
1238
|
break;
|
|
1137
1239
|
}
|
|
1138
|
-
_context8.next =
|
|
1240
|
+
_context8.next = 31;
|
|
1139
1241
|
return this.aggregateRecalculateWalletAssetsAsync(businessData, selectedIds);
|
|
1140
|
-
case
|
|
1242
|
+
case 31:
|
|
1141
1243
|
_context8.t0 = _context8.sent;
|
|
1142
|
-
_context8.next =
|
|
1244
|
+
_context8.next = 35;
|
|
1143
1245
|
break;
|
|
1144
|
-
case
|
|
1246
|
+
case 34:
|
|
1145
1247
|
_context8.t0 = null;
|
|
1146
|
-
case
|
|
1248
|
+
case 35:
|
|
1147
1249
|
aggregateResult = _context8.t0;
|
|
1148
1250
|
_context8.t1 = aggregateResult;
|
|
1149
1251
|
if (_context8.t1) {
|
|
1150
|
-
_context8.next =
|
|
1252
|
+
_context8.next = 41;
|
|
1151
1253
|
break;
|
|
1152
1254
|
}
|
|
1153
|
-
_context8.next =
|
|
1255
|
+
_context8.next = 40;
|
|
1154
1256
|
return this.initializeWalletDataFromBusinessAsync(businessData);
|
|
1155
|
-
case
|
|
1257
|
+
case 40:
|
|
1156
1258
|
_context8.t1 = _context8.sent;
|
|
1157
|
-
case
|
|
1259
|
+
case 41:
|
|
1158
1260
|
result = _context8.t1;
|
|
1159
1261
|
if (!(requestSequence !== this.walletAssetsRequestSequence)) {
|
|
1160
|
-
_context8.next =
|
|
1262
|
+
_context8.next = 44;
|
|
1161
1263
|
break;
|
|
1162
1264
|
}
|
|
1163
1265
|
return _context8.abrupt("return", this.getWalletAssetsState());
|
|
1164
|
-
case
|
|
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 =
|
|
1289
|
+
_context8.next = 50;
|
|
1188
1290
|
break;
|
|
1189
1291
|
}
|
|
1190
1292
|
return _context8.abrupt("return", this.getWalletAssetsState());
|
|
1191
|
-
case
|
|
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
|
-
|
|
1197
|
-
|
|
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
|
|
1235
|
-
_context8.prev =
|
|
1236
|
-
_context8.t2 = _context8["catch"](
|
|
1339
|
+
case 65:
|
|
1340
|
+
_context8.prev = 65;
|
|
1341
|
+
_context8.t2 = _context8["catch"](25);
|
|
1237
1342
|
if (!(requestSequence !== this.walletAssetsRequestSequence)) {
|
|
1238
|
-
_context8.next =
|
|
1343
|
+
_context8.next = 69;
|
|
1239
1344
|
break;
|
|
1240
1345
|
}
|
|
1241
1346
|
return _context8.abrupt("return", this.getWalletAssetsState());
|
|
1242
|
-
case
|
|
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
|
|
1363
|
+
case 71:
|
|
1259
1364
|
case "end":
|
|
1260
1365
|
return _context8.stop();
|
|
1261
1366
|
}
|
|
1262
|
-
}, _callee8, this, [[
|
|
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(
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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(
|
|
1581
|
+
this.clearPendingAutoSelectForAsset(resolvedAsset);
|
|
1416
1582
|
} else if (this.walletAssetsBehavior.autoSelectAfterSearch) {
|
|
1417
1583
|
this.pendingAutoSelectSearchCodes.add(normalizeWalletAssetCode(normalizedCode));
|
|
1418
|
-
this.queuePendingAutoSelectForAssets([
|
|
1584
|
+
this.queuePendingAutoSelectForAssets([resolvedAsset]);
|
|
1419
1585
|
}
|
|
1420
1586
|
return _context9.abrupt("return", {
|
|
1421
1587
|
type: result.type,
|
|
1422
|
-
asset:
|
|
1588
|
+
asset: resolvedAsset,
|
|
1423
1589
|
selected: isSelected,
|
|
1424
1590
|
state: selected
|
|
1425
1591
|
});
|
|
1426
|
-
case
|
|
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
|
-
|
|
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
|
}
|