@pisell/pisellos 2.2.170 → 2.2.172
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/model/strategy/adapter/promotion/index.js +0 -9
- package/dist/modules/Order/index.d.ts +21 -2
- package/dist/modules/Order/index.js +68 -32
- package/dist/modules/Order/types.d.ts +9 -4
- package/dist/modules/Order/utils.d.ts +6 -1
- package/dist/modules/Order/utils.js +43 -5
- package/dist/modules/Quotation/index.js +16 -5
- package/dist/modules/Schedule/index.js +6 -2
- package/dist/server/index.js +10 -6
- package/dist/server/modules/products/index.js +9 -8
- package/dist/server/modules/schedule/index.js +13 -6
- package/dist/solution/BaseSales/index.d.ts +19 -0
- package/dist/solution/BaseSales/index.js +75 -18
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/lib/modules/Order/index.d.ts +21 -2
- package/lib/modules/Order/index.js +58 -11
- package/lib/modules/Order/types.d.ts +9 -4
- package/lib/modules/Order/utils.d.ts +6 -1
- package/lib/modules/Order/utils.js +40 -3
- package/lib/modules/Quotation/index.js +17 -6
- package/lib/modules/Schedule/index.js +3 -1
- package/lib/server/index.js +2 -0
- package/lib/server/modules/products/index.js +8 -9
- package/lib/server/modules/schedule/index.js +2 -1
- package/lib/solution/BaseSales/index.d.ts +19 -0
- package/lib/solution/BaseSales/index.js +64 -6
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -257,6 +257,7 @@ export var ScheduleModuleEx = /*#__PURE__*/function (_BaseModule) {
|
|
|
257
257
|
}, {
|
|
258
258
|
key: "getScheduleByIds",
|
|
259
259
|
value: function getScheduleByIds(ids) {
|
|
260
|
+
var _this2 = this;
|
|
260
261
|
if (!ids || ids.length === 0) {
|
|
261
262
|
this.logInfo('getScheduleByIds: 未提供有效的 ids', {
|
|
262
263
|
idsCount: 0
|
|
@@ -264,15 +265,21 @@ export var ScheduleModuleEx = /*#__PURE__*/function (_BaseModule) {
|
|
|
264
265
|
return [];
|
|
265
266
|
}
|
|
266
267
|
var result = [];
|
|
268
|
+
var scheduleList = this.store.scheduleList || [];
|
|
267
269
|
var _iterator = _createForOfIteratorHelper(ids),
|
|
268
270
|
_step;
|
|
269
271
|
try {
|
|
270
|
-
|
|
272
|
+
var _loop = function _loop() {
|
|
271
273
|
var id = _step.value;
|
|
272
|
-
var schedule =
|
|
274
|
+
var schedule = _this2.store.map.get(id) || scheduleList.find(function (item) {
|
|
275
|
+
return String(item.id) === String(id);
|
|
276
|
+
});
|
|
273
277
|
if (schedule) {
|
|
274
278
|
result.push(schedule);
|
|
275
279
|
}
|
|
280
|
+
};
|
|
281
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
282
|
+
_loop();
|
|
276
283
|
}
|
|
277
284
|
} catch (err) {
|
|
278
285
|
_iterator.e(err);
|
|
@@ -371,11 +378,11 @@ export var ScheduleModuleEx = /*#__PURE__*/function (_BaseModule) {
|
|
|
371
378
|
}, {
|
|
372
379
|
key: "getDateIsInSchedule",
|
|
373
380
|
value: function getDateIsInSchedule(date, scheduleList) {
|
|
374
|
-
var
|
|
381
|
+
var _this3 = this;
|
|
375
382
|
var scheduleListData = [];
|
|
376
383
|
scheduleList.forEach(function (item) {
|
|
377
384
|
if (typeof item === 'number') {
|
|
378
|
-
scheduleListData.push.apply(scheduleListData, _toConsumableArray(
|
|
385
|
+
scheduleListData.push.apply(scheduleListData, _toConsumableArray(_this3.getScheduleByIds([item])));
|
|
379
386
|
} else {
|
|
380
387
|
scheduleListData.push(item);
|
|
381
388
|
}
|
|
@@ -446,7 +453,7 @@ export var ScheduleModuleEx = /*#__PURE__*/function (_BaseModule) {
|
|
|
446
453
|
key: "saveScheduleToIndexDB",
|
|
447
454
|
value: (function () {
|
|
448
455
|
var _saveScheduleToIndexDB = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(scheduleList) {
|
|
449
|
-
var
|
|
456
|
+
var _this4 = this;
|
|
450
457
|
var savePromises, errorMessage;
|
|
451
458
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
452
459
|
while (1) switch (_context5.prev = _context5.next) {
|
|
@@ -467,7 +474,7 @@ export var ScheduleModuleEx = /*#__PURE__*/function (_BaseModule) {
|
|
|
467
474
|
case 7:
|
|
468
475
|
// 逐个保存日程(每个日程是独立的记录)
|
|
469
476
|
savePromises = scheduleList.map(function (schedule) {
|
|
470
|
-
return
|
|
477
|
+
return _this4.dbManager.add(INDEXDB_STORE_NAME, schedule);
|
|
471
478
|
});
|
|
472
479
|
_context5.next = 10;
|
|
473
480
|
return Promise.all(savePromises);
|
|
@@ -113,6 +113,24 @@ export declare class BaseSalesImpl extends BaseModule implements Module {
|
|
|
113
113
|
updateRemoteOrderNote(orderId: number | string, note: string): void;
|
|
114
114
|
updateTempOrderShopDiscount(amount: string | number): string;
|
|
115
115
|
updateTempOrderContactsInfo(contactsInfo: Record<string, any> | null): Record<string, any> | null;
|
|
116
|
+
/**
|
|
117
|
+
* 运行时切换 tempOrder 是否写入 localStorage(委托 OrderModule)。
|
|
118
|
+
* SalesSdk 等内存态场景可在挂载后设为 false,避免污染本地缓存。
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* bookingTicket.setEnableTempOrderPersist(false);
|
|
122
|
+
* await bookingTicket.addProductToOrder(product);
|
|
123
|
+
*/
|
|
124
|
+
setEnableTempOrderPersist(enabled: boolean): void;
|
|
125
|
+
/**
|
|
126
|
+
* 读取当前 tempOrder localStorage 持久化开关(委托 OrderModule)。
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* if (bookingTicket.isTempOrderPersistEnabled()) {
|
|
130
|
+
* bookingTicket.restoreOrder();
|
|
131
|
+
* }
|
|
132
|
+
*/
|
|
133
|
+
isTempOrderPersistEnabled(): boolean;
|
|
116
134
|
private ensureTempOrder;
|
|
117
135
|
addNewOrder(): Promise<OrderTempOrder>;
|
|
118
136
|
saveDraft(): Promise<void>;
|
|
@@ -127,6 +145,7 @@ export declare class BaseSalesImpl extends BaseModule implements Module {
|
|
|
127
145
|
private getHistoricalProductDiscountList;
|
|
128
146
|
private isPersistedOrderProduct;
|
|
129
147
|
private mergeHistoricalDiscountList;
|
|
148
|
+
private mergeCurrentDiscountSelectionState;
|
|
130
149
|
loadDiscountConfig(params?: {
|
|
131
150
|
customerId?: number;
|
|
132
151
|
action?: 'create' | 'edit';
|
|
@@ -677,6 +677,36 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
677
677
|
if (!this.store.order) throw new Error('order 模块未初始化');
|
|
678
678
|
return this.store.order.updateTempOrderContactsInfo(contactsInfo);
|
|
679
679
|
}
|
|
680
|
+
|
|
681
|
+
/**
|
|
682
|
+
* 运行时切换 tempOrder 是否写入 localStorage(委托 OrderModule)。
|
|
683
|
+
* SalesSdk 等内存态场景可在挂载后设为 false,避免污染本地缓存。
|
|
684
|
+
*
|
|
685
|
+
* @example
|
|
686
|
+
* bookingTicket.setEnableTempOrderPersist(false);
|
|
687
|
+
* await bookingTicket.addProductToOrder(product);
|
|
688
|
+
*/
|
|
689
|
+
}, {
|
|
690
|
+
key: "setEnableTempOrderPersist",
|
|
691
|
+
value: function setEnableTempOrderPersist(enabled) {
|
|
692
|
+
if (!this.store.order) throw new Error('order 模块未初始化');
|
|
693
|
+
this.store.order.setEnableTempOrderPersist(enabled);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* 读取当前 tempOrder localStorage 持久化开关(委托 OrderModule)。
|
|
698
|
+
*
|
|
699
|
+
* @example
|
|
700
|
+
* if (bookingTicket.isTempOrderPersistEnabled()) {
|
|
701
|
+
* bookingTicket.restoreOrder();
|
|
702
|
+
* }
|
|
703
|
+
*/
|
|
704
|
+
}, {
|
|
705
|
+
key: "isTempOrderPersistEnabled",
|
|
706
|
+
value: function isTempOrderPersistEnabled() {
|
|
707
|
+
if (!this.store.order) return true;
|
|
708
|
+
return this.store.order.isTempOrderPersistEnabled();
|
|
709
|
+
}
|
|
680
710
|
}, {
|
|
681
711
|
key: "ensureTempOrder",
|
|
682
712
|
value: function ensureTempOrder() {
|
|
@@ -966,12 +996,37 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
966
996
|
return !historyIds.has(discount.id);
|
|
967
997
|
})));
|
|
968
998
|
}
|
|
999
|
+
}, {
|
|
1000
|
+
key: "mergeCurrentDiscountSelectionState",
|
|
1001
|
+
value: function mergeCurrentDiscountSelectionState(discountList, currentDiscountList) {
|
|
1002
|
+
if (!currentDiscountList.length) return discountList;
|
|
1003
|
+
var currentDiscountMap = new Map(currentDiscountList.map(function (discount) {
|
|
1004
|
+
return [discount.id, discount];
|
|
1005
|
+
}));
|
|
1006
|
+
return discountList.map(function (discount) {
|
|
1007
|
+
var currentDiscount = currentDiscountMap.get(discount.id);
|
|
1008
|
+
if (!currentDiscount) return discount;
|
|
1009
|
+
if (currentDiscount.isManualSelect) {
|
|
1010
|
+
return _objectSpread(_objectSpread({}, discount), {}, {
|
|
1011
|
+
isSelected: false,
|
|
1012
|
+
isManualSelect: true
|
|
1013
|
+
});
|
|
1014
|
+
}
|
|
1015
|
+
if (currentDiscount.isSelected) {
|
|
1016
|
+
return _objectSpread(_objectSpread({}, discount), {}, {
|
|
1017
|
+
isSelected: true,
|
|
1018
|
+
isManualSelect: false
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
1021
|
+
return discount;
|
|
1022
|
+
});
|
|
1023
|
+
}
|
|
969
1024
|
}, {
|
|
970
1025
|
key: "loadDiscountConfig",
|
|
971
1026
|
value: function () {
|
|
972
1027
|
var _loadDiscountConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(params) {
|
|
973
|
-
var _this$getOrderIdentit, _tempOrder$customer, _tempOrder$_extend, _tempOrder$_extend2, _discountModule$getDi;
|
|
974
|
-
var tempOrder, orderStore, discountModule, rulesModule, orderId, customerId, preparedDiscountList, _discountModule$setOr, nextDiscountList, _tempOrder$holder, _tempOrder$holder2, _orderStore$summary, holders, result;
|
|
1028
|
+
var _this$getOrderIdentit, _tempOrder$customer, _tempOrder$_extend, _tempOrder$_extend2, _discountModule$getDi, _discountModule$getDi2;
|
|
1029
|
+
var tempOrder, orderStore, discountModule, rulesModule, orderId, customerId, currentDiscountList, preparedDiscountList, _discountModule$setOr, nextDiscountList, _tempOrder$holder, _tempOrder$holder2, _orderStore$summary, holders, result;
|
|
975
1030
|
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
976
1031
|
while (1) switch (_context11.prev = _context11.next) {
|
|
977
1032
|
case 0:
|
|
@@ -987,29 +1042,31 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
987
1042
|
rulesModule = orderStore.rules;
|
|
988
1043
|
orderId = tempOrder.order_id || ((_this$getOrderIdentit = this.getOrderIdentity) === null || _this$getOrderIdentit === void 0 || (_this$getOrderIdentit = _this$getOrderIdentit.call(this)) === null || _this$getOrderIdentit === void 0 ? void 0 : _this$getOrderIdentit.orderId);
|
|
989
1044
|
customerId = Number((params === null || params === void 0 ? void 0 : params.customerId) || tempOrder.customer_id || ((_tempOrder$customer = tempOrder.customer) === null || _tempOrder$customer === void 0 ? void 0 : _tempOrder$customer.id) || ((_tempOrder$_extend = tempOrder._extend) === null || _tempOrder$_extend === void 0 || (_tempOrder$_extend = _tempOrder$_extend.customerSnapshot) === null || _tempOrder$_extend === void 0 ? void 0 : _tempOrder$_extend.id) || ((_tempOrder$_extend2 = tempOrder._extend) === null || _tempOrder$_extend2 === void 0 || (_tempOrder$_extend2 = _tempOrder$_extend2.customerSnapshot) === null || _tempOrder$_extend2 === void 0 ? void 0 : _tempOrder$_extend2.customer_id) || 0);
|
|
1045
|
+
currentDiscountList = (discountModule === null || discountModule === void 0 || (_discountModule$getDi = discountModule.getDiscountList) === null || _discountModule$getDi === void 0 ? void 0 : _discountModule$getDi.call(discountModule)) || [];
|
|
990
1046
|
preparedDiscountList = [];
|
|
991
1047
|
if (!(customerId && customerId !== 1)) {
|
|
992
|
-
_context11.next =
|
|
1048
|
+
_context11.next = 16;
|
|
993
1049
|
break;
|
|
994
1050
|
}
|
|
995
|
-
_context11.next =
|
|
1051
|
+
_context11.next = 13;
|
|
996
1052
|
return this.store.order.loadDiscountConfig({
|
|
997
1053
|
customerId: customerId,
|
|
998
1054
|
action: (params === null || params === void 0 ? void 0 : params.action) || (orderId ? 'edit' : 'create'),
|
|
999
1055
|
orderId: Number(orderId) || undefined,
|
|
1000
1056
|
apply: false
|
|
1001
1057
|
});
|
|
1002
|
-
case
|
|
1058
|
+
case 13:
|
|
1003
1059
|
preparedDiscountList = _context11.sent;
|
|
1004
|
-
_context11.next =
|
|
1060
|
+
_context11.next = 16;
|
|
1005
1061
|
return discountModule === null || discountModule === void 0 || (_discountModule$setOr = discountModule.setOriginalDiscountList) === null || _discountModule$setOr === void 0 ? void 0 : _discountModule$setOr.call(discountModule, preparedDiscountList);
|
|
1006
|
-
case
|
|
1007
|
-
nextDiscountList = this.mergeHistoricalDiscountList(preparedDiscountList || (discountModule === null || discountModule === void 0 || (_discountModule$
|
|
1008
|
-
|
|
1062
|
+
case 16:
|
|
1063
|
+
nextDiscountList = this.mergeHistoricalDiscountList(preparedDiscountList || (discountModule === null || discountModule === void 0 || (_discountModule$getDi2 = discountModule.getDiscountList) === null || _discountModule$getDi2 === void 0 ? void 0 : _discountModule$getDi2.call(discountModule)) || [], tempOrder.products || []);
|
|
1064
|
+
nextDiscountList = this.mergeCurrentDiscountSelectionState(nextDiscountList, currentDiscountList);
|
|
1065
|
+
_context11.next = 20;
|
|
1009
1066
|
return discountModule === null || discountModule === void 0 ? void 0 : discountModule.setDiscountList(nextDiscountList);
|
|
1010
|
-
case
|
|
1067
|
+
case 20:
|
|
1011
1068
|
if (!rulesModule) {
|
|
1012
|
-
_context11.next =
|
|
1069
|
+
_context11.next = 30;
|
|
1013
1070
|
break;
|
|
1014
1071
|
}
|
|
1015
1072
|
holders = (_tempOrder$holder = tempOrder.holder) !== null && _tempOrder$holder !== void 0 && _tempOrder$holder.form_record_id ? [{
|
|
@@ -1029,32 +1086,32 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1029
1086
|
tempOrder.products = result.productList;
|
|
1030
1087
|
}
|
|
1031
1088
|
if (!result.discountList) {
|
|
1032
|
-
_context11.next =
|
|
1089
|
+
_context11.next = 30;
|
|
1033
1090
|
break;
|
|
1034
1091
|
}
|
|
1035
1092
|
nextDiscountList = this.mergeHistoricalDiscountList(result.discountList, tempOrder.products || []);
|
|
1036
1093
|
OrderModule.populateSavedAmounts(tempOrder.products, nextDiscountList);
|
|
1037
|
-
_context11.next =
|
|
1094
|
+
_context11.next = 29;
|
|
1038
1095
|
return discountModule === null || discountModule === void 0 ? void 0 : discountModule.setDiscountList(nextDiscountList);
|
|
1039
|
-
case
|
|
1096
|
+
case 29:
|
|
1040
1097
|
tempOrder.discount_list = nextDiscountList.filter(function (discount) {
|
|
1041
1098
|
return discount.isSelected;
|
|
1042
1099
|
});
|
|
1043
|
-
case
|
|
1100
|
+
case 30:
|
|
1044
1101
|
this.store.order.persistTempOrder();
|
|
1045
|
-
_context11.next =
|
|
1102
|
+
_context11.next = 33;
|
|
1046
1103
|
return this.effectsEmit('onDiscountApplied', {
|
|
1047
1104
|
productList: tempOrder.products || [],
|
|
1048
1105
|
discountList: nextDiscountList,
|
|
1049
1106
|
selectedDiscountList: tempOrder.discount_list || [],
|
|
1050
1107
|
tempOrder: tempOrder
|
|
1051
1108
|
});
|
|
1052
|
-
case
|
|
1109
|
+
case 33:
|
|
1053
1110
|
return _context11.abrupt("return", {
|
|
1054
1111
|
productList: tempOrder.products || [],
|
|
1055
1112
|
discountList: nextDiscountList
|
|
1056
1113
|
});
|
|
1057
|
-
case
|
|
1114
|
+
case 34:
|
|
1058
1115
|
case "end":
|
|
1059
1116
|
return _context11.stop();
|
|
1060
1117
|
}
|
|
@@ -311,7 +311,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
311
311
|
date: string;
|
|
312
312
|
status: string;
|
|
313
313
|
week: string;
|
|
314
|
-
weekNum: 0 | 1 |
|
|
314
|
+
weekNum: 0 | 2 | 1 | 5 | 3 | 4 | 6;
|
|
315
315
|
}[]>;
|
|
316
316
|
submitTimeSlot(timeSlots: TimeSliceItem): void;
|
|
317
317
|
private getScheduleDataByIds;
|
|
@@ -260,7 +260,7 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
|
|
|
260
260
|
* 获取当前的客户搜索条件
|
|
261
261
|
* @returns 当前搜索条件
|
|
262
262
|
*/
|
|
263
|
-
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "
|
|
263
|
+
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "num" | "skip">;
|
|
264
264
|
/**
|
|
265
265
|
* 获取客户列表状态(包含滚动加载相关状态)
|
|
266
266
|
* @returns 客户状态
|
|
@@ -19,6 +19,8 @@ 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;
|
|
22
24
|
/**
|
|
23
25
|
* Populate `savedAmount` on each discount based on product-level discount details.
|
|
24
26
|
* Only selected discounts get a non-zero value.
|
|
@@ -55,6 +57,23 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
55
57
|
}): void;
|
|
56
58
|
private getTempOrderStorageKey;
|
|
57
59
|
private restoreTempOrderFromStorage;
|
|
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
|
+
*/
|
|
76
|
+
isTempOrderPersistEnabled(): boolean;
|
|
58
77
|
persistTempOrder(): void;
|
|
59
78
|
private createDefaultTempOrderInstance;
|
|
60
79
|
private createExternalSaleNumber;
|
|
@@ -157,7 +176,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
157
176
|
updateOrderBooking(params: UpdateOrderBookingParams): any[];
|
|
158
177
|
removeProductFromOrder(identity: OrderProductIdentity): Promise<OrderProduct[]>;
|
|
159
178
|
/**
|
|
160
|
-
* 仅清空购物车行(products / bookings
|
|
179
|
+
* 仅清空购物车行(products / bookings),不重置整单。
|
|
161
180
|
* 用于「仅清空商品」;客户、备注、支付等协议字段保持不变。
|
|
162
181
|
*/
|
|
163
182
|
clearOrderCartLines(): Promise<OrderTempOrder>;
|
|
@@ -185,7 +204,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
185
204
|
private logSubmitBackendRejected;
|
|
186
205
|
syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
|
|
187
206
|
createOrder(params: CommitOrderParams['query']): {
|
|
188
|
-
type: "
|
|
207
|
+
type: "appointment_booking" | "virtual";
|
|
189
208
|
platform: string;
|
|
190
209
|
sales_channel: string;
|
|
191
210
|
order_sales_channel: string;
|
|
@@ -50,6 +50,8 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
50
50
|
super(name || "order", version);
|
|
51
51
|
this.defaultName = "order";
|
|
52
52
|
this.defaultVersion = "1.0.0";
|
|
53
|
+
/** 是否将 tempOrder 写入 localStorage;默认 true,SalesSdk 等内存态场景可关闭。 */
|
|
54
|
+
this.enableTempOrderPersist = true;
|
|
53
55
|
}
|
|
54
56
|
/**
|
|
55
57
|
* Populate `savedAmount` on each discount based on product-level discount details.
|
|
@@ -101,8 +103,11 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
101
103
|
this.rulesHooksOverride = (_a = otherParams.rules) == null ? void 0 : _a.hooks;
|
|
102
104
|
this.orderHooks = options.hooks || ((_b = otherParams.order) == null ? void 0 : _b.hooks) || ((_c = otherParams.hooks) == null ? void 0 : _c.order);
|
|
103
105
|
this.otherParams = otherParams;
|
|
106
|
+
this.enableTempOrderPersist = otherParams.enableTempOrderPersist !== false;
|
|
104
107
|
this.registerDiscountModules(options);
|
|
105
|
-
this.
|
|
108
|
+
if (this.enableTempOrderPersist) {
|
|
109
|
+
this.restoreTempOrderFromStorage();
|
|
110
|
+
}
|
|
106
111
|
this.logInfo("OrderModule initialized successfully");
|
|
107
112
|
}
|
|
108
113
|
/**
|
|
@@ -260,6 +265,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
260
265
|
const tempOrder = this.store.tempOrder;
|
|
261
266
|
if (!tempOrder)
|
|
262
267
|
return;
|
|
268
|
+
delete tempOrder.discount_list;
|
|
263
269
|
const rulesModule = this.store.rules;
|
|
264
270
|
if (!rulesModule)
|
|
265
271
|
return;
|
|
@@ -275,9 +281,11 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
275
281
|
if (result == null ? void 0 : result.productList) {
|
|
276
282
|
tempOrder.products = (result.productList || []).map((product) => ({
|
|
277
283
|
...product,
|
|
278
|
-
discount_list: (0,
|
|
279
|
-
|
|
280
|
-
|
|
284
|
+
discount_list: (0, import_utils.normalizeOrderProductDiscountList)(
|
|
285
|
+
(0, import_manualProductDiscount.syncManualProductDiscountProductNum)(
|
|
286
|
+
product.discount_list,
|
|
287
|
+
product.num
|
|
288
|
+
)
|
|
281
289
|
)
|
|
282
290
|
}));
|
|
283
291
|
}
|
|
@@ -287,9 +295,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
287
295
|
result.discountList
|
|
288
296
|
);
|
|
289
297
|
(_e = this.store.discount) == null ? void 0 : _e.setDiscountList(result.discountList);
|
|
290
|
-
tempOrder.discount_list = result.discountList.filter(
|
|
291
|
-
(d) => d.isSelected
|
|
292
|
-
);
|
|
293
298
|
}
|
|
294
299
|
}
|
|
295
300
|
// ─── TempOrder: 初始化入口 ───
|
|
@@ -334,9 +339,14 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
334
339
|
p.product_bundle = [];
|
|
335
340
|
}
|
|
336
341
|
const row = p;
|
|
337
|
-
|
|
342
|
+
const normalized = (0, import_utils3.normalizeOrderProduct)(row);
|
|
343
|
+
normalized.discount_list = (0, import_utils.normalizeOrderProductDiscountList)(
|
|
344
|
+
normalized.discount_list
|
|
345
|
+
);
|
|
346
|
+
parsedData.products[i] = normalized;
|
|
338
347
|
}
|
|
339
348
|
}
|
|
349
|
+
delete parsedData.discount_list;
|
|
340
350
|
const parsedRecord = parsedData;
|
|
341
351
|
this.store.summary = parsedRecord.summary || (0, import_utils.createEmptySummary)();
|
|
342
352
|
delete parsedData.summary;
|
|
@@ -354,7 +364,30 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
354
364
|
(_b = (_a = this.window) == null ? void 0 : _a.localStorage) == null ? void 0 : _b.removeItem(key);
|
|
355
365
|
}
|
|
356
366
|
}
|
|
367
|
+
/**
|
|
368
|
+
* 运行时切换 tempOrder localStorage 持久化。
|
|
369
|
+
*
|
|
370
|
+
* @example
|
|
371
|
+
* orderModule.setEnableTempOrderPersist(false);
|
|
372
|
+
* orderModule.addProductToOrder(product); // 不会写入 localStorage
|
|
373
|
+
*/
|
|
374
|
+
setEnableTempOrderPersist(enabled) {
|
|
375
|
+
this.enableTempOrderPersist = enabled;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* 读取当前是否启用 tempOrder localStorage 持久化。
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* if (orderModule.isTempOrderPersistEnabled()) {
|
|
382
|
+
* orderModule.persistTempOrder();
|
|
383
|
+
* }
|
|
384
|
+
*/
|
|
385
|
+
isTempOrderPersistEnabled() {
|
|
386
|
+
return this.enableTempOrderPersist;
|
|
387
|
+
}
|
|
357
388
|
persistTempOrder() {
|
|
389
|
+
if (!this.enableTempOrderPersist)
|
|
390
|
+
return;
|
|
358
391
|
const key = this.getTempOrderStorageKey();
|
|
359
392
|
if (!key || !this.store.tempOrder)
|
|
360
393
|
return;
|
|
@@ -1145,6 +1178,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1145
1178
|
productToAdd.product_bundle
|
|
1146
1179
|
);
|
|
1147
1180
|
const normalizedIncoming = (0, import_utils3.normalizeOrderProduct)(productToAdd);
|
|
1181
|
+
normalizedIncoming.discount_list = (0, import_utils.normalizeOrderProductDiscountList)(
|
|
1182
|
+
normalizedIncoming.discount_list
|
|
1183
|
+
);
|
|
1148
1184
|
const hasIncomingGoodPass = this.hasGoodPassDiscount(
|
|
1149
1185
|
normalizedIncoming
|
|
1150
1186
|
);
|
|
@@ -1201,6 +1237,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1201
1237
|
unique_identification_number: targetUid
|
|
1202
1238
|
}
|
|
1203
1239
|
});
|
|
1240
|
+
normalizedProduct.discount_list = (0, import_utils.normalizeOrderProductDiscountList)(
|
|
1241
|
+
normalizedProduct.discount_list
|
|
1242
|
+
);
|
|
1204
1243
|
tempOrder.products[matchedIndex] = {
|
|
1205
1244
|
...targetProduct,
|
|
1206
1245
|
...normalizedProduct,
|
|
@@ -1316,6 +1355,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1316
1355
|
delete nextProduct.metadata.price_schema_version;
|
|
1317
1356
|
}
|
|
1318
1357
|
let normalizedProduct = (0, import_utils3.normalizeOrderProduct)(nextProduct);
|
|
1358
|
+
normalizedProduct.discount_list = (0, import_utils.normalizeOrderProductDiscountList)(
|
|
1359
|
+
normalizedProduct.discount_list
|
|
1360
|
+
);
|
|
1319
1361
|
if (booking) {
|
|
1320
1362
|
const productUid = String(
|
|
1321
1363
|
((_e = normalizedProduct.metadata) == null ? void 0 : _e.unique_identification_number) || ((_f = targetProduct.metadata) == null ? void 0 : _f.unique_identification_number) || unique_identification_number || (0, import_utils.createUuidV4)()
|
|
@@ -1408,6 +1450,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1408
1450
|
unique_identification_number: ((_a = targetProduct.metadata) == null ? void 0 : _a.unique_identification_number) || unique_identification_number
|
|
1409
1451
|
}
|
|
1410
1452
|
});
|
|
1453
|
+
normalizedProduct.discount_list = (0, import_utils.normalizeOrderProductDiscountList)(
|
|
1454
|
+
normalizedProduct.discount_list
|
|
1455
|
+
);
|
|
1411
1456
|
tempOrder.products[productIndex] = normalizedProduct;
|
|
1412
1457
|
this.applyDiscount();
|
|
1413
1458
|
await this.recalculateSummary({ createIfMissing: true });
|
|
@@ -1459,14 +1504,13 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1459
1504
|
return tempOrder.products;
|
|
1460
1505
|
}
|
|
1461
1506
|
/**
|
|
1462
|
-
* 仅清空购物车行(products / bookings
|
|
1507
|
+
* 仅清空购物车行(products / bookings),不重置整单。
|
|
1463
1508
|
* 用于「仅清空商品」;客户、备注、支付等协议字段保持不变。
|
|
1464
1509
|
*/
|
|
1465
1510
|
async clearOrderCartLines() {
|
|
1466
1511
|
const tempOrder = this.ensureTempOrder();
|
|
1467
1512
|
tempOrder.products = [];
|
|
1468
1513
|
tempOrder.bookings = [];
|
|
1469
|
-
tempOrder.discount_list = [];
|
|
1470
1514
|
if (tempOrder._extend && typeof tempOrder._extend === "object") {
|
|
1471
1515
|
tempOrder._extend = {
|
|
1472
1516
|
...tempOrder._extend,
|
|
@@ -1945,6 +1989,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1945
1989
|
};
|
|
1946
1990
|
delete nextTempOrder.summary;
|
|
1947
1991
|
delete nextTempOrder.lastOrderInfo;
|
|
1992
|
+
delete nextTempOrder.discount_list;
|
|
1948
1993
|
nextTempOrder.metadata = raw.metadata && typeof raw.metadata === "object" ? { ...raw.metadata } : {};
|
|
1949
1994
|
nextTempOrder.holder = raw.holder && typeof raw.holder === "object" ? { ...raw.holder } : null;
|
|
1950
1995
|
nextTempOrder.products = Array.isArray(raw.products) ? raw.products.map((p) => this.normalizeHydratedOrderProduct(p)) : [];
|
|
@@ -1955,7 +2000,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1955
2000
|
})) : [];
|
|
1956
2001
|
nextTempOrder.payments = Array.isArray(raw.payments) ? raw.payments.map((p) => ({ ...p || {} })) : [];
|
|
1957
2002
|
nextTempOrder.surcharges = Array.isArray(raw.surcharges) ? raw.surcharges.map((s) => ({ ...s || {} })) : [];
|
|
1958
|
-
nextTempOrder.discount_list = Array.isArray(raw.discount_list) ? raw.discount_list.map((d) => ({ ...d || {} })) : [];
|
|
1959
2003
|
nextTempOrder.relation_forms = Array.isArray(raw.relation_forms) ? raw.relation_forms.map((f) => ({ ...f || {} })) : [];
|
|
1960
2004
|
nextTempOrder.contacts = Array.isArray(raw.contacts) ? raw.contacts.map((c) => ({ ...c || {} })) : [];
|
|
1961
2005
|
nextTempOrder.contacts_info = raw.contacts_info && typeof raw.contacts_info === "object" && !Array.isArray(raw.contacts_info) ? { ...raw.contacts_info } : null;
|
|
@@ -1984,6 +2028,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
1984
2028
|
row.metadata.unique_identification_number = (0, import_utils.createUuidV4)();
|
|
1985
2029
|
}
|
|
1986
2030
|
const normalized = (0, import_utils3.normalizeOrderProduct)(row);
|
|
2031
|
+
normalized.discount_list = (0, import_utils.normalizeOrderProductDiscountList)(
|
|
2032
|
+
normalized.discount_list
|
|
2033
|
+
);
|
|
1987
2034
|
const result = {
|
|
1988
2035
|
...row,
|
|
1989
2036
|
...normalized,
|
|
@@ -6,6 +6,8 @@ import type { UnavailableReason } from '../Rules/types';
|
|
|
6
6
|
import type { SubmitPayloadEnhancer } from './utils';
|
|
7
7
|
import type { PaymentItem } from '../Payment/types';
|
|
8
8
|
import type { ICustomer } from '../AccountList/types';
|
|
9
|
+
import type { OrderProductDiscountItem } from '../../server/modules/order/types';
|
|
10
|
+
export type { OrderProductDiscountItem } from '../../server/modules/order/types';
|
|
9
11
|
export declare enum OrderHooks {
|
|
10
12
|
OnOrderCreate = "order:onOrderCreate",
|
|
11
13
|
OnOrderUpdate = "order:onOrderUpdate",
|
|
@@ -74,7 +76,7 @@ export interface OrderProduct extends OrderProductIdentity {
|
|
|
74
76
|
original_price: string;
|
|
75
77
|
tax_fee: string;
|
|
76
78
|
is_charge_tax: number;
|
|
77
|
-
discount_list:
|
|
79
|
+
discount_list: OrderProductDiscountItem[];
|
|
78
80
|
product_bundle: any[];
|
|
79
81
|
booking_uid?: string;
|
|
80
82
|
metadata: Record<string, any>;
|
|
@@ -149,7 +151,7 @@ export interface OrderTempOrder {
|
|
|
149
151
|
bookings: any[];
|
|
150
152
|
payments: any[];
|
|
151
153
|
surcharges: any[];
|
|
152
|
-
discount_list
|
|
154
|
+
discount_list?: any[];
|
|
153
155
|
relation_forms: any[];
|
|
154
156
|
contacts: any[];
|
|
155
157
|
contacts_info: Record<string, any> | null;
|
|
@@ -165,7 +167,7 @@ export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identific
|
|
|
165
167
|
payment_price: string;
|
|
166
168
|
product_sku: Record<string, any>;
|
|
167
169
|
}
|
|
168
|
-
export interface OrderSubmitPayload extends Omit<OrderTempOrder, 'platform' | 'products' | '_extend' | 'customer'> {
|
|
170
|
+
export interface OrderSubmitPayload extends Omit<OrderTempOrder, 'platform' | 'products' | '_extend' | 'customer' | 'discount_list'> {
|
|
169
171
|
platform: string;
|
|
170
172
|
request_unique_idempotency_token?: string;
|
|
171
173
|
form_record_ids?: Array<{
|
|
@@ -296,7 +298,6 @@ export interface SubmitSalesOrderParams {
|
|
|
296
298
|
bookings: OrderSubmitBooking[];
|
|
297
299
|
payments: any[];
|
|
298
300
|
surcharges?: any[];
|
|
299
|
-
discount_list: any[];
|
|
300
301
|
relation_forms: any[];
|
|
301
302
|
form_record_ids?: OrderSubmitFormRecord[];
|
|
302
303
|
contacts: any[];
|
|
@@ -500,6 +501,10 @@ export interface OrderModuleAPI {
|
|
|
500
501
|
updateOrderBooking: (params: UpdateOrderBookingParams) => any[];
|
|
501
502
|
removeProductFromOrder: (identity: OrderProductIdentity) => Promise<OrderProduct[]>;
|
|
502
503
|
persistTempOrder: () => void;
|
|
504
|
+
/** 运行时切换 tempOrder localStorage 持久化开关。 */
|
|
505
|
+
setEnableTempOrderPersist: (enabled: boolean) => void;
|
|
506
|
+
/** 当前是否启用 tempOrder localStorage 持久化。 */
|
|
507
|
+
isTempOrderPersistEnabled: () => boolean;
|
|
503
508
|
submitTempOrder: <T = any>(params?: {
|
|
504
509
|
cacheId?: string;
|
|
505
510
|
platform?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Decimal from 'decimal.js';
|
|
2
2
|
import { CartItem } from "../Cart";
|
|
3
|
-
import type { OrderSubmitPayload, OrderSubmitProduct, OrderSummary, OrderTempOrder } from './types';
|
|
3
|
+
import type { OrderProductDiscountItem, OrderSubmitPayload, OrderSubmitProduct, OrderSummary, OrderTempOrder } from './types';
|
|
4
4
|
import type { RulesParamsHooks } from '../Rules/types';
|
|
5
5
|
import type { MapOrderPaymentsOptions, OrderPaymentData, OrderPaymentSource } from './types';
|
|
6
6
|
/**
|
|
@@ -67,6 +67,11 @@ export declare function sumOptionUnitPrice(options?: Array<{
|
|
|
67
67
|
*/
|
|
68
68
|
/** Rules calcDiscount 用手动价标记;undefined 表示交给 Rules 用 total/origin_total 推断 */
|
|
69
69
|
export declare function resolveRulesManualDiscountFlag(metadata: Record<string, any> | null | undefined): boolean | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* 商品行折扣只保留后端 OrderProductDiscountItem 协议字段。
|
|
72
|
+
* Rules/券计算过程中的 `_num`、`config` 等运行态字段不应进入 tempOrder 或提交 payload。
|
|
73
|
+
*/
|
|
74
|
+
export declare function normalizeOrderProductDiscountList(discountList?: unknown[] | null): OrderProductDiscountItem[];
|
|
70
75
|
/**
|
|
71
76
|
* 手动改价(price_override)时行级 original_price(composite 单价):
|
|
72
77
|
* 购物车划线价应对齐 metadata.origin._extend.origin_total(改价前单价 composite,如 40),
|