@pisell/pisellos 2.2.301 → 2.2.303

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 (152) hide show
  1. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
  2. package/dist/model/strategy/adapter/dataVariant/evaluator.js +287 -101
  3. package/dist/model/strategy/adapter/dataVariant/type.d.ts +25 -0
  4. package/dist/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  5. package/dist/model/strategy/adapter/itemRule/adapter.js +135 -35
  6. package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  7. package/dist/model/strategy/adapter/itemRule/evaluator.js +25 -1
  8. package/dist/model/strategy/adapter/itemRule/type.d.ts +44 -0
  9. package/dist/model/strategy/adapter/itemRule/type.js +19 -1
  10. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +10 -7
  11. package/dist/modules/Discount/index.d.ts +2 -0
  12. package/dist/modules/Discount/index.js +41 -5
  13. package/dist/modules/Discount/types.d.ts +21 -0
  14. package/dist/modules/OpenData/index.d.ts +15 -2
  15. package/dist/modules/OpenData/index.js +307 -19
  16. package/dist/modules/OpenData/types.d.ts +55 -0
  17. package/dist/modules/OpenData/types.js +7 -1
  18. package/dist/modules/OpenData/utils.d.ts +21 -1
  19. package/dist/modules/OpenData/utils.js +138 -0
  20. package/dist/modules/Order/index.d.ts +50 -7
  21. package/dist/modules/Order/index.js +1690 -815
  22. package/dist/modules/Order/salesNotes.d.ts +31 -0
  23. package/dist/modules/Order/salesNotes.js +492 -0
  24. package/dist/modules/Order/types.d.ts +117 -10
  25. package/dist/modules/Order/types.js +6 -1
  26. package/dist/modules/Order/utils/virtualSettlement.d.ts +63 -0
  27. package/dist/modules/Order/utils/virtualSettlement.js +284 -0
  28. package/dist/modules/Order/utils.d.ts +5 -1
  29. package/dist/modules/Order/utils.js +138 -33
  30. package/dist/modules/Payment/walletpass.js +20 -21
  31. package/dist/modules/Product/types.d.ts +23 -0
  32. package/dist/modules/ProductList/index.d.ts +2 -1
  33. package/dist/modules/ProductList/index.js +100 -20
  34. package/dist/modules/ProductList/types.d.ts +10 -0
  35. package/dist/modules/Rules/index.d.ts +5 -0
  36. package/dist/modules/Rules/index.js +30 -14
  37. package/dist/modules/SalesSummary/index.d.ts +1 -0
  38. package/dist/modules/SalesSummary/index.js +4 -3
  39. package/dist/modules/SalesSummary/types.d.ts +1 -0
  40. package/dist/modules/SalesSummary/utils.d.ts +1 -0
  41. package/dist/modules/SalesSummary/utils.js +21 -1
  42. package/dist/plugins/request.d.ts +2 -1
  43. package/dist/plugins/request.js +4 -2
  44. package/dist/server/index.d.ts +21 -0
  45. package/dist/server/index.js +1774 -1285
  46. package/dist/server/modules/order/types.d.ts +50 -0
  47. package/dist/server/modules/order/types.js +2 -0
  48. package/dist/server/utils/small-ticket.d.ts +4 -1
  49. package/dist/server/utils/small-ticket.js +461 -96
  50. package/dist/solution/BaseSales/index.d.ts +26 -3
  51. package/dist/solution/BaseSales/index.js +1492 -873
  52. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +2 -0
  53. package/dist/solution/BaseSales/utils/parseSalesResponse.js +1 -1
  54. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  55. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +72 -9
  56. package/dist/solution/BookingByStep/index.d.ts +1 -1
  57. package/dist/solution/BookingTicket/index.d.ts +8 -3
  58. package/dist/solution/BookingTicket/index.js +558 -443
  59. package/dist/solution/BookingTicket/utils/addProductDecision.js +2 -1
  60. package/dist/solution/BookingTicket/utils/orderCustomer.js +3 -2
  61. package/dist/solution/RegisterAndLogin/config.d.ts +9 -3
  62. package/dist/solution/RegisterAndLogin/config.js +95 -40
  63. package/dist/solution/RegisterAndLogin/index.js +4 -1
  64. package/dist/solution/Sales/index.d.ts +16 -1
  65. package/dist/solution/Sales/index.js +338 -63
  66. package/dist/solution/Sales/types.d.ts +10 -0
  67. package/dist/solution/ScanOrder/index.d.ts +1 -0
  68. package/dist/solution/ScanOrder/index.js +31 -27
  69. package/dist/solution/ScanOrder/utils.d.ts +1 -0
  70. package/dist/solution/ScanOrder/utils.js +2 -0
  71. package/dist/solution/UnifiedBookingSales/index.d.ts +20 -6
  72. package/dist/solution/UnifiedBookingSales/index.js +874 -527
  73. package/dist/solution/UnifiedBookingSales/types.d.ts +21 -2
  74. package/dist/solution/VenueBooking/index.d.ts +1 -0
  75. package/dist/solution/VenueBooking/index.js +8 -4
  76. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
  77. package/lib/model/strategy/adapter/dataVariant/evaluator.js +137 -6
  78. package/lib/model/strategy/adapter/dataVariant/type.d.ts +25 -0
  79. package/lib/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  80. package/lib/model/strategy/adapter/itemRule/adapter.js +73 -4
  81. package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  82. package/lib/model/strategy/adapter/itemRule/evaluator.js +23 -1
  83. package/lib/model/strategy/adapter/itemRule/type.d.ts +44 -0
  84. package/lib/model/strategy/adapter/itemRule/type.js +19 -1
  85. package/lib/model/strategy/adapter/promotion/index.js +1 -46
  86. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +4 -0
  87. package/lib/modules/Discount/index.d.ts +2 -0
  88. package/lib/modules/Discount/index.js +34 -2
  89. package/lib/modules/Discount/types.d.ts +21 -0
  90. package/lib/modules/OpenData/index.d.ts +15 -2
  91. package/lib/modules/OpenData/index.js +230 -3
  92. package/lib/modules/OpenData/types.d.ts +55 -0
  93. package/lib/modules/OpenData/types.js +9 -1
  94. package/lib/modules/OpenData/utils.d.ts +21 -1
  95. package/lib/modules/OpenData/utils.js +126 -0
  96. package/lib/modules/Order/index.d.ts +50 -7
  97. package/lib/modules/Order/index.js +704 -64
  98. package/lib/modules/Order/salesNotes.d.ts +31 -0
  99. package/lib/modules/Order/salesNotes.js +382 -0
  100. package/lib/modules/Order/types.d.ts +117 -10
  101. package/lib/modules/Order/types.js +5 -1
  102. package/lib/modules/Order/utils/virtualSettlement.d.ts +63 -0
  103. package/lib/modules/Order/utils/virtualSettlement.js +262 -0
  104. package/lib/modules/Order/utils.d.ts +5 -1
  105. package/lib/modules/Order/utils.js +127 -21
  106. package/lib/modules/Payment/walletpass.js +14 -11
  107. package/lib/modules/Product/types.d.ts +23 -0
  108. package/lib/modules/ProductList/index.d.ts +2 -1
  109. package/lib/modules/ProductList/index.js +47 -2
  110. package/lib/modules/ProductList/types.d.ts +10 -0
  111. package/lib/modules/Rules/index.d.ts +5 -0
  112. package/lib/modules/Rules/index.js +22 -12
  113. package/lib/modules/SalesSummary/index.d.ts +1 -0
  114. package/lib/modules/SalesSummary/index.js +4 -2
  115. package/lib/modules/SalesSummary/types.d.ts +1 -0
  116. package/lib/modules/SalesSummary/utils.d.ts +1 -0
  117. package/lib/modules/SalesSummary/utils.js +17 -1
  118. package/lib/plugins/request.d.ts +2 -1
  119. package/lib/plugins/request.js +3 -2
  120. package/lib/server/index.d.ts +21 -0
  121. package/lib/server/index.js +492 -108
  122. package/lib/server/modules/order/types.d.ts +50 -0
  123. package/lib/server/modules/order/types.js +1 -0
  124. package/lib/server/utils/small-ticket.d.ts +4 -1
  125. package/lib/server/utils/small-ticket.js +427 -72
  126. package/lib/solution/BaseSales/index.d.ts +26 -3
  127. package/lib/solution/BaseSales/index.js +439 -30
  128. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +2 -0
  129. package/lib/solution/BaseSales/utils/parseSalesResponse.js +1 -1
  130. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  131. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +38 -0
  132. package/lib/solution/BookingByStep/index.d.ts +1 -1
  133. package/lib/solution/BookingTicket/index.d.ts +8 -3
  134. package/lib/solution/BookingTicket/index.js +60 -15
  135. package/lib/solution/BookingTicket/utils/addProductDecision.js +1 -0
  136. package/lib/solution/BookingTicket/utils/orderCustomer.js +2 -1
  137. package/lib/solution/RegisterAndLogin/config.d.ts +9 -3
  138. package/lib/solution/RegisterAndLogin/config.js +49 -8
  139. package/lib/solution/RegisterAndLogin/index.js +4 -1
  140. package/lib/solution/Sales/index.d.ts +16 -1
  141. package/lib/solution/Sales/index.js +168 -1
  142. package/lib/solution/Sales/types.d.ts +10 -0
  143. package/lib/solution/ScanOrder/index.d.ts +1 -0
  144. package/lib/solution/ScanOrder/index.js +5 -1
  145. package/lib/solution/ScanOrder/utils.d.ts +1 -0
  146. package/lib/solution/ScanOrder/utils.js +1 -0
  147. package/lib/solution/UnifiedBookingSales/index.d.ts +20 -6
  148. package/lib/solution/UnifiedBookingSales/index.js +169 -16
  149. package/lib/solution/UnifiedBookingSales/types.d.ts +21 -2
  150. package/lib/solution/VenueBooking/index.d.ts +1 -0
  151. package/lib/solution/VenueBooking/index.js +5 -1
  152. package/package.json +1 -1
