@pisell/pisellos 0.10.2 → 0.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +7 -0
- package/dist/model/strategy/adapter/promotion/adapter.d.ts +4 -0
- package/dist/model/strategy/adapter/promotion/adapter.js +23 -0
- package/dist/model/strategy/adapter/promotion/evaluator.d.ts +17 -0
- package/dist/model/strategy/adapter/promotion/evaluator.js +279 -6
- package/dist/model/strategy/adapter/promotion/examples.d.ts +86 -0
- package/dist/model/strategy/adapter/promotion/examples.js +99 -0
- package/dist/model/strategy/adapter/promotion/index.d.ts +1 -1
- package/dist/model/strategy/adapter/promotion/index.js +0 -9
- package/dist/model/strategy/adapter/promotion/type.d.ts +90 -2
- package/dist/model/strategy/adapter/promotion/type.js +45 -0
- package/dist/modules/BaseModule.d.ts +1 -0
- package/dist/modules/BaseModule.js +24 -28
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +5 -3
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +6 -3
- package/dist/modules/OpenData/index.d.ts +2 -0
- package/dist/modules/OpenData/index.js +8 -0
- package/dist/modules/Order/index.d.ts +41 -10
- package/dist/modules/Order/index.js +943 -546
- package/dist/modules/Order/payment-utils.d.ts +26 -0
- package/dist/modules/Order/payment-utils.js +225 -0
- package/dist/modules/Order/types.d.ts +43 -2
- package/dist/modules/Order/utils/orderCollectionIdentity.js +7 -2
- package/dist/modules/Order/utils.js +10 -6
- package/dist/modules/Payment/index.d.ts +2 -0
- package/dist/modules/Payment/index.js +79 -50
- package/dist/modules/Payment/types.d.ts +107 -28
- package/dist/modules/Payment/types.js +20 -3
- package/dist/modules/Payment/walletpass.d.ts +38 -1
- package/dist/modules/Payment/walletpass.js +917 -114
- package/dist/modules/ProductList/index.js +1 -1
- package/dist/modules/Rules/index.d.ts +3 -0
- package/dist/modules/Rules/index.js +130 -99
- package/dist/server/index.d.ts +16 -0
- package/dist/server/index.js +2084 -1188
- package/dist/server/modules/index.d.ts +1 -1
- package/dist/server/modules/order/index.d.ts +70 -4
- package/dist/server/modules/order/index.js +1816 -728
- package/dist/server/modules/order/types.d.ts +25 -3
- package/dist/server/modules/order/types.js +7 -1
- package/dist/solution/BaseSales/index.d.ts +114 -14
- package/dist/solution/BaseSales/index.js +1848 -478
- package/dist/solution/BaseSales/types.d.ts +55 -1
- package/dist/solution/BaseSales/types.js +2 -1
- package/dist/solution/BaseSales/utils/cartPromotion.d.ts +3 -1
- package/dist/solution/BaseSales/utils/cartPromotion.js +90 -31
- package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +6 -1
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +6 -3
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +8 -16
- package/dist/solution/BookingTicket/index.js +138 -52
- package/dist/solution/BookingTicket/types.d.ts +1 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +6 -0
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +8 -0
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +173 -83
- package/dist/solution/BookingTicket/utils/weighingProductSku.d.ts +5 -0
- package/dist/solution/BookingTicket/utils/weighingProductSku.js +45 -0
- package/dist/solution/Sales/index.d.ts +1 -0
- package/dist/solution/Sales/index.js +10 -2
- package/dist/solution/ScanOrder/index.js +31 -20
- package/dist/solution/UnifiedBookingSales/index.d.ts +3 -0
- package/dist/solution/UnifiedBookingSales/index.js +392 -304
- package/dist/solution/UnifiedBookingSales/types.d.ts +7 -0
- package/dist/solution/VenueBooking/index.d.ts +1 -0
- package/dist/solution/VenueBooking/index.js +34 -24
- package/dist/types/index.d.ts +1 -0
- package/dist/utils/payment-number.d.ts +9 -0
- package/dist/utils/payment-number.js +69 -0
- package/lib/core/index.d.ts +2 -0
- package/lib/core/index.js +4 -0
- package/lib/model/strategy/adapter/promotion/adapter.d.ts +4 -0
- package/lib/model/strategy/adapter/promotion/adapter.js +20 -0
- package/lib/model/strategy/adapter/promotion/evaluator.d.ts +17 -0
- package/lib/model/strategy/adapter/promotion/evaluator.js +235 -0
- package/lib/model/strategy/adapter/promotion/examples.d.ts +86 -0
- package/lib/model/strategy/adapter/promotion/examples.js +91 -0
- package/lib/model/strategy/adapter/promotion/index.d.ts +1 -1
- package/lib/model/strategy/adapter/promotion/index.js +2 -0
- package/lib/model/strategy/adapter/promotion/type.d.ts +90 -2
- package/lib/model/strategy/adapter/promotion/type.js +2 -0
- package/lib/modules/BaseModule.d.ts +1 -0
- package/lib/modules/BaseModule.js +24 -37
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +2 -1
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +2 -1
- package/lib/modules/OpenData/index.d.ts +2 -0
- package/lib/modules/OpenData/index.js +5 -0
- package/lib/modules/Order/index.d.ts +41 -10
- package/lib/modules/Order/index.js +322 -86
- package/lib/modules/Order/payment-utils.d.ts +26 -0
- package/lib/modules/Order/payment-utils.js +224 -0
- package/lib/modules/Order/types.d.ts +43 -2
- package/lib/modules/Order/utils/orderCollectionIdentity.js +3 -0
- package/lib/modules/Order/utils.js +11 -4
- package/lib/modules/Payment/index.d.ts +2 -0
- package/lib/modules/Payment/index.js +34 -13
- package/lib/modules/Payment/types.d.ts +107 -28
- package/lib/modules/Payment/types.js +4 -3
- package/lib/modules/Payment/walletpass.d.ts +38 -1
- package/lib/modules/Payment/walletpass.js +730 -21
- package/lib/modules/ProductList/index.js +9 -1
- package/lib/modules/Rules/index.d.ts +3 -0
- package/lib/modules/Rules/index.js +39 -10
- package/lib/server/index.d.ts +16 -0
- package/lib/server/index.js +677 -28
- package/lib/server/modules/index.d.ts +1 -1
- package/lib/server/modules/order/index.d.ts +70 -4
- package/lib/server/modules/order/index.js +818 -69
- package/lib/server/modules/order/types.d.ts +25 -3
- package/lib/server/modules/order/types.js +1 -0
- package/lib/solution/BaseSales/index.d.ts +114 -14
- package/lib/solution/BaseSales/index.js +907 -58
- package/lib/solution/BaseSales/types.d.ts +55 -1
- package/lib/solution/BaseSales/types.js +2 -1
- package/lib/solution/BaseSales/utils/cartPromotion.d.ts +3 -1
- package/lib/solution/BaseSales/utils/cartPromotion.js +63 -12
- package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +6 -1
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +3 -2
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +8 -16
- package/lib/solution/BookingTicket/index.js +63 -9
- package/lib/solution/BookingTicket/types.d.ts +1 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +4 -0
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +8 -0
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +37 -5
- package/lib/solution/BookingTicket/utils/weighingProductSku.d.ts +5 -0
- package/lib/solution/BookingTicket/utils/weighingProductSku.js +63 -0
- package/lib/solution/Sales/index.d.ts +1 -0
- package/lib/solution/Sales/index.js +5 -3
- package/lib/solution/ScanOrder/index.js +8 -0
- package/lib/solution/UnifiedBookingSales/index.d.ts +3 -0
- package/lib/solution/UnifiedBookingSales/index.js +48 -2
- package/lib/solution/UnifiedBookingSales/types.d.ts +7 -0
- package/lib/solution/VenueBooking/index.d.ts +1 -0
- package/lib/solution/VenueBooking/index.js +13 -6
- package/lib/types/index.d.ts +1 -0
- package/lib/utils/payment-number.d.ts +9 -0
- package/lib/utils/payment-number.js +64 -0
- package/package.json +1 -1
|
@@ -12,6 +12,8 @@ export declare const PROMOTION_ACTION_TYPES: {
|
|
|
12
12
|
readonly X_ITEMS_FOR_Y_PRICE: "X_ITEMS_FOR_Y_PRICE";
|
|
13
13
|
/** 买X送Y(买X件送Y件,可累计) */
|
|
14
14
|
readonly BUY_X_GET_Y_FREE: "BUY_X_GET_Y_FREE";
|
|
15
|
+
/** 商品奖励(满足条件后,订单内指定目标商品享优惠) */
|
|
16
|
+
readonly ITEM_REWARD: "ITEM_REWARD";
|
|
15
17
|
/** 固定折扣 */
|
|
16
18
|
readonly DISCOUNT_RATE: "DISCOUNT_RATE";
|
|
17
19
|
/** 固定减价 */
|
|
@@ -66,6 +68,59 @@ export interface BuyXGetYFreeConfig {
|
|
|
66
68
|
/** 可选的赠品列表 */
|
|
67
69
|
giftProducts?: ProductIdentifier[];
|
|
68
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* 商品奖励优惠方式
|
|
73
|
+
*
|
|
74
|
+
* - free: 目标商品最终价为 0
|
|
75
|
+
* - percent_off: 目标商品按百分比折扣,rewardValue 为 0-100
|
|
76
|
+
* - amount_off: 每个目标商品固定减免 rewardValue
|
|
77
|
+
* - fixed_price: 目标商品改为固定价 rewardValue
|
|
78
|
+
*/
|
|
79
|
+
export type ItemRewardMethod = 'free' | 'percent_off' | 'amount_off' | 'fixed_price';
|
|
80
|
+
/**
|
|
81
|
+
* 商品奖励数量规则
|
|
82
|
+
*
|
|
83
|
+
* - per_condition_quantity: 每满足 N 个条件商品,奖励 Y 个目标商品
|
|
84
|
+
* - all_targets: 满足条件后奖励全部目标商品
|
|
85
|
+
* - max_per_order: 满足条件后每单最多奖励固定数量目标商品
|
|
86
|
+
*/
|
|
87
|
+
export type ItemRewardQuantityRule = 'per_condition_quantity' | 'all_targets' | 'max_per_order';
|
|
88
|
+
/** 商品奖励目标选择规则 */
|
|
89
|
+
export type ItemRewardTargetSelection = 'consumer_best';
|
|
90
|
+
/**
|
|
91
|
+
* 商品奖励 - Action Value
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* value: {
|
|
95
|
+
* rewardMethod: 'free',
|
|
96
|
+
* quantityRule: 'per_condition_quantity',
|
|
97
|
+
* triggerQuantity: 1,
|
|
98
|
+
* rewardQuantity: 1,
|
|
99
|
+
* }
|
|
100
|
+
*/
|
|
101
|
+
export interface ItemRewardValue {
|
|
102
|
+
/** 奖励方式 */
|
|
103
|
+
rewardMethod: ItemRewardMethod;
|
|
104
|
+
/** 奖励值:percent_off/amount_off/fixed_price 使用,free 可省略 */
|
|
105
|
+
rewardValue?: number;
|
|
106
|
+
/** 奖励数量规则 */
|
|
107
|
+
quantityRule: ItemRewardQuantityRule;
|
|
108
|
+
/** 每满足 N 个条件商品;默认 1 */
|
|
109
|
+
triggerQuantity?: number;
|
|
110
|
+
/** 奖励 Y 个目标商品;默认 1 */
|
|
111
|
+
rewardQuantity?: number;
|
|
112
|
+
/** 每单最多奖励 Y 个目标商品;max_per_order 使用 */
|
|
113
|
+
maxRewardQuantity?: number;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 商品奖励 - Action Config
|
|
117
|
+
*/
|
|
118
|
+
export interface ItemRewardConfig {
|
|
119
|
+
/** 奖励对象,本期支持指定商品/变体;product_variant_id=0 表示任意变体 */
|
|
120
|
+
rewardTargets?: ProductIdentifier[];
|
|
121
|
+
/** 目标商品超额时的选择规则;本期支持 consumer_best */
|
|
122
|
+
targetSelection?: ItemRewardTargetSelection;
|
|
123
|
+
}
|
|
69
124
|
/**
|
|
70
125
|
* 商品标识
|
|
71
126
|
*
|
|
@@ -102,10 +157,19 @@ export interface BuyXGetYFreeAction extends Omit<ActionEffect, 'type' | 'value'
|
|
|
102
157
|
valueType: 'object';
|
|
103
158
|
config?: BuyXGetYFreeConfig;
|
|
104
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* 商品奖励 Action
|
|
162
|
+
*/
|
|
163
|
+
export interface ItemRewardAction extends Omit<ActionEffect, 'type' | 'value' | 'config'> {
|
|
164
|
+
type: typeof PROMOTION_ACTION_TYPES.ITEM_REWARD;
|
|
165
|
+
value: ItemRewardValue;
|
|
166
|
+
valueType: 'object';
|
|
167
|
+
config?: ItemRewardConfig;
|
|
168
|
+
}
|
|
105
169
|
/**
|
|
106
170
|
* 促销活动 Action 联合类型
|
|
107
171
|
*/
|
|
108
|
-
export type PromotionAction = XItemsForYPriceAction | BuyXGetYFreeAction;
|
|
172
|
+
export type PromotionAction = XItemsForYPriceAction | BuyXGetYFreeAction | ItemRewardAction;
|
|
109
173
|
/**
|
|
110
174
|
* 促销相关运算符
|
|
111
175
|
*/
|
|
@@ -170,6 +234,8 @@ export interface PromotionProduct {
|
|
|
170
234
|
quantity: number;
|
|
171
235
|
/** 原价 */
|
|
172
236
|
original_price?: number;
|
|
237
|
+
/** 内部字段:编辑态订单行只允许参与 ITEM_REWARD,避免旧促销误算历史行 */
|
|
238
|
+
_promotionOnlyForItemReward?: boolean;
|
|
173
239
|
}
|
|
174
240
|
/**
|
|
175
241
|
* 促销活动适配器转换结果
|
|
@@ -195,7 +261,7 @@ export interface PromotionTransformResult {
|
|
|
195
261
|
/**
|
|
196
262
|
* Action 详情联合类型
|
|
197
263
|
*/
|
|
198
|
-
export type PromotionActionDetail = XItemsForYPriceActionDetail | BuyXGetYFreeActionDetail;
|
|
264
|
+
export type PromotionActionDetail = XItemsForYPriceActionDetail | BuyXGetYFreeActionDetail | ItemRewardActionDetail;
|
|
199
265
|
/**
|
|
200
266
|
* X件Y元 Action 详情
|
|
201
267
|
*/
|
|
@@ -226,6 +292,28 @@ export interface BuyXGetYFreeActionDetail {
|
|
|
226
292
|
/** 可选的赠品列表 */
|
|
227
293
|
giftProducts: ProductIdentifier[];
|
|
228
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* 商品奖励 Action 详情
|
|
297
|
+
*/
|
|
298
|
+
export interface ItemRewardActionDetail {
|
|
299
|
+
type: typeof PROMOTION_ACTION_TYPES.ITEM_REWARD;
|
|
300
|
+
/** 奖励方式 */
|
|
301
|
+
rewardMethod: ItemRewardMethod;
|
|
302
|
+
/** 奖励值:percent_off/amount_off/fixed_price 使用,free 为 0 */
|
|
303
|
+
rewardValue: number;
|
|
304
|
+
/** 奖励数量规则 */
|
|
305
|
+
quantityRule: ItemRewardQuantityRule;
|
|
306
|
+
/** 每满足 N 个条件商品;默认 1 */
|
|
307
|
+
triggerQuantity: number;
|
|
308
|
+
/** 奖励 Y 个目标商品;默认 1 */
|
|
309
|
+
rewardQuantity: number;
|
|
310
|
+
/** 每单最多奖励 Y 个目标商品;max_per_order 使用 */
|
|
311
|
+
maxRewardQuantity?: number;
|
|
312
|
+
/** 奖励对象,本期支持指定商品/变体 */
|
|
313
|
+
rewardTargets: ProductIdentifier[];
|
|
314
|
+
/** 目标商品超额时的选择规则 */
|
|
315
|
+
targetSelection: ItemRewardTargetSelection;
|
|
316
|
+
}
|
|
229
317
|
/**
|
|
230
318
|
* X件Y元 - 业务层计算结果
|
|
231
319
|
*
|
|
@@ -16,6 +16,8 @@ export var PROMOTION_ACTION_TYPES = {
|
|
|
16
16
|
X_ITEMS_FOR_Y_PRICE: 'X_ITEMS_FOR_Y_PRICE',
|
|
17
17
|
/** 买X送Y(买X件送Y件,可累计) */
|
|
18
18
|
BUY_X_GET_Y_FREE: 'BUY_X_GET_Y_FREE',
|
|
19
|
+
/** 商品奖励(满足条件后,订单内指定目标商品享优惠) */
|
|
20
|
+
ITEM_REWARD: 'ITEM_REWARD',
|
|
19
21
|
/** 固定折扣 */
|
|
20
22
|
DISCOUNT_RATE: 'DISCOUNT_RATE',
|
|
21
23
|
/** 固定减价 */
|
|
@@ -54,6 +56,41 @@ export var PROMOTION_ACTION_TYPES = {
|
|
|
54
56
|
* 买X送Y - Action Config
|
|
55
57
|
*/
|
|
56
58
|
|
|
59
|
+
/**
|
|
60
|
+
* 商品奖励优惠方式
|
|
61
|
+
*
|
|
62
|
+
* - free: 目标商品最终价为 0
|
|
63
|
+
* - percent_off: 目标商品按百分比折扣,rewardValue 为 0-100
|
|
64
|
+
* - amount_off: 每个目标商品固定减免 rewardValue
|
|
65
|
+
* - fixed_price: 目标商品改为固定价 rewardValue
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 商品奖励数量规则
|
|
70
|
+
*
|
|
71
|
+
* - per_condition_quantity: 每满足 N 个条件商品,奖励 Y 个目标商品
|
|
72
|
+
* - all_targets: 满足条件后奖励全部目标商品
|
|
73
|
+
* - max_per_order: 满足条件后每单最多奖励固定数量目标商品
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
/** 商品奖励目标选择规则 */
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* 商品奖励 - Action Value
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* value: {
|
|
83
|
+
* rewardMethod: 'free',
|
|
84
|
+
* quantityRule: 'per_condition_quantity',
|
|
85
|
+
* triggerQuantity: 1,
|
|
86
|
+
* rewardQuantity: 1,
|
|
87
|
+
* }
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* 商品奖励 - Action Config
|
|
92
|
+
*/
|
|
93
|
+
|
|
57
94
|
// ============================================
|
|
58
95
|
// 商品标识
|
|
59
96
|
// ============================================
|
|
@@ -78,6 +115,10 @@ export var PROMOTION_ACTION_TYPES = {
|
|
|
78
115
|
* 买X送Y Action
|
|
79
116
|
*/
|
|
80
117
|
|
|
118
|
+
/**
|
|
119
|
+
* 商品奖励 Action
|
|
120
|
+
*/
|
|
121
|
+
|
|
81
122
|
/**
|
|
82
123
|
* 促销活动 Action 联合类型
|
|
83
124
|
*/
|
|
@@ -146,6 +187,10 @@ var obj = {
|
|
|
146
187
|
* 买X送Y Action 详情
|
|
147
188
|
*/
|
|
148
189
|
|
|
190
|
+
/**
|
|
191
|
+
* 商品奖励 Action 详情
|
|
192
|
+
*/
|
|
193
|
+
|
|
149
194
|
// ============================================
|
|
150
195
|
// 业务层输出类型(供参考)
|
|
151
196
|
// ============================================
|
|
@@ -8,6 +8,7 @@ export declare class BaseModule {
|
|
|
8
8
|
protected core: PisellCore;
|
|
9
9
|
constructor(name?: string, version?: string);
|
|
10
10
|
destroy(): void;
|
|
11
|
+
private isRecord;
|
|
11
12
|
checkSaveCache({ cacheId, fatherModule, store, cacheKey, }: {
|
|
12
13
|
cacheId: string | undefined;
|
|
13
14
|
fatherModule: string | undefined;
|
|
@@ -23,45 +23,41 @@ export var BaseModule = /*#__PURE__*/function () {
|
|
|
23
23
|
this.core.effects.offByModuleDestroy(this.name);
|
|
24
24
|
this.core.unregisterModule(this);
|
|
25
25
|
}
|
|
26
|
+
}, {
|
|
27
|
+
key: "isRecord",
|
|
28
|
+
value: function isRecord(value) {
|
|
29
|
+
return !!value && _typeof(value) === 'object' && !Array.isArray(value);
|
|
30
|
+
}
|
|
26
31
|
|
|
27
32
|
// 提供统一的缓存 module 里的数据的方法
|
|
28
33
|
}, {
|
|
29
34
|
key: "checkSaveCache",
|
|
30
35
|
value: function checkSaveCache(_ref) {
|
|
31
|
-
var _this = this;
|
|
32
36
|
var cacheId = _ref.cacheId,
|
|
33
37
|
fatherModule = _ref.fatherModule,
|
|
34
38
|
store = _ref.store,
|
|
35
39
|
cacheKey = _ref.cacheKey;
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
if (!cacheId) return;
|
|
41
|
+
try {
|
|
42
|
+
var window = this.core.getPlugin('window');
|
|
43
|
+
var sessionStorage = window === null || window === void 0 ? void 0 : window.sessionStorage;
|
|
44
|
+
if (!sessionStorage) return;
|
|
45
|
+
var storageKey = fatherModule || cacheId;
|
|
46
|
+
var rawCacheData = sessionStorage.getItem(storageKey);
|
|
47
|
+
var parsedCacheData = rawCacheData ? JSON.parse(rawCacheData) : {};
|
|
48
|
+
if (!this.isRecord(parsedCacheData)) return;
|
|
49
|
+
var cacheBucket = fatherModule ? this.isRecord(parsedCacheData[cacheId]) ? parsedCacheData[cacheId] : {} : parsedCacheData;
|
|
50
|
+
var moduleBucket = this.isRecord(cacheBucket[this.name]) ? cacheBucket[this.name] : {};
|
|
51
|
+
cacheKey.forEach(function (key) {
|
|
52
|
+
moduleBucket[key] = store === null || store === void 0 ? void 0 : store[key];
|
|
53
|
+
});
|
|
54
|
+
cacheBucket[this.name] = moduleBucket;
|
|
38
55
|
if (fatherModule) {
|
|
39
|
-
|
|
40
|
-
var currentCacheDataObj = JSON.parse(currentCacheData || '{}');
|
|
41
|
-
if (!currentCacheData || !currentCacheDataObj[cacheId]) {
|
|
42
|
-
currentCacheDataObj = _defineProperty({}, cacheId, _defineProperty({}, this.name, {}));
|
|
43
|
-
}
|
|
44
|
-
if (!currentCacheDataObj[cacheId][this.name]) {
|
|
45
|
-
currentCacheDataObj[cacheId][this.name] = {};
|
|
46
|
-
}
|
|
47
|
-
cacheKey.forEach(function (key) {
|
|
48
|
-
currentCacheDataObj[cacheId][_this.name][key] = store === null || store === void 0 ? void 0 : store[key];
|
|
49
|
-
});
|
|
50
|
-
window.sessionStorage.setItem(fatherModule, JSON.stringify(currentCacheDataObj));
|
|
51
|
-
} else {
|
|
52
|
-
var _currentCacheData = window.sessionStorage.getItem(cacheId);
|
|
53
|
-
var _currentCacheDataObj2 = JSON.parse(_currentCacheData || '{}');
|
|
54
|
-
if (!_currentCacheDataObj2) {
|
|
55
|
-
_currentCacheDataObj2 = {};
|
|
56
|
-
}
|
|
57
|
-
if (!_currentCacheDataObj2[this.name]) {
|
|
58
|
-
_currentCacheDataObj2[this.name] = {};
|
|
59
|
-
}
|
|
60
|
-
cacheKey.forEach(function (key) {
|
|
61
|
-
_currentCacheDataObj2[_this.name][key] = store[key];
|
|
62
|
-
});
|
|
63
|
-
window.sessionStorage.setItem(cacheId, JSON.stringify(_currentCacheDataObj2));
|
|
56
|
+
parsedCacheData[cacheId] = cacheBucket;
|
|
64
57
|
}
|
|
58
|
+
sessionStorage.setItem(storageKey, JSON.stringify(parsedCacheData));
|
|
59
|
+
} catch (_unused) {
|
|
60
|
+
// sessionStorage persistence is best-effort and must not block checkout.
|
|
65
61
|
}
|
|
66
62
|
}
|
|
67
63
|
}, {
|
|
@@ -190,7 +190,7 @@ function synthesizeProductResourceFromBooking(booking) {
|
|
|
190
190
|
* 调用方须传入与该行关联的 booking(通常 bookings[].product_uid === product.metadata.unique_identification_number)。
|
|
191
191
|
*/
|
|
192
192
|
export function buildCacheItemFromOrderLine(input) {
|
|
193
|
-
var _product$product_id, _product$selling_pric, _product$original_pri, _booking$metadata$hol, _booking$metadata2, _product$product_vari, _product$num, _ref10, _product$note, _booking$detail2, _product$metadata, _product$metadata2, _ref11, _extension_type, _booking$product2, _booking$product3, _price, _product$order_detail, _ref12, _booking$id;
|
|
193
|
+
var _product$product_id, _product$selling_pric, _product$original_pri, _booking$metadata$hol, _booking$metadata2, _product$product_vari, _product$num, _ref10, _product$note, _booking$detail2, _product$metadata, _product$metadata2, _ref11, _extension_type, _booking$product2, _booking$product3, _price, _product$product_sku, _product$order_detail, _ref12, _booking$id;
|
|
194
194
|
var product = input.product,
|
|
195
195
|
booking = input.booking,
|
|
196
196
|
sourceProduct = input.sourceProduct;
|
|
@@ -257,7 +257,7 @@ export function buildCacheItemFromOrderLine(input) {
|
|
|
257
257
|
if (Array.isArray(booking.relation_forms)) {
|
|
258
258
|
extend.relation_forms = booking.relation_forms;
|
|
259
259
|
}
|
|
260
|
-
var base = _objectSpread(_objectSpread(_objectSpread({}, sourceProduct || {}), {}, {
|
|
260
|
+
var base = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, sourceProduct || {}), {}, {
|
|
261
261
|
id: resolvedId,
|
|
262
262
|
product_id: resolvedId,
|
|
263
263
|
extension_type: (_ref11 = (_extension_type = sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.extension_type) !== null && _extension_type !== void 0 ? _extension_type : booking === null || booking === void 0 || (_booking$product2 = booking.product) === null || _booking$product2 === void 0 ? void 0 : _booking$product2.extension_type) !== null && _ref11 !== void 0 ? _ref11 : sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.extension_type,
|
|
@@ -265,7 +265,9 @@ export function buildCacheItemFromOrderLine(input) {
|
|
|
265
265
|
price: (_price = sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.price) !== null && _price !== void 0 ? _price : selling,
|
|
266
266
|
selling_price: product.selling_price,
|
|
267
267
|
original_price: product.original_price
|
|
268
|
-
},
|
|
268
|
+
}, Number(((_product$product_sku = product.product_sku) === null || _product$product_sku === void 0 ? void 0 : _product$product_sku.open_sold_weight) || 0) === 1 ? {
|
|
269
|
+
product_sku: JSON.parse(JSON.stringify(product.product_sku))
|
|
270
|
+
} : {}), productOptionString ? {
|
|
269
271
|
product_option_string: productOptionString
|
|
270
272
|
} : {}), {}, {
|
|
271
273
|
_extend: extend,
|
|
@@ -75,7 +75,7 @@ function mapOrderBundleToOtherBundle(bundle) {
|
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
export function buildNormalProductCacheItemFromOrderLine(input) {
|
|
78
|
-
var _product$product_id, _product$selling_pric2, _product$original_pri, _product$metadata, _product$metadata2, _product$product_vari, _originExtend$other, _product$num, _product$product_vari2, _product$num2, _title, _product$note, _originExtend$price, _originExtend$total, _originExtend$origin_, _product$metadata3, _ref6, _title2, _ref7, _cover, _price3, _product$order_detail;
|
|
78
|
+
var _product$product_id, _product$selling_pric2, _product$original_pri, _product$metadata, _product$metadata2, _product$product_vari, _originExtend$other, _product$num, _product$product_vari2, _product$num2, _title, _product$note, _originExtend$price, _originExtend$total, _originExtend$origin_, _product$metadata3, _ref6, _title2, _ref7, _cover, _price3, _product$order_detail, _product$product_sku;
|
|
79
79
|
var product = input.product,
|
|
80
80
|
sourceProduct = input.sourceProduct;
|
|
81
81
|
var resolvedId = (_product$product_id = product.product_id) !== null && _product$product_id !== void 0 ? _product$product_id : sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.id;
|
|
@@ -127,7 +127,7 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
|
|
|
127
127
|
extend.skuValue = JSON.parse(JSON.stringify(originExtend.skuValue || originExtend._skuValue));
|
|
128
128
|
extend._skuValue = JSON.parse(JSON.stringify(extend.skuValue));
|
|
129
129
|
}
|
|
130
|
-
return _objectSpread(_objectSpread(_objectSpread({}, sourceProduct || {}), {}, {
|
|
130
|
+
return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, sourceProduct || {}), {}, {
|
|
131
131
|
id: resolvedId,
|
|
132
132
|
product_id: resolvedId,
|
|
133
133
|
_id: uid,
|
|
@@ -141,7 +141,10 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
|
|
|
141
141
|
} : {}), {}, {
|
|
142
142
|
note: product.note,
|
|
143
143
|
order_detail_id: (_product$order_detail = product.order_detail_id) !== null && _product$order_detail !== void 0 ? _product$order_detail : null,
|
|
144
|
-
discount_list: discountList
|
|
144
|
+
discount_list: discountList
|
|
145
|
+
}, Number(((_product$product_sku = product.product_sku) === null || _product$product_sku === void 0 ? void 0 : _product$product_sku.open_sold_weight) || 0) === 1 ? {
|
|
146
|
+
product_sku: JSON.parse(JSON.stringify(product.product_sku))
|
|
147
|
+
} : {}), {}, {
|
|
145
148
|
new: 0,
|
|
146
149
|
autoClose: true,
|
|
147
150
|
_extend: extend
|
|
@@ -27,6 +27,8 @@ export declare class OpenDataModule extends BaseModule implements Module {
|
|
|
27
27
|
fetchOpenData(params: OpenDataFetchParams): Promise<OpenDataConfig>;
|
|
28
28
|
getOpenData(): OpenDataConfig | null;
|
|
29
29
|
getLastFetchedAt(): number | null;
|
|
30
|
+
/** 清除内存与 sessionStorage 镜像中的 OpenData,供宿主切店时调用。 */
|
|
31
|
+
clearCache(): void;
|
|
30
32
|
checkAvailability(scheduleModule?: ScheduleModule): OpenDataAvailabilityResult;
|
|
31
33
|
storeChange(): void;
|
|
32
34
|
}
|
|
@@ -166,6 +166,14 @@ export var OpenDataModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
166
166
|
var _this$store$lastFetch;
|
|
167
167
|
return (_this$store$lastFetch = this.store.lastFetchedAt) !== null && _this$store$lastFetch !== void 0 ? _this$store$lastFetch : null;
|
|
168
168
|
}
|
|
169
|
+
|
|
170
|
+
/** 清除内存与 sessionStorage 镜像中的 OpenData,供宿主切店时调用。 */
|
|
171
|
+
}, {
|
|
172
|
+
key: "clearCache",
|
|
173
|
+
value: function clearCache() {
|
|
174
|
+
this.store.data = null;
|
|
175
|
+
this.store.lastFetchedAt = null;
|
|
176
|
+
}
|
|
169
177
|
}, {
|
|
170
178
|
key: "checkAvailability",
|
|
171
179
|
value: function checkAvailability(scheduleModule) {
|
|
@@ -3,7 +3,7 @@ import { BaseModule } from '../BaseModule';
|
|
|
3
3
|
import { OrderModuleAPI, CommitOrderParams, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, CancelOrderParams, ChangeBookingStatusParams, CheckoutOrderParams } from './types';
|
|
4
4
|
import { CartItem } from '../Cart/types';
|
|
5
5
|
import { type SubmitPayloadEnhancer } from './utils';
|
|
6
|
-
import type { OrderAmountSnapshot, AddProductBookingInput, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions } from './types';
|
|
6
|
+
import type { OrderAmountSnapshot, AddProductBookingInput, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions } from './types';
|
|
7
7
|
import type { ICustomer } from '../AccountList/types';
|
|
8
8
|
import type { Discount } from '../Discount/types';
|
|
9
9
|
import { UnavailableReason } from '../Rules/types';
|
|
@@ -14,7 +14,12 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
14
14
|
private request;
|
|
15
15
|
private logger;
|
|
16
16
|
private window;
|
|
17
|
+
private appPlugin;
|
|
17
18
|
private cacheId;
|
|
19
|
+
private fatherModule;
|
|
20
|
+
private openCache;
|
|
21
|
+
private sessionStoragePersistEnabled;
|
|
22
|
+
private sessionStorageRestoreRecord;
|
|
18
23
|
private salesSummaryModuleName;
|
|
19
24
|
private rulesHooksOverride?;
|
|
20
25
|
private moduleHooksOverride?;
|
|
@@ -45,6 +50,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
45
50
|
static populateSavedAmounts(productList: Array<Record<string, any>>, discountList: Array<Record<string, any>>): void;
|
|
46
51
|
private applyProductDiscountPrices;
|
|
47
52
|
constructor(name?: string, version?: string);
|
|
53
|
+
private syncSessionStorageOptions;
|
|
48
54
|
initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
|
|
49
55
|
destroy(): Promise<void>;
|
|
50
56
|
/**
|
|
@@ -80,6 +86,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
80
86
|
private ensureEditDiscountConfigForProductChange;
|
|
81
87
|
scanCode(code: string, customerId?: number): Promise<{
|
|
82
88
|
isAvailable: boolean;
|
|
89
|
+
isAccepted?: boolean;
|
|
83
90
|
discountList: Discount[];
|
|
84
91
|
type: 'server' | 'clientCalc';
|
|
85
92
|
unavailableReason?: UnavailableReason;
|
|
@@ -135,7 +142,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
135
142
|
}): void;
|
|
136
143
|
/**
|
|
137
144
|
* 控制 IndexedDB 草稿(saveDraft)是否写入。
|
|
138
|
-
*
|
|
145
|
+
* 此开关仅影响 saveDraft;可选 sessionStorage 会话恢复由
|
|
146
|
+
* enableSessionStoragePersist 独立控制。
|
|
139
147
|
*
|
|
140
148
|
* @example
|
|
141
149
|
* order.setEnableTempOrderPersist(false); // BigSale 弹窗:跳过 ~1s 的 dbUpdate
|
|
@@ -143,8 +151,12 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
143
151
|
setEnableTempOrderPersist(enabled: boolean): void;
|
|
144
152
|
/** 是否允许 saveDraft 写入 IndexedDB 草稿。 */
|
|
145
153
|
isTempOrderPersistEnabled(): boolean;
|
|
146
|
-
/**
|
|
154
|
+
/**
|
|
155
|
+
* 在 UnifiedBookingSales 显式开启会话恢复时,将完整 tempOrder 写入
|
|
156
|
+
* sessionStorage 的 cacheId 分桶。写入失败由 BaseModule 静默降级。
|
|
157
|
+
*/
|
|
147
158
|
persistTempOrder(): void;
|
|
159
|
+
consumeSessionStorageRestore(): Record<string, any> | null;
|
|
148
160
|
notifyTempOrderChanged(): void;
|
|
149
161
|
private createDefaultTempOrderInstance;
|
|
150
162
|
private createExternalSaleNumber;
|
|
@@ -177,6 +189,9 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
177
189
|
};
|
|
178
190
|
private calculateDepositPaidAmount;
|
|
179
191
|
private resolveNextOrderPaymentType;
|
|
192
|
+
private getPaymentNumberAppData;
|
|
193
|
+
private getPaymentNumberDevicePrefixSync;
|
|
194
|
+
private getPaymentNumberDevicePrefixAsync;
|
|
180
195
|
private normalizePaymentSource;
|
|
181
196
|
private updateTempOrderPaymentStatus;
|
|
182
197
|
private shouldKeepPaymentStatusAfterAmountRecalc;
|
|
@@ -308,19 +323,20 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
308
323
|
* 用一组支付来源覆盖当前订单支付项。
|
|
309
324
|
*
|
|
310
325
|
* 入参允许来自 PaymentModule 的 PaymentItem,内部统一映射为 Sales 协议:
|
|
311
|
-
* uuid
|
|
326
|
+
* 新支付来源的 uuid 会作为 payment_number 的唯一号段,id -> custom_payment_id,
|
|
312
327
|
* isSynced 等运行态字段不会进入 tempOrder.payments。
|
|
313
328
|
*/
|
|
314
329
|
setOrderPayments(payments: OrderPaymentSource[]): OrderPaymentData[];
|
|
315
|
-
/**
|
|
330
|
+
/** 同步兼容入口:按调用当下的 device_id 或 LOCAL 生成支付编号。 */
|
|
316
331
|
addOrderPayment(payment: OrderPaymentSource): OrderPaymentData[];
|
|
332
|
+
/** 异步入口:创建支付项时读取最新 IoT 设备短号。 */
|
|
333
|
+
addOrderPaymentAsync(payment: OrderPaymentSource): Promise<OrderPaymentData[]>;
|
|
334
|
+
private addOrderPaymentWithDevicePrefix;
|
|
317
335
|
/**
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
* 该方法服务 PaymentModal 的 void / 编辑场景;更新 metadata 时会做浅合并,
|
|
321
|
-
* 避免覆盖 unique_payment_number、现金实付/找零等已有元数据。
|
|
336
|
+
* 默认按支付唯一号精确更新;仅显式指定 legacy 时兼容历史支付标识。
|
|
337
|
+
* metadata 与 transactions 会分别合并,避免覆盖支付会话号和已有交易记录。
|
|
322
338
|
*/
|
|
323
|
-
updateOrderPayment(paymentIdentity: string | number, updates: Partial<OrderPaymentData> & Record<string, any
|
|
339
|
+
updateOrderPayment(paymentIdentity: string | number, updates: Partial<OrderPaymentData> & Record<string, any>, options?: OrderPaymentUpdateOptions): Promise<OrderPaymentUpdateResult>;
|
|
324
340
|
/** 从当前订单支付项中移除指定支付项。 */
|
|
325
341
|
deleteOrderPayment(paymentIdentity: string | number): OrderPaymentData[];
|
|
326
342
|
private confirmPendingVoucherPaymentsInList;
|
|
@@ -343,7 +359,11 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
343
359
|
*/
|
|
344
360
|
updateVoucherOrderPayments(payments: OrderPaymentSource[], options?: {
|
|
345
361
|
status?: 'paid' | 'payment_pending';
|
|
362
|
+
devicePrefix?: string;
|
|
346
363
|
}): OrderPaymentData[];
|
|
364
|
+
updateVoucherOrderPaymentsAsync(payments: OrderPaymentSource[], options?: {
|
|
365
|
+
status?: 'paid' | 'payment_pending';
|
|
366
|
+
}): Promise<OrderPaymentData[]>;
|
|
347
367
|
private shouldMergeProductToOrder;
|
|
348
368
|
private hasOrderProductLineNote;
|
|
349
369
|
/**
|
|
@@ -428,6 +448,14 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
428
448
|
type?: string;
|
|
429
449
|
}): import("./types").OrderSubmitPayload;
|
|
430
450
|
applyLocalPrintOrderNumbers(order?: Record<string, any> | null): Promise<OrderTempOrder>;
|
|
451
|
+
saveTempOrderAsDraft<T = any>(params?: {
|
|
452
|
+
cacheId?: string;
|
|
453
|
+
platform?: string;
|
|
454
|
+
businessCode?: string;
|
|
455
|
+
channel?: string;
|
|
456
|
+
type?: string;
|
|
457
|
+
enhancePayload?: SubmitPayloadEnhancer;
|
|
458
|
+
}): Promise<T>;
|
|
431
459
|
/**
|
|
432
460
|
* 提交当前 Sales tempOrder。
|
|
433
461
|
*
|
|
@@ -519,6 +547,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
519
547
|
*/
|
|
520
548
|
hydrateTempOrderFromRecord(record: Record<string, any>, options?: {
|
|
521
549
|
recalcOnHydrate?: boolean;
|
|
550
|
+
source?: 'salesDetail' | 'sessionStorage';
|
|
522
551
|
}): Promise<OrderTempOrder>;
|
|
523
552
|
/**
|
|
524
553
|
* 兼容后端详情将 holder 放在 metadata.holder 的历史形态,统一补到运行时展示路径。
|
|
@@ -533,6 +562,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
533
562
|
*/
|
|
534
563
|
private seedAnonymousBookingUidsFromProducts;
|
|
535
564
|
private normalizeTempOrderForRuntime;
|
|
565
|
+
private isSyntheticDraftOrderIdForRuntime;
|
|
566
|
+
private withoutSyntheticDraftOrderIdForRuntime;
|
|
536
567
|
private hydrateLinkedBookingIdentity;
|
|
537
568
|
private pickHydratedDisplayText;
|
|
538
569
|
private formatHydratedNamePair;
|