@pisell/pisellos 2.2.309 → 2.2.311

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 (122) hide show
  1. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  2. package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +2 -0
  3. package/dist/model/strategy/adapter/walletPass/evaluator.js +4 -2
  4. package/dist/modules/BookingContext/index.js +4 -4
  5. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +58 -19
  6. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +24 -12
  7. package/dist/modules/Customer/index.js +6 -3
  8. package/dist/modules/Customer/types.d.ts +2 -0
  9. package/dist/modules/Discount/availability.d.ts +7 -0
  10. package/dist/modules/Discount/availability.js +49 -0
  11. package/dist/modules/Discount/entitlementPass.d.ts +34 -0
  12. package/dist/modules/Discount/entitlementPass.js +147 -0
  13. package/dist/modules/Discount/index.d.ts +2 -2
  14. package/dist/modules/Discount/index.js +37 -151
  15. package/dist/modules/Discount/types.d.ts +36 -5
  16. package/dist/modules/OpenData/index.d.ts +1 -1
  17. package/dist/modules/OpenData/index.js +21 -12
  18. package/dist/modules/Order/index.d.ts +32 -4
  19. package/dist/modules/Order/index.js +733 -373
  20. package/dist/modules/Order/types.d.ts +17 -0
  21. package/dist/modules/Order/utils/orderCollectionIdentity.js +16 -12
  22. package/dist/modules/Order/utils.d.ts +19 -5
  23. package/dist/modules/Order/utils.js +306 -86
  24. package/dist/modules/Payment/index.d.ts +0 -5
  25. package/dist/modules/Payment/index.js +35 -85
  26. package/dist/modules/Payment/types.d.ts +21 -1
  27. package/dist/modules/Payment/types.js +2 -0
  28. package/dist/modules/Payment/walletpass.d.ts +1 -1
  29. package/dist/modules/Payment/walletpass.js +80 -47
  30. package/dist/modules/ProductList/index.js +18 -5
  31. package/dist/modules/Rules/index.d.ts +2 -2
  32. package/dist/modules/Rules/index.js +480 -186
  33. package/dist/modules/Rules/types.d.ts +4 -0
  34. package/dist/server/index.js +8 -5
  35. package/dist/server/modules/floor-plan/index.js +34 -3
  36. package/dist/server/modules/order/index.js +6 -0
  37. package/dist/server/modules/order/types.d.ts +12 -0
  38. package/dist/server/modules/payment/index.d.ts +25 -6
  39. package/dist/server/modules/payment/index.js +660 -133
  40. package/dist/server/utils/small-ticket.d.ts +8 -5
  41. package/dist/server/utils/small-ticket.js +1269 -199
  42. package/dist/solution/BaseSales/index.d.ts +11 -2
  43. package/dist/solution/BaseSales/index.js +1463 -1173
  44. package/dist/solution/BaseSales/types.d.ts +7 -3
  45. package/dist/solution/BaseSales/utils/cartPromotion.js +141 -126
  46. package/dist/solution/BookingTicket/index.d.ts +11 -2
  47. package/dist/solution/BookingTicket/index.js +663 -542
  48. package/dist/solution/BookingTicket/types.d.ts +5 -1
  49. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +2 -0
  50. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +338 -147
  51. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +8 -4
  52. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +6 -0
  53. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +19 -6
  54. package/dist/solution/ShopDiscount/index.d.ts +2 -0
  55. package/dist/solution/ShopDiscount/index.js +99 -42
  56. package/dist/solution/ShopDiscount/utils.d.ts +4 -2
  57. package/dist/solution/ShopDiscount/utils.js +43 -23
  58. package/dist/solution/UnifiedBookingSales/index.d.ts +2 -2
  59. package/dist/solution/UnifiedBookingSales/index.js +5 -5
  60. package/dist/utils/os-private-payload.d.ts +5 -0
  61. package/dist/utils/os-private-payload.js +17 -0
  62. package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +2 -0
  63. package/lib/model/strategy/adapter/walletPass/evaluator.js +2 -0
  64. package/lib/modules/BookingContext/index.js +3 -3
  65. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +35 -6
  66. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +13 -6
  67. package/lib/modules/Customer/index.js +5 -1
  68. package/lib/modules/Customer/types.d.ts +2 -0
  69. package/lib/modules/Discount/availability.d.ts +7 -0
  70. package/lib/modules/Discount/availability.js +43 -0
  71. package/lib/modules/Discount/entitlementPass.d.ts +34 -0
  72. package/lib/modules/Discount/entitlementPass.js +141 -0
  73. package/lib/modules/Discount/index.d.ts +2 -2
  74. package/lib/modules/Discount/index.js +23 -129
  75. package/lib/modules/Discount/types.d.ts +36 -5
  76. package/lib/modules/OpenData/index.d.ts +1 -1
  77. package/lib/modules/OpenData/index.js +11 -2
  78. package/lib/modules/Order/index.d.ts +32 -4
  79. package/lib/modules/Order/index.js +341 -71
  80. package/lib/modules/Order/types.d.ts +17 -0
  81. package/lib/modules/Order/utils/orderCollectionIdentity.js +14 -11
  82. package/lib/modules/Order/utils.d.ts +19 -5
  83. package/lib/modules/Order/utils.js +215 -13
  84. package/lib/modules/Payment/index.d.ts +0 -5
  85. package/lib/modules/Payment/index.js +3 -28
  86. package/lib/modules/Payment/types.d.ts +21 -1
  87. package/lib/modules/Payment/types.js +1 -0
  88. package/lib/modules/Payment/walletpass.d.ts +1 -1
  89. package/lib/modules/Payment/walletpass.js +29 -9
  90. package/lib/modules/ProductList/index.js +14 -1
  91. package/lib/modules/Rules/index.d.ts +2 -2
  92. package/lib/modules/Rules/index.js +357 -110
  93. package/lib/modules/Rules/types.d.ts +4 -0
  94. package/lib/server/index.js +8 -5
  95. package/lib/server/modules/floor-plan/index.js +29 -1
  96. package/lib/server/modules/order/index.js +6 -0
  97. package/lib/server/modules/order/types.d.ts +12 -0
  98. package/lib/server/modules/payment/index.d.ts +25 -6
  99. package/lib/server/modules/payment/index.js +350 -78
  100. package/lib/server/utils/small-ticket.d.ts +8 -5
  101. package/lib/server/utils/small-ticket.js +1009 -121
  102. package/lib/solution/BaseSales/index.d.ts +11 -2
  103. package/lib/solution/BaseSales/index.js +164 -30
  104. package/lib/solution/BaseSales/types.d.ts +7 -3
  105. package/lib/solution/BaseSales/utils/cartPromotion.js +12 -4
  106. package/lib/solution/BookingTicket/index.d.ts +11 -2
  107. package/lib/solution/BookingTicket/index.js +103 -41
  108. package/lib/solution/BookingTicket/types.d.ts +5 -1
  109. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +2 -0
  110. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +174 -42
  111. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +8 -4
  112. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +6 -0
  113. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +11 -3
  114. package/lib/solution/ShopDiscount/index.d.ts +2 -0
  115. package/lib/solution/ShopDiscount/index.js +55 -9
  116. package/lib/solution/ShopDiscount/utils.d.ts +4 -2
  117. package/lib/solution/ShopDiscount/utils.js +42 -25
  118. package/lib/solution/UnifiedBookingSales/index.d.ts +2 -2
  119. package/lib/solution/UnifiedBookingSales/index.js +5 -5
  120. package/lib/utils/os-private-payload.d.ts +5 -0
  121. package/lib/utils/os-private-payload.js +22 -0
  122. package/package.json +1 -1
