@pisell/pisellos 2.2.172 → 2.2.174
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/Order/index.d.ts +6 -21
- package/dist/modules/Order/index.js +56 -103
- package/dist/modules/Order/types.d.ts +3 -2
- package/dist/modules/Order/utils.d.ts +16 -0
- package/dist/modules/Order/utils.js +82 -2
- package/dist/modules/Quotation/index.d.ts +0 -1
- package/dist/modules/Quotation/index.js +8 -17
- package/dist/server/modules/products/index.d.ts +1 -1
- package/dist/server/modules/products/index.js +128 -112
- package/dist/solution/BaseSales/index.d.ts +4 -16
- package/dist/solution/BaseSales/index.js +178 -104
- package/dist/solution/BaseSales/types.d.ts +14 -0
- package/dist/solution/BaseSales/utils/quotationPrice.js +95 -17
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +4 -2
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +10 -2
- package/lib/model/strategy/adapter/promotion/index.js +49 -0
- package/lib/modules/Order/index.d.ts +6 -21
- package/lib/modules/Order/index.js +55 -100
- package/lib/modules/Order/types.d.ts +3 -2
- package/lib/modules/Order/utils.d.ts +16 -0
- package/lib/modules/Order/utils.js +54 -2
- package/lib/modules/Quotation/index.d.ts +0 -1
- package/lib/modules/Quotation/index.js +1 -9
- package/lib/server/modules/products/index.d.ts +1 -1
- package/lib/server/modules/products/index.js +26 -15
- package/lib/solution/BaseSales/index.d.ts +4 -16
- package/lib/solution/BaseSales/index.js +71 -35
- package/lib/solution/BaseSales/types.d.ts +14 -0
- package/lib/solution/BaseSales/utils/quotationPrice.js +90 -14
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +1 -1
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +8 -0
- package/package.json +1 -1
|
@@ -19,13 +19,12 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
19
19
|
private rulesHooksOverride?;
|
|
20
20
|
private orderHooks?;
|
|
21
21
|
private otherParams?;
|
|
22
|
-
/** 是否将 tempOrder 写入 localStorage;默认 true,SalesSdk 等内存态场景可关闭。 */
|
|
23
|
-
private enableTempOrderPersist;
|
|
24
22
|
/**
|
|
25
23
|
* Populate `savedAmount` on each discount based on product-level discount details.
|
|
26
24
|
* Only selected discounts get a non-zero value.
|
|
27
25
|
*/
|
|
28
26
|
static populateSavedAmounts(productList: Array<Record<string, any>>, discountList: Array<Record<string, any>>): void;
|
|
27
|
+
private applyProductDiscountPrices;
|
|
29
28
|
constructor(name?: string, version?: string);
|
|
30
29
|
initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
|
|
31
30
|
/**
|
|
@@ -55,25 +54,11 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
55
54
|
cacheId?: string;
|
|
56
55
|
salesSummaryModuleName?: string;
|
|
57
56
|
}): void;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* 运行时切换 tempOrder localStorage 持久化。
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* orderModule.setEnableTempOrderPersist(false);
|
|
65
|
-
* orderModule.addProductToOrder(product); // 不会写入 localStorage
|
|
66
|
-
*/
|
|
67
|
-
setEnableTempOrderPersist(enabled: boolean): void;
|
|
68
|
-
/**
|
|
69
|
-
* 读取当前是否启用 tempOrder localStorage 持久化。
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* if (orderModule.isTempOrderPersistEnabled()) {
|
|
73
|
-
* orderModule.persistTempOrder();
|
|
74
|
-
* }
|
|
75
|
-
*/
|
|
57
|
+
/** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化。 */
|
|
58
|
+
setEnableTempOrderPersist(_enabled: boolean): void;
|
|
59
|
+
/** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化。 */
|
|
76
60
|
isTempOrderPersistEnabled(): boolean;
|
|
61
|
+
/** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化;草稿保存请使用 IndexedDB saveDraft。 */
|
|
77
62
|
persistTempOrder(): void;
|
|
78
63
|
private createDefaultTempOrderInstance;
|
|
79
64
|
private createExternalSaleNumber;
|
|
@@ -204,7 +189,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
204
189
|
private logSubmitBackendRejected;
|
|
205
190
|
syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
|
|
206
191
|
createOrder(params: CommitOrderParams['query']): {
|
|
207
|
-
type: "
|
|
192
|
+
type: "virtual" | "appointment_booking";
|
|
208
193
|
platform: string;
|
|
209
194
|
sales_channel: string;
|
|
210
195
|
order_sales_channel: string;
|
|
@@ -26,7 +26,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
26
26
|
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); }
|
|
27
27
|
import { BaseModule } from "../BaseModule";
|
|
28
28
|
import { OrderHooks } from "./types";
|
|
29
|
-
import { generateDuration, getAllDiscountList, mergeRelationForms, buildSubmitPayload, createDefaultTempOrder, createDefaultOrderRulesHooks, createEmptySummary, createUuidV4, formatDateTime, isTempOrder, normalizeBookingIsAll, normalizeBookingSubType, mapPaymentItemsToOrderPayments, normalizeOrderProductDiscountList } from "./utils";
|
|
29
|
+
import { composeLinePrice, generateDuration, getAllDiscountList, mergeRelationForms, buildSubmitPayload, createDefaultTempOrder, createDefaultOrderRulesHooks, createEmptySummary, createUuidV4, formatDateTime, isTempOrder, normalizeBookingIsAll, normalizeBookingSubType, mapPaymentItemsToOrderPayments, normalizeOrderProductDiscountList, sumOptionUnitPrice, clearTempOrderHolderAssignments } from "./utils";
|
|
30
30
|
import { isNormalProduct } from "../Product/utils";
|
|
31
31
|
import dayjs from 'dayjs';
|
|
32
32
|
import { buildProductLineFingerprint, getProductIdentityIndex, getSafeProductNum, isIdentityMatch, normalizeOrderProduct } from "../../solution/ScanOrder/utils";
|
|
@@ -57,11 +57,33 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
57
57
|
_defineProperty(_assertThisInitialized(_this), "rulesHooksOverride", void 0);
|
|
58
58
|
_defineProperty(_assertThisInitialized(_this), "orderHooks", void 0);
|
|
59
59
|
_defineProperty(_assertThisInitialized(_this), "otherParams", void 0);
|
|
60
|
-
/** 是否将 tempOrder 写入 localStorage;默认 true,SalesSdk 等内存态场景可关闭。 */
|
|
61
|
-
_defineProperty(_assertThisInitialized(_this), "enableTempOrderPersist", true);
|
|
62
60
|
return _this;
|
|
63
61
|
}
|
|
64
62
|
_createClass(OrderModule, [{
|
|
63
|
+
key: "applyProductDiscountPrices",
|
|
64
|
+
value: function applyProductDiscountPrices(products) {
|
|
65
|
+
return (products || []).map(function (product) {
|
|
66
|
+
var _product$metadata, _product$metadata$sou, _product$metadata2, _product$metadata3, _product$original_pri;
|
|
67
|
+
if ((_product$metadata = product.metadata) !== null && _product$metadata !== void 0 && _product$metadata.is_manual_discount) return product;
|
|
68
|
+
var totalPerUnitDiscount = (product.discount_list || []).reduce(function (sum, discount) {
|
|
69
|
+
return sum + Number(discount.amount || 0);
|
|
70
|
+
}, 0);
|
|
71
|
+
var optionSum = sumOptionUnitPrice(product.product_option_item);
|
|
72
|
+
var sourcePrice = (_product$metadata$sou = (_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2.source_product_price) !== null && _product$metadata$sou !== void 0 ? _product$metadata$sou : ((_product$metadata3 = product.metadata) === null || _product$metadata3 === void 0 ? void 0 : _product$metadata3.main_product_original_price) != null ? new Decimal(Number(product.metadata.main_product_original_price) || 0).minus(optionSum).toFixed(2) : (_product$original_pri = product.original_price) !== null && _product$original_pri !== void 0 ? _product$original_pri : '0';
|
|
73
|
+
var newSourceSellingPrice = new Decimal(Number(sourcePrice) || 0).minus(totalPerUnitDiscount).toDecimalPlaces(2).toString();
|
|
74
|
+
var newMainSellingPrice = new Decimal(Number(newSourceSellingPrice) || 0).plus(optionSum).toDecimalPlaces(2).toFixed(2);
|
|
75
|
+
if (product.metadata) {
|
|
76
|
+
product.metadata.main_product_selling_price = newMainSellingPrice;
|
|
77
|
+
product.metadata.price_schema_version = 2;
|
|
78
|
+
}
|
|
79
|
+
product.selling_price = composeLinePrice({
|
|
80
|
+
mainPrice: newMainSellingPrice,
|
|
81
|
+
bundle: product.product_bundle
|
|
82
|
+
});
|
|
83
|
+
return product;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}, {
|
|
65
87
|
key: "initialize",
|
|
66
88
|
value: function () {
|
|
67
89
|
var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(core, options) {
|
|
@@ -96,13 +118,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
96
118
|
this.rulesHooksOverride = (_otherParams$rules = otherParams.rules) === null || _otherParams$rules === void 0 ? void 0 : _otherParams$rules.hooks;
|
|
97
119
|
this.orderHooks = options.hooks || ((_otherParams$order = otherParams.order) === null || _otherParams$order === void 0 ? void 0 : _otherParams$order.hooks) || ((_otherParams$hooks = otherParams.hooks) === null || _otherParams$hooks === void 0 ? void 0 : _otherParams$hooks.order);
|
|
98
120
|
this.otherParams = otherParams;
|
|
99
|
-
this.enableTempOrderPersist = otherParams.enableTempOrderPersist !== false;
|
|
100
121
|
this.registerDiscountModules(options);
|
|
101
|
-
if (this.enableTempOrderPersist) {
|
|
102
|
-
this.restoreTempOrderFromStorage();
|
|
103
|
-
}
|
|
104
122
|
this.logInfo('OrderModule initialized successfully');
|
|
105
|
-
case
|
|
123
|
+
case 20:
|
|
106
124
|
case "end":
|
|
107
125
|
return _context.stop();
|
|
108
126
|
}
|
|
@@ -382,11 +400,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
382
400
|
orderTotalAmount: Number(((_this$store$summary2 = this.store.summary) === null || _this$store$summary2 === void 0 ? void 0 : _this$store$summary2.total_amount) || 0)
|
|
383
401
|
});
|
|
384
402
|
if (result !== null && result !== void 0 && result.productList) {
|
|
385
|
-
tempOrder.products = (result.productList || []).map(function (product) {
|
|
403
|
+
tempOrder.products = this.applyProductDiscountPrices((result.productList || []).map(function (product) {
|
|
386
404
|
return _objectSpread(_objectSpread({}, product), {}, {
|
|
387
405
|
discount_list: normalizeOrderProductDiscountList(syncManualProductDiscountProductNum(product.discount_list, product.num))
|
|
388
406
|
});
|
|
389
|
-
});
|
|
407
|
+
}));
|
|
390
408
|
}
|
|
391
409
|
if (result !== null && result !== void 0 && result.discountList) {
|
|
392
410
|
var _this$store$discount8;
|
|
@@ -401,107 +419,25 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
401
419
|
value: function initTempOrder(params) {
|
|
402
420
|
if (params.cacheId !== undefined) this.cacheId = params.cacheId;
|
|
403
421
|
if (params.salesSummaryModuleName !== undefined) this.salesSummaryModuleName = params.salesSummaryModuleName;
|
|
404
|
-
this.restoreTempOrderFromStorage();
|
|
405
422
|
}
|
|
406
423
|
|
|
407
|
-
|
|
408
|
-
}, {
|
|
409
|
-
key: "getTempOrderStorageKey",
|
|
410
|
-
value: function getTempOrderStorageKey() {
|
|
411
|
-
if (!this.cacheId) return null;
|
|
412
|
-
return "scanOrder:tempOrder:".concat(this.cacheId);
|
|
413
|
-
}
|
|
414
|
-
}, {
|
|
415
|
-
key: "restoreTempOrderFromStorage",
|
|
416
|
-
value: function restoreTempOrderFromStorage() {
|
|
417
|
-
var key = this.getTempOrderStorageKey();
|
|
418
|
-
if (!key) return;
|
|
419
|
-
if (!this.window) return;
|
|
420
|
-
var cachedData = this.window.localStorage.getItem(key);
|
|
421
|
-
if (!cachedData) return;
|
|
422
|
-
try {
|
|
423
|
-
var parsedData = JSON.parse(cachedData);
|
|
424
|
-
if (!isTempOrder(parsedData)) {
|
|
425
|
-
this.window.localStorage.removeItem(key);
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
if (Array.isArray(parsedData.products)) {
|
|
429
|
-
for (var i = 0; i < parsedData.products.length; i++) {
|
|
430
|
-
var p = parsedData.products[i];
|
|
431
|
-
if (!p || _typeof(p) !== 'object') continue;
|
|
432
|
-
if (!Array.isArray(p.product_option_item)) {
|
|
433
|
-
p.product_option_item = [];
|
|
434
|
-
}
|
|
435
|
-
if (!Array.isArray(p.product_bundle)) {
|
|
436
|
-
p.product_bundle = [];
|
|
437
|
-
}
|
|
438
|
-
var row = p;
|
|
439
|
-
// 价格 schema 迁移:重跑 normalizeOrderProduct。
|
|
440
|
-
// `metadata.price_schema_version === 2` → 已是新语义,保留现有 main_product_* 折扣;
|
|
441
|
-
// 否则(v1 或无 metadata)→ 走 legacyDiscount 反推分支,基于新的 source + options
|
|
442
|
-
// 重算出含 option 的 main_product_*,并打上 price_schema_version: 2。
|
|
443
|
-
// 幂等:多次 restore 不会重复叠加 option/bundle。
|
|
444
|
-
var normalized = normalizeOrderProduct(row);
|
|
445
|
-
normalized.discount_list = normalizeOrderProductDiscountList(normalized.discount_list);
|
|
446
|
-
parsedData.products[i] = normalized;
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
delete parsedData.discount_list;
|
|
450
|
-
var parsedRecord = parsedData;
|
|
451
|
-
this.store.summary = parsedRecord.summary || createEmptySummary();
|
|
452
|
-
delete parsedData.summary;
|
|
453
|
-
if (parsedRecord.lastOrderInfo) {
|
|
454
|
-
this.store.lastOrderInfo = parsedRecord.lastOrderInfo;
|
|
455
|
-
delete parsedData.lastOrderInfo;
|
|
456
|
-
}
|
|
457
|
-
if (!parsedData._extend || _typeof(parsedData._extend) !== 'object') {
|
|
458
|
-
parsedData._extend = {
|
|
459
|
-
productsByUid: {}
|
|
460
|
-
};
|
|
461
|
-
} else if (!parsedData._extend.productsByUid) {
|
|
462
|
-
parsedData._extend.productsByUid = {};
|
|
463
|
-
}
|
|
464
|
-
this.store.tempOrder = parsedData;
|
|
465
|
-
} catch (_unused2) {
|
|
466
|
-
var _this$window;
|
|
467
|
-
(_this$window = this.window) === null || _this$window === void 0 || (_this$window = _this$window.localStorage) === null || _this$window === void 0 || _this$window.removeItem(key);
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
/**
|
|
472
|
-
* 运行时切换 tempOrder localStorage 持久化。
|
|
473
|
-
*
|
|
474
|
-
* @example
|
|
475
|
-
* orderModule.setEnableTempOrderPersist(false);
|
|
476
|
-
* orderModule.addProductToOrder(product); // 不会写入 localStorage
|
|
477
|
-
*/
|
|
424
|
+
/** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化。 */
|
|
478
425
|
}, {
|
|
479
426
|
key: "setEnableTempOrderPersist",
|
|
480
|
-
value: function setEnableTempOrderPersist(
|
|
481
|
-
this.enableTempOrderPersist = enabled;
|
|
482
|
-
}
|
|
427
|
+
value: function setEnableTempOrderPersist(_enabled) {}
|
|
483
428
|
|
|
484
|
-
/**
|
|
485
|
-
* 读取当前是否启用 tempOrder localStorage 持久化。
|
|
486
|
-
*
|
|
487
|
-
* @example
|
|
488
|
-
* if (orderModule.isTempOrderPersistEnabled()) {
|
|
489
|
-
* orderModule.persistTempOrder();
|
|
490
|
-
* }
|
|
491
|
-
*/
|
|
429
|
+
/** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化。 */
|
|
492
430
|
}, {
|
|
493
431
|
key: "isTempOrderPersistEnabled",
|
|
494
432
|
value: function isTempOrderPersistEnabled() {
|
|
495
|
-
return
|
|
433
|
+
return false;
|
|
496
434
|
}
|
|
435
|
+
|
|
436
|
+
/** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化;草稿保存请使用 IndexedDB saveDraft。 */
|
|
497
437
|
}, {
|
|
498
438
|
key: "persistTempOrder",
|
|
499
439
|
value: function persistTempOrder() {
|
|
500
|
-
|
|
501
|
-
var key = this.getTempOrderStorageKey();
|
|
502
|
-
if (!key || !this.store.tempOrder) return;
|
|
503
|
-
if (!this.window) return;
|
|
504
|
-
this.window.localStorage.setItem(key, JSON.stringify(this.store.tempOrder));
|
|
440
|
+
// no-op: OrderModule 的刷新恢复不再依赖 localStorage。
|
|
505
441
|
}
|
|
506
442
|
|
|
507
443
|
// ─── TempOrder: 创建 & 获取 ───
|
|
@@ -1131,11 +1067,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1131
1067
|
}, {
|
|
1132
1068
|
key: "removeLinkedBookingsForProduct",
|
|
1133
1069
|
value: function removeLinkedBookingsForProduct(tempOrder, product) {
|
|
1134
|
-
var _product$
|
|
1135
|
-
_product$
|
|
1070
|
+
var _product$metadata4,
|
|
1071
|
+
_product$metadata5,
|
|
1136
1072
|
_this4 = this;
|
|
1137
|
-
var productUid = (product === null || product === void 0 || (_product$
|
|
1138
|
-
var bookingUid = (product === null || product === void 0 ? void 0 : product.booking_uid) || (product === null || product === void 0 || (_product$
|
|
1073
|
+
var productUid = (product === null || product === void 0 || (_product$metadata4 = product.metadata) === null || _product$metadata4 === void 0 ? void 0 : _product$metadata4.unique_identification_number) || (product === null || product === void 0 ? void 0 : product.unique_identification_number);
|
|
1074
|
+
var bookingUid = (product === null || product === void 0 ? void 0 : product.booking_uid) || (product === null || product === void 0 || (_product$metadata5 = product.metadata) === null || _product$metadata5 === void 0 ? void 0 : _product$metadata5.booking_uid);
|
|
1139
1075
|
if (!productUid && !bookingUid) return;
|
|
1140
1076
|
tempOrder.bookings = (tempOrder.bookings || []).filter(function (booking) {
|
|
1141
1077
|
var currentBookingUid = _this4.getBookingUniqueIdentificationNumber(booking);
|
|
@@ -1379,11 +1315,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1379
1315
|
}, {
|
|
1380
1316
|
key: "setOrderCustomer",
|
|
1381
1317
|
value: function setOrderCustomer(patch, snapshot) {
|
|
1318
|
+
var _tempOrder$customer_i2, _tempOrder$customer_i3;
|
|
1382
1319
|
if (!patch) {
|
|
1383
1320
|
this.clearOrderCustomer();
|
|
1384
1321
|
return;
|
|
1385
1322
|
}
|
|
1386
1323
|
var tempOrder = this.ensureTempOrder();
|
|
1324
|
+
var previousCustomerId = (_tempOrder$customer_i2 = tempOrder.customer_id) !== null && _tempOrder$customer_i2 !== void 0 ? _tempOrder$customer_i2 : null;
|
|
1387
1325
|
tempOrder.customer_id = patch.customer_id || patch.id || null;
|
|
1388
1326
|
tempOrder.customer_name = String(patch.customer_name || '');
|
|
1389
1327
|
tempOrder.country_calling_code = String(patch.country_calling_code || '');
|
|
@@ -1401,6 +1339,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1401
1339
|
var extend = this.ensureExtend(tempOrder);
|
|
1402
1340
|
if (snapshot === null) delete extend.customerSnapshot;else extend.customerSnapshot = cloneDeep(snapshot);
|
|
1403
1341
|
}
|
|
1342
|
+
var nextCustomerId = (_tempOrder$customer_i3 = tempOrder.customer_id) !== null && _tempOrder$customer_i3 !== void 0 ? _tempOrder$customer_i3 : null;
|
|
1343
|
+
if (String(previousCustomerId !== null && previousCustomerId !== void 0 ? previousCustomerId : '') !== String(nextCustomerId !== null && nextCustomerId !== void 0 ? nextCustomerId : '')) {
|
|
1344
|
+
clearTempOrderHolderAssignments(tempOrder);
|
|
1345
|
+
}
|
|
1404
1346
|
this.persistTempOrder();
|
|
1405
1347
|
this.saveDraftInBackground();
|
|
1406
1348
|
this.emitOrderCustomerChange();
|
|
@@ -1431,6 +1373,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
1431
1373
|
key: "clearOrderCustomer",
|
|
1432
1374
|
value: function clearOrderCustomer() {
|
|
1433
1375
|
var tempOrder = this.ensureTempOrder();
|
|
1376
|
+
clearTempOrderHolderAssignments(tempOrder);
|
|
1434
1377
|
tempOrder.customer_id = null;
|
|
1435
1378
|
tempOrder.customer_name = '';
|
|
1436
1379
|
tempOrder.country_calling_code = '';
|
|
@@ -2755,6 +2698,16 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
2755
2698
|
delete nextTempOrder.summary;
|
|
2756
2699
|
delete nextTempOrder.lastOrderInfo;
|
|
2757
2700
|
delete nextTempOrder.discount_list;
|
|
2701
|
+
delete nextTempOrder.shop_id;
|
|
2702
|
+
delete nextTempOrder.create_date;
|
|
2703
|
+
delete nextTempOrder.total_amount;
|
|
2704
|
+
delete nextTempOrder.expect_amount;
|
|
2705
|
+
delete nextTempOrder.paid_amount;
|
|
2706
|
+
delete nextTempOrder.shop_note;
|
|
2707
|
+
delete nextTempOrder.start_time;
|
|
2708
|
+
delete nextTempOrder.tax_fee;
|
|
2709
|
+
delete nextTempOrder.total_refund_amount;
|
|
2710
|
+
delete nextTempOrder.holder_id;
|
|
2758
2711
|
nextTempOrder.metadata = raw.metadata && _typeof(raw.metadata) === 'object' ? _objectSpread({}, raw.metadata) : {};
|
|
2759
2712
|
nextTempOrder.holder = raw.holder && _typeof(raw.holder) === 'object' ? _objectSpread({}, raw.holder) : null;
|
|
2760
2713
|
nextTempOrder.products = Array.isArray(raw.products) ? raw.products.map(function (p) {
|
|
@@ -500,10 +500,11 @@ export interface OrderModuleAPI {
|
|
|
500
500
|
updateOrderProductQuantity: (params: UpdateOrderProductQuantityParams) => Promise<OrderProduct[]>;
|
|
501
501
|
updateOrderBooking: (params: UpdateOrderBookingParams) => any[];
|
|
502
502
|
removeProductFromOrder: (identity: OrderProductIdentity) => Promise<OrderProduct[]>;
|
|
503
|
+
/** @deprecated no-op;OrderModule 不再负责 tempOrder localStorage 持久化。 */
|
|
503
504
|
persistTempOrder: () => void;
|
|
504
|
-
/**
|
|
505
|
+
/** @deprecated no-op;OrderModule 不再负责 tempOrder localStorage 持久化。 */
|
|
505
506
|
setEnableTempOrderPersist: (enabled: boolean) => void;
|
|
506
|
-
/**
|
|
507
|
+
/** @deprecated 固定返回 false;OrderModule 不再负责 tempOrder localStorage 持久化。 */
|
|
507
508
|
isTempOrderPersistEnabled: () => boolean;
|
|
508
509
|
submitTempOrder: <T = any>(params?: {
|
|
509
510
|
cacheId?: string;
|
|
@@ -160,6 +160,22 @@ export declare function formatV1Product(products: OrderSubmitProduct[]): {
|
|
|
160
160
|
session: null;
|
|
161
161
|
unique: string;
|
|
162
162
|
}[];
|
|
163
|
+
/**
|
|
164
|
+
* 判断 holder_id 是否已分配(非空)。
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* hasAssignedHolderId(12); // true
|
|
168
|
+
* hasAssignedHolderId([]); // false
|
|
169
|
+
*/
|
|
170
|
+
export declare function hasAssignedHolderId(value: unknown): boolean;
|
|
171
|
+
/**
|
|
172
|
+
* 清空 tempOrder 购物车行上的 holder 分配(products / bookings / runtime origin)。
|
|
173
|
+
* 移除或更换下单客户时调用,与 booking 页换客户清 holder 行为对齐。
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* clearTempOrderHolderAssignments(tempOrder);
|
|
177
|
+
*/
|
|
178
|
+
export declare function clearTempOrderHolderAssignments(tempOrder: OrderTempOrder): boolean;
|
|
163
179
|
export { createEmptySummary } from '../../solution/ScanOrder/utils';
|
|
164
180
|
export { buildManualProductDiscountItem, ensureManualProductDiscountList, findManualProductDiscountItem, mergeManualProductDiscountIntoList, resolveManualDiscountMessage, resolveManualDiscountOriginTotal, resolveManualDiscountReasonFromSources, resolveSafeProductNum, shouldBuildManualProductDiscount, syncManualProductDiscountProductNum, stripManualProductDiscountItems, } from './utils/manualProductDiscount';
|
|
165
181
|
export type { ManualProductDiscountItem } from './utils/manualProductDiscount';
|
|
@@ -229,7 +229,7 @@ export function createDefaultOrderRulesHooks() {
|
|
|
229
229
|
id: product.product_id,
|
|
230
230
|
// Rules 引擎用 _id 作为 processedProductsMap 键;必须与购物车行级 identity 一致,
|
|
231
231
|
// 否则同 SKU 不同小料会在 calcDiscount 重组时互相覆盖。
|
|
232
|
-
// 不透明 identity 契约下,normalizeOrderProduct /
|
|
232
|
+
// 不透明 identity 契约下,normalizeOrderProduct / hydrate 已保证唯一值存在;
|
|
233
233
|
// 留 fingerprint 分支仅作 Rules 单测里直接传裸 product 时的兜底。
|
|
234
234
|
_id: (_product$metadata = product.metadata) !== null && _product$metadata !== void 0 && _product$metadata.unique_identification_number ? "".concat(product.product_id, "_").concat(product.product_variant_id, "_").concat(product.metadata.unique_identification_number) : "".concat(product.product_id, "_").concat(product.product_variant_id, "_").concat(buildProductLineFingerprint(product.product_option_item, product.product_bundle)),
|
|
235
235
|
// Rules 内部 getProductTotalPrice / getProductOriginTotalPrice 会各自再叠加 bundle + option,
|
|
@@ -687,7 +687,8 @@ export function buildSubmitPayload(params) {
|
|
|
687
687
|
}
|
|
688
688
|
}
|
|
689
689
|
var payload = _objectSpread(_objectSpread({}, tempOrderRest), {}, {
|
|
690
|
-
customer_id: (_tempOrder$customer_i = tempOrder.customer_id) !== null && _tempOrder$customer_i !== void 0 ? _tempOrder$customer_i :
|
|
690
|
+
customer_id: (_tempOrder$customer_i = tempOrder.customer_id) !== null && _tempOrder$customer_i !== void 0 ? _tempOrder$customer_i : 1,
|
|
691
|
+
customer_name: tempOrder.customer_name || 'Select a customer',
|
|
691
692
|
order_number: null,
|
|
692
693
|
shop_order_number: null,
|
|
693
694
|
shop_full_order_number: null,
|
|
@@ -820,5 +821,84 @@ export function formatV1Product(products) {
|
|
|
820
821
|
};
|
|
821
822
|
});
|
|
822
823
|
}
|
|
824
|
+
|
|
825
|
+
/**
|
|
826
|
+
* 判断 holder_id 是否已分配(非空)。
|
|
827
|
+
*
|
|
828
|
+
* @example
|
|
829
|
+
* hasAssignedHolderId(12); // true
|
|
830
|
+
* hasAssignedHolderId([]); // false
|
|
831
|
+
*/
|
|
832
|
+
export function hasAssignedHolderId(value) {
|
|
833
|
+
if (value === undefined || value === null || value === '') return false;
|
|
834
|
+
if (Array.isArray(value)) return value.length > 0;
|
|
835
|
+
return true;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/**
|
|
839
|
+
* 清空 tempOrder 购物车行上的 holder 分配(products / bookings / runtime origin)。
|
|
840
|
+
* 移除或更换下单客户时调用,与 booking 页换客户清 holder 行为对齐。
|
|
841
|
+
*
|
|
842
|
+
* @example
|
|
843
|
+
* clearTempOrderHolderAssignments(tempOrder);
|
|
844
|
+
*/
|
|
845
|
+
export function clearTempOrderHolderAssignments(tempOrder) {
|
|
846
|
+
var _tempOrder$_extend;
|
|
847
|
+
var changed = false;
|
|
848
|
+
var resetHolderField = function resetHolderField(target) {
|
|
849
|
+
var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'holder_id';
|
|
850
|
+
if (!hasAssignedHolderId(target[key])) return;
|
|
851
|
+
target[key] = null;
|
|
852
|
+
changed = true;
|
|
853
|
+
};
|
|
854
|
+
var _iterator4 = _createForOfIteratorHelper(tempOrder.products || []),
|
|
855
|
+
_step4;
|
|
856
|
+
try {
|
|
857
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
858
|
+
var product = _step4.value;
|
|
859
|
+
if (product.metadata && _typeof(product.metadata) === 'object') {
|
|
860
|
+
resetHolderField(product.metadata);
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
} catch (err) {
|
|
864
|
+
_iterator4.e(err);
|
|
865
|
+
} finally {
|
|
866
|
+
_iterator4.f();
|
|
867
|
+
}
|
|
868
|
+
var _iterator5 = _createForOfIteratorHelper(tempOrder.bookings || []),
|
|
869
|
+
_step5;
|
|
870
|
+
try {
|
|
871
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
872
|
+
var booking = _step5.value;
|
|
873
|
+
var bookingRecord = booking;
|
|
874
|
+
if (booking.metadata && _typeof(booking.metadata) === 'object') {
|
|
875
|
+
resetHolderField(booking.metadata);
|
|
876
|
+
}
|
|
877
|
+
if (bookingRecord.holder !== undefined && bookingRecord.holder !== null) {
|
|
878
|
+
delete bookingRecord.holder;
|
|
879
|
+
changed = true;
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
} catch (err) {
|
|
883
|
+
_iterator5.e(err);
|
|
884
|
+
} finally {
|
|
885
|
+
_iterator5.f();
|
|
886
|
+
}
|
|
887
|
+
var productsByUid = (_tempOrder$_extend = tempOrder._extend) === null || _tempOrder$_extend === void 0 ? void 0 : _tempOrder$_extend.productsByUid;
|
|
888
|
+
if (productsByUid && _typeof(productsByUid) === 'object') {
|
|
889
|
+
for (var _i4 = 0, _Object$values = Object.values(productsByUid); _i4 < _Object$values.length; _i4++) {
|
|
890
|
+
var entry = _Object$values[_i4];
|
|
891
|
+
var origin = entry === null || entry === void 0 ? void 0 : entry.origin;
|
|
892
|
+
if (!origin || _typeof(origin) !== 'object') continue;
|
|
893
|
+
if (origin.metadata && _typeof(origin.metadata) === 'object') {
|
|
894
|
+
resetHolderField(origin.metadata);
|
|
895
|
+
}
|
|
896
|
+
if (origin._extend && _typeof(origin._extend) === 'object') {
|
|
897
|
+
resetHolderField(origin._extend);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
return changed;
|
|
902
|
+
}
|
|
823
903
|
export { createEmptySummary } from "../../solution/ScanOrder/utils";
|
|
824
904
|
export { buildManualProductDiscountItem, ensureManualProductDiscountList, findManualProductDiscountItem, mergeManualProductDiscountIntoList, resolveManualDiscountMessage, resolveManualDiscountOriginTotal, resolveManualDiscountReasonFromSources, resolveSafeProductNum, shouldBuildManualProductDiscount, syncManualProductDiscountProductNum, stripManualProductDiscountItems } from "./utils/manualProductDiscount";
|
|
@@ -47,7 +47,6 @@ export declare class QuotationModule extends BaseModule implements Module {
|
|
|
47
47
|
customer_id?: number | string;
|
|
48
48
|
}): Map<string, string | null>;
|
|
49
49
|
setScheduleResolver(resolver: (id: number) => ScheduleItem | undefined): void;
|
|
50
|
-
private filterQuotationsByCustomer;
|
|
51
50
|
private isQuotationVisibleForCustomer;
|
|
52
51
|
private hasValidCustomerId;
|
|
53
52
|
private isQuotationActiveAt;
|
|
@@ -78,22 +78,21 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
78
78
|
case 0:
|
|
79
79
|
query = {};
|
|
80
80
|
if (params !== null && params !== void 0 && params.channel) query.channel = params.channel;
|
|
81
|
-
if (params !== null && params !== void 0 && params.customer_id) query.customer_id = String(params.customer_id);
|
|
82
81
|
if ((params === null || params === void 0 ? void 0 : params.channel) === 'online_store') {
|
|
83
82
|
query.channel = 'online-store';
|
|
84
83
|
}
|
|
85
|
-
_context2.next =
|
|
84
|
+
_context2.next = 5;
|
|
86
85
|
return this.request.get('/quotation/available', query, {
|
|
87
86
|
useCache: false
|
|
88
87
|
});
|
|
89
|
-
case
|
|
88
|
+
case 5:
|
|
90
89
|
res = _context2.sent;
|
|
91
|
-
list =
|
|
90
|
+
list = (res === null || res === void 0 || (_data = res.data) === null || _data === void 0 ? void 0 : _data.list) || (res === null || res === void 0 ? void 0 : res.list) || [];
|
|
92
91
|
list.sort(function (a, b) {
|
|
93
92
|
return a.sort - b.sort;
|
|
94
93
|
});
|
|
95
94
|
this.store.list = list;
|
|
96
|
-
case
|
|
95
|
+
case 9:
|
|
97
96
|
case "end":
|
|
98
97
|
return _context2.stop();
|
|
99
98
|
}
|
|
@@ -220,14 +219,6 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
220
219
|
value: function setScheduleResolver(resolver) {
|
|
221
220
|
this.scheduleResolver = resolver;
|
|
222
221
|
}
|
|
223
|
-
}, {
|
|
224
|
-
key: "filterQuotationsByCustomer",
|
|
225
|
-
value: function filterQuotationsByCustomer(list, customerId) {
|
|
226
|
-
var _this2 = this;
|
|
227
|
-
return list.filter(function (quotation) {
|
|
228
|
-
return _this2.isQuotationVisibleForCustomer(quotation, customerId);
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
222
|
}, {
|
|
232
223
|
key: "isQuotationVisibleForCustomer",
|
|
233
224
|
value: function isQuotationVisibleForCustomer(quotation, customerId) {
|
|
@@ -248,17 +239,17 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
248
239
|
key: "isQuotationActiveAt",
|
|
249
240
|
value: function isQuotationActiveAt(quotation, datetime) {
|
|
250
241
|
var _quotation$schedule,
|
|
251
|
-
|
|
242
|
+
_this2 = this;
|
|
252
243
|
if (!((_quotation$schedule = quotation.schedule) !== null && _quotation$schedule !== void 0 && _quotation$schedule.length)) return false;
|
|
253
244
|
var scheduleItems = [];
|
|
254
245
|
quotation.schedule.forEach(function (s) {
|
|
255
|
-
var
|
|
256
|
-
var full = (
|
|
246
|
+
var _this2$scheduleResolv;
|
|
247
|
+
var full = (_this2$scheduleResolv = _this2.scheduleResolver) === null || _this2$scheduleResolv === void 0 ? void 0 : _this2$scheduleResolv.call(_this2, s.id);
|
|
257
248
|
if (full) {
|
|
258
249
|
scheduleItems.push(full);
|
|
259
250
|
return;
|
|
260
251
|
}
|
|
261
|
-
if (
|
|
252
|
+
if (_this2.scheduleResolver) {
|
|
262
253
|
return;
|
|
263
254
|
}
|
|
264
255
|
var fallbackSchedule = _objectSpread(_objectSpread({}, s), {}, {
|
|
@@ -21,7 +21,7 @@ export declare class ProductsModule extends BaseModule implements Module {
|
|
|
21
21
|
private isPriceFormatterRegistered;
|
|
22
22
|
private quotationPriceBridge?;
|
|
23
23
|
private quotationBridgeChannel?;
|
|
24
|
-
private
|
|
24
|
+
private quotationBridgeLoadedKey?;
|
|
25
25
|
private quotationBridgeRefreshPromise?;
|
|
26
26
|
private quotationBridgeRefreshKey?;
|
|
27
27
|
private productDataSource;
|