@pisell/pisellos 2.2.244 → 2.2.245

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 (317) hide show
  1. package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
  2. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  3. package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
  4. package/dist/modules/BookingContext/index.d.ts +48 -0
  5. package/dist/modules/BookingContext/index.js +566 -0
  6. package/dist/modules/BookingContext/types.d.ts +102 -0
  7. package/dist/modules/BookingContext/types.js +51 -0
  8. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  9. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +284 -0
  10. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  11. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +145 -0
  12. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  13. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +218 -0
  14. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  15. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  16. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  17. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  18. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  19. package/dist/modules/BookingContext/utils/index.js +11 -0
  20. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  21. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  22. package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  23. package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
  24. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  25. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  26. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  27. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  28. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  29. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  30. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  31. package/dist/modules/BookingContext/utils/resources.js +486 -0
  32. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  33. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  34. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  35. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  36. package/dist/modules/Cart/utils/cartProduct.js +24 -3
  37. package/dist/modules/Cart/utils/changePrice.js +11 -11
  38. package/dist/modules/Customer/index.d.ts +20 -0
  39. package/dist/modules/Customer/index.js +172 -83
  40. package/dist/modules/Customer/types.d.ts +2 -0
  41. package/dist/modules/Discount/index.d.ts +1 -1
  42. package/dist/modules/Discount/index.js +13 -6
  43. package/dist/modules/Discount/types.d.ts +1 -0
  44. package/dist/modules/OpenData/index.d.ts +8 -0
  45. package/dist/modules/OpenData/index.js +37 -17
  46. package/dist/modules/Order/index.d.ts +275 -19
  47. package/dist/modules/Order/index.js +3493 -809
  48. package/dist/modules/Order/types.d.ts +286 -31
  49. package/dist/modules/Order/types.js +38 -0
  50. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  51. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  52. package/dist/modules/Order/utils.d.ts +147 -5
  53. package/dist/modules/Order/utils.js +750 -104
  54. package/dist/modules/Payment/index.d.ts +10 -13
  55. package/dist/modules/Payment/index.js +467 -837
  56. package/dist/modules/Payment/types.d.ts +2 -0
  57. package/dist/modules/Payment/utils.js +2 -1
  58. package/dist/modules/Payment/walletpass.js +41 -25
  59. package/dist/modules/ProductList/index.d.ts +16 -12
  60. package/dist/modules/ProductList/index.js +133 -59
  61. package/dist/modules/ProductList/types.d.ts +14 -0
  62. package/dist/modules/Quotation/index.d.ts +0 -1
  63. package/dist/modules/Quotation/index.js +25 -22
  64. package/dist/modules/Rules/index.d.ts +4 -0
  65. package/dist/modules/Rules/index.js +97 -70
  66. package/dist/modules/Rules/types.d.ts +1 -0
  67. package/dist/modules/SalesSummary/index.d.ts +8 -25
  68. package/dist/modules/SalesSummary/index.js +86 -35
  69. package/dist/modules/SalesSummary/types.d.ts +4 -1
  70. package/dist/modules/SalesSummary/utils.d.ts +2 -25
  71. package/dist/modules/SalesSummary/utils.js +794 -162
  72. package/dist/modules/Schedule/index.d.ts +7 -0
  73. package/dist/modules/Schedule/index.js +24 -2
  74. package/dist/modules/Summary/index.js +4 -3
  75. package/dist/modules/SurchargeList/index.d.ts +16 -0
  76. package/dist/modules/SurchargeList/index.js +162 -0
  77. package/dist/modules/SurchargeList/types.d.ts +11 -0
  78. package/dist/modules/SurchargeList/types.js +1 -0
  79. package/dist/modules/index.d.ts +2 -0
  80. package/dist/modules/index.js +3 -1
  81. package/dist/plugins/request.d.ts +1 -0
  82. package/dist/server/index.d.ts +204 -1
  83. package/dist/server/index.js +3654 -922
  84. package/dist/server/modules/index.d.ts +2 -0
  85. package/dist/server/modules/index.js +2 -0
  86. package/dist/server/modules/order/index.d.ts +120 -3
  87. package/dist/server/modules/order/index.js +1758 -448
  88. package/dist/server/modules/order/types.d.ts +32 -3
  89. package/dist/server/modules/order/types.js +8 -0
  90. package/dist/server/modules/order/utils/filterBookings.js +26 -3
  91. package/dist/server/modules/order/utils/filterOrders.js +23 -8
  92. package/dist/server/modules/payment/index.d.ts +28 -0
  93. package/dist/server/modules/payment/index.js +305 -0
  94. package/dist/server/modules/payment/types.d.ts +9 -0
  95. package/dist/server/modules/payment/types.js +1 -0
  96. package/dist/server/modules/products/index.d.ts +34 -7
  97. package/dist/server/modules/products/index.js +631 -317
  98. package/dist/server/modules/resource/index.d.ts +2 -0
  99. package/dist/server/modules/resource/index.js +29 -3
  100. package/dist/server/modules/schedule/index.d.ts +4 -4
  101. package/dist/server/modules/schedule/index.js +111 -88
  102. package/dist/server/test.json +713 -0
  103. package/dist/server/utils/small-ticket.d.ts +71 -0
  104. package/dist/server/utils/small-ticket.js +840 -0
  105. package/dist/solution/BaseSales/index.d.ts +133 -10
  106. package/dist/solution/BaseSales/index.js +1950 -447
  107. package/dist/solution/BaseSales/types.d.ts +82 -6
  108. package/dist/solution/BaseSales/types.js +5 -4
  109. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  110. package/dist/solution/BaseSales/utils/cartPromotion.js +1438 -0
  111. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
  112. package/dist/solution/BaseSales/utils/quotationPrice.js +237 -0
  113. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  114. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +105 -24
  115. package/dist/solution/BaseSales/utils.d.ts +1 -1
  116. package/dist/solution/BaseSales/utils.js +62 -21
  117. package/dist/solution/BookingByStep/index.d.ts +1 -1
  118. package/dist/solution/BookingTicket/index.d.ts +271 -11
  119. package/dist/solution/BookingTicket/index.js +1777 -242
  120. package/dist/solution/BookingTicket/types.d.ts +118 -1
  121. package/dist/solution/BookingTicket/types.js +41 -2
  122. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  123. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  124. package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  125. package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
  126. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +40 -0
  127. package/dist/solution/BookingTicket/utils/bookingStatus.js +70 -0
  128. package/dist/solution/BookingTicket/utils/cartView.d.ts +9 -1
  129. package/dist/solution/BookingTicket/utils/cartView.js +94 -7
  130. package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  131. package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
  132. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  133. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
  134. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  135. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
  136. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  137. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  138. package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  139. package/dist/solution/BookingTicket/utils/scan/index.js +20 -8
  140. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  141. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  142. package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  143. package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
  144. package/dist/solution/Checkout/index.d.ts +1 -0
  145. package/dist/solution/Checkout/index.js +10 -9
  146. package/dist/solution/RegisterAndLogin/config.js +2 -10
  147. package/dist/solution/ScanOrder/index.d.ts +9 -3
  148. package/dist/solution/ScanOrder/index.js +241 -134
  149. package/dist/solution/ScanOrder/types.d.ts +9 -5
  150. package/dist/solution/ScanOrder/types.js +2 -3
  151. package/dist/solution/ScanOrder/utils.d.ts +1 -1
  152. package/dist/solution/ScanOrder/utils.js +84 -22
  153. package/dist/solution/VenueBooking/index.d.ts +5 -2
  154. package/dist/solution/VenueBooking/index.js +110 -59
  155. package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  156. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
  157. package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
  158. package/dist/types/index.d.ts +10 -0
  159. package/lib/model/strategy/adapter/promotion/evaluator.js +2 -1
  160. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  161. package/lib/model/strategy/adapter/walletPass/utils.js +3 -2
  162. package/lib/modules/BookingContext/index.d.ts +48 -0
  163. package/lib/modules/BookingContext/index.js +368 -0
  164. package/lib/modules/BookingContext/types.d.ts +102 -0
  165. package/lib/modules/BookingContext/types.js +34 -0
  166. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  167. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +276 -0
  168. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  169. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +151 -0
  170. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  171. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +201 -0
  172. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  173. package/lib/modules/BookingContext/utils/flexible.js +80 -0
  174. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  175. package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
  176. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  177. package/lib/modules/BookingContext/utils/index.js +43 -0
  178. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  179. package/lib/modules/BookingContext/utils/noResource.js +90 -0
  180. package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  181. package/lib/modules/BookingContext/utils/orderLineDisplay.js +56 -0
  182. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  183. package/lib/modules/BookingContext/utils/productExtend.js +283 -0
  184. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  185. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  186. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  187. package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
  188. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  189. package/lib/modules/BookingContext/utils/resources.js +377 -0
  190. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  191. package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
  192. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  193. package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
  194. package/lib/modules/Cart/utils/cartProduct.js +20 -3
  195. package/lib/modules/Cart/utils/changePrice.js +12 -20
  196. package/lib/modules/Customer/index.d.ts +20 -0
  197. package/lib/modules/Customer/index.js +64 -11
  198. package/lib/modules/Customer/types.d.ts +2 -0
  199. package/lib/modules/Discount/index.d.ts +1 -1
  200. package/lib/modules/Discount/index.js +9 -1
  201. package/lib/modules/Discount/types.d.ts +1 -0
  202. package/lib/modules/OpenData/index.d.ts +8 -0
  203. package/lib/modules/OpenData/index.js +19 -5
  204. package/lib/modules/Order/index.d.ts +275 -19
  205. package/lib/modules/Order/index.js +2245 -336
  206. package/lib/modules/Order/types.d.ts +286 -31
  207. package/lib/modules/Order/types.js +1 -0
  208. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  209. package/lib/modules/Order/utils/manualProductDiscount.js +206 -0
  210. package/lib/modules/Order/utils.d.ts +147 -5
  211. package/lib/modules/Order/utils.js +615 -46
  212. package/lib/modules/Payment/index.d.ts +10 -13
  213. package/lib/modules/Payment/index.js +18 -150
  214. package/lib/modules/Payment/types.d.ts +2 -0
  215. package/lib/modules/Payment/utils.js +2 -1
  216. package/lib/modules/Payment/walletpass.js +16 -3
  217. package/lib/modules/ProductList/index.d.ts +16 -12
  218. package/lib/modules/ProductList/index.js +41 -4
  219. package/lib/modules/ProductList/types.d.ts +14 -0
  220. package/lib/modules/Quotation/index.d.ts +0 -1
  221. package/lib/modules/Quotation/index.js +19 -16
  222. package/lib/modules/Rules/index.d.ts +4 -0
  223. package/lib/modules/Rules/index.js +137 -120
  224. package/lib/modules/Rules/types.d.ts +1 -0
  225. package/lib/modules/SalesSummary/index.d.ts +8 -25
  226. package/lib/modules/SalesSummary/index.js +30 -4
  227. package/lib/modules/SalesSummary/types.d.ts +4 -1
  228. package/lib/modules/SalesSummary/utils.d.ts +2 -25
  229. package/lib/modules/SalesSummary/utils.js +645 -91
  230. package/lib/modules/Schedule/index.d.ts +7 -0
  231. package/lib/modules/Schedule/index.js +17 -1
  232. package/lib/modules/Summary/index.js +5 -4
  233. package/lib/modules/SurchargeList/index.d.ts +16 -0
  234. package/lib/modules/SurchargeList/index.js +89 -0
  235. package/lib/modules/SurchargeList/types.d.ts +11 -0
  236. package/lib/modules/SurchargeList/types.js +17 -0
  237. package/lib/modules/index.d.ts +2 -0
  238. package/lib/modules/index.js +5 -1
  239. package/lib/plugins/request.d.ts +1 -0
  240. package/lib/server/index.d.ts +204 -1
  241. package/lib/server/index.js +1891 -59
  242. package/lib/server/modules/index.d.ts +2 -0
  243. package/lib/server/modules/index.js +3 -0
  244. package/lib/server/modules/order/index.d.ts +120 -3
  245. package/lib/server/modules/order/index.js +883 -94
  246. package/lib/server/modules/order/types.d.ts +32 -3
  247. package/lib/server/modules/order/utils/filterBookings.js +24 -5
  248. package/lib/server/modules/order/utils/filterOrders.js +15 -6
  249. package/lib/server/modules/payment/index.d.ts +28 -0
  250. package/lib/server/modules/payment/index.js +192 -0
  251. package/lib/server/modules/payment/types.d.ts +9 -0
  252. package/lib/server/modules/payment/types.js +17 -0
  253. package/lib/server/modules/products/index.d.ts +34 -7
  254. package/lib/server/modules/products/index.js +189 -54
  255. package/lib/server/modules/resource/index.d.ts +2 -0
  256. package/lib/server/modules/resource/index.js +27 -3
  257. package/lib/server/modules/schedule/index.d.ts +4 -4
  258. package/lib/server/modules/schedule/index.js +47 -40
  259. package/lib/server/test.json +713 -0
  260. package/lib/server/utils/small-ticket.d.ts +71 -0
  261. package/lib/server/utils/small-ticket.js +800 -0
  262. package/lib/solution/BaseSales/index.d.ts +133 -10
  263. package/lib/solution/BaseSales/index.js +1111 -63
  264. package/lib/solution/BaseSales/types.d.ts +82 -6
  265. package/lib/solution/BaseSales/types.js +3 -1
  266. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  267. package/lib/solution/BaseSales/utils/cartPromotion.js +992 -0
  268. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
  269. package/lib/solution/BaseSales/utils/quotationPrice.js +277 -0
  270. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  271. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +106 -18
  272. package/lib/solution/BaseSales/utils.d.ts +1 -1
  273. package/lib/solution/BaseSales/utils.js +54 -10
  274. package/lib/solution/BookingByStep/index.d.ts +1 -1
  275. package/lib/solution/BookingTicket/index.d.ts +271 -11
  276. package/lib/solution/BookingTicket/index.js +922 -29
  277. package/lib/solution/BookingTicket/types.d.ts +118 -1
  278. package/lib/solution/BookingTicket/types.js +11 -0
  279. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  280. package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
  281. package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  282. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +125 -0
  283. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +40 -0
  284. package/lib/solution/BookingTicket/utils/bookingStatus.js +44 -2
  285. package/lib/solution/BookingTicket/utils/cartView.d.ts +9 -1
  286. package/lib/solution/BookingTicket/utils/cartView.js +61 -6
  287. package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  288. package/lib/solution/BookingTicket/utils/exampleData.js +0 -0
  289. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  290. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +254 -0
  291. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  292. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +169 -0
  293. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  294. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +51 -0
  295. package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  296. package/lib/solution/BookingTicket/utils/scan/index.js +17 -3
  297. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  298. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +127 -0
  299. package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  300. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +85 -0
  301. package/lib/solution/Checkout/index.d.ts +1 -0
  302. package/lib/solution/Checkout/index.js +1 -2
  303. package/lib/solution/RegisterAndLogin/config.js +2 -10
  304. package/lib/solution/ScanOrder/index.d.ts +9 -3
  305. package/lib/solution/ScanOrder/index.js +153 -70
  306. package/lib/solution/ScanOrder/types.d.ts +9 -5
  307. package/lib/solution/ScanOrder/utils.d.ts +1 -1
  308. package/lib/solution/ScanOrder/utils.js +83 -17
  309. package/lib/solution/VenueBooking/index.d.ts +5 -2
  310. package/lib/solution/VenueBooking/index.js +54 -17
  311. package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  312. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
  313. package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
  314. package/lib/types/index.d.ts +10 -0
  315. package/package.json +1 -1
  316. package/dist/solution/Checkout/appointmentDemo.json +0 -1
  317. package/lib/solution/Checkout/appointmentDemo.json +0 -1