@@ -29,6 +29,10 @@ export interface RulesCalcDiscountOptions {
29
29
  discountId?: number;
30
30
  selectedList?: SetDiscountSelectedParams[];
31
31
  scan?: boolean;
32
+ /** 本次扫码优先使用的次卡实例;普通重算不传,继续保留商品行当前选择。 */
33
+ preferredEntitlementPassIds?: number[];
34
+ /** 普通重算保留商品行已应用的次卡;最优选择传 false 恢复自动排序。 */
35
+ preserveEntitlementSelection?: boolean;
32
36
  /** Change time 重报价目标行:允许已选编辑态折扣卡重新应用到这些 booking 商品。 */
33
37
  reapplyBookingDiscountProductUids?: string[];
34
38
  /** Reweighed order lines only: reapply selected wallet discounts against their new amount. */
@@ -29,6 +29,7 @@ var _BaseSales = require("../solution/BaseSales");
29
29
  var _paymentUtils = require("../modules/Order/payment-utils");
30
30
  var _salesNotes = require("../modules/Order/salesNotes");
31
31
  var _orderCollectionIdentity = require("../modules/Order/utils/orderCollectionIdentity");
32
+ var _osPrivatePayload = require("../utils/os-private-payload");
32
33
  var _OpenData = require("../modules/OpenData");
33
34
  var _modules = require("./modules");
34
35
  Object.keys(_modules).forEach(function (key) {
@@ -643,7 +644,7 @@ class Server {
643
644
  } = params;
644
645
  const normalizedData = await this.normalizeCheckoutSubmitData(params.data, title);
645
646
  const numberedData = await this.ensureCheckoutOrderNumbers(normalizedData, title);
646
- const checkoutData = this.normalizeCheckoutCollections(this.applyCheckoutFulfillmentBuzzer(numberedData, title));
647
+ const checkoutData = this.normalizeCheckoutCollections((0, _osPrivatePayload.stripOsPrivatePayloadFields)(this.applyCheckoutFulfillmentBuzzer(numberedData, title)));
647
648
  const remoteCheckoutData = this.buildRemoteCheckoutData(checkoutData, title);
648
649
  const deviceHeaders = await this.buildCheckoutDeviceHeaders(title);
649
650
  if (!this.app?.request?.post) {
@@ -715,11 +716,9 @@ class Server {
715
716
  return next;
716
717
  }
717
718
  buildRemoteCheckoutData(data, title) {
718
- const next = (0, _lodashEs.cloneDeep)(this.omitCheckoutSyncMode(data));
719
+ const next = (0, _osPrivatePayload.stripOsPrivatePayloadFields)(this.omitCheckoutSyncMode(data));
719
720
  if (!next || typeof next !== 'object') return next;
720
721
  const record = next;
721
- delete record[OS_FULFILLMENT_REF_MODE_FIELD];
722
- delete record[OS_INVOICE_LAYOUT_CONFIG_FIELD];
723
722
  this.applyKioskCheckoutOperator(record);
724
723
  if (!Array.isArray(record.payments)) return next;
725
724
  const originalPayments = record.payments;
@@ -1297,6 +1296,10 @@ class Server {
1297
1296
  method: 'get',
1298
1297
  path: '/shop/pay/custom-payment/all',
1299
1298
  handler: this.handlePaymentMethods.bind(this)
1299
+ }, {
1300
+ method: 'get',
1301
+ path: '/pay/custom-payment/all',
1302
+ handler: this.handlePaymentMethods.bind(this)
1300
1303
  }, {
1301
1304
  method: 'get',
1302
1305
  path: '/shop/quotation/available',
@@ -4330,7 +4333,7 @@ class Server {
4330
4333
  }
4331
4334
  const normalizedData = await this.normalizeCheckoutSubmitData(data, title);
4332
4335
  const numberedData = await this.ensureCheckoutOrderNumbers(normalizedData, title);
4333
- const checkoutData = this.normalizeCheckoutCollections(this.applyCheckoutFulfillmentBuzzer(numberedData, title));
4336
+ const checkoutData = this.normalizeCheckoutCollections((0, _osPrivatePayload.stripOsPrivatePayloadFields)(this.applyCheckoutFulfillmentBuzzer(numberedData, title)));
4334
4337
  const pendingResult = await this.handlePendingSyncCheckoutOrder({
4335
4338
  backendPath,
4336
4339
  data: checkoutData,
@@ -9,6 +9,30 @@ var _types = require("./types");
9
9
  const FLOOR_PLAN_SYNC_DEBOUNCE_MS = 3000;
10
10
  const FLOOR_PLAN_STORE_NAME = 'floor_plans';
11
11
 
12
+ /**
13
+ * Request failures can be plain response objects (rather than Error instances).
14
+ * Keep diagnostics useful without allowing the UI bridge to stringify them as
15
+ * "[object Object]".
16
+ */
17
+ function getRequestErrorInfo(error) {
18
+ if (error instanceof Error && error.message) return {
19
+ message: error.message
20
+ };
21
+ if (typeof error === 'string' && error) return {
22
+ message: error
23
+ };
24
+ const value = error;
25
+ const response = value?.resData?.res ?? value?.response?.data ?? value?.data ?? value;
26
+ const candidates = [value?.message, value?.error, response?.message, response?.error];
27
+ const message = candidates.find(candidate => typeof candidate === 'string' && candidate.trim() !== '');
28
+ return {
29
+ message: message || '平面图加载失败(未提供错误详情)',
30
+ code: response?.code ?? value?.code,
31
+ status: response?.status ?? value?.status,
32
+ httpStatus: value?.response?.status
33
+ };
34
+ }
35
+
12
36
  /**
13
37
  * 平面图模块:预加载列表、pubsub 同步、供 OS Server 路由读本地 store
14
38
  */
@@ -144,8 +168,12 @@ class FloorPlanModule extends _BaseModule.BaseModule {
144
168
  const list = Array.isArray(raw) ? raw : [];
145
169
  return list;
146
170
  } catch (e) {
171
+ const errorInfo = getRequestErrorInfo(e);
147
172
  this.logWarning('loadListFromServer 失败', {
148
- error: e instanceof Error ? e.message : String(e)
173
+ error: errorInfo.message,
174
+ code: errorInfo.code,
175
+ status: errorInfo.status,
176
+ httpStatus: errorInfo.httpStatus
149
177
  });
150
178
  return [];
151
179
  }
@@ -2036,6 +2036,12 @@ class OrderModule extends _BaseModule.BaseModule {
2036
2036
  mergedRecord[field] = (0, _lodashEs.cloneDeep)(incomingRecord[field]);
2037
2037
  }
2038
2038
 
2039
+ // order_meta_list 是一次性生成的完整业务快照。incoming 明确携带时
2040
+ // 必须整体覆盖(包括 null / 空对象 / 空数组);省略时才保留 existing。
2041
+ if (Object.prototype.hasOwnProperty.call(incomingRecord, 'order_meta_list')) {
2042
+ mergedRecord.order_meta_list = (0, _lodashEs.cloneDeep)(incomingRecord.order_meta_list);
2043
+ }
2044
+
2039
2045
  // 子项数组遵循完整快照语义:incoming 自有且为数组(包括 [])时权威替换;
2040
2046
  // 字段缺席或不是数组时视为稀疏 patch,继续保留 existing。
2041
2047
  for (const field of ORDER_AUTHORITATIVE_COLLECTION_FIELDS) {
@@ -36,6 +36,8 @@ export type OrderSurchargeType = string;
36
36
  export interface OrderProductDiscountMetadata {
37
37
  /** 设备端本地唯一标识,用于与服务端记录对齐 */
38
38
  unique_identification_number?: string;
39
+ /** 月卡扣除本单新增使用后的剩余次数;不限次数时为 null。 */
40
+ balance?: number | null;
39
41
  [key: string]: unknown;
40
42
  }
41
43
  /**
@@ -452,10 +454,20 @@ export interface OrderData {
452
454
  id: number | string;
453
455
  tag: 'point_card';
454
456
  product_id?: number | string;
457
+ code?: string;
455
458
  product_name: string;
456
459
  par_value: string;
457
460
  used_par_value: string;
458
461
  }>;
462
+ virtual_currency_snapshot?: Array<{
463
+ id: number | string;
464
+ tag: 'virtual_currency';
465
+ product_id?: number | string;
466
+ product_name: string;
467
+ par_value: string;
468
+ used_par_value: string;
469
+ name: Record<string, string>;
470
+ }>;
459
471
  };
460
472
  /**
461
473
  * 金额汇总(仅输出)。
@@ -7,22 +7,41 @@ export declare class PaymentServerModule extends BaseModule implements Module {
7
7
  private request;
8
8
  private app;
9
9
  private logger;
10
+ private dbManager;
10
11
  private store;
11
- private payMethodMemoryCache;
12
- private payMethodListInFlight;
12
+ private paymentDataSource;
13
+ private initialLoadInFlight;
14
+ private refreshInFlight;
15
+ private hasLoadedPayMethods;
16
+ private hasEmittedLoaded;
17
+ private syncTimer;
18
+ private pendingMessageUuids;
19
+ private queuedTrailingRefresh;
20
+ private trailingMessageUuids;
13
21
  constructor(name?: string, version?: string);
14
22
  initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
23
+ preload(): Promise<void>;
15
24
  getPayMethodListAsync(options?: {
16
25
  shouldFilter?: boolean;
17
26
  }): Promise<PaymentMethod[]>;
18
- clearPayMethodCache(): void;
19
- private loadPayMethodListAsync;
27
+ private ensureInitialPayMethods;
28
+ private initPaymentDataSource;
29
+ private setupPaymentMethodSync;
30
+ private schedulePaymentMethodRefresh;
31
+ private refreshPayMethodsSingleFlight;
32
+ private performRemoteRefresh;
20
33
  private fetchRemotePayMethods;
21
- private shouldFilterPayMethods;
34
+ private loadPayMethodsFromSQLite;
35
+ private replacePayMethodsInSQLite;
36
+ private resolveCurrentShopScope;
37
+ private stripSnapshotFields;
38
+ private arePayMethodsEqual;
22
39
  private resolvePayMethods;
23
40
  private filterPayMethods;
24
- private setPayMethodCache;
41
+ private setPayMethodMirror;
42
+ private getErrorMessage;
25
43
  private logInfo;
26
44
  private logWarning;
27
45
  private logError;
46
+ destroy(): void;
28
47
  }