@@ -40,7 +40,7 @@ let OrderHooks = exports.OrderHooks = /*#__PURE__*/function (OrderHooks) {
40
40
  */
41
41
  /** 未满足的促销策略(购物车底部 alert 渲染源) */
42
42
  /** 上一次 applyPromotion 计算出的赠品操作(仅供调试/读取使用) */
43
- /** onPromotionApplied 事件 payload */
43
+ /** onPromotionApplied 稳定态事件 payload(促销、折扣与 summary 均已完成)。 */
44
44
  /**
45
45
  * tempOrder 上的下单客户协议字段视图。
46
46
  * 这些字段会随订单提交到后端。
@@ -59,6 +59,10 @@ let OrderHooks = exports.OrderHooks = /*#__PURE__*/function (OrderHooks) {
59
59
  * - `source`:缺省表示真实业务变更;`detailHydrate` 仅表示打开详情时快照已就绪
60
60
  * 清空时整个 payload 为 null。
61
61
  */
62
+ /**
63
+ * Sales Notes 乐观写入前的可恢复快照。
64
+ * 该对象应视为 opaque token,只用于原样传回 restoreSalesNotesMutationSnapshot。
65
+ */
62
66
  /**
63
67
  * 添加商品行时的顺序控制。
64
68
  * 默认追加到 products 尾部;预约数量同步可插入到既有预约组的最新行之后,
@@ -0,0 +1,63 @@
1
+ import type { OrderProduct, OrderTempOrder } from '../types';
2
+ export interface SelectedSettlementSnapshot extends Record<string, any> {
3
+ settlement_type: 'legal_currency' | 'virtual_currency';
4
+ currency_product_id?: number;
5
+ price: string | number;
6
+ unit_label?: any;
7
+ symbol?: any;
8
+ amount_format?: string;
9
+ }
10
+ export interface LegalCurrencySnapshot {
11
+ currency_code: string;
12
+ currency_symbol: string;
13
+ currency_format: string;
14
+ }
15
+ export interface CurrencyDisplaySnapshot {
16
+ amount_format: string;
17
+ symbol: unknown;
18
+ unit_label: unknown;
19
+ }
20
+ export declare function buildCurrencyDisplaySnapshot(snapshot: Pick<SelectedSettlementSnapshot, 'amount_format' | 'symbol' | 'unit_label'>): CurrencyDisplaySnapshot;
21
+ export declare function resolveSettlementDisplayValue(value: unknown): string;
22
+ export declare class OrderSettlementConflictError extends Error {
23
+ readonly currentSettlementKey: string;
24
+ readonly incomingSettlementKey: string;
25
+ readonly code = "ORDER_SETTLEMENT_CONFLICT";
26
+ constructor(currentSettlementKey: string, incomingSettlementKey: string);
27
+ }
28
+ export declare class VirtualCurrencyAssetNotFoundError extends Error {
29
+ readonly currencyProductId: number;
30
+ readonly code = "VIRTUAL_CURRENCY_ASSET_NOT_FOUND";
31
+ constructor(currencyProductId: number);
32
+ }
33
+ export declare class VirtualCurrencyBalanceError extends Error {
34
+ readonly balance: string;
35
+ readonly requiredAmount: string;
36
+ readonly code = "VIRTUAL_CURRENCY_BALANCE_INSUFFICIENT";
37
+ constructor(balance: string, requiredAmount: string);
38
+ }
39
+ export declare function getSelectedSettlementSnapshot(product: Partial<OrderProduct> | null | undefined): SelectedSettlementSnapshot | null;
40
+ export declare function getTempOrderSettlementSnapshot(tempOrder: OrderTempOrder | null | undefined): SelectedSettlementSnapshot | null;
41
+ export declare function isVirtualSettlementProduct(product: Partial<OrderProduct> | null | undefined): boolean;
42
+ export declare function getSettlementKey(snapshot: SelectedSettlementSnapshot | null | undefined): string | null;
43
+ export declare function getTempOrderSettlementKey(tempOrder: OrderTempOrder | null | undefined): string | null;
44
+ export declare function isVirtualSettlementOrder(tempOrder: OrderTempOrder | null | undefined): boolean;
45
+ /**
46
+ * 详情展示识别同时支持已提交订单的 currency_settlement_config。
47
+ * cart_settlement_* 是交易过程内部状态,服务端详情不保证返回。
48
+ */
49
+ export declare function isVirtualSettlementDisplayOrder(tempOrder: OrderTempOrder | null | undefined): boolean;
50
+ /**
51
+ * 将购物车锁定的结算单位提升为订单级状态。
52
+ * 商品行快照同时负责价格归一化和生成订单级多语言展示快照;
53
+ * 交易中的即时展示仍统一读取 tempOrder.currency_*。
54
+ */
55
+ export declare function applyTempOrderSettlementState(tempOrder: OrderTempOrder, snapshot: SelectedSettlementSnapshot): void;
56
+ /** 清空购物车结算锁,并恢复进入虚拟币结算前的店铺法币。 */
57
+ export declare function releaseTempOrderSettlementState(tempOrder: OrderTempOrder): void;
58
+ /**
59
+ * 将已选择虚拟币的订单商品行固化为最终价语义。
60
+ * 函数幂等,可安全用于加车、合并、hydrate 和提交前兜底。
61
+ */
62
+ export declare function normalizeVirtualSettlementOrderProduct<T extends Partial<OrderProduct>>(product: T): T;
63
+ export declare function normalizeVirtualSettlementProducts<T extends Partial<OrderProduct>>(products: T[]): T[];
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VirtualCurrencyBalanceError = exports.VirtualCurrencyAssetNotFoundError = exports.OrderSettlementConflictError = void 0;
7
+ exports.applyTempOrderSettlementState = applyTempOrderSettlementState;
8
+ exports.buildCurrencyDisplaySnapshot = buildCurrencyDisplaySnapshot;
9
+ exports.getSelectedSettlementSnapshot = getSelectedSettlementSnapshot;
10
+ exports.getSettlementKey = getSettlementKey;
11
+ exports.getTempOrderSettlementKey = getTempOrderSettlementKey;
12
+ exports.getTempOrderSettlementSnapshot = getTempOrderSettlementSnapshot;
13
+ exports.isVirtualSettlementDisplayOrder = isVirtualSettlementDisplayOrder;
14
+ exports.isVirtualSettlementOrder = isVirtualSettlementOrder;
15
+ exports.isVirtualSettlementProduct = isVirtualSettlementProduct;
16
+ exports.normalizeVirtualSettlementOrderProduct = normalizeVirtualSettlementOrderProduct;
17
+ exports.normalizeVirtualSettlementProducts = normalizeVirtualSettlementProducts;
18
+ exports.releaseTempOrderSettlementState = releaseTempOrderSettlementState;
19
+ exports.resolveSettlementDisplayValue = resolveSettlementDisplayValue;
20
+ var _decimal = _interopRequireDefault(require("decimal.js"));
21
+ var _lodashEs = require("lodash-es");
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ function buildCurrencyDisplaySnapshot(snapshot) {
24
+ return (0, _lodashEs.cloneDeep)({
25
+ amount_format: String(snapshot.amount_format || '').trim(),
26
+ symbol: snapshot.symbol ?? {},
27
+ unit_label: snapshot.unit_label ?? {}
28
+ });
29
+ }
30
+ function resolveSettlementDisplayValue(value) {
31
+ if (value === undefined || value === null) return '';
32
+ if (typeof value === 'string' || typeof value === 'number') {
33
+ return String(value);
34
+ }
35
+ const localized = value;
36
+ return String(localized.auto ?? localized.default ?? localized.original ?? localized.en ?? localized['zh-CN'] ?? localized['zh-HK'] ?? '');
37
+ }
38
+ class OrderSettlementConflictError extends Error {
39
+ code = 'ORDER_SETTLEMENT_CONFLICT';
40
+ constructor(currentSettlementKey, incomingSettlementKey) {
41
+ super('Different currencies and WalletPass units cannot be mixed in one cart.');
42
+ this.currentSettlementKey = currentSettlementKey;
43
+ this.incomingSettlementKey = incomingSettlementKey;
44
+ this.name = 'OrderSettlementConflictError';
45
+ }
46
+ }
47
+ exports.OrderSettlementConflictError = OrderSettlementConflictError;
48
+ class VirtualCurrencyAssetNotFoundError extends Error {
49
+ code = 'VIRTUAL_CURRENCY_ASSET_NOT_FOUND';
50
+ constructor(currencyProductId) {
51
+ super('No matching virtual currency card is available.');
52
+ this.currencyProductId = currencyProductId;
53
+ this.name = 'VirtualCurrencyAssetNotFoundError';
54
+ }
55
+ }
56
+ exports.VirtualCurrencyAssetNotFoundError = VirtualCurrencyAssetNotFoundError;
57
+ class VirtualCurrencyBalanceError extends Error {
58
+ code = 'VIRTUAL_CURRENCY_BALANCE_INSUFFICIENT';
59
+ constructor(balance, requiredAmount) {
60
+ super('Insufficient virtual currency balance.');
61
+ this.balance = balance;
62
+ this.requiredAmount = requiredAmount;
63
+ this.name = 'VirtualCurrencyBalanceError';
64
+ }
65
+ }
66
+ exports.VirtualCurrencyBalanceError = VirtualCurrencyBalanceError;
67
+ function getSelectedSettlementSnapshot(product) {
68
+ const snapshot = product?.metadata?.selected_settlement_snapshot;
69
+ if (!snapshot || typeof snapshot !== 'object') return null;
70
+ if (snapshot.settlement_type !== 'legal_currency' && snapshot.settlement_type !== 'virtual_currency') {
71
+ return null;
72
+ }
73
+ return snapshot;
74
+ }
75
+ function getTempOrderSettlementSnapshot(tempOrder) {
76
+ const snapshot = tempOrder?.metadata?.cart_settlement_snapshot;
77
+ if (snapshot && typeof snapshot === 'object' && (snapshot.settlement_type === 'legal_currency' || snapshot.settlement_type === 'virtual_currency')) {
78
+ return snapshot;
79
+ }
80
+ return getSelectedSettlementSnapshot(tempOrder?.products?.[0]);
81
+ }
82
+ function isVirtualSettlementProduct(product) {
83
+ return getSelectedSettlementSnapshot(product)?.settlement_type === 'virtual_currency';
84
+ }
85
+ function getSettlementKey(snapshot) {
86
+ if (!snapshot) return null;
87
+ if (snapshot.settlement_type === 'legal_currency') return 'legal_currency';
88
+ const currencyProductId = Number(snapshot.currency_product_id);
89
+ return Number.isFinite(currencyProductId) && currencyProductId > 0 ? `virtual_currency:${currencyProductId}` : null;
90
+ }
91
+ function getTempOrderSettlementKey(tempOrder) {
92
+ if (!tempOrder?.products?.length) return null;
93
+ const storedKey = tempOrder.metadata?.cart_settlement_key;
94
+ if (typeof storedKey === 'string' && storedKey) return storedKey;
95
+ return getSettlementKey(getTempOrderSettlementSnapshot(tempOrder)) || 'legal_currency';
96
+ }
97
+ function isVirtualSettlementOrder(tempOrder) {
98
+ return getTempOrderSettlementKey(tempOrder)?.startsWith('virtual_currency:') === true;
99
+ }
100
+
101
+ /**
102
+ * 详情展示识别同时支持已提交订单的 currency_settlement_config。
103
+ * cart_settlement_* 是交易过程内部状态,服务端详情不保证返回。
104
+ */
105
+ function isVirtualSettlementDisplayOrder(tempOrder) {
106
+ return tempOrder?.metadata?.currency_settlement_config?.settlement_type === 'virtual_currency' || isVirtualSettlementOrder(tempOrder);
107
+ }
108
+ function getLegalCurrencySnapshot(tempOrder) {
109
+ const snapshot = tempOrder.metadata?.legal_currency_snapshot;
110
+ if (!snapshot || typeof snapshot !== 'object') return null;
111
+ return {
112
+ currency_code: String(snapshot.currency_code || ''),
113
+ currency_symbol: String(snapshot.currency_symbol || ''),
114
+ currency_format: String(snapshot.currency_format || 'symbol_first')
115
+ };
116
+ }
117
+ function captureLegalCurrencySnapshot(tempOrder) {
118
+ tempOrder.metadata = tempOrder.metadata || {};
119
+ if (getLegalCurrencySnapshot(tempOrder)) return;
120
+ tempOrder.metadata.legal_currency_snapshot = {
121
+ currency_code: String(tempOrder.currency_code || ''),
122
+ currency_symbol: String(tempOrder.currency_symbol || ''),
123
+ currency_format: String(tempOrder.currency_format || 'symbol_first')
124
+ };
125
+ }
126
+
127
+ /**
128
+ * 将购物车锁定的结算单位提升为订单级状态。
129
+ * 商品行快照同时负责价格归一化和生成订单级多语言展示快照;
130
+ * 交易中的即时展示仍统一读取 tempOrder.currency_*。
131
+ */
132
+ function applyTempOrderSettlementState(tempOrder, snapshot) {
133
+ tempOrder.metadata = tempOrder.metadata || {};
134
+ const settlementKey = getSettlementKey(snapshot) || 'legal_currency';
135
+ if (snapshot.settlement_type === 'virtual_currency') {
136
+ captureLegalCurrencySnapshot(tempOrder);
137
+ const currencyProductId = Number(snapshot.currency_product_id);
138
+ const existingDisplaySnapshot = tempOrder.metadata.currency_settlement_config?.currency_display_snapshot;
139
+ tempOrder.metadata.currency_settlement_config = {
140
+ settlement_type: 'virtual_currency',
141
+ settlement_ids: Number.isFinite(currencyProductId) && currencyProductId > 0 ? [currencyProductId] : [],
142
+ currency_display_snapshot: existingDisplaySnapshot ? (0, _lodashEs.cloneDeep)(existingDisplaySnapshot) : buildCurrencyDisplaySnapshot(snapshot)
143
+ };
144
+ } else {
145
+ delete tempOrder.metadata.currency_settlement_config;
146
+ }
147
+ tempOrder.metadata.cart_settlement_key = settlementKey;
148
+ tempOrder.metadata.cart_settlement_snapshot = {
149
+ ...snapshot
150
+ };
151
+ tempOrder.currency_code = resolveSettlementDisplayValue(snapshot.unit_label) || tempOrder.currency_code;
152
+ tempOrder.currency_symbol = resolveSettlementDisplayValue(snapshot.symbol) || tempOrder.currency_symbol;
153
+ tempOrder.currency_format = String(snapshot.amount_format || tempOrder.currency_format || 'symbol_first');
154
+ }
155
+
156
+ /** 清空购物车结算锁,并恢复进入虚拟币结算前的店铺法币。 */
157
+ function releaseTempOrderSettlementState(tempOrder) {
158
+ tempOrder.metadata = tempOrder.metadata || {};
159
+ const legalCurrency = getLegalCurrencySnapshot(tempOrder);
160
+ if (legalCurrency) {
161
+ tempOrder.currency_code = legalCurrency.currency_code;
162
+ tempOrder.currency_symbol = legalCurrency.currency_symbol;
163
+ tempOrder.currency_format = legalCurrency.currency_format;
164
+ }
165
+ delete tempOrder.metadata.cart_settlement_key;
166
+ delete tempOrder.metadata.cart_settlement_snapshot;
167
+ delete tempOrder.metadata.currency_settlement_config;
168
+ }
169
+ function toMoney(value) {
170
+ try {
171
+ return new _decimal.default(String(value ?? 0)).toDecimalPlaces(2).toFixed(2);
172
+ } catch {
173
+ return '0.00';
174
+ }
175
+ }
176
+ function zeroOptions(options) {
177
+ if (!Array.isArray(options)) return [];
178
+ return options.map(option => ({
179
+ ...option,
180
+ add_price: 0
181
+ }));
182
+ }
183
+ function zeroBundles(bundles) {
184
+ if (!Array.isArray(bundles)) return [];
185
+ return bundles.map(bundle => ({
186
+ ...bundle,
187
+ price: 0,
188
+ custom_price: 0,
189
+ bundle_selling_price: 0,
190
+ bundle_payment_price: 0,
191
+ surcharge_fee: 0,
192
+ tax_fee: 0,
193
+ original_tax_fee: 0,
194
+ is_charge_tax: 0,
195
+ discount_list: [],
196
+ relation_surcharge_ids: [],
197
+ option: zeroOptions(bundle?.option),
198
+ metadata: {
199
+ ...(bundle?.metadata || {}),
200
+ surcharge_fee: '0.00',
201
+ relation_surcharge_ids: [],
202
+ product_discount_difference: '',
203
+ tax_fee_rounding_remainder: '0.00',
204
+ surcharge_rounding_remainder: '0.00'
205
+ }
206
+ }));
207
+ }
208
+
209
+ /**
210
+ * 将已选择虚拟币的订单商品行固化为最终价语义。
211
+ * 函数幂等,可安全用于加车、合并、hydrate 和提交前兜底。
212
+ */
213
+ function normalizeVirtualSettlementOrderProduct(product) {
214
+ const snapshot = getSelectedSettlementSnapshot(product);
215
+ if (snapshot?.settlement_type !== 'virtual_currency') return product;
216
+ const virtualPrice = toMoney(snapshot.price);
217
+ const metadata = {
218
+ ...(product.metadata || {}),
219
+ source_product_price: virtualPrice,
220
+ main_product_original_price: virtualPrice,
221
+ main_product_selling_price: virtualPrice,
222
+ main_product_attached_bundle_selling_price: virtualPrice,
223
+ main_product_attached_bundle_payment_price: virtualPrice,
224
+ main_product_attached_bundle_surcharge_fee: '0.00',
225
+ main_product_attached_bundle_tax_fee: '0.00',
226
+ surcharge_rounding_remainder: '0.00',
227
+ tax_fee_rounding_remainder: '0.00',
228
+ relation_surcharge_ids: [],
229
+ average_discount_amount_rate: '1',
230
+ product_discount_difference: '',
231
+ discountable_flag: 0,
232
+ price_schema_version: 2,
233
+ selected_settlement_snapshot: {
234
+ ...snapshot,
235
+ price: virtualPrice
236
+ }
237
+ };
238
+ return {
239
+ ...product,
240
+ selling_price: virtualPrice,
241
+ original_price: virtualPrice,
242
+ payment_price: virtualPrice,
243
+ discount_list: [],
244
+ is_charge_tax: 0,
245
+ tax_fee: '0.00',
246
+ original_tax_fee: 0,
247
+ tax_fee_rounding_remainder: 0,
248
+ original_tax_fee_rounding_remainder: 0,
249
+ surcharge_fee: '0.00',
250
+ surcharge_rounding_remainder: 0,
251
+ relation_surcharge_ids: [],
252
+ product_sku: {
253
+ ...(product.product_sku || {}),
254
+ option: zeroOptions(product.product_sku?.option)
255
+ },
256
+ product_bundle: zeroBundles(product.product_bundle),
257
+ metadata
258
+ };
259
+ }
260
+ function normalizeVirtualSettlementProducts(products) {
261
+ return (products || []).map(product => normalizeVirtualSettlementOrderProduct(product));
262
+ }
@@ -1,6 +1,6 @@
1
1
  import Decimal from 'decimal.js';
2
2
  import type { CartItem } from "../Cart";
3
- import type { OrderProductDiscountItem, OrderProduct, OrderSubmitPayload, OrderSubmitProduct, OrderSummary, OrderTempOrder } from './types';
3
+ import type { OrderProductDiscountItem, OrderMetaList, OrderProduct, OrderSubmitPayload, OrderSubmitProduct, OrderSummary, OrderTempOrder, PointCardSnapshotItem } from './types';
4
4
  import type { RulesParamsHooks } from '../Rules/types';
5
5
  import type { MapOrderPaymentsOptions, OrderPaymentData, OrderPaymentSource } from './types';
6
6
  import { createUuidV4 } from './utils/orderCollectionIdentity';
@@ -16,6 +16,9 @@ export interface OrderProductsDepositSummary {
16
16
  hasDeposit: boolean;
17
17
  }
18
18
  import type { WindowPlugin } from '../../plugins';
19
+ export declare function normalizePointCardSnapshotItem(value: unknown): PointCardSnapshotItem | null;
20
+ export declare function buildPointCardSnapshotFromWalletPassList(value: unknown): PointCardSnapshotItem[];
21
+ export declare function normalizeOrderMetaList(value: unknown): OrderMetaList | undefined;
19
22
  /**
20
23
  * 把"含 option 的主商品单价"与 bundle 合成"单行 composite 单价"。
21
24
  *
@@ -232,6 +235,7 @@ export declare function buildSubmitPayload(params: {
232
235
  type?: string;
233
236
  summary?: OrderSummary | null;
234
237
  request_unique_idempotency_token?: string;
238
+ includePaymentStatus?: boolean;
235
239
  enhance?: SubmitPayloadEnhancer;
236
240
  }): OrderSubmitPayload;
237
241
  export declare function mapPaymentItemToOrderPayment(paymentItem: OrderPaymentSource): OrderPaymentData;