@pisell/pisellos 0.10.14 → 0.10.16

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 (301) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  3. package/dist/model/strategy/strategy-example.js +5 -19
  4. package/dist/modules/Cart/index.js +0 -3
  5. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  6. package/dist/modules/Date/index.js +1 -5
  7. package/dist/modules/Discount/index.js +2 -4
  8. package/dist/modules/OpenData/index.js +0 -2
  9. package/dist/modules/Order/index.d.ts +1 -1
  10. package/dist/modules/Order/index.js +75 -91
  11. package/dist/modules/Order/types.d.ts +5 -1
  12. package/dist/modules/Order/utils/virtualSettlement.d.ts +8 -1
  13. package/dist/modules/Order/utils/virtualSettlement.js +15 -2
  14. package/dist/modules/Order/utils.js +7 -1
  15. package/dist/modules/Payment/index.js +97 -162
  16. package/dist/modules/Product/types.d.ts +2 -0
  17. package/dist/modules/Rules/index.js +1 -4
  18. package/dist/modules/Schedule/index.js +0 -1
  19. package/dist/modules/Schedule/utils.js +0 -1
  20. package/dist/modules/Step/index.js +0 -1
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.js +97 -129
  24. package/dist/server/modules/menu/index.js +32 -41
  25. package/dist/server/modules/order/index.js +2 -4
  26. package/dist/server/modules/products/index.js +24 -42
  27. package/dist/server/modules/quotation/index.js +29 -38
  28. package/dist/server/modules/resource/index.js +3 -4
  29. package/dist/server/modules/schedule/index.js +27 -35
  30. package/dist/server/utils/product.js +0 -1
  31. package/dist/solution/BaseSales/index.js +107 -76
  32. package/dist/solution/BaseSales/types.d.ts +2 -0
  33. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  34. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  35. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  36. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -1
  37. package/dist/solution/BaseSales/utils.js +6 -3
  38. package/dist/solution/BookingByStep/index.d.ts +2 -2
  39. package/dist/solution/BookingByStep/index.js +7 -59
  40. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  41. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  42. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  43. package/dist/solution/BookingTicket/index.js +8 -4
  44. package/dist/solution/BookingTicket/utils/addProductDecision.js +3 -1
  45. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  46. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  47. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  48. package/dist/solution/BuyTickets/index.js +9 -12
  49. package/dist/solution/Checkout/index.js +177 -252
  50. package/dist/solution/Checkout/utils/index.js +4 -16
  51. package/dist/solution/RegisterAndLogin/index.js +30 -76
  52. package/dist/solution/ScanOrder/index.js +50 -60
  53. package/dist/solution/ScanOrder/types.d.ts +2 -0
  54. package/dist/solution/ScanOrder/utils.js +6 -3
  55. package/dist/solution/ShopDiscount/index.js +2 -7
  56. package/dist/solution/VenueBooking/index.js +45 -55
  57. package/dist/utils/task.js +15 -18
  58. package/dist/utils/watch.js +0 -1
  59. package/lib/apis/picoding.js +2 -0
  60. package/lib/core/index.js +131 -131
  61. package/lib/effects/index.js +46 -57
  62. package/lib/index.js +82 -49
  63. package/lib/model/index.js +14 -21
  64. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  65. package/lib/model/strategy/adapter/dataVariant/evaluator.js +209 -315
  66. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  67. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  68. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  69. package/lib/model/strategy/adapter/index.js +100 -64
  70. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  71. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  72. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  73. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  74. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  75. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  76. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  77. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  78. package/lib/model/strategy/adapter/promotion/index.js +43 -48
  79. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  80. package/lib/model/strategy/adapter/type.js +4 -16
  81. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  82. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  83. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  84. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  85. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  86. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  87. package/lib/model/strategy/engine.js +270 -168
  88. package/lib/model/strategy/index.js +49 -34
  89. package/lib/model/strategy/strategy-example.js +243 -239
  90. package/lib/model/strategy/type.js +100 -40
  91. package/lib/modules/Account/index.js +39 -53
  92. package/lib/modules/Account/types.js +20 -33
  93. package/lib/modules/AccountList/index.js +116 -154
  94. package/lib/modules/AccountList/types.js +30 -31
  95. package/lib/modules/AccountList/utils.js +18 -30
  96. package/lib/modules/BaseModule.js +23 -42
  97. package/lib/modules/BookingContext/index.js +158 -136
  98. package/lib/modules/BookingContext/types.js +46 -32
  99. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  100. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  101. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  102. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  103. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  104. package/lib/modules/BookingContext/utils/index.js +124 -41
  105. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  106. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  107. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  108. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  109. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  110. package/lib/modules/BookingContext/utils/resources.js +209 -167
  111. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  112. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  113. package/lib/modules/Cart/index.js +170 -124
  114. package/lib/modules/Cart/types.js +46 -51
  115. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  116. package/lib/modules/Cart/utils/cartDate.js +56 -61
  117. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  118. package/lib/modules/Cart/utils/cartNote.js +27 -32
  119. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  120. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  121. package/lib/modules/Cart/utils/cartResource.js +70 -78
  122. package/lib/modules/Cart/utils/changePrice.js +22 -50
  123. package/lib/modules/Cart/utils/index.js +106 -48
  124. package/lib/modules/Customer/constants.js +13 -34
  125. package/lib/modules/Customer/index.js +235 -172
  126. package/lib/modules/Customer/types.js +38 -35
  127. package/lib/modules/Date/index.js +116 -115
  128. package/lib/modules/Date/types.js +16 -28
  129. package/lib/modules/Date/utils.js +174 -123
  130. package/lib/modules/Discount/index.js +133 -143
  131. package/lib/modules/Discount/types.js +9 -31
  132. package/lib/modules/Guests/index.js +30 -56
  133. package/lib/modules/Guests/types.js +23 -33
  134. package/lib/modules/Holder/index.js +209 -189
  135. package/lib/modules/Holder/types.js +4 -16
  136. package/lib/modules/Holder/utils.js +20 -49
  137. package/lib/modules/OpenData/index.js +70 -76
  138. package/lib/modules/OpenData/types.js +4 -16
  139. package/lib/modules/OpenData/utils.js +44 -78
  140. package/lib/modules/Order/index.d.ts +1 -1
  141. package/lib/modules/Order/index.js +1810 -2238
  142. package/lib/modules/Order/payment-utils.js +77 -120
  143. package/lib/modules/Order/types.d.ts +5 -1
  144. package/lib/modules/Order/types.js +87 -35
  145. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  146. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  147. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  148. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  149. package/lib/modules/Order/utils/virtualSettlement.d.ts +8 -1
  150. package/lib/modules/Order/utils/virtualSettlement.js +126 -164
  151. package/lib/modules/Order/utils.js +834 -668
  152. package/lib/modules/Payment/cash.js +20 -33
  153. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  154. package/lib/modules/Payment/eftpos.js +16 -30
  155. package/lib/modules/Payment/index.js +532 -399
  156. package/lib/modules/Payment/mx51.js +1 -0
  157. package/lib/modules/Payment/types.js +230 -108
  158. package/lib/modules/Payment/utils.js +52 -51
  159. package/lib/modules/Payment/walletpass.js +485 -660
  160. package/lib/modules/Product/index.js +51 -46
  161. package/lib/modules/Product/types.d.ts +2 -0
  162. package/lib/modules/Product/types.js +4 -16
  163. package/lib/modules/Product/utils.js +32 -33
  164. package/lib/modules/ProductList/index.js +138 -161
  165. package/lib/modules/ProductList/types.js +9 -31
  166. package/lib/modules/Quotation/index.js +66 -100
  167. package/lib/modules/Quotation/types.js +4 -16
  168. package/lib/modules/Resource/index.js +27 -59
  169. package/lib/modules/Resource/types.js +22 -32
  170. package/lib/modules/Resource/utils.js +30 -38
  171. package/lib/modules/ResourcePlanner/index.js +25 -23
  172. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  173. package/lib/modules/ResourcePlanner/planner.js +591 -772
  174. package/lib/modules/ResourcePlanner/types.js +10 -29
  175. package/lib/modules/Rules/index.js +1218 -959
  176. package/lib/modules/Rules/types.js +17 -40
  177. package/lib/modules/SalesSummary/index.js +78 -89
  178. package/lib/modules/SalesSummary/types.js +4 -16
  179. package/lib/modules/SalesSummary/utils.js +359 -442
  180. package/lib/modules/ScanOrderLogger/index.js +59 -79
  181. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  182. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  183. package/lib/modules/ScanOrderLogger/types.js +4 -16
  184. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  185. package/lib/modules/Schedule/index.js +100 -114
  186. package/lib/modules/Schedule/type.js +4 -16
  187. package/lib/modules/Schedule/types.js +4 -16
  188. package/lib/modules/Schedule/utils.js +433 -291
  189. package/lib/modules/Step/index.js +40 -52
  190. package/lib/modules/Step/tyeps.js +4 -16
  191. package/lib/modules/Summary/index.js +66 -71
  192. package/lib/modules/Summary/types.js +4 -16
  193. package/lib/modules/Summary/utils.js +773 -418
  194. package/lib/modules/SurchargeList/index.js +46 -60
  195. package/lib/modules/SurchargeList/types.js +4 -16
  196. package/lib/modules/index.js +245 -63
  197. package/lib/plugins/app.js +4 -16
  198. package/lib/plugins/index.js +36 -25
  199. package/lib/plugins/request.js +137 -126
  200. package/lib/plugins/shopStore.js +4 -16
  201. package/lib/plugins/user.js +4 -16
  202. package/lib/plugins/window.js +171 -179
  203. package/lib/server/index.js +3027 -2655
  204. package/lib/server/modules/floor-plan/index.js +102 -123
  205. package/lib/server/modules/floor-plan/types.js +15 -30
  206. package/lib/server/modules/index.js +106 -68
  207. package/lib/server/modules/menu/index.js +146 -122
  208. package/lib/server/modules/menu/types.js +18 -31
  209. package/lib/server/modules/order/index.js +758 -956
  210. package/lib/server/modules/order/types.js +122 -33
  211. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  212. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  213. package/lib/server/modules/payment/index.js +59 -83
  214. package/lib/server/modules/payment/types.js +4 -16
  215. package/lib/server/modules/products/index.js +575 -459
  216. package/lib/server/modules/products/types.js +44 -34
  217. package/lib/server/modules/quotation/index.js +137 -172
  218. package/lib/server/modules/quotation/types.js +21 -31
  219. package/lib/server/modules/resource/index.js +213 -184
  220. package/lib/server/modules/resource/types.js +42 -33
  221. package/lib/server/modules/schedule/index.js +135 -123
  222. package/lib/server/modules/schedule/types.js +14 -21
  223. package/lib/server/modules/schedule/utils.js +334 -163
  224. package/lib/server/types.js +4 -16
  225. package/lib/server/utils/index.js +25 -23
  226. package/lib/server/utils/product.js +196 -139
  227. package/lib/server/utils/schedule.js +34 -41
  228. package/lib/server/utils/small-ticket.js +479 -456
  229. package/lib/server/utils/time.js +40 -49
  230. package/lib/solution/BaseSales/index.js +1276 -1485
  231. package/lib/solution/BaseSales/types.d.ts +2 -0
  232. package/lib/solution/BaseSales/types.js +42 -38
  233. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  234. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  235. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  236. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  237. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  238. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +138 -180
  239. package/lib/solution/BaseSales/utils.js +161 -143
  240. package/lib/solution/BookingByStep/index.d.ts +2 -2
  241. package/lib/solution/BookingByStep/index.js +1527 -1340
  242. package/lib/solution/BookingByStep/types.js +40 -99
  243. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  244. package/lib/solution/BookingByStep/utils/products.js +42 -52
  245. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  246. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  247. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  248. package/lib/solution/BookingTicket/index.js +598 -514
  249. package/lib/solution/BookingTicket/types.js +99 -77
  250. package/lib/solution/BookingTicket/utils/addProductDecision.js +229 -190
  251. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  252. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  253. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  254. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  255. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  256. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  257. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  258. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  259. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  260. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  261. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  262. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  263. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  264. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  265. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  266. package/lib/solution/BuyTickets/index.js +67 -70
  267. package/lib/solution/BuyTickets/types.js +22 -38
  268. package/lib/solution/Checkout/index.js +1451 -1158
  269. package/lib/solution/Checkout/types.js +91 -61
  270. package/lib/solution/Checkout/utils/index.js +228 -156
  271. package/lib/solution/PlaceOrder/index.js +55 -0
  272. package/lib/solution/RegisterAndLogin/config.js +493 -460
  273. package/lib/solution/RegisterAndLogin/index.js +633 -630
  274. package/lib/solution/RegisterAndLogin/types.js +189 -76
  275. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  276. package/lib/solution/Sales/index.js +328 -324
  277. package/lib/solution/Sales/types.js +27 -33
  278. package/lib/solution/ScanOrder/index.js +822 -852
  279. package/lib/solution/ScanOrder/types.d.ts +2 -0
  280. package/lib/solution/ScanOrder/types.js +33 -34
  281. package/lib/solution/ScanOrder/utils.js +412 -374
  282. package/lib/solution/ShopDiscount/index.js +226 -232
  283. package/lib/solution/ShopDiscount/types.js +15 -37
  284. package/lib/solution/ShopDiscount/utils.js +300 -172
  285. package/lib/solution/UnifiedBookingSales/index.js +1052 -1213
  286. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  287. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  288. package/lib/solution/VenueBooking/index.js +811 -879
  289. package/lib/solution/VenueBooking/types.js +19 -39
  290. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  291. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  292. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  293. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  294. package/lib/solution/VenueBooking/utils.js +130 -67
  295. package/lib/solution/index.js +124 -41
  296. package/lib/store/createStore.js +32 -29
  297. package/lib/types/index.js +4 -16
  298. package/lib/utils/payment-number.js +26 -46
  299. package/lib/utils/task.js +36 -36
  300. package/lib/utils/watch.js +81 -47
  301. package/package.json +2 -1
