@pisell/pisellos 2.2.249 → 2.2.251

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.
Files changed (33) hide show
  1. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  2. package/dist/modules/Order/index.d.ts +1 -1
  3. package/dist/modules/Order/index.js +97 -91
  4. package/dist/modules/Order/types.d.ts +5 -0
  5. package/dist/server/index.d.ts +21 -0
  6. package/dist/server/index.js +32 -3
  7. package/dist/server/modules/order/index.d.ts +1 -1
  8. package/dist/server/modules/order/index.js +76 -51
  9. package/dist/server/modules/order/types.d.ts +3 -0
  10. package/dist/server/modules/order/utils/filterBookings.js +8 -1
  11. package/dist/server/utils/small-ticket.d.ts +0 -1
  12. package/dist/server/utils/small-ticket.js +12 -15
  13. package/dist/solution/BaseSales/index.js +47 -29
  14. package/dist/solution/BookingByStep/index.d.ts +1 -1
  15. package/dist/solution/BookingTicket/index.d.ts +13 -1
  16. package/dist/solution/BookingTicket/index.js +3 -4
  17. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  18. package/lib/modules/Order/index.d.ts +1 -1
  19. package/lib/modules/Order/index.js +10 -8
  20. package/lib/modules/Order/types.d.ts +5 -0
  21. package/lib/server/index.d.ts +21 -0
  22. package/lib/server/index.js +24 -1
  23. package/lib/server/modules/order/index.d.ts +1 -1
  24. package/lib/server/modules/order/index.js +24 -13
  25. package/lib/server/modules/order/types.d.ts +3 -0
  26. package/lib/server/modules/order/utils/filterBookings.js +6 -1
  27. package/lib/server/utils/small-ticket.d.ts +0 -1
  28. package/lib/server/utils/small-ticket.js +3 -6
  29. package/lib/solution/BaseSales/index.js +14 -7
  30. package/lib/solution/BookingByStep/index.d.ts +1 -1
  31. package/lib/solution/BookingTicket/index.d.ts +13 -1
  32. package/lib/solution/BookingTicket/index.js +0 -1
  33. package/package.json +1 -1
@@ -49,6 +49,8 @@ import { buildSmallTicketData, hasSmallTicketData } from "./utils/small-ticket";
49
49
 
50
50
  /** 非当天(远端)预约查询订阅者 */
51
51
 
52
+ /** Server 运行时诊断快照,用于排查订阅者是否持续增长。 */
53
+
52
54
  /** 平面图 GET 查询订阅者(列表 / id 详情 / code 详情) */
53
55
 
54
56
  var PRODUCT_TITLE_SNAPSHOT_KEYS = ['en', 'ja', 'pt', 'auto', 'zh-CN', 'zh-HK', 'kitchen', 'original'];