@@ -80,6 +80,16 @@ export interface OrderProductMetadata {
80
80
  unique_identification_number?: string;
81
81
  [key: string]: unknown;
82
82
  }
83
+ export interface OrderProductTitleSnapshot {
84
+ en: string | null;
85
+ ja: string | null;
86
+ pt: string | null;
87
+ auto: string | null;
88
+ 'zh-CN': string | null;
89
+ 'zh-HK': string | null;
90
+ kitchen: string | null;
91
+ original: string | null;
92
+ }
83
93
  /**
84
94
  * 订单级商品行(3.3 products)。
85
95
  * 订单级别的非预约关联商品;预约关联商品在 bookings 内。
@@ -92,10 +102,10 @@ export interface OrderProductLineItem {
92
102
  product_id?: number | null;
93
103
  /** 数量。创建/更新时必填。来源:Detail.product_quantity */
94
104
  num: number;
105
+ /** 商品标题快照;本地待同步订单会补齐为多语言对象。 */
106
+ product_title?: OrderProductTitleSnapshot | string | null;
95
107
  /** 多规格 ID。来源:Detail.product_variant_id */
96
108
  product_variant_id?: number;
97
- /** 选项配置 */
98
- product_option_item?: unknown[];
99
109
  /**
100
110
  * 销售单价(交易快照,仅输出)。
101
111
  * 来源:Detail.selling_price
@@ -229,8 +239,10 @@ export interface OrderPaymentItem {
229
239
  rounding_amount?: OrderMoneyString;
230
240
  /** 支付状态:paid / voided / payment_pending 等 */
