@pisell/pisellos 2.3.73 → 2.3.75

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 (296) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +111 -71
  3. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  4. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +2 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +36 -64
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Quotation/index.d.ts +6 -0
  15. package/dist/modules/Quotation/index.js +75 -19
  16. package/dist/modules/Rules/index.js +1 -4
  17. package/dist/modules/Schedule/index.js +0 -1
  18. package/dist/modules/Schedule/utils.js +0 -1
  19. package/dist/modules/Step/index.js +0 -1
  20. package/dist/plugins/request.d.ts +1 -0
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.d.ts +8 -2
  24. package/dist/server/index.js +303 -269
  25. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  26. package/dist/server/modules/floor-plan/index.js +240 -98
  27. package/dist/server/modules/menu/index.js +75 -59
  28. package/dist/server/modules/order/index.d.ts +17 -7
  29. package/dist/server/modules/order/index.js +421 -211
  30. package/dist/server/modules/products/index.d.ts +8 -2
  31. package/dist/server/modules/products/index.js +191 -117
  32. package/dist/server/modules/quotation/index.js +29 -38
  33. package/dist/server/modules/resource/index.js +24 -17
  34. package/dist/server/modules/schedule/index.js +27 -35
  35. package/dist/server/utils/product.js +0 -1
  36. package/dist/solution/BaseSales/index.js +38 -41
  37. package/dist/solution/BookingByStep/index.d.ts +1 -1
  38. package/dist/solution/BookingByStep/index.js +7 -59
  39. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  40. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  41. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  42. package/dist/solution/BookingTicket/index.js +0 -2
  43. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  44. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  45. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  46. package/dist/solution/BuyTickets/index.js +9 -12
  47. package/dist/solution/Checkout/index.js +177 -252
  48. package/dist/solution/Checkout/utils/index.js +4 -16
  49. package/dist/solution/RegisterAndLogin/index.js +30 -76
  50. package/dist/solution/ScanOrder/index.js +50 -60
  51. package/dist/solution/ShopDiscount/index.js +2 -7
  52. package/dist/solution/VenueBooking/index.js +45 -55
  53. package/dist/utils/task.js +15 -18
  54. package/dist/utils/watch.js +0 -1
  55. package/lib/apis/picoding.js +2 -0
  56. package/lib/core/index.d.ts +7 -0
  57. package/lib/core/index.js +149 -131
  58. package/lib/effects/index.js +46 -57
  59. package/lib/index.js +82 -49
  60. package/lib/model/index.js +14 -21
  61. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  62. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  63. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  64. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  65. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  66. package/lib/model/strategy/adapter/index.js +100 -64
  67. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  68. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  69. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  70. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  71. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  72. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  73. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  74. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  75. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  76. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  77. package/lib/model/strategy/adapter/type.js +4 -16
  78. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  79. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  80. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  81. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  82. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  83. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  84. package/lib/model/strategy/engine.js +270 -168
  85. package/lib/model/strategy/index.js +49 -34
  86. package/lib/model/strategy/strategy-example.js +243 -239
  87. package/lib/model/strategy/type.js +100 -40
  88. package/lib/modules/Account/index.js +39 -53
  89. package/lib/modules/Account/types.js +20 -33
  90. package/lib/modules/AccountList/index.js +116 -154
  91. package/lib/modules/AccountList/types.js +30 -31
  92. package/lib/modules/AccountList/utils.js +18 -30
  93. package/lib/modules/BaseModule.js +23 -42
  94. package/lib/modules/BookingContext/index.js +158 -136
  95. package/lib/modules/BookingContext/types.js +46 -32
  96. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  97. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  98. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  99. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  100. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  101. package/lib/modules/BookingContext/utils/index.js +124 -41
  102. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  103. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  104. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  105. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  106. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  107. package/lib/modules/BookingContext/utils/resources.js +209 -167
  108. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  109. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  110. package/lib/modules/Cart/index.js +170 -124
  111. package/lib/modules/Cart/types.js +46 -51
  112. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  113. package/lib/modules/Cart/utils/cartDate.js +56 -61
  114. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  115. package/lib/modules/Cart/utils/cartNote.js +27 -32
  116. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  117. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  118. package/lib/modules/Cart/utils/cartResource.js +70 -78
  119. package/lib/modules/Cart/utils/changePrice.js +22 -50
  120. package/lib/modules/Cart/utils/index.js +106 -48
  121. package/lib/modules/Customer/constants.js +13 -34
  122. package/lib/modules/Customer/index.js +235 -172
  123. package/lib/modules/Customer/types.js +38 -35
  124. package/lib/modules/Date/index.js +116 -115
  125. package/lib/modules/Date/types.js +16 -28
  126. package/lib/modules/Date/utils.js +174 -123
  127. package/lib/modules/Discount/index.js +122 -127
  128. package/lib/modules/Discount/types.js +9 -31
  129. package/lib/modules/Guests/index.js +30 -56
  130. package/lib/modules/Guests/types.js +23 -33
  131. package/lib/modules/Holder/index.js +209 -189
  132. package/lib/modules/Holder/types.js +4 -16
  133. package/lib/modules/Holder/utils.js +20 -49
  134. package/lib/modules/OpenData/index.js +70 -76
  135. package/lib/modules/OpenData/types.js +4 -16
  136. package/lib/modules/OpenData/utils.js +44 -78
  137. package/lib/modules/Order/index.d.ts +1 -1
  138. package/lib/modules/Order/index.js +1713 -2118
  139. package/lib/modules/Order/payment-utils.js +77 -120
  140. package/lib/modules/Order/types.js +88 -35
  141. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  142. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  143. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  144. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  145. package/lib/modules/Order/utils.js +814 -647
  146. package/lib/modules/Payment/cash.js +20 -33
  147. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  148. package/lib/modules/Payment/eftpos.js +16 -30
  149. package/lib/modules/Payment/index.js +532 -399
  150. package/lib/modules/Payment/mx51.js +1 -0
  151. package/lib/modules/Payment/types.js +230 -108
  152. package/lib/modules/Payment/utils.js +52 -51
  153. package/lib/modules/Payment/walletpass.js +485 -660
  154. package/lib/modules/Product/index.js +51 -46
  155. package/lib/modules/Product/types.js +4 -16
  156. package/lib/modules/Product/utils.js +32 -33
  157. package/lib/modules/ProductList/index.js +113 -123
  158. package/lib/modules/ProductList/types.js +9 -31
  159. package/lib/modules/Quotation/index.d.ts +6 -0
  160. package/lib/modules/Quotation/index.js +110 -103
  161. package/lib/modules/Quotation/types.js +4 -16
  162. package/lib/modules/Resource/index.js +27 -59
  163. package/lib/modules/Resource/types.js +22 -32
  164. package/lib/modules/Resource/utils.js +30 -38
  165. package/lib/modules/ResourcePlanner/index.js +25 -23
  166. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  167. package/lib/modules/ResourcePlanner/planner.js +589 -770
  168. package/lib/modules/ResourcePlanner/types.js +10 -29
  169. package/lib/modules/Rules/index.js +1218 -959
  170. package/lib/modules/Rules/types.js +17 -40
  171. package/lib/modules/SalesSummary/index.js +85 -90
  172. package/lib/modules/SalesSummary/types.js +4 -16
  173. package/lib/modules/SalesSummary/utils.js +355 -430
  174. package/lib/modules/ScanOrderLogger/index.js +59 -79
  175. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  176. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  177. package/lib/modules/ScanOrderLogger/types.js +4 -16
  178. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  179. package/lib/modules/Schedule/index.js +100 -114
  180. package/lib/modules/Schedule/type.js +4 -16
  181. package/lib/modules/Schedule/types.js +4 -16
  182. package/lib/modules/Schedule/utils.js +433 -291
  183. package/lib/modules/Step/index.js +40 -52
  184. package/lib/modules/Step/tyeps.js +4 -16
  185. package/lib/modules/Summary/index.js +66 -71
  186. package/lib/modules/Summary/types.js +4 -16
  187. package/lib/modules/Summary/utils.js +773 -418
  188. package/lib/modules/SurchargeList/index.js +46 -60
  189. package/lib/modules/SurchargeList/types.js +4 -16
  190. package/lib/modules/index.js +245 -63
  191. package/lib/plugins/app.js +4 -16
  192. package/lib/plugins/index.js +36 -25
  193. package/lib/plugins/request.d.ts +1 -0
  194. package/lib/plugins/request.js +137 -126
  195. package/lib/plugins/shopStore.js +4 -16
  196. package/lib/plugins/user.js +4 -16
  197. package/lib/plugins/window.js +171 -179
  198. package/lib/server/index.d.ts +8 -2
  199. package/lib/server/index.js +3083 -2663
  200. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  201. package/lib/server/modules/floor-plan/index.js +159 -127
  202. package/lib/server/modules/floor-plan/types.js +15 -30
  203. package/lib/server/modules/index.js +106 -68
  204. package/lib/server/modules/menu/index.js +170 -124
  205. package/lib/server/modules/menu/types.js +18 -31
  206. package/lib/server/modules/order/index.d.ts +17 -7
  207. package/lib/server/modules/order/index.js +916 -977
  208. package/lib/server/modules/order/types.js +122 -33
  209. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  210. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  211. package/lib/server/modules/payment/index.js +59 -83
  212. package/lib/server/modules/payment/types.js +4 -16
  213. package/lib/server/modules/products/index.d.ts +8 -2
  214. package/lib/server/modules/products/index.js +656 -471
  215. package/lib/server/modules/products/types.js +44 -34
  216. package/lib/server/modules/quotation/index.js +137 -172
  217. package/lib/server/modules/quotation/types.js +21 -31
  218. package/lib/server/modules/resource/index.js +225 -186
  219. package/lib/server/modules/resource/types.js +42 -33
  220. package/lib/server/modules/schedule/index.js +135 -123
  221. package/lib/server/modules/schedule/types.js +14 -21
  222. package/lib/server/modules/schedule/utils.js +334 -163
  223. package/lib/server/types.js +4 -16
  224. package/lib/server/utils/index.js +25 -23
  225. package/lib/server/utils/product.js +196 -139
  226. package/lib/server/utils/schedule.js +34 -41
  227. package/lib/server/utils/small-ticket.js +479 -456
  228. package/lib/server/utils/time.js +40 -49
  229. package/lib/solution/BaseSales/index.js +1186 -1410
  230. package/lib/solution/BaseSales/types.js +42 -38
  231. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  232. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  233. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  234. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  235. package/lib/solution/BaseSales/utils.js +158 -143
  236. package/lib/solution/BookingByStep/index.d.ts +1 -1
  237. package/lib/solution/BookingByStep/index.js +1527 -1340
  238. package/lib/solution/BookingByStep/types.js +40 -99
  239. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  240. package/lib/solution/BookingByStep/utils/products.js +42 -52
  241. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  242. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  243. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  244. package/lib/solution/BookingTicket/index.js +607 -522
  245. package/lib/solution/BookingTicket/types.js +99 -77
  246. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  247. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  248. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  249. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  250. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  251. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  252. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  253. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  254. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  255. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  256. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  257. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  258. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  259. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  260. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  261. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  262. package/lib/solution/BuyTickets/index.js +67 -70
  263. package/lib/solution/BuyTickets/types.js +22 -38
  264. package/lib/solution/Checkout/index.js +1451 -1158
  265. package/lib/solution/Checkout/types.js +91 -61
  266. package/lib/solution/Checkout/utils/index.js +228 -156
  267. package/lib/solution/PlaceOrder/index.js +55 -0
  268. package/lib/solution/RegisterAndLogin/config.js +493 -460
  269. package/lib/solution/RegisterAndLogin/index.js +633 -630
  270. package/lib/solution/RegisterAndLogin/types.js +189 -76
  271. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  272. package/lib/solution/Sales/index.js +328 -324
  273. package/lib/solution/Sales/types.js +27 -33
  274. package/lib/solution/ScanOrder/index.js +832 -864
  275. package/lib/solution/ScanOrder/types.js +33 -34
  276. package/lib/solution/ScanOrder/utils.js +409 -374
  277. package/lib/solution/ShopDiscount/index.js +226 -232
  278. package/lib/solution/ShopDiscount/types.js +15 -37
  279. package/lib/solution/ShopDiscount/utils.js +300 -172
  280. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  281. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  282. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  283. package/lib/solution/VenueBooking/index.js +811 -879
  284. package/lib/solution/VenueBooking/types.js +19 -39
  285. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  286. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  287. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  288. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  289. package/lib/solution/VenueBooking/utils.js +130 -67
  290. package/lib/solution/index.js +124 -41
  291. package/lib/store/createStore.js +32 -29
  292. package/lib/types/index.js +4 -16
  293. package/lib/utils/payment-number.js +26 -46
  294. package/lib/utils/task.js +36 -36
  295. package/lib/utils/watch.js +81 -47
  296. package/package.json +2 -1