@@ -1236,7 +1238,7 @@ var Server = /*#__PURE__*/function () {
1236
1238
  url = _ref44.url, data = _ref44.data, config = _ref44.config, routePath = _ref44.path;
1237
1239
  base = '/shop/schedule/floor-plan';
1238
1240
  path = _this.parseRequestPath(url, routePath);
1239
- if (!(path === "".concat(base, "/unsubscribe"))) {
1241
+ if (!(path === "".concat(base, "/unsubscribe") || path === "".concat(base, "/code/unsubscribe"))) {
1240
1242
  _context18.next = 7;
1241
1243
  break;
1242
1244
  }
@@ -1477,10 +1479,34 @@ var Server = /*#__PURE__*/function () {
1477
1479
  }
1478
1480
 
1479
1481
  /**
1480
- * 注册路由
1481
- * @param routes 路由定义数组
1482
+ * 获取 Server 内部订阅者和缓存数量快照。
1483
+ *
1484
+ * @example
1485
+ * const snapshot = pisellos.server?.getDiagnosticsSnapshot?.();
1482
1486
  */
1483
1487
  _createClass(Server, [{
1488
+ key: "getDiagnosticsSnapshot",
1489
+ value: function getDiagnosticsSnapshot() {
1490
+ return {
1491
+ subscribers: {
1492
+ productQuerySubscribers: this.productQuerySubscribers.size,
1493
+ orderQuerySubscribers: this.orderQuerySubscribers.size,
1494
+ bookingQuerySubscribers: this.bookingQuerySubscribers.size,
1495
+ bookingRemoteQuerySubscribers: this.bookingRemoteQuerySubscribers.size,
1496
+ salesSearchSubscribers: this.salesSearchSubscribers.size,
1497
+ floorPlanQuerySubscribers: this.floorPlanQuerySubscribers.size
1498
+ },
1499
+ caches: {
1500
+ bookingRemoteCache: this.bookingRemoteCache.size
1501
+ }
1502
+ };
1503
+ }
1504
+
1505
+ /**
1506
+ * 注册路由
1507
+ * @param routes 路由定义数组
1508
+ */
1509
+ }, {
1484
1510
  key: "registerRoutes",
1485
1511
  value: function registerRoutes(routes) {
1486
1512
  var _this2 = this;
@@ -6392,6 +6418,9 @@ var Server = /*#__PURE__*/function () {
6392
6418
  if (changedOrders.length === 0) {
6393
6419
  return;
6394
6420
  }
6421
+ // 如果当前开启了 checkout 弹窗,先不进行刷新,下面的代码会导致在全局搜索页调用 bookingTicket.destroy()
6422
+ // 导致模块被销毁 ,checkout 弹窗永远无法关闭
6423
+ if (window.isPaymentModalPluginOpen) return;
6395
6424
  var _iterator20 = _createForOfIteratorHelper(this.salesSearchSubscribers.entries()),
6396
6425
  _step20;
6397
6426
  try {
@@ -193,7 +193,7 @@ export declare class OrderModule extends BaseModule implements Module {
193
193
  private findOrderIndexByIdentity;
194
194
  private getOrderCompletenessScore;
195
195
  private pickPreferredOrder;
196
- private getProductMergeKey;
196
+ private getProductIdentityKeys;
197
197
  private mergeOrderProductLists;
198
198
  private getPaymentMergeKey;
199
199
  private mergeOrderPaymentLists;
@@ -1899,20 +1899,21 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1899
1899
  return left;
1900
1900
  }
1901
1901
  }, {
1902
- key: "getProductMergeKey",
1903
- value: function getProductMergeKey(product) {
1902
+ key: "getProductIdentityKeys",
1903
+ value: function getProductIdentityKeys(product) {
1904
1904
  var _record$metadata;
1905
1905
  var record = product;
1906
- if (!record) return '';
1906
+ if (!record) return [];
1907
+ var keys = [];
1907
1908
  var metadataUid = (_record$metadata = record.metadata) === null || _record$metadata === void 0 ? void 0 : _record$metadata.unique_identification_number;
1908
- if (!this.isBlankIdentityValue(metadataUid)) return "uid:".concat(String(metadataUid));
1909
+ if (!this.isBlankIdentityValue(metadataUid)) keys.push("uid:".concat(String(metadataUid)));
1909
1910
  var topLevelUid = record.unique_identification_number;
1910
- if (!this.isBlankIdentityValue(topLevelUid)) return "uid:".concat(String(topLevelUid));
1911
+ if (!this.isBlankIdentityValue(topLevelUid)) keys.push("uid:".concat(String(topLevelUid)));
1911
1912
  var orderDetailId = record.order_detail_id;
1912
- if (!this.isBlankIdentityValue(orderDetailId)) return "detail:".concat(String(orderDetailId));
1913
+ if (!this.isBlankIdentityValue(orderDetailId)) keys.push("detail:".concat(String(orderDetailId)));
1913
1914
  var bookingUid = record.booking_uid;
1914
- if (!this.isBlankIdentityValue(bookingUid)) return "booking:".concat(String(bookingUid));
1915
- return '';
1915
+ if (!this.isBlankIdentityValue(bookingUid)) keys.push("booking:".concat(String(bookingUid)));
1916
+ return keys;
1916
1917
  }
1917
1918
  }, {
1918
1919
  key: "mergeOrderProductLists",
@@ -1927,8 +1928,19 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1927
1928
  try {
1928
1929
  for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
1929
1930
  var item = _step13.value;
1930
- var key = this.getProductMergeKey(item);
1931
- if (key) seenKeys.add(key);
1931
+ var keys = this.getProductIdentityKeys(item);
1932
+ var _iterator15 = _createForOfIteratorHelper(keys),
1933
+ _step15;
1934
+ try {
1935
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
1936
+ var key = _step15.value;
1937
+ seenKeys.add(key);
1938
+ }
1939
+ } catch (err) {
1940
+ _iterator15.e(err);
1941
+ } finally {
1942
+ _iterator15.f();
1943
+ }
1932
1944
  }
1933
1945
  } catch (err) {
1934
1946
  _iterator13.e(err);
@@ -1941,9 +1953,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1941
1953
  try {
1942
1954
  for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
1943
1955
  var _item = _step14.value;
1944
- var _key = this.getProductMergeKey(_item);
1945
- if (!_key || seenKeys.has(_key)) continue;
1946
- seenKeys.add(_key);
1956
+ var _keys = this.getProductIdentityKeys(_item);
1957
+ if (_keys.length === 0 || _keys.some(function (key) {
1958
+ return seenKeys.has(key);
1959
+ })) continue;
1960
+ var _iterator16 = _createForOfIteratorHelper(_keys),
1961
+ _step16;
1962
+ try {
1963
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
1964
+ var _key = _step16.value;
1965
+ seenKeys.add(_key);
1966
+ }
1967
+ } catch (err) {
1968
+ _iterator16.e(err);
1969
+ } finally {
1970
+ _iterator16.f();
1971
+ }
1947
1972
  result.push(cloneDeep(_item));
1948
1973
  }
1949
1974
  } catch (err) {
@@ -1981,19 +2006,19 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1981
2006
  if (incomingList.length === 0) return cloneDeep(existingList);
1982
2007
  if (existingList.length === 0) return cloneDeep(incomingList);
1983
2008
  var existingByKey = new Map();
1984
- var _iterator15 = _createForOfIteratorHelper(existingList),
1985
- _step15;
2009
+ var _iterator17 = _createForOfIteratorHelper(existingList),
2010
+ _step17;
1986
2011
  try {
1987
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
1988
- var payment = _step15.value;
2012
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2013
+ var payment = _step17.value;
1989
2014
  var key = this.getPaymentMergeKey(payment);
1990
2015
  if (!key) continue;
1991
2016
  existingByKey.set(key, payment);
1992
2017
  }
1993
2018
  } catch (err) {
1994
- _iterator15.e(err);
2019
+ _iterator17.e(err);
1995
2020
  } finally {
1996
- _iterator15.f();
2021
+ _iterator17.f();
1997
2022
  }
1998
2023
  return incomingList.map(function (payment) {
1999
2024
  var incomingPayment = payment;
@@ -2012,7 +2037,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2012
2037
  var secondary = preferred === existing ? incoming : existing;
2013
2038
  var merged = _objectSpread(_objectSpread({}, secondary), preferred);
2014
2039
  var fieldsToPreserve = ['order_id', 'external_sale_number', 'order_number', 'shop_order_number', 'shop_full_order_number'];
2015
- var incomingPatchFields = ['payment_status', 'status', 'shipping_status', 'updated_at', 'shop_discount', 'summary', 'products', 'bookings'];
2040
+ var incomingPatchFields = ['payment_status', 'status', 'shipping_status', 'updated_at', 'shop_discount', 'summary', 'products', 'bookings', 'note', 'customer_id', 'customer_name', 'customer', 'holder', 'contacts_info', 'phone', 'email', 'relation_forms'];
2016
2041
  var mergedRecord = merged;
2017
2042
  var preferredRecord = preferred;
2018
2043
  var secondaryRecord = secondary;
@@ -2054,30 +2079,30 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2054
2079
  key: "summarizeDuplicateOrders",
2055
2080
  value: function summarizeDuplicateOrders(orders) {
2056
2081
  var groups = new Map();
2057
- var _iterator16 = _createForOfIteratorHelper(orders),
2058
- _step16;
2082
+ var _iterator18 = _createForOfIteratorHelper(orders),
2083
+ _step18;
2059
2084
  try {
2060
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
2061
- var order = _step16.value;
2062
- var _iterator17 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(order)),
2063
- _step17;
2085
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2086
+ var order = _step18.value;
2087
+ var _iterator19 = _createForOfIteratorHelper(this.getOrderIdentityMatchKeys(order)),
2088
+ _step19;
2064
2089
  try {
2065
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2066
- var key = _step17.value;
2090
+ for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
2091
+ var key = _step19.value;
2067
2092
  var group = groups.get(key) || [];
2068
2093
  group.push(order);
2069
2094
  groups.set(key, group);
2070
2095
  }
2071
2096
  } catch (err) {
2072
- _iterator17.e(err);
2097
+ _iterator19.e(err);
2073
2098
  } finally {
2074
- _iterator17.f();
2099
+ _iterator19.f();
2075
2100
  }
2076
2101
  }
2077
2102
  } catch (err) {
2078
- _iterator16.e(err);
2103
+ _iterator18.e(err);
2079
2104
  } finally {
2080
- _iterator16.f();
2105
+ _iterator18.f();
2081
2106
  }
2082
2107
  return _toConsumableArray(groups.entries()).filter(function (_ref2) {
2083
2108
  var _ref3 = _slicedToArray(_ref2, 2),
@@ -2119,11 +2144,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2119
2144
  value: function compactOrderListByIdentity(orders, source) {
2120
2145
  var list = [];
2121
2146
  var removedCount = 0;
2122
- var _iterator18 = _createForOfIteratorHelper(orders),
2123
- _step18;
2147
+ var _iterator20 = _createForOfIteratorHelper(orders),
2148
+ _step20;
2124
2149
  try {
2125
- for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2126
- var order = _step18.value;
2150
+ for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
2151
+ var order = _step20.value;
2127
2152
  var matchIndex = this.findOrderIndexByIdentity(list, order);
2128
2153
  if (matchIndex < 0) {
2129
2154
  list.push(order);
@@ -2133,9 +2158,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2133
2158
  removedCount += 1;
2134
2159
  }
2135
2160
  } catch (err) {
2136
- _iterator18.e(err);
2161
+ _iterator20.e(err);
2137
2162
  } finally {
2138
- _iterator18.f();
2163
+ _iterator20.f();
2139
2164
  }
2140
2165
  if (removedCount > 0) {
2141
2166
  this.logWarning('订单列表重复项已压缩', {
@@ -2285,11 +2310,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2285
2310
  var merged = remoteOrders.map(function (order) {
2286
2311
  return _this19.normalizeRemoteSyncedOrder(order);
2287
2312
  });
2288
- var _iterator19 = _createForOfIteratorHelper(existingOrders),
2289
- _step19;
2313
+ var _iterator21 = _createForOfIteratorHelper(existingOrders),
2314
+ _step21;
2290
2315
  try {
2291
- for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
2292
- var order = _step19.value;
2316
+ for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
2317
+ var order = _step21.value;
2293
2318
  if (!this.isPendingSyncOrder(order)) continue;
2294
2319
  var matchIndex = this.findOrderIndexByIdentity(merged, order);
2295
2320
  if (matchIndex >= 0) {
@@ -2300,9 +2325,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2300
2325
  merged.push(order);
2301
2326
  }
2302
2327
  } catch (err) {
2303
- _iterator19.e(err);
2328
+ _iterator21.e(err);
2304
2329
  } finally {
2305
- _iterator19.f();
2330
+ _iterator21.f();
2306
2331
  }
2307
2332
  return this.compactOrderListByIdentity(merged, 'mergeRemoteSnapshotWithPendingOrders').list;
2308
2333
  }
@@ -2396,7 +2421,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2396
2421
  _context20.prev = 12;
2397
2422
  _context20.next = 15;
2398
2423
  return this.runInOrderSQLiteSaveQueue( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19() {
2399
- var writeMethod, _iterator20, _step20, order;
2424
+ var writeMethod, _iterator22, _step22, order;
2400
2425
  return _regeneratorRuntime().wrap(function _callee19$(_context19) {
2401
2426
  while (1) switch (_context19.prev = _context19.next) {
2402
2427
  case 0:
@@ -2433,15 +2458,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2433
2458
  break;
2434
2459
  }
2435
2460
  writeMethod = 'update';
2436
- _iterator20 = _createForOfIteratorHelper(compactedToWrite);
2461
+ _iterator22 = _createForOfIteratorHelper(compactedToWrite);
2437
2462
  _context19.prev = 17;
2438
- _iterator20.s();
2463
+ _iterator22.s();
2439
2464
  case 19:
2440
- if ((_step20 = _iterator20.n()).done) {
2465
+ if ((_step22 = _iterator22.n()).done) {
2441
2466
  _context19.next = 25;
2442
2467
  break;
2443
2468
  }
2444
- order = _step20.value;
2469
+ order = _step22.value;
2445
2470
  _context19.next = 23;
2446
2471
  return _this20.dbManager.update(INDEXDB_STORE_NAME, order);
2447
2472
  case 23:
@@ -2453,10 +2478,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2453
2478
  case 27:
2454
2479
  _context19.prev = 27;
2455
2480
  _context19.t0 = _context19["catch"](17);
2456
- _iterator20.e(_context19.t0);
2481
+ _iterator22.e(_context19.t0);
2457
2482
  case 30:
2458
2483
  _context19.prev = 30;
2459
- _iterator20.f();
2484
+ _iterator22.f();
2460
2485
  return _context19.finish(30);
2461
2486
  case 33:
2462
2487
  _this20.recordRecentSqliteWrite(source, compactedToWrite);
@@ -458,7 +458,10 @@ export interface OrderFilters {
458
458
  * 预约展开列表筛选条件(订单级条件匹配 booking.order.*,预约级匹配 booking 自身)
459
459
  */
460
460
  export interface BookingFilters {
461
+ /** RecordBoard 通用搜索字段(单数),用于本地预约过滤 */
461
462
  keyword?: string;
463
+ /** `/shop/schedule/booking` 后端协议搜索字段(复数),OS Server 需兼容 */
464
+ keywords?: string;
462
465
  order_by?: string;
463
466
  order_payment_status?: string[];
464
467
  order_status?: string[];
@@ -97,9 +97,16 @@ function parseNumberRange(range) {
97
97
  // 供 matchOrder、matchBooking 复用,避免重复计算
98
98
  // ─────────────────────────────────────────────────────────────────
99
99
 
100
+ /** 预约列表搜索兼容前端通用 `keyword` 与后端协议 `keywords` 两种字段 */
101
+ function resolveBookingKeyword(f) {
102
+ var _f$keyword;
103
+ var keyword = (_f$keyword = f.keyword) !== null && _f$keyword !== void 0 ? _f$keyword : f.keywords;
104
+ return typeof keyword === 'string' ? keyword.trim() : '';
105
+ }
100
106
  function prepareFilters(f) {
101
107
  var _f$order_payment_stat, _f$order_status, _f$order_sales_channe, _f$payment_method, _f$appointment_status, _f$form_record_ids;
102
108
  var hasCustomerId = f.customer_id !== undefined && f.customer_id !== null;
109
+ var keyword = resolveBookingKeyword(f);
103
110
  return {
104
111
  orderPaymentStatusSet: (_f$order_payment_stat = f.order_payment_status) !== null && _f$order_payment_stat !== void 0 && _f$order_payment_stat.length ? new Set(f.order_payment_status) : null,
105
112
  orderStatusSet: (_f$order_status = f.order_status) !== null && _f$order_status !== void 0 && _f$order_status.length ? new Set(f.order_status) : null,
@@ -116,7 +123,7 @@ function prepareFilters(f) {
116
123
  updatedAtRange: parseDateRange(f.updated_at_between),
117
124
  numberRange: parseNumberRange(f.number_between),
118
125
  totalAmountRange: Array.isArray(f.total_amount_between) && f.total_amount_between.length === 2 ? f.total_amount_between : null,
119
- keywordLower: f.keyword ? f.keyword.toLowerCase() : '',
126
+ keywordLower: keyword ? keyword.toLowerCase() : '',
120
127
  afterExecutionTimeMs: function () {
121
128
  var raw = f.after_execution_time;
122
129
  if (raw === undefined || raw === null || raw === '') return null;
@@ -35,7 +35,6 @@ export interface SmallTicketProduct {
35
35
  original_price: string;
36
36
  total_original_price: string;
37
37
  extension_list: any[];
38
- discount_list?: any[];
39
38
  options?: Array<{
40
39
  name: string;
41
40
  num?: number;
@@ -213,22 +213,14 @@ function buildProducts(order, locale, productMap) {
213
213
  quantity: quantity,
214
214
  originalPrice: originalPrice
215
215
  });
216
- var discountList = normalizeProductDiscounts({
217
- product: product,
218
- locale: locale,
219
- currencySymbol: currencySymbol,
220
- quantity: quantity
221
- });
222
- return _objectSpread(_objectSpread(_objectSpread(_objectSpread({
216
+ return _objectSpread(_objectSpread(_objectSpread({
223
217
  product_title: productTitle,
224
218
  product_quantity: quantity,
225
219
  selling_price: formatMoney(sellingPrice, currencySymbol),
226
220
  original_price: formatMoney(originalPrice, currencySymbol),
227
221
  total_original_price: formatMoney(new Decimal(toMoneyNumber(originalPrice)).mul(quantity), currencySymbol),
228
222
  extension_list: extensionList
229
- }, discountList.length ? {
230
- discount_list: discountList
231
- } : {}), options.length ? {
223
+ }, options.length ? {
232
224
  options: options
233
225
  } : {}), resolvedVariant ? {
234
226
  variant: resolvedVariant
@@ -249,12 +241,10 @@ function normalizeProductDiscounts(params) {
249
241
  var title = resolveDiscountTitleWithPercent(discount, locale);
250
242
  var amount = (_ref8 = (_discount$amount = discount.amount) !== null && _discount$amount !== void 0 ? _discount$amount : discount.value) !== null && _ref8 !== void 0 ? _ref8 : discount.discount_amount;
251
243
  var formattedAmount = formatNegativeMoney(new Decimal(toMoneyNumber(amount)).mul(quantity), currencySymbol);
252
- return _objectSpread(_objectSpread({}, discount), {}, {
244
+ return {
253
245
  item: title,
254
- name: title,
255
- title: title,
256
246
  value: formattedAmount
257
- });
247
+ };
258
248
  });
259
249
  }
260
250
  function buildProductExtensionList(params) {
@@ -263,6 +253,12 @@ function buildProductExtensionList(params) {
263
253
  currencySymbol = params.currencySymbol,
264
254
  quantity = params.quantity,
265
255
  originalPrice = params.originalPrice;
256
+ var discountList = normalizeProductDiscounts({
257
+ product: product,
258
+ locale: locale,
259
+ currencySymbol: currencySymbol,
260
+ quantity: quantity
261
+ });
266
262
  var extensionList = [].concat(_toConsumableArray(buildProductOpenWeightRows({
267
263
  product: product,
268
264
  locale: locale,
@@ -275,7 +271,8 @@ function buildProductExtensionList(params) {
275
271
  }),
276
272
  value: ''
277
273
  }] : []));
278
- return extensionList.length ? extensionList : normalizeArray(product.extension_list);
274
+ var productExtensionList = extensionList.length ? extensionList : normalizeArray(product.extension_list);
275
+ return [].concat(_toConsumableArray(productExtensionList), _toConsumableArray(discountList));
279
276
  }
280
277
  function buildProductOpenWeightRows(params) {
281
278
  var _productSku$unit, _productSku$net_weigh, _productSku$unit_pric;
@@ -786,8 +786,8 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
786
786
  key: "loadSalesDetail",
787
787
  value: (function () {
788
788
  var _loadSalesDetail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(orderIdOrParams) {
789
- var _ref11, _params$orderId;
790
- var params, externalSaleNumber, lookup, res, message, currentTempOrder, record, sales;
789
+ var _ref11, _ref12, _ref13, _ref14, _params$orderId;
790
+ var params, externalSaleNumber, preloadedSalesDetail, lookup, loadedRecord, message, remoteRecord, currentTempOrder, record, sales;
791
791
  return _regeneratorRuntime().wrap(function _callee7$(_context7) {
792
792
  while (1) switch (_context7.prev = _context7.next) {
793
793
  case 0:
@@ -801,43 +801,55 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
801
801
  orderId: orderIdOrParams
802
802
  };
803
803
  externalSaleNumber = params.externalSaleNumber || params.external_sale_number;
804
- lookup = (_ref11 = (_params$orderId = params.orderId) !== null && _params$orderId !== void 0 ? _params$orderId : externalSaleNumber) !== null && _ref11 !== void 0 ? _ref11 : params.orderNumber;
805
- if (!(lookup === undefined || lookup === null || lookup === '')) {
806
- _context7.next = 7;
804
+ preloadedSalesDetail = params.preloadedSalesDetail;
805
+ lookup = (_ref11 = (_ref12 = (_ref13 = (_ref14 = (_params$orderId = params.orderId) !== null && _params$orderId !== void 0 ? _params$orderId : externalSaleNumber) !== null && _ref14 !== void 0 ? _ref14 : params.orderNumber) !== null && _ref13 !== void 0 ? _ref13 : preloadedSalesDetail === null || preloadedSalesDetail === void 0 ? void 0 : preloadedSalesDetail.order_id) !== null && _ref12 !== void 0 ? _ref12 : preloadedSalesDetail === null || preloadedSalesDetail === void 0 ? void 0 : preloadedSalesDetail.external_sale_number) !== null && _ref11 !== void 0 ? _ref11 : preloadedSalesDetail === null || preloadedSalesDetail === void 0 ? void 0 : preloadedSalesDetail.order_number;
806
+ if (!(!preloadedSalesDetail && (lookup === undefined || lookup === null || lookup === ''))) {
807
+ _context7.next = 8;
807
808
  break;
808
809
  }
809
810
  throw new Error('加载销售详情需要 orderId、externalSaleNumber 或 orderNumber');
810
- case 7:
811
- _context7.next = 9;
811
+ case 8:
812
+ if (!(preloadedSalesDetail !== null && preloadedSalesDetail !== void 0)) {
813
+ _context7.next = 12;
814
+ break;
815
+ }
816
+ _context7.t0 = preloadedSalesDetail;
817
+ _context7.next = 15;
818
+ break;
819
+ case 12:
820
+ _context7.next = 14;
812
821
  return this.store.order.getSalesOrderByLookup({
813
822
  lookup: lookup,
814
823
  forceRemote: params.forceRemote
815
824
  });
816
- case 9:
817
- res = _context7.sent;
818
- if (!(!res || res.code !== 200)) {
819
- _context7.next = 13;
825
+ case 14:
826
+ _context7.t0 = _context7.sent;
827
+ case 15:
828
+ loadedRecord = _context7.t0;
829
+ if (!(!preloadedSalesDetail && (!loadedRecord || loadedRecord.code !== 200))) {
830
+ _context7.next = 19;
820
831
  break;
821
832
  }
822
- message = res && (res.message || res.msg) || "\u52A0\u8F7D\u9500\u552E\u8BE6\u60C5\u5931\u8D25: ".concat(lookup);
833
+ message = loadedRecord && (loadedRecord.message || loadedRecord.msg) || "\u52A0\u8F7D\u9500\u552E\u8BE6\u60C5\u5931\u8D25: ".concat(lookup);
823
834
  throw new Error(message);
824
- case 13:
835
+ case 19:
836
+ remoteRecord = preloadedSalesDetail !== null && preloadedSalesDetail !== void 0 ? preloadedSalesDetail : loadedRecord.data;
825
837
  currentTempOrder = params.merge ? this.store.order.getTempOrder() : null;
826
- record = params.merge ? mergeSalesDetailRecordWithTempOrder(currentTempOrder, res.data) : res.data;
827
- _context7.next = 17;
838
+ record = params.merge ? mergeSalesDetailRecordWithTempOrder(currentTempOrder, remoteRecord) : remoteRecord;
839
+ _context7.next = 24;
828
840
  return this.store.order.hydrateTempOrderFromRecord(record, {
829
841
  recalcOnHydrate: false
830
842
  });
831
- case 17:
843
+ case 24:
832
844
  sales = _context7.sent;
833
845
  this.currentSalesDetail = sales;
834
- _context7.next = 21;
846
+ _context7.next = 28;
835
847
  return this.core.effects.emit("".concat(this.name, ":onSalesOrderLoaded"), {
836
848
  sales: sales
837
849
  });
838
- case 21:
850
+ case 28:
839
851
  return _context7.abrupt("return", sales);
840
- case 22:
852
+ case 29:
841
853
  case "end":
842
854
  return _context7.stop();
843
855
  }
@@ -2149,7 +2161,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2149
2161
  key: "syncPaymentsToOrder",
2150
2162
  value: function () {
2151
2163
  var _syncPaymentsToOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee23(params) {
2152
- var _ref12, _params$businessCode, _this$otherParams18, _this$otherParams19, _params$channel;
2164
+ var _ref15, _params$businessCode, _this$otherParams18, _this$otherParams19, _params$channel;
2153
2165
  var businessCode, channel, syncParams, syncState, payments, syncResult;
2154
2166
  return _regeneratorRuntime().wrap(function _callee23$(_context23) {
2155
2167
  while (1) switch (_context23.prev = _context23.next) {
@@ -2160,7 +2172,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2160
2172
  }
2161
2173
  throw new Error('order 模块未初始化');
2162
2174
  case 2:
2163
- businessCode = (_ref12 = (_params$businessCode = params.businessCode) !== null && _params$businessCode !== void 0 ? _params$businessCode : (_this$otherParams18 = this.otherParams) === null || _this$otherParams18 === void 0 ? void 0 : _this$otherParams18.businessCode) !== null && _ref12 !== void 0 ? _ref12 : (_this$otherParams19 = this.otherParams) === null || _this$otherParams19 === void 0 ? void 0 : _this$otherParams19.business_code;
2175
+ businessCode = (_ref15 = (_params$businessCode = params.businessCode) !== null && _params$businessCode !== void 0 ? _params$businessCode : (_this$otherParams18 = this.otherParams) === null || _this$otherParams18 === void 0 ? void 0 : _this$otherParams18.businessCode) !== null && _ref15 !== void 0 ? _ref15 : (_this$otherParams19 = this.otherParams) === null || _this$otherParams19 === void 0 ? void 0 : _this$otherParams19.business_code;
2164
2176
  channel = (_params$channel = params.channel) !== null && _params$channel !== void 0 ? _params$channel : this.getSubmitOrderSalesChannel();
2165
2177
  syncParams = _objectSpread(_objectSpread(_objectSpread({}, params), businessCode !== undefined ? {
2166
2178
  businessCode: businessCode
@@ -2247,6 +2259,8 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2247
2259
  var _this$otherParams20,
2248
2260
  _paymentRecord$paymen,
2249
2261
  _paymentRecord$create,
2262
+ _ref16,
2263
+ _paymentRecord$origin,
2250
2264
  _this7 = this;
2251
2265
  if (!this.store.order) throw new Error('order 模块未初始化');
2252
2266
  var paymentRecord = payment;
@@ -2268,7 +2282,11 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2268
2282
  var paymentTimestamp = dayjs().format('YYYY-MM-DD HH:mm:ss');
2269
2283
  var paymentTime = (_paymentRecord$paymen = paymentRecord.payment_time) !== null && _paymentRecord$paymen !== void 0 ? _paymentRecord$paymen : paymentTimestamp;
2270
2284
  var createdAt = (_paymentRecord$create = paymentRecord.created_at) !== null && _paymentRecord$create !== void 0 ? _paymentRecord$create : paymentTimestamp;
2271
- var payments = this.store.order.addOrderPayment(_objectSpread(_objectSpread({}, paymentRecord), {}, {
2285
+ var serviceCharge = paymentRecord.service_charge && _typeof(paymentRecord.service_charge) === 'object' ? paymentRecord.service_charge : null;
2286
+ var calculatedServiceFee = serviceCharge ? new Decimal((_ref16 = (_paymentRecord$origin = paymentRecord.origin_amount) !== null && _paymentRecord$origin !== void 0 ? _paymentRecord$origin : paymentRecord.amount) !== null && _ref16 !== void 0 ? _ref16 : 0).times(serviceCharge.percentage || 0).plus(serviceCharge.amount || 0).toDecimalPlaces(2).toFixed(2) : undefined;
2287
+ var payments = this.store.order.addOrderPayment(_objectSpread(_objectSpread(_objectSpread({}, paymentRecord), calculatedServiceFee !== undefined ? {
2288
+ service_fee: calculatedServiceFee
2289
+ } : {}), {}, {
2272
2290
  metadata: metadata,
2273
2291
  payment_time: paymentTime,
2274
2292
  created_at: createdAt
@@ -2376,7 +2394,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2376
2394
  key: "initWalletData",
2377
2395
  value: function () {
2378
2396
  var _initWalletData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee24(params) {
2379
- var _params$order_wait_pa, _ref13, _tempOrder$is_price_i;
2397
+ var _params$order_wait_pa, _ref17, _tempOrder$is_price_i;
2380
2398
  var snapshot, tempOrder, amount, walletBusinessData, result;
2381
2399
  return _regeneratorRuntime().wrap(function _callee24$(_context24) {
2382
2400
  while (1) switch (_context24.prev = _context24.next) {
@@ -2419,7 +2437,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2419
2437
  },
2420
2438
  products: this.getWalletProductList(),
2421
2439
  order_wait_pay_amount: (_params$order_wait_pa = params === null || params === void 0 ? void 0 : params.order_wait_pay_amount) !== null && _params$order_wait_pa !== void 0 ? _params$order_wait_pa : Number(amount.amountGap || 0),
2422
- is_price_include_tax: (_ref13 = (_tempOrder$is_price_i = tempOrder.is_price_include_tax) !== null && _tempOrder$is_price_i !== void 0 ? _tempOrder$is_price_i : this.otherParams.is_price_include_tax) !== null && _ref13 !== void 0 ? _ref13 : 1
2440
+ is_price_include_tax: (_ref17 = (_tempOrder$is_price_i = tempOrder.is_price_include_tax) !== null && _tempOrder$is_price_i !== void 0 ? _tempOrder$is_price_i : this.otherParams.is_price_include_tax) !== null && _ref17 !== void 0 ? _ref17 : 1
2423
2441
  }, snapshot.identity.orderId ? {
2424
2442
  payment_order_id: String(snapshot.identity.orderId)
2425
2443
  } : {});
@@ -2550,7 +2568,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2550
2568
  key: "sendCustomerPayLink",
2551
2569
  value: (function () {
2552
2570
  var _sendCustomerPayLink = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26(params) {
2553
- var orderIds, _ref14, _ref15, _submitResult$data$or, _submitResult$data, _submitResult$data2, submitResult, orderId;
2571
+ var orderIds, _ref18, _ref19, _submitResult$data$or, _submitResult$data, _submitResult$data2, submitResult, orderId;
2554
2572
  return _regeneratorRuntime().wrap(function _callee26$(_context26) {
2555
2573
  while (1) switch (_context26.prev = _context26.next) {
2556
2574
  case 0:
@@ -2571,7 +2589,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2571
2589
  });
2572
2590
  case 6:
2573
2591
  submitResult = _context26.sent;
2574
- orderId = (_ref14 = (_ref15 = (_submitResult$data$or = submitResult === null || submitResult === void 0 || (_submitResult$data = submitResult.data) === null || _submitResult$data === void 0 ? void 0 : _submitResult$data.order_id) !== null && _submitResult$data$or !== void 0 ? _submitResult$data$or : submitResult === null || submitResult === void 0 ? void 0 : submitResult.order_id) !== null && _ref15 !== void 0 ? _ref15 : submitResult === null || submitResult === void 0 || (_submitResult$data2 = submitResult.data) === null || _submitResult$data2 === void 0 ? void 0 : _submitResult$data2.id) !== null && _ref14 !== void 0 ? _ref14 : submitResult === null || submitResult === void 0 ? void 0 : submitResult.id;
2592
+ orderId = (_ref18 = (_ref19 = (_submitResult$data$or = submitResult === null || submitResult === void 0 || (_submitResult$data = submitResult.data) === null || _submitResult$data === void 0 ? void 0 : _submitResult$data.order_id) !== null && _submitResult$data$or !== void 0 ? _submitResult$data$or : submitResult === null || submitResult === void 0 ? void 0 : submitResult.order_id) !== null && _ref19 !== void 0 ? _ref19 : submitResult === null || submitResult === void 0 || (_submitResult$data2 = submitResult.data) === null || _submitResult$data2 === void 0 ? void 0 : _submitResult$data2.id) !== null && _ref18 !== void 0 ? _ref18 : submitResult === null || submitResult === void 0 ? void 0 : submitResult.id;
2575
2593
  if (orderId) {
2576
2594
  _context26.next = 10;
2577
2595
  break;
@@ -2997,14 +3015,14 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
2997
3015
  value: function () {
2998
3016
  var _setOtherParams = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee36(params) {
2999
3017
  var _this$otherParams22;
3000
- var _ref16,
3001
- _ref16$cover,
3018
+ var _ref20,
3019
+ _ref20$cover,
3002
3020
  cover,
3003
3021
  _args36 = arguments;
3004
3022
  return _regeneratorRuntime().wrap(function _callee36$(_context36) {
3005
3023
  while (1) switch (_context36.prev = _context36.next) {
3006
3024
  case 0:
3007
- _ref16 = _args36.length > 1 && _args36[1] !== undefined ? _args36[1] : {}, _ref16$cover = _ref16.cover, cover = _ref16$cover === void 0 ? false : _ref16$cover;
3025
+ _ref20 = _args36.length > 1 && _args36[1] !== undefined ? _args36[1] : {}, _ref20$cover = _ref20.cover, cover = _ref20$cover === void 0 ? false : _ref20$cover;
3008
3026
  if (cover) {
3009
3027
  this.otherParams = _objectSpread({}, params);
3010
3028
  } else {
@@ -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 | 2 | 1 | 6 | 3 | 4 | 5;
314
+ weekNum: 0 | 2 | 1 | 5 | 3 | 4 | 6;
315
315
  }[]>;
316
316
  submitTimeSlot(timeSlots: TimeSliceItem): void;
317
317
  private getScheduleDataByIds;
@@ -441,7 +441,19 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
441
441
  * 加车两阶段主决策(规格弹窗 / 资源编辑 / 直接加车)。
442
442
  * 与 ticketBooking `handleSelectProduct` + `handleBooking4Service` 等价。
443
443
  */
444
- decideAddProduct(item: any, options?: Partial<AddProductDecideContext>): import("./utils/addProductDecision").AddProductDecision;
444
+ decideAddProduct(item: any, options?: Partial<AddProductDecideContext>): {
445
+ action: "reloadCatalog";
446
+ } | {
447
+ action: "add";
448
+ cacheItem: any;
449
+ } | {
450
+ action: "requiresDetail";
451
+ payload: AddProductRequiresDetailPayload;
452
+ } | {
453
+ action: "requiresBookingEdit";
454
+ cacheItem: any;
455
+ payload: import("./utils/addProductDecision").AddProductRequiresBookingEditPayload;
456
+ };
445
457
  /** 规格弹窗 callback 后的第二段决策。 */
446
458
  decideAfterDetail(cacheItem: any, options?: Partial<AddProductDecideContext>): import("./utils/addProductDecision").AddProductDecision;
447
459
  /**