@@ -1,55 +1,44 @@
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);
18
-
19
- // src/solution/Checkout/utils/index.ts
20
- var utils_exports = {};
21
- __export(utils_exports, {
22
- calculateTotalAmount: () => calculateTotalAmount,
23
- createCheckoutError: () => createCheckoutError,
24
- debounce: () => debounce,
25
- deepClone: () => deepClone,
26
- extractAmountFromCartSummary: () => extractAmountFromCartSummary,
27
- formatAmount: () => formatAmount,
28
- formatDateTime: () => formatDateTime,
29
- generateLocalOrderId: () => generateLocalOrderId,
30
- generateOrderId: () => generateOrderId,
31
- getErrorMessage: () => getErrorMessage,
32
- isCashPayment: () => isCashPayment,
33
- isEmpty: () => isEmpty,
34
- isProduction: () => isProduction,
35
- isValidPaymentMethodCode: () => isValidPaymentMethodCode,
36
- isVirtualOrderId: () => isVirtualOrderId,
37
- logger: () => logger,
38
- retry: () => retry,
39
- safeJsonParse: () => safeJsonParse,
40
- shouldSyncOrderForPayment: () => shouldSyncOrderForPayment,
41
- throttle: () => throttle,
42
- validateAmount: () => validateAmount,
43
- validateCheckoutData: () => validateCheckoutData,
44
- validateLocalOrderData: () => validateLocalOrderData
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
45
5
  });