@@ -1,283 +1,271 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/model/strategy/adapter/promotion/examples.ts
20
- var examples_exports = {};
21
- __export(examples_exports, {
22
- BUY_X_GET_Y_FREE_STRATEGY: () => BUY_X_GET_Y_FREE_STRATEGY,
23
- ITEM_REWARD_STRATEGY: () => ITEM_REWARD_STRATEGY,
24
- X_ITEMS_FOR_Y_PRICE_STRATEGY: () => X_ITEMS_FOR_Y_PRICE_STRATEGY
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
25
5
  });
26
- module.exports = __toCommonJS(examples_exports);
27
- var X_ITEMS_FOR_Y_PRICE_STRATEGY = {
6
+ exports.X_ITEMS_FOR_Y_PRICE_STRATEGY = exports.ITEM_REWARD_STRATEGY = exports.BUY_X_GET_Y_FREE_STRATEGY = void 0;
7
+ /**
8
+ * X件Y元策略配置示例
9
+ *
10
+ * 业务规则:
11
+ * - 每X件商品固定价格Y元(可累计)
12
+ * - 支持跨商品组合(A+B可以凑成一组)
13
+ * - 买5件 = 2组优惠 + 1件原价
14
+ *
15
+ * 商品匹配规则:
16
+ * - product_variant_id = 0 表示匹配任意变体
17
+ * - product_variant_id != 0 表示精确匹配该变体
18
+ */
19
+ const X_ITEMS_FOR_Y_PRICE_STRATEGY = exports.X_ITEMS_FOR_Y_PRICE_STRATEGY = {
28
20
  metadata: {
29
- id: "STRATEGY_001",
21
+ id: 'STRATEGY_001',
30
22
  name: {
31
- en: "2 items for $10",
32
- "zh-CN": "2杯10元",
33
- "zh-HK": "2杯10元"
23
+ en: '2 items for $10',
24
+ 'zh-CN': '2杯10元',
25
+ 'zh-HK': '2杯10元'
34
26
  },
35
- type: "promotion",
27
+ type: 'promotion',
36
28
  custom: {
37
29
  display: {
38
30
  product_card: {
39
31
  text: {
40
- en: "2 for $10",
41
- "zh-CN": "2杯10元",
42
- "zh-HK": "2杯10元"
32
+ en: '2 for $10',
33
+ 'zh-CN': '2杯10元',
34
+ 'zh-HK': '2杯10元'
43
35
  },
44
- type: "tag"
36
+ type: 'tag'
45
37
  }
46
38
  }
47
39
  }
48
40
  },
49
41
  conditions: {
50
- operator: "and",
51
- rules: [
52
- {
53
- type: "operator",
54
- field: "currentDateTime",
55
- value: "2023-01-01 00:00:00",
56
- operator: ">="
57
- },
58
- {
59
- type: "operator",
60
- field: "currentDateTime",
61
- value: "2027-01-01 00:00:00",
62
- operator: "<="
63
- },
64
- {
65
- type: "operator",
66
- field: "productIdAndVariantId",
67
- value: [
68
- {
69
- product_id: 60736,
70
- product_variant_id: 0
71
- // 0 = 匹配任意变体
72
- },
73
- {
74
- product_id: 60737,
75
- product_variant_id: 0
76
- // 0 = 匹配任意变体
77
- }
78
- ],
79
- operator: "product_match"
80
- }
81
- ],
82
- actionIds: ["1"]
42
+ operator: 'and',
43
+ rules: [{
44
+ type: 'operator',
45
+ field: 'currentDateTime',
46
+ value: '2023-01-01 00:00:00',
47
+ operator: '>='
48
+ }, {
49
+ type: 'operator',
50
+ field: 'currentDateTime',
51
+ value: '2027-01-01 00:00:00',
52
+ operator: '<='
53
+ }, {
54
+ type: 'operator',
55
+ field: 'productIdAndVariantId',
56
+ value: [{
57
+ product_id: 60736,
58
+ product_variant_id: 0 // 0 = 匹配任意变体
59
+ }, {
60
+ product_id: 60737,
61
+ product_variant_id: 0 // 0 = 匹配任意变体
62
+ }],
63
+ operator: 'product_match'
64
+ }],
65
+ actionIds: ['1']
83
66
  },
84
- actions: [
85
- {
86
- id: "1",
87
- type: "X_ITEMS_FOR_Y_PRICE",
88
- value: {
89
- x: 2,
90
- // 每X件
91
- price: 10
92
- // 固定价格Y元
93
- },
94
- valueType: "object",
95
- target: "product",
96
- priority: 1,
97
- config: {
98
- allowCrossProduct: true,
99
- // 允许跨商品组合(A+B可以凑成一组)
100
- cumulative: true
101
- // 可累计(买5件 = 2组优惠 + 1件原价)
102
- }
67
+ actions: [{
68
+ id: '1',
69
+ type: 'X_ITEMS_FOR_Y_PRICE',
70
+ value: {
71
+ x: 2,
72
+ // 每X件
73
+ price: 10 // 固定价格Y元
74
+ },
75
+ valueType: 'object',
76
+ target: 'product',
77
+ priority: 1,
78
+ config: {
79
+ allowCrossProduct: true,
80
+ // 允许跨商品组合(A+B可以凑成一组)
81
+ cumulative: true // 可累计(买5件 = 2组优惠 + 1件原价)
103
82
  }
104
- ]
83
+ }]
105
84
  };
106
- var BUY_X_GET_Y_FREE_STRATEGY = {
85
+
86
+ /**
87
+ * 买X送Y策略配置示例
88
+ *
89
+ * 业务规则:
90
+ * - 买X件送Y件(可累计:买2送2、买3送3...)
91
+ * - 赠品由用户从列表中选择
92
+ *
93
+ * 商品匹配规则:
94
+ * - product_variant_id = 0 表示匹配任意变体
95
+ * - product_variant_id != 0 表示精确匹配该变体
96
+ */
97
+ const BUY_X_GET_Y_FREE_STRATEGY = exports.BUY_X_GET_Y_FREE_STRATEGY = {
107
98
  metadata: {
108
- id: "STRATEGY_002",
99
+ id: 'STRATEGY_002',
109
100
  name: {
110
- en: "Buy 1 Get 1 Free",
111
- "zh-CN": "买1送1",
112
- "zh-HK": "買1送1"
101
+ en: 'Buy 1 Get 1 Free',
102
+ 'zh-CN': '买1送1',
103
+ 'zh-HK': '買1送1'
113
104
  },
114
- type: "promotion",
105
+ type: 'promotion',
115
106
  custom: {
116
107
  display: {
117
108
  product_card: {
118
109
  text: {
119
- en: "Buy 1 Get 1",
120
- "zh-CN": "买1送1",
121
- "zh-HK": "買1送1"
110
+ en: 'Buy 1 Get 1',
111
+ 'zh-CN': '买1送1',
112
+ 'zh-HK': '買1送1'
122
113
  },
123
- type: "tag"
114
+ type: 'tag'
124
115
  }
125
116
  }
126
117
  }
127
118
  },
128
119
  conditions: {
129
- operator: "and",
130
- rules: [
131
- {
132
- type: "operator",
133
- field: "currentDateTime",
134
- value: "2023-01-01 00:00:00",
135
- operator: ">="
136
- },
137
- {
138
- type: "operator",
139
- field: "currentDateTime",
140
- value: "2027-01-01 00:00:00",
141
- operator: "<="
142
- },
143
- {
144
- type: "operator",
145
- field: "productIdAndVariantId",
146
- value: [
147
- {
148
- product_id: 60736,
149
- product_variant_id: 0
150
- // 0 = 匹配任意变体
151
- },
152
- {
153
- product_id: 60737,
154
- product_variant_id: 0
155
- // 0 = 匹配任意变体
156
- }
157
- ],
158
- operator: "product_match"
159
- }
160
- ],
161
- actionIds: ["1"]
120
+ operator: 'and',
121
+ rules: [{
122
+ type: 'operator',
123
+ field: 'currentDateTime',
124
+ value: '2023-01-01 00:00:00',
125
+ operator: '>='
126
+ }, {
127
+ type: 'operator',
128
+ field: 'currentDateTime',
129
+ value: '2027-01-01 00:00:00',
130
+ operator: '<='
131
+ }, {
132
+ type: 'operator',
133
+ field: 'productIdAndVariantId',
134
+ value: [{
135
+ product_id: 60736,
136
+ product_variant_id: 0 // 0 = 匹配任意变体
137
+ }, {
138
+ product_id: 60737,
139
+ product_variant_id: 0 // 0 = 匹配任意变体
140
+ }],
141
+ operator: 'product_match'
142
+ }],
143
+ actionIds: ['1']
162
144
  },
163
- actions: [
164
- {
165
- id: "1",
166
- type: "BUY_X_GET_Y_FREE",
167
- value: {
168
- buyQuantity: 1,
169
- // 买X
170
- freeQuantity: 1
171
- // 送Y件
172
- },
173
- valueType: "object",
174
- target: "product",
175
- priority: 1,
176
- config: {
177
- // 可累计(买2送2、买3送3...)
178
- cumulative: true,
179
- // 可选的赠品列表
180
- giftProducts: [
181
- { product_id: 60757, product_variant_id: 0 },
182
- { product_id: 38782, product_variant_id: 0 },
183
- { product_id: 60749, product_variant_id: 27267 }
184
- ]
185
- }
145
+ actions: [{
146
+ id: '1',
147
+ type: 'BUY_X_GET_Y_FREE',
148
+ value: {
149
+ buyQuantity: 1,
150
+ // 买X件
151
+ freeQuantity: 1 // 送Y
152
+ },
153
+ valueType: 'object',
154
+ target: 'product',
155
+ priority: 1,
156
+ config: {
157
+ // 可累计(买2送2、买3送3...)
158
+ cumulative: true,
159
+ // 可选的赠品列表
160
+ giftProducts: [{
161
+ product_id: 60757,
162
+ product_variant_id: 0
163
+ }, {
164
+ product_id: 38782,
165
+ product_variant_id: 0
166
+ }, {
167
+ product_id: 60749,
168
+ product_variant_id: 27267
169
+ }]
186
170
  }
187
- ]
171
+ }]
188
172
  };
189
- var ITEM_REWARD_STRATEGY = {
173
+
174
+ /**
175
+ * ITEM_REWARD 策略配置示例:儿童票触发婴儿票免费
176
+ *
177
+ * 业务规则:
178
+ * - 条件商品:儿童票(conditions.rules.productIdAndVariantId)
179
+ * - 奖励商品:购物车/订单内已经存在的婴儿票(actions[0].config.rewardTargets)
180
+ * - 本 action 不自动新增婴儿票;每次购物车变更后由统一促销链路重算
181
+ *
182
+ * 字段说明:
183
+ * - type: "ITEM_REWARD" 表示商品奖励 action
184
+ * - target: "product" 表示本期只奖励商品行
185
+ * - config.rewardTargets: 奖励对象数组,支持 { product_id, product_variant_id }
186
+ * - config.targetSelection: "consumer_best" 表示目标商品超额时选择节省金额最高的商品
187
+ * - value.rewardMethod:
188
+ * - "free": 目标商品最终价为 0
189
+ * - "percent_off": 百分比折扣,rewardValue 为 0-100
190
+ * - "amount_off": 每个目标商品固定减免 rewardValue
191
+ * - "fixed_price": 目标商品最终单价为 rewardValue
192
+ * - value.quantityRule:
193
+ * - "per_condition_quantity": 每满足 triggerQuantity 个条件商品,奖励 rewardQuantity 个目标商品
194
+ * - "all_targets": 满足条件后奖励全部目标商品
195
+ * - "max_per_order": 满足条件后每单最多奖励 maxRewardQuantity 个目标商品
196
+ */
197
+ const ITEM_REWARD_STRATEGY = exports.ITEM_REWARD_STRATEGY = {
190
198
  metadata: {
191
- id: "STRATEGY_003",
199
+ id: 'STRATEGY_003',
192
200
  name: {
193
- en: "Infant ticket free with child ticket",
194
- "zh-CN": "儿童票触发婴儿票免费",
195
- "zh-HK": "兒童票觸發嬰兒票免費"
201
+ en: 'Infant ticket free with child ticket',
202
+ 'zh-CN': '儿童票触发婴儿票免费',
203
+ 'zh-HK': '兒童票觸發嬰兒票免費'
196
204
  },
197
- type: "promotion",
205
+ type: 'promotion',
198
206
  custom: {
199
207
  display: {
200
208
  product_card: {
201
209
  text: {
202
- en: "Infant ticket free",
203
- "zh-CN": "婴儿票免费",
204
- "zh-HK": "嬰兒票免費"
210
+ en: 'Infant ticket free',
211
+ 'zh-CN': '婴儿票免费',
212
+ 'zh-HK': '嬰兒票免費'
205
213
  },
206
- type: "tag"
214
+ type: 'tag'
207
215
  }
208
216
  }
209
217
  }
210
218
  },
211
219
  conditions: {
212
- operator: "and",
213
- rules: [
214
- {
215
- type: "operator",
216
- field: "currentDateTime",
217
- value: "2023-01-01 00:00:00",
218
- operator: ">="
219
- },
220
- {
221
- type: "operator",
222
- field: "currentDateTime",
223
- value: "2030-01-01 00:00:00",
224
- operator: "<="
225
- },
226
- {
227
- type: "operator",
228
- field: "productIdAndVariantId",
229
- value: [
230
- {
231
- product_id: 1001,
232
- // 条件商品:儿童票
233
- product_variant_id: 0
234
- // 0 = 匹配任意变体
235
- }
236
- ],
237
- operator: "product_match"
238
- }
239
- ],
240
- actionIds: ["1"]
220
+ operator: 'and',
221
+ rules: [{
222
+ type: 'operator',
223
+ field: 'currentDateTime',
224
+ value: '2023-01-01 00:00:00',
225
+ operator: '>='
226
+ }, {
227
+ type: 'operator',
228
+ field: 'currentDateTime',
229
+ value: '2030-01-01 00:00:00',
230
+ operator: '<='
231
+ }, {
232
+ type: 'operator',
233
+ field: 'productIdAndVariantId',
234
+ value: [{
235
+ product_id: 1001,
236
+ // 条件商品:儿童票
237
+ product_variant_id: 0 // 0 = 匹配任意变体
238
+ }],
239
+ operator: 'product_match'
240
+ }],
241
+ actionIds: ['1']
241
242
  },
242
- actions: [
243
- {
244
- id: "1",
245
- type: "ITEM_REWARD",
246
- value: {
247
- rewardMethod: "free",
248
- // free | percent_off | amount_off | fixed_price
249
- rewardValue: 0,
250
- // free 可省略;其他 rewardMethod 使用
251
- quantityRule: "per_condition_quantity",
252
- // per_condition_quantity | all_targets | max_per_order
253
- triggerQuantity: 1,
254
- // N:每满足 N 个条件商品
255
- rewardQuantity: 1,
256
- // Y:奖励 Y 个目标商品
257
- maxRewardQuantity: 1
258
- // max_per_order 使用;本例保留为配置示意
259
- },
260
- valueType: "object",
261
- target: "product",
262
- priority: 1,
263
- config: {
264
- rewardTargets: [
265
- {
266
- product_id: 2001,
267
- // 奖励对象:婴儿票
268
- product_variant_id: 0
269
- // 0 = 匹配任意变体
270
- }
271
- ],
272
- targetSelection: "consumer_best"
273
- // consumer_best = 按可节省金额从高到低选择
274
- }
243
+ actions: [{
244
+ id: '1',
245
+ type: 'ITEM_REWARD',
246
+ value: {
247
+ rewardMethod: 'free',
248
+ // free | percent_off | amount_off | fixed_price
249
+ rewardValue: 0,
250
+ // free 可省略;其他 rewardMethod 使用
251
+ quantityRule: 'per_condition_quantity',
252
+ // per_condition_quantity | all_targets | max_per_order
253
+ triggerQuantity: 1,
254
+ // N:每满足 N 个条件商品
255
+ rewardQuantity: 1,
256
+ // Y:奖励 Y 个目标商品
257
+ maxRewardQuantity: 1 // max_per_order 使用;本例保留为配置示意
258
+ },
259
+ valueType: 'object',
260
+ target: 'product',
261
+ priority: 1,
262
+ config: {
263
+ rewardTargets: [{
264
+ product_id: 2001,
265
+ // 奖励对象:婴儿票
266
+ product_variant_id: 0 // 0 = 匹配任意变体
267
+ }],
268
+ targetSelection: 'consumer_best' // consumer_best = 按可节省金额从高到低选择
275
269
  }
276
- ]
277
- };
278
- // Annotate the CommonJS export names for ESM import in node:
279
- 0 && (module.exports = {
280
- BUY_X_GET_Y_FREE_STRATEGY,
281
- ITEM_REWARD_STRATEGY,
282
- X_ITEMS_FOR_Y_PRICE_STRATEGY
283
- });
270
+ }]
271
+ };
@@ -0,0 +1 @@
1
+ "use strict";