@pisell/pisellos 0.10.59 → 0.10.61
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/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +25 -2
- package/dist/modules/Discount/index.js +1 -0
- package/dist/modules/Order/holderRelations.d.ts +14 -0
- package/dist/modules/Order/holderRelations.js +154 -0
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +92 -47
- package/dist/modules/Order/types.d.ts +19 -1
- package/dist/modules/Order/types.js +2 -0
- package/dist/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
- package/dist/modules/Order/utils/discountProductLineIdentity.js +142 -7
- package/dist/modules/Order/utils/orderCollectionIdentity.js +24 -10
- package/dist/modules/Order/utils.d.ts +1 -1
- package/dist/modules/Order/utils.js +35 -9
- package/dist/server/index.js +18 -12
- package/dist/server/modules/order/index.d.ts +4 -0
- package/dist/server/modules/order/index.js +255 -190
- package/dist/server/modules/order/types.d.ts +3 -0
- package/dist/shared/receipt/small-ticket.js +17 -0
- package/dist/shared/sales/loadSalesOrderSnapshot.js +1 -1
- package/dist/solution/BaseSales/index.js +97 -27
- package/dist/solution/BaseSales/types.d.ts +2 -1
- package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
- package/dist/solution/BaseSales/utils/parseSalesResponse.js +7 -3
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +12 -3
- package/dist/solution/BookingTicket/index.js +7 -4
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +1 -1
- package/dist/solution/BookingTicket/utils/addProductDecision.js +4 -3
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +6 -2
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +1 -0
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +2 -1
- package/dist/solution/UnifiedBookingSales/index.d.ts +1 -1
- package/dist/solution/UnifiedBookingSales/index.js +4 -4
- package/dist/utils/platform.d.ts +2 -0
- package/dist/utils/platform.js +6 -0
- package/lib/model/strategy/adapter/promotion/index.js +46 -1
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +16 -1
- package/lib/modules/Discount/index.js +1 -0
- package/lib/modules/Order/holderRelations.d.ts +14 -0
- package/lib/modules/Order/holderRelations.js +98 -0
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/index.js +44 -12
- package/lib/modules/Order/types.d.ts +19 -1
- package/lib/modules/Order/types.js +1 -0
- package/lib/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
- package/lib/modules/Order/utils/discountProductLineIdentity.js +51 -2
- package/lib/modules/Order/utils/orderCollectionIdentity.js +5 -0
- package/lib/modules/Order/utils.d.ts +1 -1
- package/lib/modules/Order/utils.js +27 -6
- package/lib/server/index.js +6 -0
- package/lib/server/modules/order/index.d.ts +4 -0
- package/lib/server/modules/order/index.js +46 -4
- package/lib/server/modules/order/types.d.ts +3 -0
- package/lib/shared/receipt/small-ticket.js +15 -0
- package/lib/shared/sales/loadSalesOrderSnapshot.js +1 -1
- package/lib/solution/BaseSales/index.js +39 -2
- package/lib/solution/BaseSales/types.d.ts +2 -1
- package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +4 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -0
- package/lib/solution/BookingTicket/index.js +4 -1
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +1 -1
- package/lib/solution/BookingTicket/utils/addProductDecision.js +4 -3
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +7 -1
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +1 -0
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +2 -1
- package/lib/solution/UnifiedBookingSales/index.d.ts +1 -1
- package/lib/solution/UnifiedBookingSales/index.js +3 -3
- package/lib/utils/platform.d.ts +2 -0
- package/lib/utils/platform.js +7 -0
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ScheduleEventResource } from '../resource/types';
|
|
2
|
+
import type { OrderHolderRelation } from '../../../modules/Order/types';
|
|
2
3
|
/**
|
|
3
4
|
* Order 模块主键类型(对齐标准 Sales 协议的 order_id)
|
|
4
5
|
*/
|
|
@@ -448,6 +449,8 @@ export interface OrderData {
|
|
|
448
449
|
contacts_info?: unknown[];
|
|
449
450
|
/** 订单级主体参数 */
|
|
450
451
|
holder?: Record<string, unknown> | null;
|
|
452
|
+
/** 非预约商品 Holder 关系完整快照;缺席表示本次回包未提供 */
|
|
453
|
+
holder_relations?: OrderHolderRelation[];
|
|
451
454
|
/** 订单前端扩展快照 */
|
|
452
455
|
order_meta_list?: {
|
|
453
456
|
point_cards_snapshot?: Array<{
|
|
@@ -20,6 +20,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
20
20
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
21
21
|
import dayjs from 'dayjs';
|
|
22
22
|
import Decimal from 'decimal.js';
|
|
23
|
+
import { getProductHolderRelations, hasProductBooking } from "../../modules/Order/holderRelations";
|
|
23
24
|
import { isFulfillmentTimingBooking } from "../../modules/Order/pickupTiming";
|
|
24
25
|
import { resolveInvoiceDataVisibility } from "./templateVisibility";
|
|
25
26
|
var DEFAULT_LOCALES = ['en', 'zh_CN'];
|
|
@@ -115,6 +116,7 @@ var LABELS = {
|
|
|
115
116
|
bookingDateTime: 'Date & time',
|
|
116
117
|
bookingResource: 'Resource',
|
|
117
118
|
bookingHolder: 'Holder',
|
|
119
|
+
productHolder: 'Holder',
|
|
118
120
|
orderDiscount: 'Order discount',
|
|
119
121
|
manualDiscount: 'Manual discount',
|
|
120
122
|
manualMarkup: 'Manual markup',
|
|
@@ -160,6 +162,7 @@ var LABELS = {
|
|
|
160
162
|
bookingDateTime: '日期和时间',
|
|
161
163
|
bookingResource: '资源',
|
|
162
164
|
bookingHolder: '预约人',
|
|
165
|
+
productHolder: '持有人',
|
|
163
166
|
orderDiscount: '整单折扣',
|
|
164
167
|
manualDiscount: '手动折扣',
|
|
165
168
|
manualMarkup: '手动加价',
|
|
@@ -205,6 +208,7 @@ var LABELS = {
|
|
|
205
208
|
bookingDateTime: '日期和時間',
|
|
206
209
|
bookingResource: '資源',
|
|
207
210
|
bookingHolder: '預約人',
|
|
211
|
+
productHolder: '持有人',
|
|
208
212
|
orderDiscount: '整單折扣',
|
|
209
213
|
manualDiscount: '手動折扣',
|
|
210
214
|
manualMarkup: '手動加價',
|
|
@@ -248,6 +252,7 @@ var LABELS = {
|
|
|
248
252
|
bookingDateTime: '日時',
|
|
249
253
|
bookingResource: 'リソース',
|
|
250
254
|
bookingHolder: '予約者',
|
|
255
|
+
productHolder: '利用者',
|
|
251
256
|
orderDiscount: '注文割引',
|
|
252
257
|
manualDiscount: '手動割引',
|
|
253
258
|
manualMarkup: '手動値上げ',
|
|
@@ -292,6 +297,7 @@ var LABELS = {
|
|
|
292
297
|
bookingDateTime: 'Data e hora',
|
|
293
298
|
bookingResource: 'Recurso',
|
|
294
299
|
bookingHolder: 'Titular',
|
|
300
|
+
productHolder: 'Titular',
|
|
295
301
|
orderDiscount: 'Desconto do pedido',
|
|
296
302
|
manualDiscount: 'Desconto manual',
|
|
297
303
|
manualMarkup: 'Acréscimo manual',
|
|
@@ -461,6 +467,17 @@ function buildProducts(order, locale, productMap) {
|
|
|
461
467
|
quantity: quantity,
|
|
462
468
|
originalPrice: originalPrice
|
|
463
469
|
});
|
|
470
|
+
var holderName = hasProductBooking(product) ? '' : getProductHolderRelations(order, product).map(function (relation) {
|
|
471
|
+
var _relation$metadata;
|
|
472
|
+
return getLocalizedValue((_relation$metadata = relation.metadata) === null || _relation$metadata === void 0 ? void 0 : _relation$metadata.name, locale).trim();
|
|
473
|
+
}).filter(Boolean).join(', ');
|
|
474
|
+
if (holderName) {
|
|
475
|
+
// 复用 Web Invoice / 原生均支持的文本扩展行,不混入金额或商品备注。
|
|
476
|
+
extensionList.push(_objectSpread(_objectSpread({}, receiptKey(rawProduct, 'product-holder', 'text')), {}, {
|
|
477
|
+
item: "".concat(label(locale, 'productHolder'), ": ").concat(holderName),
|
|
478
|
+
value: ''
|
|
479
|
+
}));
|
|
480
|
+
}
|
|
464
481
|
var productNote = resolveProductNote(product, locale);
|
|
465
482
|
var allergy = isPresentId(productUid) ? allergyByProductUid.get(String(productUid).trim()) || '' : '';
|
|
466
483
|
var basePrice = resolveProductBasePrice(product);
|
|
@@ -4,7 +4,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
4
4
|
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; }
|
|
5
5
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
6
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
-
export var SALES_ORDER_RELATIONS = ['products', 'bookings', 'payments', 'customer', 'summary', 'contacts_info', 'order_meta_list', 'refunds', 'notes'];
|
|
7
|
+
export var SALES_ORDER_RELATIONS = ['products', 'bookings', 'payments', 'customer', 'summary', 'contacts_info', 'order_meta_list', 'refunds', 'notes', 'holder_relations'];
|
|
8
8
|
|
|
9
9
|
/** Shared transport contract; remote callers use their host's /h5 prefix. */
|
|
10
10
|
export function loadSalesOrderSnapshot(request, params) {
|
|
@@ -39,6 +39,7 @@ import { BaseSalesHookNames } from "./types";
|
|
|
39
39
|
import { OrderModule } from "../../modules/Order";
|
|
40
40
|
import { isFulfillmentTimingBooking } from "../../modules/Order/pickupTiming";
|
|
41
41
|
import { PickupTimingController } from "./pickupTiming";
|
|
42
|
+
import { getProductHolderRelations, hasProductBooking } from "../../modules/Order/holderRelations";
|
|
42
43
|
import Decimal from 'decimal.js';
|
|
43
44
|
import { cloneDeep, isEqual, mergeWith } from 'lodash-es';
|
|
44
45
|
import { createModule } from "../BookingByStep/types";
|
|
@@ -399,6 +400,67 @@ function areBaseSalesNotesEquivalent(currentValue, loadedValue, options) {
|
|
|
399
400
|
var loadedNotes = normalizeBaseSalesNotesForComparison(loadedValue);
|
|
400
401
|
return currentNotes !== null && loadedNotes !== null && isEqual(currentNotes, loadedNotes);
|
|
401
402
|
}
|
|
403
|
+
function mergeBaseSalesHolderRelations(currentRecord, incomingRecord, strategy) {
|
|
404
|
+
if (!Array.isArray(incomingRecord.holder_relations)) {
|
|
405
|
+
return cloneDeep(currentRecord.holder_relations);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// 仅保留商品集合合并实际留下的本地行关系;匹配的行沿用 incoming 快照。
|
|
409
|
+
// 未提供 products 的稀疏包不能据此判断哪些行已被删除或被本地保留。
|
|
410
|
+
var retainedProductUids = new Set();
|
|
411
|
+
if (Array.isArray(incomingRecord.products)) {
|
|
412
|
+
var _iterator2 = _createForOfIteratorHelper(currentRecord.products || []),
|
|
413
|
+
_step2;
|
|
414
|
+
try {
|
|
415
|
+
var _loop = function _loop() {
|
|
416
|
+
var product = _step2.value;
|
|
417
|
+
var retained = !incomingRecord.products.some(function (incomingProduct) {
|
|
418
|
+
return isSameOrderCollectionItem('product', product, incomingProduct);
|
|
419
|
+
}) && (strategy === 'preserve-local' || !getOrderCollectionPersistentId('product', product));
|
|
420
|
+
var uid = getOrderCollectionReferenceUid('product', product);
|
|
421
|
+
if (retained && uid) retainedProductUids.add(uid);
|
|
422
|
+
};
|
|
423
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
424
|
+
_loop();
|
|
425
|
+
}
|
|
426
|
+
} catch (err) {
|
|
427
|
+
_iterator2.e(err);
|
|
428
|
+
} finally {
|
|
429
|
+
_iterator2.f();
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
var belongsToRetainedProduct = function belongsToRetainedProduct(relation) {
|
|
433
|
+
return (relation === null || relation === void 0 ? void 0 : relation.relation_model) === 'order_detail' && retainedProductUids.has(String(relation.relation_uuid));
|
|
434
|
+
};
|
|
435
|
+
var selectedRelations = [].concat(_toConsumableArray(incomingRecord.holder_relations.filter(function (relation) {
|
|
436
|
+
return !belongsToRetainedProduct(relation);
|
|
437
|
+
})), _toConsumableArray(Array.isArray(currentRecord.holder_relations) ? currentRecord.holder_relations.filter(belongsToRetainedProduct) : []));
|
|
438
|
+
var result = [];
|
|
439
|
+
var indexByIdentity = new Map();
|
|
440
|
+
var _iterator3 = _createForOfIteratorHelper(selectedRelations),
|
|
441
|
+
_step3;
|
|
442
|
+
try {
|
|
443
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
444
|
+
var relation = _step3.value;
|
|
445
|
+
var identityParts = [relation === null || relation === void 0 ? void 0 : relation.relation_model, relation === null || relation === void 0 ? void 0 : relation.relation_uuid, relation === null || relation === void 0 ? void 0 : relation.holder_type, relation === null || relation === void 0 ? void 0 : relation.holder_id];
|
|
446
|
+
var identity = identityParts.every(function (value) {
|
|
447
|
+
return value !== undefined && value !== null;
|
|
448
|
+
}) ? JSON.stringify(identityParts) : null;
|
|
449
|
+
var existingIndex = identity === null ? undefined : indexByIdentity.get(identity);
|
|
450
|
+
if (existingIndex !== undefined) {
|
|
451
|
+
result[existingIndex] = cloneDeep(relation);
|
|
452
|
+
} else {
|
|
453
|
+
if (identity !== null) indexByIdentity.set(identity, result.length);
|
|
454
|
+
result.push(cloneDeep(relation));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
} catch (err) {
|
|
458
|
+
_iterator3.e(err);
|
|
459
|
+
} finally {
|
|
460
|
+
_iterator3.f();
|
|
461
|
+
}
|
|
462
|
+
return result;
|
|
463
|
+
}
|
|
402
464
|
function mergeSalesDetailRecordWithTempOrder(currentTempOrder, loadedRecord, strategy) {
|
|
403
465
|
var _currentTempOrder$_ex, _normalizedLoadedReco;
|
|
404
466
|
var loadedHasOrderMetaList = Object.prototype.hasOwnProperty.call(loadedRecord || {}, 'order_meta_list');
|
|
@@ -418,8 +480,12 @@ function mergeSalesDetailRecordWithTempOrder(currentTempOrder, loadedRecord, str
|
|
|
418
480
|
var normalizedCurrentTempOrder = normalizeBaseSalesRecordCollections(currentTempOrder, {
|
|
419
481
|
ensureUid: false
|
|
420
482
|
});
|
|
483
|
+
var mergedHolderRelations = mergeBaseSalesHolderRelations(normalizedCurrentTempOrder, normalizedLoadedRecord, strategy);
|
|
421
484
|
var uidRemaps = [];
|
|
422
|
-
var mergedRecord = mergeWith(normalizedCurrentTempOrder, normalizedLoadedRecord, function (currentValue, loadedValue, key) {
|
|
485
|
+
var mergedRecord = mergeWith(normalizedCurrentTempOrder, normalizedLoadedRecord, function (currentValue, loadedValue, key, object) {
|
|
486
|
+
if (key === 'holder_relations' && object === normalizedCurrentTempOrder) {
|
|
487
|
+
return cloneDeep(mergedHolderRelations);
|
|
488
|
+
}
|
|
423
489
|
// order_meta_list 是服务端/本地订单携带的完整业务快照。若 incoming
|
|
424
490
|
// 明确提供它,必须整体替换;若省略,则保留当前值,避免 snapshot
|
|
425
491
|
// 数组递归拼接后出现同 ID 的旧数据。
|
|
@@ -1844,20 +1910,20 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1844
1910
|
}, {
|
|
1845
1911
|
key: "getFulfillmentRefMode",
|
|
1846
1912
|
value: function getFulfillmentRefMode() {
|
|
1847
|
-
var
|
|
1848
|
-
|
|
1913
|
+
var _iterator4 = _createForOfIteratorHelper(this.getFulfillmentRefModeConfigs()),
|
|
1914
|
+
_step4;
|
|
1849
1915
|
try {
|
|
1850
|
-
for (
|
|
1851
|
-
var config =
|
|
1916
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
1917
|
+
var config = _step4.value;
|
|
1852
1918
|
var mode = config['fulfillment.fulfillment_ref_mode'];
|
|
1853
1919
|
if (mode === undefined || mode === null) continue;
|
|
1854
1920
|
var normalized = String(mode).trim();
|
|
1855
1921
|
if (normalized) return normalized;
|
|
1856
1922
|
}
|
|
1857
1923
|
} catch (err) {
|
|
1858
|
-
|
|
1924
|
+
_iterator4.e(err);
|
|
1859
1925
|
} finally {
|
|
1860
|
-
|
|
1926
|
+
_iterator4.f();
|
|
1861
1927
|
}
|
|
1862
1928
|
return undefined;
|
|
1863
1929
|
}
|
|
@@ -3278,7 +3344,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3278
3344
|
_this$store$order9,
|
|
3279
3345
|
_this18 = this,
|
|
3280
3346
|
_discountModule$getDi3;
|
|
3281
|
-
var tempOrder, orderStore, discountModule, rulesModule, orderId, customerId, currentDiscountList, originalDiscountList, hasManualDiscountSelection, discountAction, requestOrderIdentityKey, discountConfigCacheKey, requestEpoch, isCurrentRequest, getCurrentResult, searchedDiscountList, searchedDiscountIds, preparedDiscountList, _this$store$order$get4, _this$store$order10, _discountModule$setOr, prepareConfigPromise, _discountModule$setOr2, _discountModule$setDi, nextDiscountList, shouldSkipAutoApplyFetchedDiscounts, _orderStore$summary, orderTotalAmount, result,
|
|
3347
|
+
var tempOrder, orderStore, discountModule, rulesModule, orderId, customerId, currentDiscountList, originalDiscountList, hasManualDiscountSelection, discountAction, requestOrderIdentityKey, discountConfigCacheKey, requestEpoch, isCurrentRequest, getCurrentResult, searchedDiscountList, searchedDiscountIds, preparedDiscountList, _this$store$order$get4, _this$store$order10, _discountModule$setOr, prepareConfigPromise, _discountModule$setOr2, _discountModule$setDi, nextDiscountList, shouldSkipAutoApplyFetchedDiscounts, _orderStore$summary, orderTotalAmount, result, _iterator5, _step5, _product$metadata5, _tempOrder$_extend6, _product$metadata$sou, _product$metadata6, _product$metadata7, _product$original_pri, product, productUid, runtimeOrigin, totalPerUnitDiscount, optionSum, sourcePrice, newSourceSellingPrice, newMainSellingPrice;
|
|
3282
3348
|
return _regeneratorRuntime().wrap(function _callee30$(_context30) {
|
|
3283
3349
|
while (1) switch (_context30.prev = _context30.next) {
|
|
3284
3350
|
case 0:
|
|
@@ -3508,15 +3574,15 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3508
3574
|
if (result.productList) {
|
|
3509
3575
|
tempOrder.products = preserveManualProductDiscountProducts(tempOrder.products, result.productList);
|
|
3510
3576
|
}
|
|
3511
|
-
|
|
3577
|
+
_iterator5 = _createForOfIteratorHelper(tempOrder.products || []);
|
|
3512
3578
|
_context30.prev = 82;
|
|
3513
|
-
|
|
3579
|
+
_iterator5.s();
|
|
3514
3580
|
case 84:
|
|
3515
|
-
if ((
|
|
3581
|
+
if ((_step5 = _iterator5.n()).done) {
|
|
3516
3582
|
_context30.next = 99;
|
|
3517
3583
|
break;
|
|
3518
3584
|
}
|
|
3519
|
-
product =
|
|
3585
|
+
product = _step5.value;
|
|
3520
3586
|
productUid = (_product$metadata5 = product.metadata) === null || _product$metadata5 === void 0 ? void 0 : _product$metadata5.unique_identification_number;
|
|
3521
3587
|
runtimeOrigin = productUid ? (_tempOrder$_extend6 = tempOrder._extend) === null || _tempOrder$_extend6 === void 0 || (_tempOrder$_extend6 = _tempOrder$_extend6.productsByUid) === null || _tempOrder$_extend6 === void 0 || (_tempOrder$_extend6 = _tempOrder$_extend6[productUid]) === null || _tempOrder$_extend6 === void 0 ? void 0 : _tempOrder$_extend6.origin : undefined;
|
|
3522
3588
|
if (!(runtimeOrigin !== null && runtimeOrigin !== void 0 && runtimeOrigin.isManualDiscount || isBaseSalesManualProductDiscountProduct(product))) {
|
|
@@ -3549,10 +3615,10 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3549
3615
|
case 101:
|
|
3550
3616
|
_context30.prev = 101;
|
|
3551
3617
|
_context30.t0 = _context30["catch"](82);
|
|
3552
|
-
|
|
3618
|
+
_iterator5.e(_context30.t0);
|
|
3553
3619
|
case 104:
|
|
3554
3620
|
_context30.prev = 104;
|
|
3555
|
-
|
|
3621
|
+
_iterator5.f();
|
|
3556
3622
|
return _context30.finish(104);
|
|
3557
3623
|
case 107:
|
|
3558
3624
|
if (!result.discountList) {
|
|
@@ -3881,7 +3947,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3881
3947
|
key: "setDiscountSelected",
|
|
3882
3948
|
value: function () {
|
|
3883
3949
|
var _setDiscountSelected = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee34(params) {
|
|
3884
|
-
var currentOrder, _store3, _store3$setDiscountLi, list, updated, tempOrder, orderStore, _discountModule, rulesModule, nextDiscountList, _orderStore$summary3, orderTotalAmount, result, beforeSelectedIds,
|
|
3950
|
+
var currentOrder, _store3, _store3$setDiscountLi, list, updated, tempOrder, orderStore, _discountModule, rulesModule, nextDiscountList, _orderStore$summary3, orderTotalAmount, result, beforeSelectedIds, _iterator6, _step6, d, selectedResourceIds, filterSelectedDiscountDetails, _iterator7, _step7, _product$metadata8, _tempOrder$_extend7, _product$metadata$sou2, _product$metadata9, _product$metadata10, _product$original_pri2, product, productUid, runtimeOrigin, totalPerUnitDiscount, optionSum, sourcePrice, newSourceSellingPrice, newMainSellingPrice;
|
|
3885
3951
|
return _regeneratorRuntime().wrap(function _callee34$(_context34) {
|
|
3886
3952
|
while (1) switch (_context34.prev = _context34.next) {
|
|
3887
3953
|
case 0:
|
|
@@ -3954,10 +4020,10 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3954
4020
|
}).map(function (d) {
|
|
3955
4021
|
return d.id;
|
|
3956
4022
|
}));
|
|
3957
|
-
|
|
4023
|
+
_iterator6 = _createForOfIteratorHelper(nextDiscountList);
|
|
3958
4024
|
try {
|
|
3959
|
-
for (
|
|
3960
|
-
d =
|
|
4025
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
4026
|
+
d = _step6.value;
|
|
3961
4027
|
if (d.isSelected && !beforeSelectedIds.has(d.id)) {
|
|
3962
4028
|
d.isSelected = false;
|
|
3963
4029
|
d.isManualSelect = true;
|
|
@@ -3965,9 +4031,9 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3965
4031
|
}
|
|
3966
4032
|
}
|
|
3967
4033
|
} catch (err) {
|
|
3968
|
-
|
|
4034
|
+
_iterator6.e(err);
|
|
3969
4035
|
} finally {
|
|
3970
|
-
|
|
4036
|
+
_iterator6.f();
|
|
3971
4037
|
}
|
|
3972
4038
|
}
|
|
3973
4039
|
}
|
|
@@ -3984,15 +4050,15 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
3984
4050
|
return rid != null && selectedResourceIds.has(rid);
|
|
3985
4051
|
});
|
|
3986
4052
|
};
|
|
3987
|
-
|
|
4053
|
+
_iterator7 = _createForOfIteratorHelper(tempOrder.products);
|
|
3988
4054
|
_context34.prev = 27;
|
|
3989
|
-
|
|
4055
|
+
_iterator7.s();
|
|
3990
4056
|
case 29:
|
|
3991
|
-
if ((
|
|
4057
|
+
if ((_step7 = _iterator7.n()).done) {
|
|
3992
4058
|
_context34.next = 46;
|
|
3993
4059
|
break;
|
|
3994
4060
|
}
|
|
3995
|
-
product =
|
|
4061
|
+
product = _step7.value;
|
|
3996
4062
|
productUid = (_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8.unique_identification_number;
|
|
3997
4063
|
runtimeOrigin = productUid ? (_tempOrder$_extend7 = tempOrder._extend) === null || _tempOrder$_extend7 === void 0 || (_tempOrder$_extend7 = _tempOrder$_extend7.productsByUid) === null || _tempOrder$_extend7 === void 0 || (_tempOrder$_extend7 = _tempOrder$_extend7[productUid]) === null || _tempOrder$_extend7 === void 0 ? void 0 : _tempOrder$_extend7.origin : undefined;
|
|
3998
4064
|
if (!(runtimeOrigin !== null && runtimeOrigin !== void 0 && runtimeOrigin.isManualDiscount || isBaseSalesManualProductDiscountProduct(product))) {
|
|
@@ -4043,10 +4109,10 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
4043
4109
|
case 48:
|
|
4044
4110
|
_context34.prev = 48;
|
|
4045
4111
|
_context34.t0 = _context34["catch"](27);
|
|
4046
|
-
|
|
4112
|
+
_iterator7.e(_context34.t0);
|
|
4047
4113
|
case 51:
|
|
4048
4114
|
_context34.prev = 51;
|
|
4049
|
-
|
|
4115
|
+
_iterator7.f();
|
|
4050
4116
|
return _context34.finish(51);
|
|
4051
4117
|
case 54:
|
|
4052
4118
|
OrderModule.populateSavedAmounts(tempOrder.products, nextDiscountList);
|
|
@@ -5172,7 +5238,11 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
5172
5238
|
var walletProducts = tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.products.map(function (product) {
|
|
5173
5239
|
var _product$holder_id, _product$product_vari3, _product$is_charge_ta, _metadata$main_produc, _metadata$main_produc2;
|
|
5174
5240
|
var metadata = product.metadata || {};
|
|
5175
|
-
var rawHolderId = (_product$holder_id = product.holder_id) !== null && _product$holder_id !== void 0 ? _product$holder_id : metadata.holder_id
|
|
5241
|
+
var rawHolderId = hasProductBooking(product) ? (_product$holder_id = product.holder_id) !== null && _product$holder_id !== void 0 ? _product$holder_id : metadata.holder_id : getProductHolderRelations(tempOrder, product).filter(function (relation) {
|
|
5242
|
+
return relation.holder_type === 'form';
|
|
5243
|
+
}).map(function (relation) {
|
|
5244
|
+
return relation.holder_id;
|
|
5245
|
+
});
|
|
5176
5246
|
var holderIdValue = Array.isArray(rawHolderId) ? rawHolderId[0] : rawHolderId;
|
|
5177
5247
|
var holder_id = Number.isInteger(Number(holderIdValue)) ? Number(holderIdValue) : undefined;
|
|
5178
5248
|
return {
|
|
@@ -4,7 +4,7 @@ import type { ScanOrderLogInput as BaseSalesLogInput, ScanOrderLoggerProviderCon
|
|
|
4
4
|
import type { QuantityCheckResult, QuantityLimitResult } from '../../model/strategy/adapter/itemRule';
|
|
5
5
|
import type { QuotationCustomerScopeInfo } from '../../modules/Quotation/types';
|
|
6
6
|
import type { PaymentMethod } from '../../modules/Payment/types';
|
|
7
|
-
import type { OrderPaymentSource } from '../../modules/Order/types';
|
|
7
|
+
import type { OrderHolderRelation, OrderPaymentSource } from '../../modules/Order/types';
|
|
8
8
|
import type { SubmitPayloadEnhancer } from '../../modules/Order/utils';
|
|
9
9
|
/**
|
|
10
10
|
* BaseSales 流程 hook 后缀。
|
|
@@ -277,6 +277,7 @@ export interface BaseSalesTempOrder {
|
|
|
277
277
|
contacts: any[];
|
|
278
278
|
contacts_info: Record<string, any> | null;
|
|
279
279
|
holder: Record<string, any> | null;
|
|
280
|
+
holder_relations?: OrderHolderRelation[];
|
|
280
281
|
metadata: Record<string, any>;
|
|
281
282
|
_extend?: {
|
|
282
283
|
productsByUid?: Record<string, Record<string, any>>;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* - 不在此处发明等价关系;UI 侧(ticketBooking)若需要别的字段,由 view-model 适配层做转换
|
|
15
15
|
*/
|
|
16
16
|
import type { BaseSalesOrderProduct } from '../types';
|
|
17
|
-
import type { OrderMetaList } from '../../../modules/Order/types';
|
|
17
|
+
import type { OrderHolderRelation, OrderMetaList } from '../../../modules/Order/types';
|
|
18
18
|
export interface ISalesDetailHeader {
|
|
19
19
|
order_id: number | string | null;
|
|
20
20
|
order_number?: string;
|
|
@@ -121,6 +121,8 @@ export interface ISalesDetail {
|
|
|
121
121
|
header: ISalesDetailHeader;
|
|
122
122
|
/** 商品行快照(保留 tempOrder / 后端详情原字段) */
|
|
123
123
|
products: BaseSalesOrderProduct[];
|
|
124
|
+
/** 非预约商品 Holder 关系,保留关系及 metadata 的扩展字段。 */
|
|
125
|
+
holder_relations?: OrderHolderRelation[];
|
|
124
126
|
/** 全部 bookings,按服务端原始顺序输出(含 root + child) */
|
|
125
127
|
bookings: ISalesBooking[];
|
|
126
128
|
/** root booking(parent_id === 0),多个时取首个,无则为 null */
|
|
@@ -25,6 +25,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
25
25
|
|
|
26
26
|
import { normalizeOrderCollections } from "../../../modules/Order/utils/orderCollectionIdentity";
|
|
27
27
|
import { isFulfillmentTimingBooking } from "../../../modules/Order/pickupTiming";
|
|
28
|
+
import { cloneDeep } from 'lodash-es';
|
|
28
29
|
/** OrderData 中除大数组外的"顶层 header 字段"白名单,按需扩展。 */
|
|
29
30
|
var HEADER_KEYS = ['order_id', 'order_number', 'shop_order_number', 'shop_full_order_number', 'type', 'business_code', 'platform', 'sales_channel', 'order_sales_channel', 'vouchers', 'status', 'payment_status', 'shipping_status', 'customer_id', 'customer_name', 'country_calling_code', 'phone', 'email', 'is_price_include_tax', 'tax_title', 'tax_country_code', 'currency_code', 'currency_symbol', 'currency_format', 'is_deposit', 'deposit_amount', 'shop_discount', 'surcharge_fee', 'note', 'schedule_date', 'created_at', 'updated_at', 'order_meta_list', 'metadata', 'total_amount', 'shop_id', 'create_date', 'holder', 'relation_forms', 'contacts', 'contacts_info'];
|
|
30
31
|
function pickHeader(raw) {
|
|
@@ -144,9 +145,12 @@ export function parseSalesResponse(input) {
|
|
|
144
145
|
return _objectSpread({}, d || {});
|
|
145
146
|
}) : [];
|
|
146
147
|
var summary = raw !== null && raw !== void 0 && raw.summary && _typeof(raw.summary) === 'object' ? _objectSpread({}, raw.summary) : {};
|
|
147
|
-
return {
|
|
148
|
+
return _objectSpread(_objectSpread({
|
|
148
149
|
header: pickHeader(raw),
|
|
149
|
-
products: products
|
|
150
|
+
products: products
|
|
151
|
+
}, Array.isArray(raw === null || raw === void 0 ? void 0 : raw.holder_relations) ? {
|
|
152
|
+
holder_relations: cloneDeep(raw.holder_relations)
|
|
153
|
+
} : {}), {}, {
|
|
150
154
|
bookings: bookings,
|
|
151
155
|
rootBooking: rootBooking,
|
|
152
156
|
bookingsByProductUid: bookingsByProductUid,
|
|
@@ -156,5 +160,5 @@ export function parseSalesResponse(input) {
|
|
|
156
160
|
customer: pickCustomer(raw),
|
|
157
161
|
summary: summary,
|
|
158
162
|
raw: raw
|
|
159
|
-
};
|
|
163
|
+
});
|
|
160
164
|
}
|
|
@@ -12,6 +12,7 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
|
|
|
12
12
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
13
13
|
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
14
|
import { resolveWeighedSourcePrice, withOriginalBundleOptionPrices } from "../../../modules/Order/utils/weighedProduct";
|
|
15
|
+
import { isBookingProduct } from "../../../modules/BookingContext/utils/serviceTimes";
|
|
15
16
|
import { composeLinePrice, getBundleSellingMagnitude, normalizeProductSkuOptions, sumOptionUnitPrice } from "../../../modules/Order/utils";
|
|
16
17
|
import { buildManualProductDiscountItem, mergeManualProductDiscountIntoList, resolveManualDiscountOriginTotal, resolveManualDiscountReasonFromSources, shouldBuildManualProductDiscount } from "../../../modules/Order/utils/manualProductDiscount";
|
|
17
18
|
function toNumber(value) {
|
|
@@ -168,7 +169,7 @@ function findVariantById(origin, variantId) {
|
|
|
168
169
|
* 注意:这里不生成 identity,缺省时由 OrderModule 自动补齐。
|
|
169
170
|
*/
|
|
170
171
|
export function transformBaseProductToOrderProduct(params) {
|
|
171
|
-
var _ref12, _ref13, _ref14, _payload$product_id, _ref15, _ref16, _payload$product_vari, _payload$_origin, _payload$_origin2, _payload$metadata, _sourceProduct$metada, _callbackOrigin$metad, _origin$metadata, _payload$metadata2, _payload$_extend, _sourceProduct$metada2, _sourceProduct$_exten, _callbackOrigin$metad2, _callbackOrigin$_exte, _payload$_dataVariant, _sourceProduct$_dataV, _callbackOrigin$_data, _origin$_dataVariant, _ref17, _findVariantById, _origin$production_co, _ref18, _ref19, _ref20, _ref21, _ref22, _matchedVariant$price, _payload$product_sku, _payload$_extend$weig, _payload$_extend2, _origin$_extend, _ref23, _ref24, _payload$price, _ref25, _payload$line_total, _payload$_extend3, _ref26, _ref27, _payload$product_sku$, _payload$product_sku2, _payload$bundle, _payload$quantity, _payload$_extend4, _extend, _extend2, _ref28, _ref29, _origin$base_price, _ref30, _ref31, _payload$line_total2, _payload$_extend5, _payload$_extend6, _extend3, _payload$_extend7, _payload$_extend8, _ref32, _ref33, _payload$tax_fee, _ref34, _ref35, _payload$is_charge_ta;
|
|
172
|
+
var _ref12, _ref13, _ref14, _payload$product_id, _ref15, _ref16, _payload$product_vari, _payload$_origin, _payload$_origin2, _payload$metadata, _sourceProduct$metada, _callbackOrigin$metad, _origin$metadata, _payload$metadata2, _payload$_extend, _sourceProduct$metada2, _sourceProduct$_exten, _callbackOrigin$metad2, _callbackOrigin$_exte, _payload$_dataVariant, _sourceProduct$_dataV, _callbackOrigin$_data, _origin$_dataVariant, _ref17, _findVariantById, _origin$production_co, _ref18, _ref19, _ref20, _ref21, _ref22, _matchedVariant$price, _payload$product_sku, _payload$_extend$weig, _payload$_extend2, _origin$_extend, _ref23, _ref24, _payload$price, _ref25, _payload$line_total, _payload$_extend3, _ref26, _ref27, _payload$product_sku$, _payload$product_sku2, _payload$bundle, _payload$quantity, _payload$_extend4, _extend, _extend2, _ref28, _ref29, _origin$base_price, _ref30, _ref31, _payload$line_total2, _payload$_extend5, _payload$_extend6, _extend3, _payload$_extend7, _payload$_extend8, _find, _ref32, _ref33, _payload$tax_fee, _ref34, _ref35, _payload$is_charge_ta;
|
|
172
173
|
var payload = params.payload,
|
|
173
174
|
_params$fallbackProdu = params.fallbackProductId,
|
|
174
175
|
fallbackProductId = _params$fallbackProdu === void 0 ? null : _params$fallbackProdu;
|
|
@@ -242,6 +243,9 @@ export function transformBaseProductToOrderProduct(params) {
|
|
|
242
243
|
});
|
|
243
244
|
var derivedMainSelling = hasExplicitLineTotal ? Number(lineCompositeTotal) - Number(bundleOnlyComposite) : Number(mainProductOriginalPrice);
|
|
244
245
|
var mainProductSellingPrice = toPriceString(Number.isFinite(derivedMainSelling) && derivedMainSelling >= 0 ? derivedMainSelling : Number(mainProductOriginalPrice));
|
|
246
|
+
var holderRelations = (_find = [payload._extend, callbackOrigin === null || callbackOrigin === void 0 ? void 0 : callbackOrigin._extend, sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct._extend].find(function (source) {
|
|
247
|
+
return Array.isArray(source === null || source === void 0 ? void 0 : source.holder_relations);
|
|
248
|
+
})) === null || _find === void 0 ? void 0 : _find.holder_relations;
|
|
245
249
|
var metadata = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
246
250
|
unique: payload.unique,
|
|
247
251
|
session: payload.session,
|
|
@@ -275,7 +279,7 @@ export function transformBaseProductToOrderProduct(params) {
|
|
|
275
279
|
var productTitle = _objectSpread(_objectSpread({}, productTitleI18n), {}, {
|
|
276
280
|
original: productTitleI18n.original || (sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.original_title) || (sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.title) || ''
|
|
277
281
|
});
|
|
278
|
-
return _objectSpread(_objectSpread({
|
|
282
|
+
return _objectSpread(_objectSpread(_objectSpread({
|
|
279
283
|
product_id: productId,
|
|
280
284
|
product_variant_id: productVariantId,
|
|
281
285
|
production_code: productionCode,
|
|
@@ -294,7 +298,12 @@ export function transformBaseProductToOrderProduct(params) {
|
|
|
294
298
|
original_price: lineOriginalPrice,
|
|
295
299
|
tax_fee: toPriceString((_ref32 = (_ref33 = (_payload$tax_fee = payload.tax_fee) !== null && _payload$tax_fee !== void 0 ? _payload$tax_fee : matchedVariant === null || matchedVariant === void 0 ? void 0 : matchedVariant.tax_fee) !== null && _ref33 !== void 0 ? _ref33 : origin === null || origin === void 0 ? void 0 : origin.tax_fee) !== null && _ref32 !== void 0 ? _ref32 : sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.tax_fee, '0.00'),
|
|
296
300
|
is_charge_tax: toNumber((_ref34 = (_ref35 = (_payload$is_charge_ta = payload.is_charge_tax) !== null && _payload$is_charge_ta !== void 0 ? _payload$is_charge_ta : matchedVariant === null || matchedVariant === void 0 ? void 0 : matchedVariant.is_charge_tax) !== null && _ref35 !== void 0 ? _ref35 : origin === null || origin === void 0 ? void 0 : origin.is_charge_tax) !== null && _ref34 !== void 0 ? _ref34 : sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.is_charge_tax, 0),
|
|
297
|
-
metadata: metadata
|
|
301
|
+
metadata: metadata
|
|
302
|
+
}, holderRelations !== undefined && !isBookingProduct(origin) && !isBookingProduct(payload) ? {
|
|
303
|
+
_extend: {
|
|
304
|
+
holder_relations: holderRelations
|
|
305
|
+
}
|
|
306
|
+
} : {}), {}, {
|
|
298
307
|
note: payload.note != null ? String(payload.note) : '',
|
|
299
308
|
product_title: productTitle,
|
|
300
309
|
product_cover: firstNonBlank(matchedVariant === null || matchedVariant === void 0 ? void 0 : matchedVariant.cover, sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.cover),
|
|
@@ -2622,7 +2622,10 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2622
2622
|
}, {
|
|
2623
2623
|
key: "buildNormalProductCacheItemFromOrderLine",
|
|
2624
2624
|
value: function buildNormalProductCacheItemFromOrderLine(input) {
|
|
2625
|
-
|
|
2625
|
+
var _input$holder_relatio, _this$store$order7;
|
|
2626
|
+
return buildNormalProductCacheItemFromOrderLineUtil(_objectSpread(_objectSpread({}, input), {}, {
|
|
2627
|
+
holder_relations: (_input$holder_relatio = input.holder_relations) !== null && _input$holder_relatio !== void 0 ? _input$holder_relatio : (_this$store$order7 = this.store.order) === null || _this$store$order7 === void 0 || (_this$store$order7 = _this$store$order7.getTempOrder()) === null || _this$store$order7 === void 0 ? void 0 : _this$store$order7.holder_relations
|
|
2628
|
+
}));
|
|
2626
2629
|
}
|
|
2627
2630
|
|
|
2628
2631
|
/** 文档别名:与 OrderModule.updateOrderProduct 一致。 */
|
|
@@ -3147,7 +3150,7 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
3147
3150
|
key: "handleRedeem",
|
|
3148
3151
|
value: function () {
|
|
3149
3152
|
var _handleRedeem = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee38(params) {
|
|
3150
|
-
var _this$store$
|
|
3153
|
+
var _this$store$order8, _this$store$order8$ge, _this$store$order9, _ref20, _tempOrder$order_id2;
|
|
3151
3154
|
var voucherIds, status, voucherIdSet, tempOrder, vouchers, hasUpdatedVoucher, nextVouchers, identity, externalSaleNumber, orderId, orderLookup;
|
|
3152
3155
|
return _regeneratorRuntime().wrap(function _callee38$(_context38) {
|
|
3153
3156
|
while (1) switch (_context38.prev = _context38.next) {
|
|
@@ -3163,8 +3166,8 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
3163
3166
|
}
|
|
3164
3167
|
});
|
|
3165
3168
|
voucherIdSet = new Set(voucherIds);
|
|
3166
|
-
tempOrder = (_this$store$
|
|
3167
|
-
vouchers = (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.vouchers) || ((_this$store$
|
|
3169
|
+
tempOrder = (_this$store$order8 = this.store.order) === null || _this$store$order8 === void 0 || (_this$store$order8$ge = _this$store$order8.getTempOrder) === null || _this$store$order8$ge === void 0 ? void 0 : _this$store$order8$ge.call(_this$store$order8);
|
|
3170
|
+
vouchers = (tempOrder === null || tempOrder === void 0 ? void 0 : tempOrder.vouchers) || ((_this$store$order9 = this.store.order) === null || _this$store$order9 === void 0 ? void 0 : _this$store$order9.getVouchers()) || [];
|
|
3168
3171
|
hasUpdatedVoucher = false;
|
|
3169
3172
|
nextVouchers = vouchers.map(function (voucher) {
|
|
3170
3173
|
if (!voucherIdSet.has(voucher.voucher_id)) return voucher;
|
|
@@ -5,7 +5,7 @@ import type { OrderProduct, OrderProductIdentity, AddProductBookingInput } from
|
|
|
5
5
|
* cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
|
|
6
6
|
*
|
|
7
7
|
* 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
|
|
8
|
-
* 2. `requiresBookingEdit`:资源 /
|
|
8
|
+
* 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(自助终端强制进入;其他渠道由 `getIsAutoClose` 决定)
|
|
9
9
|
* 3. `add`:两关均通过,直接 transform + 加车
|
|
10
10
|
*/
|
|
11
11
|
export type AddProductDecision = {
|
|
@@ -8,12 +8,13 @@ import dayjs from 'dayjs';
|
|
|
8
8
|
import { cacheItemToBookingInput, derivePresetStartTimeFromDate, getProductExtend, getIsAutoClose, isSessionProduct, isBookingProduct, applySessionTimesToExtend, hasActualResourceSelection, productNeedsResourceExtend } from "../../../modules/BookingContext";
|
|
9
9
|
import { transformBaseProductToOrderProduct } from "../../BaseSales/utils/transformBaseProductToOrderProduct";
|
|
10
10
|
import { buildProductSkuFromCacheItem } from "./weighingProductSku";
|
|
11
|
+
import { isSelfServicePlatform } from "../../../utils/platform";
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
|
|
14
15
|
*
|
|
15
16
|
* 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
|
|
16
|
-
* 2. `requiresBookingEdit`:资源 /
|
|
17
|
+
* 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(自助终端强制进入;其他渠道由 `getIsAutoClose` 决定)
|
|
17
18
|
* 3. `add`:两关均通过,直接 transform + 加车
|
|
18
19
|
*/
|
|
19
20
|
|
|
@@ -30,11 +31,11 @@ function needsSpecDetailModal(item) {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
|
-
* 第二段:预约商品是否仍需打开资源 /
|
|
34
|
+
* 第二段:预约商品是否仍需打开资源 / 时间编辑(自助终端强制打开,其他渠道与 info2 `cacheItem.autoClose` 等价)。
|
|
34
35
|
*/
|
|
35
36
|
function needsBookingEdit(cacheItem, ctx) {
|
|
36
37
|
if (isNormalBookingProduct(cacheItem)) return false;
|
|
37
|
-
if ((ctx === null || ctx === void 0 ? void 0 : ctx.channel)
|
|
38
|
+
if (isSelfServicePlatform(ctx === null || ctx === void 0 ? void 0 : ctx.channel)) return true;
|
|
38
39
|
var isAutoAllocationOn = (ctx === null || ctx === void 0 ? void 0 : ctx.isAutoAllocationOn) || function () {
|
|
39
40
|
return true;
|
|
40
41
|
};
|
|
@@ -54,8 +54,12 @@ function _processScannedProductItem() {
|
|
|
54
54
|
}
|
|
55
55
|
return _context.abrupt("return", runRequiresDetailFlow(host, item, ctx, bridge));
|
|
56
56
|
case 5:
|
|
57
|
-
values = genScanProductValues(item, code);
|
|
58
|
-
|
|
57
|
+
values = genScanProductValues(item, code); // 条码已唯一命中某个规格时,商品目录的 price 可能是“最低规格价”。
|
|
58
|
+
// 仅在扫码预选规格的这条路径改用命中规格价,避免影响商品卡片和手工选规格。
|
|
59
|
+
itemWithSelection = values.price === undefined ? _objectSpread(_objectSpread({}, item), {}, {
|
|
60
|
+
cartDetailValue: values
|
|
61
|
+
}) : _objectSpread(_objectSpread({}, item), {}, {
|
|
62
|
+
price: values.price,
|
|
59
63
|
cartDetailValue: values
|
|
60
64
|
});
|
|
61
65
|
decision = host.decideAddProduct(itemWithSelection, ctx);
|
|
@@ -10,6 +10,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
|
|
|
10
10
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
11
11
|
import { searchWalletPass, searchWallet, searchProduct, searchOrder } from "./cloudSearch";
|
|
12
12
|
import scanCache from "./scanCache";
|
|
13
|
+
import { isSelfServicePlatform } from "../../../../utils/platform";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Promise.any 的替代实现
|
|
@@ -161,7 +162,7 @@ export var handleGlobalScan = function handleGlobalScan(request, localSearch, ch
|
|
|
161
162
|
if (value.startsWith('WL')) {
|
|
162
163
|
requestList = [searchWallet(request, value)];
|
|
163
164
|
} else {
|
|
164
|
-
requestList = [].concat(_toConsumableArray(channel
|
|
165
|
+
requestList = [].concat(_toConsumableArray(isSelfServicePlatform(channel) ? [] : [searchOrder(request, value)]), [searchWalletPass(request, value), searchWallet(request, value), searchProduct(request, value)]);
|
|
165
166
|
}
|
|
166
167
|
return requestList;
|
|
167
168
|
};
|
|
@@ -145,7 +145,7 @@ export declare class UnifiedBookingSalesImpl extends BookingTicket {
|
|
|
145
145
|
*/
|
|
146
146
|
clearSessionStorageOrderSnapshot(): void;
|
|
147
147
|
/**
|
|
148
|
-
* PC/H5
|
|
148
|
+
* PC/H5 及自助终端结账默认直接等待云端 checkout;POS/WebPOS 仍保持本地待同步。
|
|
149
149
|
* 显式传 checkoutSyncTaskEnabled: true 时仍可回退到本地同步模式。
|
|
150
150
|
*/
|
|
151
151
|
protected shouldUseCheckoutSyncTask(): boolean;
|
|
@@ -45,7 +45,7 @@ import { AvailabilityRemoteOccupancyCache } from "./remoteOccupancyCache";
|
|
|
45
45
|
import { BusinessAvailabilityController } from "./businessAvailability";
|
|
46
46
|
import { BookingTicket } from "../BookingTicket";
|
|
47
47
|
import { addLocalCalendarDays, captureRuntimeOffsetMinutes, formatLocalDate, formatLocalDateTime, formatLocalTime, localDateTimeToScalar, localDateToScalar, localDateToScalarStart, parseLocalDate, parseLocalDateTime } from "../../modules/ResourcePlanner/localClock";
|
|
48
|
-
import { isCustomerUserPlatform, normalizeRuntimePlatform } from "../../utils/platform";
|
|
48
|
+
import { isCustomerUserPlatform, isSelfServicePlatform, normalizeRuntimePlatform } from "../../utils/platform";
|
|
49
49
|
import { ItemRuleEvaluator } from "../../model/strategy/adapter/itemRule";
|
|
50
50
|
export * from "./types";
|
|
51
51
|
export { AvailabilityError } from "../../modules/ResourcePlanner";
|
|
@@ -2005,7 +2005,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
|
|
|
2005
2005
|
}
|
|
2006
2006
|
|
|
2007
2007
|
/**
|
|
2008
|
-
* PC/H5
|
|
2008
|
+
* PC/H5 及自助终端结账默认直接等待云端 checkout;POS/WebPOS 仍保持本地待同步。
|
|
2009
2009
|
* 显式传 checkoutSyncTaskEnabled: true 时仍可回退到本地同步模式。
|
|
2010
2010
|
*/
|
|
2011
2011
|
}, {
|
|
@@ -2015,7 +2015,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
|
|
|
2015
2015
|
var configured = (_this$otherParams16 = this.otherParams) === null || _this$otherParams16 === void 0 ? void 0 : _this$otherParams16.checkoutSyncTaskEnabled;
|
|
2016
2016
|
if (configured === true) return true;
|
|
2017
2017
|
var platform = normalizeRuntimePlatform((_this$otherParams17 = this.otherParams) === null || _this$otherParams17 === void 0 ? void 0 : _this$otherParams17.platform);
|
|
2018
|
-
return !isCustomerUserPlatform(platform) && platform
|
|
2018
|
+
return !isCustomerUserPlatform(platform) && !isSelfServicePlatform(platform);
|
|
2019
2019
|
}
|
|
2020
2020
|
|
|
2021
2021
|
/** UnifiedBookingSales 的真实结账默认请求收据数据,供云端确认后再本地打印。 */
|
|
@@ -2838,7 +2838,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
|
|
|
2838
2838
|
throw new Error('[UnifiedBookingSales] getProtocol 需要 policyId');
|
|
2839
2839
|
case 3:
|
|
2840
2840
|
policyUrl = 'shop-policy';
|
|
2841
|
-
if (this.otherParams.platform
|
|
2841
|
+
if (isSelfServicePlatform(this.otherParams.platform) || this.otherParams.platform === 'pos' || this.otherParams.platform === 'shop') {
|
|
2842
2842
|
policyUrl = 'policy';
|
|
2843
2843
|
}
|
|
2844
2844
|
return _context23.abrupt("return", this.request.get("/".concat(policyUrl, "/").concat(encodeURIComponent(normalizedPolicyId))));
|
package/dist/utils/platform.d.ts
CHANGED
|
@@ -6,3 +6,5 @@ export declare function normalizeRuntimePlatform(platform: unknown): string;
|
|
|
6
6
|
* PC and H5 are authenticated-customer clients rather than staff terminals.
|
|
7
7
|
*/
|
|
8
8
|
export declare function isCustomerUserPlatform(platform: unknown): boolean;
|
|
9
|
+
/** Kiosk and vending retain distinct channels but share self-service checkout behavior. */
|
|
10
|
+
export declare function isSelfServicePlatform(platform: unknown): boolean;
|