@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.
@@ -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
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
272
+ var _loop = function _loop() {
271
273
  var id = _step.value;
272
- var schedule = this.store.map.get(id);
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 _this2 = this;
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(_this2.getScheduleByIds([item])));
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 _this3 = this;
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 _this3.dbManager.add(INDEXDB_STORE_NAME, schedule);
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 = 15;
1048
+ _context11.next = 16;
993
1049
  break;
994
1050
  }
995
- _context11.next = 12;
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 12:
1058
+ case 13:
1003
1059
  preparedDiscountList = _context11.sent;
1004
- _context11.next = 15;
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 15:
1007
- nextDiscountList = this.mergeHistoricalDiscountList(preparedDiscountList || (discountModule === null || discountModule === void 0 || (_discountModule$getDi = discountModule.getDiscountList) === null || _discountModule$getDi === void 0 ? void 0 : _discountModule$getDi.call(discountModule)) || [], tempOrder.products || []);
1008
- _context11.next = 18;
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 18:
1067
+ case 20:
1011
1068
  if (!rulesModule) {
1012
- _context11.next = 28;
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 = 28;
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 = 27;
1094
+ _context11.next = 29;
1038
1095
  return discountModule === null || discountModule === void 0 ? void 0 : discountModule.setDiscountList(nextDiscountList);
1039
- case 27:
1096
+ case 29:
1040
1097
  tempOrder.discount_list = nextDiscountList.filter(function (discount) {
1041
1098
  return discount.isSelected;
1042
1099
  });
1043
- case 28:
1100
+ case 30:
1044
1101
  this.store.order.persistTempOrder();
1045
- _context11.next = 31;
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 31:
1109
+ case 33:
1053
1110
  return _context11.abrupt("return", {
1054
1111
  productList: tempOrder.products || [],
1055
1112
  discountList: nextDiscountList
1056
1113
  });
1057
- case 32:
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 | 2 | 3 | 4 | 5 | 6;
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, "skip" | "num">;
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 / discount_list),不重置整单。
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: "virtual" | "appointment_booking";
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.restoreTempOrderFromStorage();
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, import_manualProductDiscount.syncManualProductDiscountProductNum)(
279
- product.discount_list,
280
- product.num
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
- parsedData.products[i] = (0, import_utils3.normalizeOrderProduct)(row);
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 / discount_list),不重置整单。
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: any[];
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: any[];
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),