46
- module.exports = __toCommonJS(utils_exports);
47
- var import_types = require("../../../modules/Payment/types");
6
+ exports.calculateTotalAmount = calculateTotalAmount;
7
+ exports.createCheckoutError = createCheckoutError;
8
+ exports.debounce = debounce;
9
+ exports.deepClone = deepClone;
10
+ exports.extractAmountFromCartSummary = extractAmountFromCartSummary;
11
+ exports.formatAmount = formatAmount;
12
+ exports.formatDateTime = formatDateTime;
13
+ exports.generateLocalOrderId = generateLocalOrderId;
14
+ exports.generateOrderId = generateOrderId;
15
+ exports.getErrorMessage = getErrorMessage;
16
+ exports.isCashPayment = isCashPayment;
17
+ exports.isEmpty = isEmpty;
18
+ exports.isProduction = isProduction;
19
+ exports.isValidPaymentMethodCode = isValidPaymentMethodCode;
20
+ exports.isVirtualOrderId = isVirtualOrderId;
21
+ exports.logger = void 0;
22
+ exports.retry = retry;
23
+ exports.safeJsonParse = safeJsonParse;
24
+ exports.shouldSyncOrderForPayment = shouldSyncOrderForPayment;
25
+ exports.throttle = throttle;
26
+ exports.validateAmount = validateAmount;
27
+ exports.validateCheckoutData = validateCheckoutData;
28
+ exports.validateLocalOrderData = validateLocalOrderData;
29
+ var _types = require("../../../modules/Payment/types");
30
+ /**
31
+ * 验证结账数据
32
+ */
48
33
  function validateCheckoutData(params) {
49
34
  const errors = [];
35
+
36
+ // 验证购物车商品
50
37
  if (!params.cartItems || params.cartItems.length === 0) {
51
- errors.push("购物车不能为空");
38
+ errors.push('购物车不能为空');
52
39
  }
40
+
41
+ // 验证购物车商品数据完整性
53
42
  if (params.cartItems) {
54
43
  params.cartItems.forEach((item, index) => {
55
44
  if (!item.id) {
@@ -63,14 +52,25 @@ function validateCheckoutData(params) {
63
52
  }
64
53
  });
65
54
  }
66
- if (params.platform && !["pc", "h5"].includes(params.platform)) {
67
- errors.push("平台类型无效,必须是 pc 或 h5");
55
+
56
+ // // 验证订单类型
57
+ // if (params.orderType && !['virtual', 'appointment_booking'].includes(params.orderType)) {
58
+ // errors.push('订单类型无效,必须是 virtual 或 appointment_booking');
59
+ // }
60
+
61
+ // 验证平台类型
62
+ if (params.platform && !['pc', 'h5'].includes(params.platform)) {
63
+ errors.push('平台类型无效,必须是 pc 或 h5');
68
64
  }
69
65
  return {
70
66
  valid: errors.length === 0,
71
67
  errors
72
68
  };
73
69
  }
70
+
71
+ /**
72
+ * 创建结账错误对象
73
+ */
74
74
  function createCheckoutError(type, message, details) {
75
75
  return {
76
76
  type,
@@ -79,24 +79,44 @@ function createCheckoutError(type, message, details) {
79
79
  timestamp: Date.now()
80
80
  };
81
81
  }
82
+
83
+ /**
84
+ * 格式化金额
85
+ */
82
86
  function formatAmount(amount) {
83
- const numAmount = typeof amount === "string" ? parseFloat(amount) : amount;
84
- if (isNaN(numAmount))
85
- return "0.00";
87
+ const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount;
88
+ if (isNaN(numAmount)) return '0.00';
86
89
  return numAmount.toFixed(2);
87
90
  }
91
+
92
+ /**
93
+ * 验证金额
94
+ */
88
95
  function validateAmount(amount) {
89
- const numAmount = typeof amount === "string" ? parseFloat(amount) : amount;
96
+ const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount;
90
97
  return !isNaN(numAmount) && numAmount >= 0;
91
98
  }
92
- function generateOrderId(prefix = "order") {
99
+
100
+ /**
101
+ * 生成唯一订单ID
102
+ */
103
+ function generateOrderId(prefix = 'order') {
93
104
  const timestamp = Date.now();
94
- const random = Math.floor(Math.random() * 1e4).toString().padStart(4, "0");
105
+ const random = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
95
106
  return `${prefix}_${timestamp}_${random}`;
96
107
  }
108
+
109
+ /**
110
+ * 检查是否为有效的支付方式代码
111
+ */
97
112
  function isValidPaymentMethodCode(code) {
98
- return typeof code === "string" && code.length > 0 && /^[a-zA-Z0-9_-]+$/.test(code);
113
+ // 基本的支付方式代码验证
114
+ return typeof code === 'string' && code.length > 0 && /^[a-zA-Z0-9_-]+$/.test(code);
99
115
  }
116
+
117
+ /**
118
+ * 安全地解析JSON
119
+ */
100
120
  function safeJsonParse(jsonString, defaultValue) {
101
121
  try {
102
122
  return JSON.parse(jsonString);
@@ -104,17 +124,21 @@ function safeJsonParse(jsonString, defaultValue) {
104
124
  return defaultValue;
105
125
  }
106
126
  }
127
+
128
+ /**
129
+ * 深度克隆对象
130
+ */
107
131
  function deepClone(obj) {
108
- if (obj === null || typeof obj !== "object") {
132
+ if (obj === null || typeof obj !== 'object') {
109
133
  return obj;
110
134
  }
111
135
  if (obj instanceof Date) {
112
136
  return new Date(obj.getTime());
113
137
  }
114
138
  if (obj instanceof Array) {
115
- return obj.map((item) => deepClone(item));
139
+ return obj.map(item => deepClone(item));
116
140
  }
117
- if (typeof obj === "object") {
141
+ if (typeof obj === 'object') {
118
142
  const clonedObj = {};
119
143
  for (const key in obj) {
120
144
  if (obj.hasOwnProperty(key)) {
@@ -125,6 +149,10 @@ function deepClone(obj) {
125
149
  }
126
150
  return obj;
127
151
  }
152
+
153
+ /**
154
+ * 防抖函数
155
+ */
128
156
  function debounce(func, wait) {
129
157
  let timeout = null;
130
158
  return (...args) => {
@@ -136,6 +164,10 @@ function debounce(func, wait) {
136
164
  }, wait);
137
165
  };
138
166
  }
167
+
168
+ /**
169
+ * 节流函数
170
+ */
139
171
  function throttle(func, wait) {
140
172
  let lastTime = 0;
141
173
  return (...args) => {
@@ -146,7 +178,11 @@ function throttle(func, wait) {
146
178
  }
147
179
  };
148
180
  }
149
- async function retry(fn, maxAttempts = 3, delay = 1e3) {
181
+
182
+ /**
183
+ * 重试函数
184
+ */
185
+ async function retry(fn, maxAttempts = 3, delay = 1000) {
150
186
  let lastError;
151
187
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
152
188
  try {
@@ -156,39 +192,52 @@ async function retry(fn, maxAttempts = 3, delay = 1e3) {
156
192
  if (attempt === maxAttempts) {
157
193
  throw lastError;
158
194
  }
159
- await new Promise((resolve) => setTimeout(resolve, delay * attempt));
195
+
196
+ // 等待指定时间后重试
197
+ await new Promise(resolve => setTimeout(resolve, delay * attempt));
160
198
  }
161
199
  }
162
200
  throw lastError;
163
201
  }
202
+
203
+ /**
204
+ * 检查对象是否为空
205
+ */
164
206
  function isEmpty(obj) {
165
- if (obj == null)
166
- return true;
167
- if (Array.isArray(obj) || typeof obj === "string")
168
- return obj.length === 0;
169
- if (typeof obj === "object")
170
- return Object.keys(obj).length === 0;
207
+ if (obj == null) return true;
208
+ if (Array.isArray(obj) || typeof obj === 'string') return obj.length === 0;
209
+ if (typeof obj === 'object') return Object.keys(obj).length === 0;
171
210
  return false;
172
211
  }
212
+
213
+ /**
214
+ * 获取错误消息
215
+ */
173
216
  function getErrorMessage(error) {
174
217
  if (error instanceof Error) {
175
218
  return error.message;
176
219
  }
177
- if (typeof error === "string") {
220
+ if (typeof error === 'string') {
178
221
  return error;
179
222
  }
180
- if (error && typeof error === "object" && "message" in error) {
223
+ if (error && typeof error === 'object' && 'message' in error) {
181
224
  return String(error.message);
182
225
  }
183
- return "未知错误";
226
+ return '未知错误';
184
227
  }
228
+
229
+ /**
230
+ * 检查是否为生产环境
231
+ */
185
232
  function isProduction() {
186
- return process.env.NODE_ENV === "production";
233
+ return process.env.NODE_ENV === 'production';
187
234
  }
188
- var logger = {
189
- info: (message, ...args) => {
190
- console.log(`[Checkout] ${message}`, ...args);
191
- },
235
+
236
+ /**
237
+ * 日志记录器
238
+ */
239
+ const logger = exports.logger = {
240
+ info: (message, ...args) => {},
192
241
  warn: (message, ...args) => {
193
242
  console.warn(`[Checkout] ${message}`, ...args);
194
243
  },
@@ -196,23 +245,30 @@ var logger = {
196
245
  console.error(`[Checkout] ${message}`, ...args);
197
246
  },
198
247
  debug: (message, ...args) => {
199
- if (!isProduction()) {
200
- console.debug(`[Checkout] ${message}`, ...args);
201
- }
248
+ if (!isProduction()) {}
202
249
  }
203
250
  };
251
+
252
+ // ========== 从 CheckoutImpl 类中移出的纯静态方法 ==========
253
+
254
+ /**
255
+ * 验证本地订单数据
256
+ */
204
257
  function validateLocalOrderData(orderData) {
205
- var _a;
206
258
  const errors = [];
259
+
260
+ // 验证基本字段
207
261
  if (!orderData.type) {
208
- errors.push("订单类型不能为空");
262
+ errors.push('订单类型不能为空');
209
263
  }
210
264
  if (!orderData.platform) {
211
- errors.push("平台信息不能为空");
265
+ errors.push('平台信息不能为空');
212
266
  }
213
- if ((!orderData.bookings || orderData.bookings.length === 0) && !((_a = orderData == null ? void 0 : orderData.relation_products) == null ? void 0 : _a.length)) {
214
- errors.push("预订信息不能为空");
267
+ if ((!orderData.bookings || orderData.bookings.length === 0) && !orderData?.relation_products?.length) {
268
+ errors.push('预订信息不能为空');
215
269
  }
270
+
271
+ // 验证预订信息
216
272
  if (orderData.bookings) {
217
273
  orderData.bookings.forEach((booking, index) => {
218
274
  if (!booking.product || !booking.product.product_id) {
@@ -231,131 +287,147 @@ function validateLocalOrderData(orderData) {
231
287
  errors
232
288
  };
233
289
  }
290
+
291
+ /**
292
+ * 生成本地订单ID
293
+ */
234
294
  function generateLocalOrderId() {
235
295
  const timestamp = Date.now();
236
- const random = Math.floor(Math.random() * 1e4).toString().padStart(4, "0");
296
+ const random = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
237
297
  return `local_order_${timestamp}_${random}`;
238
298
  }
299
+
300
+ /**
301
+ * 格式化日期时间为 YYYY-MM-DD hh:mm:ss 格式
302
+ *
303
+ * @param date 要格式化的日期对象
304
+ * @returns 格式化后的日期时间字符串
305
+ */
239
306
  function formatDateTime(date) {
240
307
  const year = date.getFullYear();
241
- const month = String(date.getMonth() + 1).padStart(2, "0");
242
- const day = String(date.getDate()).padStart(2, "0");
243
- const hours = String(date.getHours()).padStart(2, "0");
244
- const minutes = String(date.getMinutes()).padStart(2, "0");
245
- const seconds = String(date.getSeconds()).padStart(2, "0");
308
+ const month = String(date.getMonth() + 1).padStart(2, '0');
309
+ const day = String(date.getDate()).padStart(2, '0');
310
+ const hours = String(date.getHours()).padStart(2, '0');
311
+ const minutes = String(date.getMinutes()).padStart(2, '0');
312
+ const seconds = String(date.getSeconds()).padStart(2, '0');
246
313
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
247
314
  }
315
+
316
+ /**
317
+ * 从购物车小计数据中提取金额信息
318
+ */
248
319
  function extractAmountFromCartSummary(cartSummary) {
249
320
  const result = {
250
- totalAmount: "0.00",
251
- subTotal: "0.00",
252
- taxAmount: "0.00",
253
- discountAmount: "0.00",
254
- shopDiscountAmount: "0.00",
255
- roundingAmount: "0.00"
321
+ totalAmount: '0.00',
322
+ subTotal: '0.00',
323
+ taxAmount: '0.00',
324
+ discountAmount: '0.00',
325
+ shopDiscountAmount: '0.00',
326
+ roundingAmount: '0.00'
256
327
  };
257
- cartSummary.forEach((item) => {
328
+ cartSummary.forEach(item => {
258
329
  const value = Number(item.value).toFixed(2);
259
330
  switch (item.key) {
260
- case "expect_amount":
331
+ case 'expect_amount':
261
332
  result.totalAmount = value;
262
333
  break;
263
- case "sub_total":
334
+ case 'sub_total':
264
335
  result.subTotal = value;
265
336
  break;
266
- case "tax":
337
+ case 'tax':
267
338
  result.taxAmount = value;
268
339
  if (item.tax) {
269
340
  result.taxDetails = item.tax;
270
341
  }
271
342
  break;
272
- case "discount":
343
+ case 'discount':
273
344
  result.discountAmount = value;
274
345
  break;
275
- case "shop_discount":
346
+ case 'shop_discount':
276
347
  result.shopDiscountAmount = value;
277
348
  break;
278
- case "custom_roundingAmount":
349
+ case 'custom_roundingAmount':
279
350
  result.roundingAmount = value;
280
351
  break;
281
352
  default:
282
- if (item.key.includes("deposit")) {
353
+ // 处理其他可能的键,如定金等
354
+ if (item.key.includes('deposit')) {
283
355
  result.depositAmount = value;
284
356
  }
285
357
  break;
286
358
  }
287
359
  });
288
- console.log("[Checkout] 从购物车小计提取金额信息:", {
289
- totalAmount: result.totalAmount,
290
- subTotal: result.subTotal,
291
- taxAmount: result.taxAmount,
292
- discountAmount: result.discountAmount,
293
- shopDiscountAmount: result.shopDiscountAmount,
294
- roundingAmount: result.roundingAmount
295
- });
296
360
  return result;
297
361
  }
362
+
363
+ /**
364
+ * 计算购物车总金额
365
+ */
298
366
  function calculateTotalAmount(cartItems) {
299
367
  const total = cartItems.reduce((sum, item) => {
300
- const price = parseFloat(String(item.price) || "0");
368
+ const price = parseFloat(String(item.price) || '0');
301
369
  const quantity = item.quantity || 1;
302
370
  return sum + price * quantity;
303
371
  }, 0);
304
372
  return total.toFixed(2);
305
373
  }
374
+
375
+ /**
376
+ * 判断订单ID是否为本地生成的虚拟ID
377
+ *
378
+ * @param orderId 订单ID
379
+ * @returns true 表示是虚拟ID,false 表示是真实的后端ID
380
+ */
306
381
  function isVirtualOrderId(orderId) {
307
- return orderId.startsWith("local_order_");
382
+ return orderId.startsWith('local_order_');
308
383
  }
384
+
385
+ /**
386
+ * 判断支付方式是否需要同步订单到后端
387
+ *
388
+ * 现金支付(CASHMANUAL)和自定义支付不需要同步,其他支付方式需要同步
389
+ *
390
+ * @param paymentCode 支付方式代码
391
+ * @param paymentType 支付方式类型
392
+ * @returns 是否需要同步订单
393
+ */
309
394
  function shouldSyncOrderForPayment(paymentCode, paymentType) {
310
- const codeUpper = (paymentCode == null ? void 0 : paymentCode.toUpperCase()) || "";
311
- const typeUpper = (paymentType == null ? void 0 : paymentType.toUpperCase()) || "";
312
- const cashIdentifiers = ["CASHMANUAL", "CASH", "MANUAL"];
313
- if (cashIdentifiers.some(
314
- (id) => codeUpper.includes(id) || typeUpper.includes(id)
315
- )) {
395
+ const codeUpper = paymentCode?.toUpperCase() || '';
396
+ const typeUpper = paymentType?.toUpperCase() || '';
397
+
398
+ // 现金支付不需要同步 - 支持多种现金支付识别方式
399
+ const cashIdentifiers = ['CASHMANUAL', 'CASH', 'MANUAL'];
400
+ if (cashIdentifiers.some(id => codeUpper.includes(id) || typeUpper.includes(id))) {
316
401
  return false;
317
402
  }
318
- if (paymentCode === import_types.PaymentMethodType.Cash || paymentType === import_types.PaymentMethodType.Cash) {
403
+
404
+ // 标准现金支付代码检查
405
+ if (paymentCode === _types.PaymentMethodType.Cash || paymentType === _types.PaymentMethodType.Cash) {
319
406
  return false;
320
407
  }
321
- if (codeUpper.includes("CUSTOM") || typeUpper.includes("CUSTOM")) {
408
+
409
+ // 自定义支付不需要同步
410
+ if (codeUpper.includes('CUSTOM') || typeUpper.includes('CUSTOM')) {
322
411
  return false;
323
412
  }
413
+
414
+ // 其他支付方式都需要同步
324
415
  return true;
325
416
  }
417
+
418
+ /**
419
+ * 判断是否为现金支付
420
+ *
421
+ * @param paymentCode 支付方式代码
422
+ * @param paymentType 支付方式类型
423
+ * @returns 是否为现金支付
424
+ */
326
425
  function isCashPayment(paymentItem) {
327
- var _a, _b, _c;
328
- const codeUpper = ((_a = paymentItem.code) == null ? void 0 : _a.toUpperCase()) || "";
329
- const typeUpper = ((_b = paymentItem.type) == null ? void 0 : _b.toUpperCase()) || "";
330
- const isNameCash = (_c = paymentItem.name) == null ? void 0 : _c.toLowerCase().includes("cash");
331
- const cashIdentifiers = ["CASH", "CASHMANUAL", "MANUAL"];
332
- return cashIdentifiers.some(
333
- (identifier) => codeUpper.includes(identifier) || typeUpper.includes(identifier)
334
- ) || isNameCash;
335
- }
336
- // Annotate the CommonJS export names for ESM import in node:
337
- 0 && (module.exports = {
338
- calculateTotalAmount,
339
- createCheckoutError,
340
- debounce,
341
- deepClone,
342
- extractAmountFromCartSummary,
343
- formatAmount,
344
- formatDateTime,
345
- generateLocalOrderId,
346
- generateOrderId,
347
- getErrorMessage,
348
- isCashPayment,
349
- isEmpty,
350
- isProduction,
351
- isValidPaymentMethodCode,
352
- isVirtualOrderId,
353
- logger,
354
- retry,
355
- safeJsonParse,
356
- shouldSyncOrderForPayment,
357
- throttle,
358
- validateAmount,
359
- validateCheckoutData,
360
- validateLocalOrderData
361
- });
426
+ const codeUpper = paymentItem.code?.toUpperCase() || '';
427
+ const typeUpper = paymentItem.type?.toUpperCase() || '';
428
+ const isNameCash = paymentItem.name?.toLowerCase().includes('cash');
429
+
430
+ // 现金支付识别规则
431
+ const cashIdentifiers = ['CASH', 'CASHMANUAL', 'MANUAL'];
432
+ return cashIdentifiers.some(identifier => codeUpper.includes(identifier) || typeUpper.includes(identifier)) || isNameCash;
433
+ }
@@ -0,0 +1,55 @@
1
+ // // 只是一个示例工程
2
+
3
+ // import { Module, PisellCore, ModuleOptions } from '../types';
4
+ // import { CartModuleAPI } from '../modules/cart';
5
+ // import { StockModuleAPI } from '../modules/stock';
6
+ // import { CheckoutModuleAPI } from '../modules/checkout';
7
+
8
+ // class OrderSolution implements Module {
9
+ // name = 'orderSolution';
10
+ // version = '1.0.0';
11
+
12
+ // private core!: PisellCore;
13
+ // private cart!: CartModuleAPI;
14
+ // private stock!: StockModuleAPI;
15
+ // private checkout!: CheckoutModuleAPI;
16
+
17
+ // public exports = {
18
+ // submitOrder: this.submitOrder.bind(this),
19
+ // };
20
+
21
+ // async initialize(core: PisellCore): Promise<void> {
22
+ // this.core = core;
23
+
24
+ // // 获取依赖的模块 API
25
+ // this.cart = core.getModuleExports<CartModuleAPI>('cart');
26
+ // this.stock = core.getModuleExports<StockModuleAPI>('stock');
27
+ // this.checkout = core.getModuleExports<CheckoutModuleAPI>('checkout');
28
+
29
+ // console.log('[OrderSolution] 初始化完成');
30
+ // }
31
+
32
+ // async destroy(): Promise<void> {
33
+ // console.log('[OrderSolution] 已销毁');
34
+ // }
35
+
36
+ // /**
37
+ // * 下单流程(商品 → 库存校验 → 结算 → 提交)
38
+ // */
39
+ // async submitOrder(): Promise<void> {
40
+ // const cartItems = await this.cart.getItems();
41
+
42
+ // const stockResult = await this.stock.checkAvailability(cartItems);
43
+ // if (!stockResult.ok) {
44
+ // throw new Error('部分商品库存不足');
45
+ // }
46
+
47
+ // const summary = await this.checkout.calculate(cartItems);
48
+
49
+ // await this.checkout.submit(summary);
50
+ // console.log('[OrderSolution] 下单完成');
51
+ // }
52
+ // }
53
+
54
+ // export default new OrderSolution();
55
+ "use strict";