231
241
  status?: OrderPaymentRecordStatus;
232
- /** 支付时间(仅输出)。来源:OrderPayment.payment_time */
242
+ /** 支付时间(输入/输出均保留)。来源:OrderPayment.payment_time */
233
243
  payment_time?: string | null;
244
+ /** 支付创建时间(输入/输出均保留)。来源:OrderPayment.created_at */
245
+ created_at?: string | null;
234
246
  /** 手续费配置。来源:OrderPayment.service_charge */
235
247
  service_charge?: Record<string, unknown> | null;
236
248
  /** Wallet Pass 使用单位 */
@@ -395,6 +407,8 @@ export interface OrderData {
395
407
  /** 本地辅助字段 */
396
408
  shop_id?: number;
397
409
  create_date?: string;
410
+ /** 本地待同步标记:1 表示需要后续同步到云端 */
411
+ need_sync?: 0 | 1 | number;
398
412
  /** 兼容:部分场景仍使用顶层 total_amount */
399
413
  total_amount?: OrderMoneyString | number;
400
414
  /** 扩展字段(物流、标签等);使用 any 以便筛选与数据源扩展 */
@@ -524,6 +538,21 @@ export interface OrderAblyEventPayload {
524
538
  order_id?: OrderId;
525
539
  timestamp: number;
526
540
  }
541
+ /**
542
+ * 订单变更广播载荷。
543
+ * 用于保留原有全量列表通知能力,同时让订阅方可按 changedOrders 做增量处理。
544
+ *
545
+ * @example
546
+ * const changedOrders = payload.changedOrders
547
+ */
548
+ export interface OrderChangedPayload {
549
+ /** 当前订单 store 全量列表,兼容既有重算列表订阅 */
550
+ list: OrderData[];
551
+ /** 本次明确发生变更的订单;全量刷新等无法确定 delta 的场景可为空 */
552
+ changedOrders: OrderData[];
553
+ /** 触发来源,便于订阅者区分 pubsub / 远端覆盖 / 清空等场景 */
554
+ source?: string;
555
+ }
527
556
  /**
528
557
  * OrderSyncMessage - pubsub 同步消息结构
529
558
  */
@@ -127,6 +127,14 @@
127
127
  * Ably 事件载荷
128
128
  */
129
129
 
130
+ /**
131
+ * 订单变更广播载荷。
132
+ * 用于保留原有全量列表通知能力,同时让订阅方可按 changedOrders 做增量处理。
133
+ *
134
+ * @example
135
+ * const changedOrders = payload.changedOrders
136
+ */
137
+
130
138
  /**
131
139
  * OrderSyncMessage - pubsub 同步消息结构
132
140
  */
@@ -54,6 +54,29 @@ function bookingDateTimeString(datePart, timePart) {
54
54
  }
55
55
  return "".concat(d, " ").concat(t).trim();
56
56
  }
57
+
58
+ /**
59
+ * 解析预约自身的起止时间区间,供 `sales_time_between` 做区间重叠匹配。
60
+ *
61
+ * @example
62
+ * const span = resolveBookingTimeRange({ start_date: '2026-06-09', start_time: '10:00', end_date: '2026-06-15', end_time: '10:00' })
63
+ */
64
+ function resolveBookingTimeRange(booking) {
65
+ var start = toTimestamp(bookingDateTimeString(booking.start_date, booking.start_time));
66
+ if (!start) return null;
67
+ var end = toTimestamp(bookingDateTimeString(booking.end_date || booking.start_date, booking.end_time || booking.start_time)) || start;
68
+ return end >= start ? [start, end] : [end, start];
69
+ }
70
+
71
+ /**
72
+ * 判断两个闭区间是否有交集。
73
+ *
74
+ * @example
75
+ * isRangeOverlapping([1, 10], [5, 6]) // true
76
+ */
77
+ function isRangeOverlapping(left, right) {
78
+ return left[0] <= right[1] && left[1] >= right[0];
79
+ }
57
80
  function parseDateRange(range) {
58
81
  if (!Array.isArray(range) || range.length < 2) return null;
59
82
  var start = toRangeBoundary(range[0], false);
@@ -151,7 +174,7 @@ function matchOrder(order, ctx) {
151
174
  // ─────────────────────────────────────────────────────────────────
152
175
 
153
176
  function matchBooking(booking, orderInfo, ctx) {
154
- if (ctx.enableChildBookingFilter) {
177
+ if (ctx.enableChildBookingFilter && booking.booking_id) {
155
178
  var _parent_id, _item_type;
156
179
  var parentId = Number((_parent_id = booking.parent_id) !== null && _parent_id !== void 0 ? _parent_id : 0);
157
180
  var itemType = String((_item_type = booking.item_type) !== null && _item_type !== void 0 ? _item_type : '');
@@ -160,8 +183,8 @@ function matchBooking(booking, orderInfo, ctx) {
160
183
  }
161
184
  if (ctx.appointmentStatusSet && !ctx.appointmentStatusSet.has(getBookingAppointmentStatus(booking))) return false;
162
185
  if (ctx.bookingTimeRange) {
163
- var ts = toTimestamp(bookingDateTimeString(booking.start_date, booking.start_time));
164
- if (ts < ctx.bookingTimeRange[0] || ts > ctx.bookingTimeRange[1]) return false;
186
+ var bookingRange = resolveBookingTimeRange(booking);
187
+ if (!bookingRange || !isRangeOverlapping(bookingRange, ctx.bookingTimeRange)) return false;
165
188
  }
166
189
  if (ctx.afterExecutionTimeMs != null) {
167
190
  var bookingStartMs = toTimestamp(bookingDateTimeString(booking.start_date, booking.start_time));
@@ -1,4 +1,17 @@
1
1
  import dayjs from 'dayjs';
2
+ /** 从订单 payments 提取支付方式 code,与 UI 筛选选项及 filterBookings 一致 */
3
+ function getOrderPaymentCodes(order) {
4
+ var payments = order.payments;
5
+ if (!Array.isArray(payments) || payments.length === 0) {
6
+ return [];
7
+ }
8
+ return payments.map(function (item) {
9
+ return item === null || item === void 0 ? void 0 : item.code;
10
+ }).filter(function (code) {
11
+ return typeof code === 'string' && code.length > 0;
12
+ });
13
+ }
14
+
2
15
  /**
3
16
  * 订单过滤函数
4
17
  * @param orders 原始订单列表
@@ -126,22 +139,23 @@ export function filterOrders(orders, filters) {
126
139
  }
127
140
  }
128
141
 
129
- // payment_methods - 支付方式
142
+ // payment_methods - 支付方式(按 payments[].code 匹配,不再使用 order.payment_methods)
130
143
  if (safeFilters.payment_methods && safeFilters.payment_methods.length > 0) {
131
- if (!order.payment_methods || !Array.isArray(order.payment_methods) || order.payment_methods.length === 0) {
144
+ var orderPaymentCodes = getOrderPaymentCodes(order);
145
+ if (orderPaymentCodes.length === 0) {
132
146
  rejected.push({
133
147
  order_id: order.order_id,
134
148
  order_number: order.order_number,
135
149
  reason: {
136
150
  field: 'payment_methods',
137
- actual: order.payment_methods,
151
+ actual: order.payments,
138
152
  expected: safeFilters.payment_methods
139
153
  }
140
154
  });
141
155
  return false;
142
156
  }
143
- var hasMatch = order.payment_methods.some(function (pm) {
144
- return safeFilters.payment_methods.includes(pm);
157
+ var hasMatch = orderPaymentCodes.some(function (code) {
158
+ return safeFilters.payment_methods.includes(code);
145
159
  });
146
160
  if (!hasMatch) {
147
161
  rejected.push({
@@ -149,7 +163,7 @@ export function filterOrders(orders, filters) {
149
163
  order_number: order.order_number,
150
164
  reason: {
151
165
  field: 'payment_methods',
152
- actual: order.payment_methods,
166
+ actual: orderPaymentCodes,
153
167
  expected: safeFilters.payment_methods
154
168
  }
155
169
  });
@@ -348,10 +362,11 @@ export function filterOrders(orders, filters) {
348
362
 
349
363
  // start_time / end_time - 创建时间范围
350
364
  if (safeFilters.start_time || safeFilters.end_time) {
365
+ var isCreatedIsUndefined = order.created_at === undefined;
351
366
  // 统一用 dayjs 按本地时区解析,避免 new Date("YYYY-MM-DD") 被当作 UTC 0 点
352
367
  // 与含时分的本地时间字符串比较时产生时区错位
353
368
  var orderTime = order.created_at ? typeof order.created_at === 'number' ? order.created_at : dayjs(String(order.created_at)).valueOf() : 0;
354
- if (safeFilters.start_time) {
369
+ if (safeFilters.start_time && !isCreatedIsUndefined) {
355
370
  var startTs = dayjs(safeFilters.start_time).startOf('day').valueOf();
356
371
  if (orderTime < startTs) {
357
372
  rejected.push({
@@ -366,7 +381,7 @@ export function filterOrders(orders, filters) {
366
381
  return false;
367
382
  }
368
383
  }
369
- if (safeFilters.end_time) {
384
+ if (safeFilters.end_time && !isCreatedIsUndefined) {
370
385
  var endTs = dayjs(safeFilters.end_time).endOf('day').valueOf();
371
386
  if (orderTime > endTs) {
372
387
  rejected.push({
@@ -0,0 +1,28 @@
1
+ import { Module, ModuleOptions, PisellCore } from '../../../types';
2
+ import { BaseModule } from '../../../modules/BaseModule';
3
+ import type { PaymentMethod } from './types';
4
+ export declare class PaymentServerModule extends BaseModule implements Module {
5
+ protected defaultName: string;
6
+ protected defaultVersion: string;
7
+ private request;
8
+ private app;
9
+ private logger;
10
+ private store;
11
+ private payMethodMemoryCache;
12
+ private payMethodListInFlight;
13
+ constructor(name?: string, version?: string);
14
+ initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
15
+ getPayMethodListAsync(options?: {
16
+ shouldFilter?: boolean;
17
+ }): Promise<PaymentMethod[]>;
18
+ clearPayMethodCache(): void;
19
+ private loadPayMethodListAsync;
20
+ private fetchRemotePayMethods;
21
+ private shouldFilterPayMethods;
22
+ private resolvePayMethods;
23
+ private filterPayMethods;
24
+ private setPayMethodCache;
25
+ private logInfo;
26
+ private logWarning;
27
+ private logError;
28
+ }
@@ -0,0 +1,305 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
5
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
6
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
7
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
9
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
10
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
11
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
12
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
13
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
14
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
15
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
16
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
17
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
18
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
19
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20
+ import { BaseModule } from "../../../modules/BaseModule";
21
+ var WALLET_PASS_CODE = 'WALLET_PASS';
22
+ var WALLET_DEPENDENT_CODES = new Set(['PRODUCTVOUCHER', 'GIFTCARD', 'POINTCARD']);
23
+ var PAYMENT_METHODS_LOADED_EVENT = 'payment:onPaymentMethodsLoaded';
24
+ export var PaymentServerModule = /*#__PURE__*/function (_BaseModule) {
25
+ _inherits(PaymentServerModule, _BaseModule);
26
+ var _super = _createSuper(PaymentServerModule);
27
+ function PaymentServerModule(name, version) {
28
+ var _this;
29
+ _classCallCheck(this, PaymentServerModule);
30
+ _this = _super.call(this, name || 'payment', version);
31
+ _defineProperty(_assertThisInitialized(_this), "defaultName", 'payment');
32
+ _defineProperty(_assertThisInitialized(_this), "defaultVersion", '1.0.0');
33
+ _defineProperty(_assertThisInitialized(_this), "request", void 0);
34
+ _defineProperty(_assertThisInitialized(_this), "app", void 0);
35
+ _defineProperty(_assertThisInitialized(_this), "logger", void 0);
36
+ _defineProperty(_assertThisInitialized(_this), "store", void 0);
37
+ _defineProperty(_assertThisInitialized(_this), "payMethodMemoryCache", null);
38
+ _defineProperty(_assertThisInitialized(_this), "payMethodListInFlight", null);
39
+ return _this;
40
+ }
41
+ _createClass(PaymentServerModule, [{
42
+ key: "initialize",
43
+ value: function () {
44
+ var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(core, options) {
45
+ var _this$app, _this$app2, _this$app3;
46
+ var appPlugin;
47
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
48
+ while (1) switch (_context.prev = _context.next) {
49
+ case 0:
50
+ this.core = core;
51
+ this.store = options === null || options === void 0 ? void 0 : options.store;
52
+ if (!this.store) this.store = {
53
+ payMethods: []
54
+ };
55
+ if (!Array.isArray(this.store.payMethods)) this.store.payMethods = [];
56
+ this.request = core.getPlugin('request');
57
+ appPlugin = core.getPlugin('app');
58
+ this.app = appPlugin === null || appPlugin === void 0 ? void 0 : appPlugin.getApp();
59
+ this.logger = (_this$app = this.app) === null || _this$app === void 0 ? void 0 : _this$app.logger;
60
+ if (!(!this.request && !((_this$app2 = this.app) !== null && _this$app2 !== void 0 && _this$app2.request))) {
61
+ _context.next = 10;
62
+ break;
63
+ }
64
+ throw new Error('PaymentServerModule 需要 request 插件或 app.request 支持');
65
+ case 10:
66
+ this.logInfo('PaymentServerModule initialized successfully', {
67
+ hasAppRequest: !!((_this$app3 = this.app) !== null && _this$app3 !== void 0 && _this$app3.request)
68
+ });
69
+ case 11:
70
+ case "end":
71
+ return _context.stop();
72
+ }
73
+ }, _callee, this);
74
+ }));
75
+ function initialize(_x, _x2) {
76
+ return _initialize.apply(this, arguments);
77
+ }
78
+ return initialize;
79
+ }() // getRoutes(): RouteDefinition[] {
80
+ // return [
81
+ // {
82
+ // method: 'get',
83
+ // path: '/pay/custom-payment/all',
84
+ // handler: async ({ data, config }) => {
85
+ // const payMethods = await this.getPayMethodListAsync({
86
+ // shouldFilter: this.shouldFilterPayMethods(data, config),
87
+ // });
88
+ // return {
89
+ // code: 200,
90
+ // status: true,
91
+ // data: payMethods,
92
+ // };
93
+ // },
94
+ // },
95
+ // ];
96
+ // }
97
+ }, {
98
+ key: "getPayMethodListAsync",
99
+ value: function () {
100
+ var _getPayMethodListAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
101
+ var _this$payMethodMemory,
102
+ _this2 = this;
103
+ var options,
104
+ _payMethods,
105
+ payMethods,
106
+ _args2 = arguments;
107
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
108
+ while (1) switch (_context2.prev = _context2.next) {
109
+ case 0:
110
+ options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};
111
+ this.logInfo('Starting getPayMethodListAsync');
112
+ if (!((_this$payMethodMemory = this.payMethodMemoryCache) !== null && _this$payMethodMemory !== void 0 && _this$payMethodMemory.length)) {
113
+ _context2.next = 4;
114
+ break;
115
+ }
116
+ return _context2.abrupt("return", this.resolvePayMethods(this.payMethodMemoryCache, options));
117
+ case 4:
118
+ if (!this.payMethodListInFlight) {
119
+ _context2.next = 9;
120
+ break;
121
+ }
122
+ _context2.next = 7;
123
+ return this.payMethodListInFlight;
124
+ case 7:
125
+ _payMethods = _context2.sent;
126
+ return _context2.abrupt("return", this.resolvePayMethods(_payMethods, options));
127
+ case 9:
128
+ this.payMethodListInFlight = this.loadPayMethodListAsync().finally(function () {
129
+ _this2.payMethodListInFlight = null;
130
+ });
131
+ _context2.next = 12;
132
+ return this.payMethodListInFlight;
133
+ case 12:
134
+ payMethods = _context2.sent;
135
+ return _context2.abrupt("return", this.resolvePayMethods(payMethods, options));
136
+ case 14:
137
+ case "end":
138
+ return _context2.stop();
139
+ }
140
+ }, _callee2, this);
141
+ }));
142
+ function getPayMethodListAsync() {
143
+ return _getPayMethodListAsync.apply(this, arguments);
144
+ }
145
+ return getPayMethodListAsync;
146
+ }()
147
+ }, {
148
+ key: "clearPayMethodCache",
149
+ value: function clearPayMethodCache() {
150
+ this.payMethodMemoryCache = null;
151
+ this.store.payMethods = [];
152
+ }
153
+ }, {
154
+ key: "loadPayMethodListAsync",
155
+ value: function () {
156
+ var _loadPayMethodListAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
157
+ var payMethods;
158
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
159
+ while (1) switch (_context3.prev = _context3.next) {
160
+ case 0:
161
+ _context3.prev = 0;
162
+ _context3.next = 3;
163
+ return this.fetchRemotePayMethods();
164
+ case 3:
165
+ payMethods = _context3.sent;
166
+ this.setPayMethodCache(payMethods);
167
+ _context3.next = 7;
168
+ return this.core.effects.emit(PAYMENT_METHODS_LOADED_EVENT, payMethods);
169
+ case 7:
170
+ this.logInfo('getPayMethodListAsync completed successfully', {
171
+ payMethods: payMethods
172
+ });
173
+ return _context3.abrupt("return", payMethods);
174
+ case 11:
175
+ _context3.prev = 11;
176
+ _context3.t0 = _context3["catch"](0);
177
+ console.error('[PaymentServerModule] 获取支付方式列表失败', _context3.t0);
178
+ this.logError('getPayMethodListAsync failed', _context3.t0);
179
+ return _context3.abrupt("return", []);
180
+ case 16:
181
+ case "end":
182
+ return _context3.stop();
183
+ }
184
+ }, _callee3, this, [[0, 11]]);
185
+ }));
186
+ function loadPayMethodListAsync() {
187
+ return _loadPayMethodListAsync.apply(this, arguments);
188
+ }
189
+ return loadPayMethodListAsync;
190
+ }()
191
+ }, {
192
+ key: "fetchRemotePayMethods",
193
+ value: function () {
194
+ var _fetchRemotePayMethods = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
195
+ var _this$app4;
196
+ var requester, response, payMethods;
197
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
198
+ while (1) switch (_context4.prev = _context4.next) {
199
+ case 0:
200
+ requester = ((_this$app4 = this.app) === null || _this$app4 === void 0 ? void 0 : _this$app4.request) || this.request;
201
+ _context4.next = 3;
202
+ return requester.get('/shop/pay/custom-payment/all', undefined);
203
+ case 3:
204
+ response = _context4.sent;
205
+ payMethods = (response === null || response === void 0 ? void 0 : response.data) || response || [];
206
+ return _context4.abrupt("return", Array.isArray(payMethods) ? payMethods : []);
207
+ case 6:
208
+ case "end":
209
+ return _context4.stop();
210
+ }
211
+ }, _callee4, this);
212
+ }));
213
+ function fetchRemotePayMethods() {
214
+ return _fetchRemotePayMethods.apply(this, arguments);
215
+ }
216
+ return fetchRemotePayMethods;
217
+ }()
218
+ }, {
219
+ key: "shouldFilterPayMethods",
220
+ value: function shouldFilterPayMethods(data, config) {
221
+ return (data === null || data === void 0 ? void 0 : data.filterPaymentMethods) === true || (config === null || config === void 0 ? void 0 : config.filterPaymentMethods) === true;
222
+ }
223
+ }, {
224
+ key: "resolvePayMethods",
225
+ value: function resolvePayMethods(payMethods, options) {
226
+ if (!options.shouldFilter) return payMethods;
227
+ return this.filterPayMethods(payMethods);
228
+ }
229
+ }, {
230
+ key: "filterPayMethods",
231
+ value: function filterPayMethods(payMethods) {
232
+ if (!Array.isArray(payMethods)) return [];
233
+ var availableMethods = payMethods.filter(function (method) {
234
+ return method.status === 1 && method.disable === 0;
235
+ });
236
+ var walletPassMethod = availableMethods.find(function (method) {
237
+ return method.code === WALLET_PASS_CODE;
238
+ });
239
+ if (!walletPassMethod) {
240
+ return availableMethods.filter(function (method) {
241
+ return !WALLET_DEPENDENT_CODES.has(method.code);
242
+ });
243
+ }
244
+ availableMethods = availableMethods.map(function (method) {
245
+ if (!WALLET_DEPENDENT_CODES.has(method.code)) return method;
246
+ return _objectSpread(_objectSpread({}, method), {}, {
247
+ channel_application: walletPassMethod.channel_application
248
+ });
249
+ });
250
+ return availableMethods;
251
+ }
252
+ }, {
253
+ key: "setPayMethodCache",
254
+ value: function setPayMethodCache(payMethods) {
255
+ this.payMethodMemoryCache = payMethods;
256
+ this.store.payMethods = payMethods;
257
+ }
258
+ }, {
259
+ key: "logInfo",
260
+ value: function logInfo(title, metadata) {
261
+ try {
262
+ if (this.logger) {
263
+ this.logger.addLog({
264
+ type: 'info',
265
+ title: "[PaymentServerModule] ".concat(title),
266
+ metadata: metadata || {}
267
+ });
268
+ }
269
+ } catch (_unused) {
270
+ // 日志记录失败不影响主流程
271
+ }
272
+ }
273
+ }, {
274
+ key: "logWarning",
275
+ value: function logWarning(title, metadata) {
276
+ try {
277
+ if (this.logger) {
278
+ this.logger.addLog({
279
+ type: 'warning',
280
+ title: "[PaymentServerModule] ".concat(title),
281
+ metadata: metadata || {}
282
+ });
283
+ }
284
+ } catch (_unused2) {
285
+ // 日志记录失败不影响主流程
286
+ }
287
+ }
288
+ }, {
289
+ key: "logError",
290
+ value: function logError(title, metadata) {
291
+ try {
292
+ if (this.logger) {
293
+ this.logger.addLog({
294
+ type: 'error',
295
+ title: "[PaymentServerModule] ".concat(title),
296
+ metadata: metadata || {}
297
+ });
298
+ }
299
+ } catch (_unused3) {
300
+ // 日志记录失败不影响主流程
301
+ }
302
+ }
303
+ }]);
304
+ return PaymentServerModule;
305
+ }(BaseModule);
@@ -0,0 +1,9 @@
1
+ import type { PaymentMethod } from '../../../modules/Payment/types';
2
+ export interface PaymentServerState {
3
+ payMethods: PaymentMethod[];
4
+ }
5
+ export interface PaymentMethodsChangedEventData {
6
+ oldMethods: PaymentMethod[];
7
+ newMethods: PaymentMethod[];
8
+ }
9
+ export type { PaymentMethod };
@@ -0,0 +1 @@
1
+ export {};
@@ -21,12 +21,18 @@ export declare class ProductsModule extends BaseModule implements Module {
21
21
  private isPriceFormatterRegistered;
22
22
  private quotationPriceBridge?;
23
23
  private quotationBridgeChannel?;
24
- private quotationBridgeCustomerId?;
24
+ private quotationBridgeLoadedKey?;
25
25
  private quotationBridgeRefreshPromise?;
26
26
  private quotationBridgeRefreshKey?;
27
27
  private productDataSource;
28
28
  private pendingSyncMessages;
29
29
  private syncTimer?;
30
+ /** 最近一次 SSE 全量拉取完成时间 */
31
+ private lastServerFullFetchAtMs;
32
+ /** 最近一次 preload 完成时间(含 IndexDB 命中) */
33
+ private lastPreloadCompletedAtMs;
34
+ /** IndexDB 写入串行队列,避免快照与 patch 并发交错 */
35
+ private productIndexDBSaveQueue;
30
36
  constructor(name?: string, version?: string);
31
37
  initialize(core: PisellCore, options: any): Promise<void>;
32
38
  /**
@@ -209,10 +215,28 @@ export declare class ProductsModule extends BaseModule implements Module {
209
215
  */
210
216
  private loadProductsFromIndexDB;
211
217
  /**
212
- * 保存商品数据到 IndexDB(平铺存储)
213
- * @private
218
+ * 串行执行商品 IndexDB 写入,避免快照替换与增量 patch 并发交错。
219
+ *
220
+ * @example
221
+ * await this.runInProductIndexDBSaveQueue(async () => {
222
+ * await this.dbManager.bulkUpdate(INDEXDB_STORE_NAME, products)
223
+ * })
224
+ */
225
+ private runInProductIndexDBSaveQueue;
226
+ /**
227
+ * 全量快照写入 IndexDB:clear + bulkUpdate,仅用于 SSE/HTTP 全量拉取。
228
+ *
229
+ * @example
230
+ * await this.replaceProductsSnapshotInIndexDB(list, 'loadProductsByServer')
214
231
  */
215
- private saveProductsToIndexDB;
232
+ private replaceProductsSnapshotInIndexDB;
233
+ /**
234
+ * 增量 upsert 商品到 IndexDB,不清空表;用于 pubsub 批次合并后的变更商品。
235
+ *
236
+ * @example
237
+ * await this.patchProductsInIndexDB(changedProducts, 'pubsub.processProductSyncMessages', mergeActions)
238
+ */
239
+ private patchProductsInIndexDB;
216
240
  /**
217
241
  * 同步更新商品 Map 缓存
218
242
  * 将 list 中的商品同步到 map,以 id 为 key
@@ -262,14 +286,17 @@ export declare class ProductsModule extends BaseModule implements Module {
262
286
  /**
263
287
  * 将 body 完整数据直接覆盖到本地 store(不调用报价单接口)
264
288
  * 已存在的 → 直接替换;不存在的 → 追加
265
- * 同时更新 Map 缓存、IndexDB,触发 onProductsChanged
266
- * 价格缓存由 processProductSyncMessages 末尾统一清除
289
+ *
290
+ * @example
291
+ * await this.applyBodyUpdatesToStore(bodyUpdates, { skipIndexDB: true })
267
292
  */
268
293
  private applyBodyUpdatesToStore;
269
294
  /**
270
295
  * 将增量拉取的商品合并到 store
271
296
  * 已存在的 → 替换;新的 → 追加
272
- * 同时更新 store.map、IndexDB,触发 onProductsChanged
297
+ *
298
+ * @example
299
+ * await this.mergeProductsToStore(freshProducts, { skipIndexDB: true })
273
300
  */
274
301
  private mergeProductsToStore;
275
302
  /**