@pisell/pisellos 0.0.568 → 0.0.570

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 (455) hide show
  1. package/dist/effects/index.d.ts +2 -2
  2. package/dist/model/strategy/adapter/dataVariant/type.d.ts +3 -3
  3. package/dist/model/strategy/adapter/itemRule/type.d.ts +6 -6
  4. package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
  5. package/dist/model/strategy/adapter/promotion/type.d.ts +5 -5
  6. package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
  7. package/dist/model/strategy/type.d.ts +1 -1
  8. package/dist/modules/BaseModule.d.ts +2 -2
  9. package/dist/modules/BaseModule.js +4 -4
  10. package/dist/modules/BookingContext/index.d.ts +48 -0
  11. package/dist/modules/BookingContext/index.js +566 -0
  12. package/dist/modules/BookingContext/types.d.ts +102 -0
  13. package/dist/modules/BookingContext/types.js +51 -0
  14. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  15. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +302 -0
  16. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  17. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +149 -0
  18. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  19. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +249 -0
  20. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  21. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  22. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  23. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  24. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  25. package/dist/modules/BookingContext/utils/index.js +11 -0
  26. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  27. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  28. package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  29. package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
  30. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  31. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  32. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  33. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  34. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  35. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  36. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  37. package/dist/modules/BookingContext/utils/resources.js +486 -0
  38. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  39. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  40. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  41. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  42. package/dist/modules/Cart/utils/cartProduct.js +26 -5
  43. package/dist/modules/Cart/utils/changePrice.js +27 -20
  44. package/dist/modules/Customer/index.d.ts +20 -0
  45. package/dist/modules/Customer/index.js +172 -83
  46. package/dist/modules/Customer/types.d.ts +3 -1
  47. package/dist/modules/Discount/index.d.ts +2 -1
  48. package/dist/modules/Discount/index.js +37 -9
  49. package/dist/modules/Discount/types.d.ts +2 -1
  50. package/dist/modules/Holder/types.d.ts +1 -1
  51. package/dist/modules/OpenData/index.d.ts +8 -0
  52. package/dist/modules/OpenData/index.js +36 -16
  53. package/dist/modules/OpenData/types.d.ts +1 -1
  54. package/dist/modules/Order/index.d.ts +448 -23
  55. package/dist/modules/Order/index.js +5417 -561
  56. package/dist/modules/Order/types.d.ts +693 -88
  57. package/dist/modules/Order/types.js +68 -1
  58. package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  59. package/dist/modules/Order/utils/bundleDiscountHydration.js +144 -0
  60. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  61. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  62. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  63. package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
  64. package/dist/modules/Order/utils.d.ts +167 -18
  65. package/dist/modules/Order/utils.js +960 -165
  66. package/dist/modules/Payment/index.d.ts +10 -9
  67. package/dist/modules/Payment/index.js +465 -703
  68. package/dist/modules/Payment/types.d.ts +47 -23
  69. package/dist/modules/Payment/utils.d.ts +1 -1
  70. package/dist/modules/Payment/utils.js +4 -3
  71. package/dist/modules/Payment/walletpass.js +44 -29
  72. package/dist/modules/Product/index.d.ts +1 -1
  73. package/dist/modules/Product/types.d.ts +29 -7
  74. package/dist/modules/ProductList/index.d.ts +17 -13
  75. package/dist/modules/ProductList/index.js +184 -74
  76. package/dist/modules/ProductList/types.d.ts +17 -0
  77. package/dist/modules/Quotation/index.d.ts +22 -2
  78. package/dist/modules/Quotation/index.js +108 -42
  79. package/dist/modules/Quotation/types.d.ts +19 -0
  80. package/dist/modules/ResourcePlanner/index.d.ts +24 -0
  81. package/dist/modules/ResourcePlanner/index.js +181 -0
  82. package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
  83. package/dist/modules/ResourcePlanner/planner.js +1069 -0
  84. package/dist/modules/ResourcePlanner/types.d.ts +227 -0
  85. package/dist/modules/ResourcePlanner/types.js +1 -0
  86. package/dist/modules/Rules/index.d.ts +8 -10
  87. package/dist/modules/Rules/index.js +222 -109
  88. package/dist/modules/Rules/types.d.ts +15 -4
  89. package/dist/modules/SalesSummary/index.d.ts +23 -26
  90. package/dist/modules/SalesSummary/index.js +152 -46
  91. package/dist/modules/SalesSummary/types.d.ts +9 -1
  92. package/dist/modules/SalesSummary/utils.d.ts +3 -22
  93. package/dist/modules/SalesSummary/utils.js +803 -163
  94. package/dist/modules/ScanOrderLogger/types.d.ts +2 -2
  95. package/dist/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  96. package/dist/modules/Schedule/getDateIsInSchedule.js +14 -7
  97. package/dist/modules/Schedule/index.d.ts +18 -5
  98. package/dist/modules/Schedule/index.js +78 -24
  99. package/dist/modules/Schedule/type.d.ts +7 -7
  100. package/dist/modules/Schedule/types.d.ts +11 -9
  101. package/dist/modules/Summary/index.js +4 -3
  102. package/dist/modules/SurchargeList/index.d.ts +18 -0
  103. package/dist/modules/SurchargeList/index.js +185 -0
  104. package/dist/modules/SurchargeList/types.d.ts +15 -0
  105. package/dist/modules/SurchargeList/types.js +1 -0
  106. package/dist/modules/index.d.ts +3 -0
  107. package/dist/modules/index.js +4 -1
  108. package/dist/plugins/app.d.ts +2 -0
  109. package/dist/plugins/request.d.ts +3 -2
  110. package/dist/server/index.d.ts +462 -8
  111. package/dist/server/index.js +6112 -656
  112. package/dist/server/modules/floor-plan/index.d.ts +39 -0
  113. package/dist/server/modules/floor-plan/index.js +595 -0
  114. package/dist/server/modules/floor-plan/types.d.ts +43 -0
  115. package/dist/server/modules/floor-plan/types.js +13 -0
  116. package/dist/server/modules/index.d.ts +7 -2
  117. package/dist/server/modules/index.js +6 -0
  118. package/dist/server/modules/menu/types.d.ts +1 -1
  119. package/dist/server/modules/order/index.d.ts +207 -14
  120. package/dist/server/modules/order/index.js +2326 -379
  121. package/dist/server/modules/order/types.d.ts +91 -20
  122. package/dist/server/modules/order/types.js +14 -1
  123. package/dist/server/modules/order/utils/filterBookings.d.ts +7 -1
  124. package/dist/server/modules/order/utils/filterBookings.js +118 -11
  125. package/dist/server/modules/order/utils/filterOrders.js +242 -14
  126. package/dist/server/modules/payment/index.d.ts +28 -0
  127. package/dist/server/modules/payment/index.js +305 -0
  128. package/dist/server/modules/payment/types.d.ts +9 -0
  129. package/dist/server/modules/payment/types.js +1 -0
  130. package/dist/server/modules/products/index.d.ts +105 -14
  131. package/dist/server/modules/products/index.js +1393 -516
  132. package/dist/server/modules/products/types.d.ts +35 -2
  133. package/dist/server/modules/products/types.js +4 -0
  134. package/dist/server/modules/quotation/index.d.ts +39 -0
  135. package/dist/server/modules/quotation/index.js +278 -66
  136. package/dist/server/modules/resource/index.d.ts +2 -3
  137. package/dist/server/modules/resource/index.js +108 -86
  138. package/dist/server/modules/resource/types.d.ts +1 -1
  139. package/dist/server/modules/schedule/index.d.ts +6 -4
  140. package/dist/server/modules/schedule/index.js +116 -85
  141. package/dist/server/modules/schedule/utils.d.ts +1 -1
  142. package/dist/server/test.json +713 -0
  143. package/dist/server/types.d.ts +6 -4
  144. package/dist/server/utils/product.js +2 -2
  145. package/dist/server/utils/small-ticket.d.ts +71 -0
  146. package/dist/server/utils/small-ticket.js +963 -0
  147. package/dist/solution/BaseSales/index.d.ts +378 -0
  148. package/dist/solution/BaseSales/index.js +4006 -0
  149. package/dist/solution/BaseSales/types.d.ts +394 -0
  150. package/dist/solution/BaseSales/types.js +40 -0
  151. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  152. package/dist/solution/BaseSales/utils/cartPromotion.js +1450 -0
  153. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  154. package/dist/solution/BaseSales/utils/parseSalesResponse.js +157 -0
  155. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  156. package/dist/solution/BaseSales/utils/quotationPrice.js +250 -0
  157. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  158. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +218 -0
  159. package/dist/solution/BaseSales/utils.d.ts +40 -0
  160. package/dist/solution/BaseSales/utils.js +263 -0
  161. package/dist/solution/BookingByStep/index.d.ts +2 -2
  162. package/dist/solution/BookingByStep/utils/resources.d.ts +1 -1
  163. package/dist/solution/BookingTicket/index.d.ts +382 -25
  164. package/dist/solution/BookingTicket/index.js +2506 -443
  165. package/dist/solution/BookingTicket/types.d.ts +191 -6
  166. package/dist/solution/BookingTicket/types.js +83 -10
  167. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  168. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  169. package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  170. package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
  171. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  172. package/dist/solution/BookingTicket/utils/bookingStatus.js +136 -0
  173. package/dist/solution/BookingTicket/utils/cartView.d.ts +29 -0
  174. package/dist/solution/BookingTicket/utils/cartView.js +209 -0
  175. package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  176. package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
  177. package/dist/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  178. package/dist/solution/BookingTicket/utils/orderCustomer.js +31 -0
  179. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  180. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
  181. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  182. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
  183. package/dist/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  184. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +41 -1
  185. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  186. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  187. package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  188. package/dist/solution/BookingTicket/utils/scan/handleScan.js +11 -3
  189. package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  190. package/dist/solution/BookingTicket/utils/scan/index.js +20 -8
  191. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  192. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  193. package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  194. package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
  195. package/dist/solution/Checkout/index.d.ts +1 -0
  196. package/dist/solution/Checkout/index.js +25 -34
  197. package/dist/solution/Checkout/utils/index.js +4 -4
  198. package/dist/solution/RegisterAndLogin/config.js +2 -10
  199. package/dist/solution/Sales/index.d.ts +50 -5
  200. package/dist/solution/Sales/index.js +484 -92
  201. package/dist/solution/Sales/types.d.ts +29 -5
  202. package/dist/solution/ScanOrder/index.d.ts +27 -21
  203. package/dist/solution/ScanOrder/index.js +499 -434
  204. package/dist/solution/ScanOrder/types.d.ts +38 -16
  205. package/dist/solution/ScanOrder/types.js +4 -5
  206. package/dist/solution/ScanOrder/utils.d.ts +4 -1
  207. package/dist/solution/ScanOrder/utils.js +109 -34
  208. package/dist/solution/ShopDiscount/index.js +4 -4
  209. package/dist/solution/ShopDiscount/types.d.ts +1 -1
  210. package/dist/solution/ShopDiscount/utils.d.ts +2 -2
  211. package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
  212. package/dist/solution/UnifiedBookingSales/index.js +1871 -0
  213. package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
  214. package/dist/solution/UnifiedBookingSales/types.js +11 -0
  215. package/dist/solution/VenueBooking/index.d.ts +29 -20
  216. package/dist/solution/VenueBooking/index.js +301 -213
  217. package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  218. package/dist/solution/VenueBooking/types.d.ts +1 -1
  219. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  220. package/dist/solution/VenueBooking/utils/slotMerge.js +9 -3
  221. package/dist/solution/index.d.ts +2 -0
  222. package/dist/solution/index.js +3 -1
  223. package/dist/types/index.d.ts +12 -2
  224. package/dist/utils/task.d.ts +2 -2
  225. package/dist/utils/watch.d.ts +2 -2
  226. package/lib/effects/index.d.ts +2 -2
  227. package/lib/model/strategy/adapter/dataVariant/type.d.ts +3 -3
  228. package/lib/model/strategy/adapter/itemRule/type.d.ts +6 -6
  229. package/lib/model/strategy/adapter/promotion/evaluator.js +3 -2
  230. package/lib/model/strategy/adapter/promotion/type.d.ts +5 -5
  231. package/lib/model/strategy/adapter/walletPass/utils.js +6 -4
  232. package/lib/model/strategy/type.d.ts +1 -1
  233. package/lib/modules/BaseModule.d.ts +2 -2
  234. package/lib/modules/BaseModule.js +4 -4
  235. package/lib/modules/BookingContext/index.d.ts +48 -0
  236. package/lib/modules/BookingContext/index.js +390 -0
  237. package/lib/modules/BookingContext/types.d.ts +102 -0
  238. package/lib/modules/BookingContext/types.js +48 -0
  239. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  240. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +286 -0
  241. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  242. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +148 -0
  243. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  244. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +242 -0
  245. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  246. package/lib/modules/BookingContext/utils/flexible.js +63 -0
  247. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  248. package/lib/modules/BookingContext/utils/formatResourceList.js +35 -0
  249. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  250. package/lib/modules/BookingContext/utils/index.js +126 -0
  251. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  252. package/lib/modules/BookingContext/utils/noResource.js +78 -0
  253. package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  254. package/lib/modules/BookingContext/utils/orderLineDisplay.js +29 -0
  255. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  256. package/lib/modules/BookingContext/utils/productExtend.js +330 -0
  257. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  258. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  259. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  260. package/lib/modules/BookingContext/utils/resourceSelection.js +24 -0
  261. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  262. package/lib/modules/BookingContext/utils/resources.js +419 -0
  263. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  264. package/lib/modules/BookingContext/utils/serviceTimes.js +161 -0
  265. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  266. package/lib/modules/BookingContext/utils/timeSlices.js +114 -0
  267. package/lib/modules/Cart/utils/cartProduct.js +27 -5
  268. package/lib/modules/Cart/utils/changePrice.js +20 -14
  269. package/lib/modules/Customer/index.d.ts +20 -0
  270. package/lib/modules/Customer/index.js +63 -10
  271. package/lib/modules/Customer/types.d.ts +3 -1
  272. package/lib/modules/Discount/index.d.ts +2 -1
  273. package/lib/modules/Discount/index.js +18 -2
  274. package/lib/modules/Discount/types.d.ts +2 -1
  275. package/lib/modules/Holder/types.d.ts +1 -1
  276. package/lib/modules/OpenData/index.d.ts +8 -0
  277. package/lib/modules/OpenData/index.js +21 -3
  278. package/lib/modules/OpenData/types.d.ts +1 -1
  279. package/lib/modules/Order/index.d.ts +448 -23
  280. package/lib/modules/Order/index.js +3641 -308
  281. package/lib/modules/Order/types.d.ts +693 -88
  282. package/lib/modules/Order/types.js +55 -1
  283. package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  284. package/lib/modules/Order/utils/bundleDiscountHydration.js +106 -0
  285. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  286. package/lib/modules/Order/utils/manualProductDiscount.js +207 -0
  287. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  288. package/lib/modules/Order/utils/orderCollectionIdentity.js +353 -0
  289. package/lib/modules/Order/utils.d.ts +167 -18
  290. package/lib/modules/Order/utils.js +974 -138
  291. package/lib/modules/Payment/index.d.ts +10 -9
  292. package/lib/modules/Payment/index.js +30 -124
  293. package/lib/modules/Payment/types.d.ts +47 -23
  294. package/lib/modules/Payment/utils.d.ts +1 -1
  295. package/lib/modules/Payment/utils.js +4 -3
  296. package/lib/modules/Payment/walletpass.js +16 -6
  297. package/lib/modules/Product/index.d.ts +1 -1
  298. package/lib/modules/Product/types.d.ts +29 -7
  299. package/lib/modules/ProductList/index.d.ts +17 -13
  300. package/lib/modules/ProductList/index.js +92 -51
  301. package/lib/modules/ProductList/types.d.ts +17 -0
  302. package/lib/modules/Quotation/index.d.ts +22 -2
  303. package/lib/modules/Quotation/index.js +76 -20
  304. package/lib/modules/Quotation/types.d.ts +19 -0
  305. package/lib/modules/ResourcePlanner/index.d.ts +24 -0
  306. package/lib/modules/ResourcePlanner/index.js +147 -0
  307. package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
  308. package/lib/modules/ResourcePlanner/planner.js +895 -0
  309. package/lib/modules/ResourcePlanner/types.d.ts +227 -0
  310. package/lib/modules/ResourcePlanner/types.js +5 -0
  311. package/lib/modules/Rules/index.d.ts +8 -10
  312. package/lib/modules/Rules/index.js +153 -61
  313. package/lib/modules/Rules/types.d.ts +15 -4
  314. package/lib/modules/SalesSummary/index.d.ts +23 -26
  315. package/lib/modules/SalesSummary/index.js +84 -16
  316. package/lib/modules/SalesSummary/types.d.ts +9 -1
  317. package/lib/modules/SalesSummary/utils.d.ts +3 -22
  318. package/lib/modules/SalesSummary/utils.js +616 -111
  319. package/lib/modules/ScanOrderLogger/types.d.ts +2 -2
  320. package/lib/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  321. package/lib/modules/Schedule/getDateIsInSchedule.js +14 -7
  322. package/lib/modules/Schedule/index.d.ts +18 -5
  323. package/lib/modules/Schedule/index.js +49 -14
  324. package/lib/modules/Schedule/type.d.ts +7 -7
  325. package/lib/modules/Schedule/types.d.ts +11 -9
  326. package/lib/modules/Summary/index.js +2 -2
  327. package/lib/modules/SurchargeList/index.d.ts +18 -0
  328. package/lib/modules/SurchargeList/index.js +95 -0
  329. package/lib/modules/SurchargeList/types.d.ts +15 -0
  330. package/lib/modules/SurchargeList/types.js +5 -0
  331. package/lib/modules/index.d.ts +3 -0
  332. package/lib/modules/index.js +33 -0
  333. package/lib/plugins/app.d.ts +2 -0
  334. package/lib/plugins/request.d.ts +3 -2
  335. package/lib/server/index.d.ts +462 -8
  336. package/lib/server/index.js +3901 -205
  337. package/lib/server/modules/floor-plan/index.d.ts +39 -0
  338. package/lib/server/modules/floor-plan/index.js +306 -0
  339. package/lib/server/modules/floor-plan/types.d.ts +43 -0
  340. package/lib/server/modules/floor-plan/types.js +19 -0
  341. package/lib/server/modules/index.d.ts +7 -2
  342. package/lib/server/modules/index.js +21 -0
  343. package/lib/server/modules/menu/types.d.ts +1 -1
  344. package/lib/server/modules/order/index.d.ts +207 -14
  345. package/lib/server/modules/order/index.js +1324 -141
  346. package/lib/server/modules/order/types.d.ts +91 -20
  347. package/lib/server/modules/order/types.js +11 -1
  348. package/lib/server/modules/order/utils/filterBookings.d.ts +7 -1
  349. package/lib/server/modules/order/utils/filterBookings.js +119 -11
  350. package/lib/server/modules/order/utils/filterOrders.js +238 -13
  351. package/lib/server/modules/payment/index.d.ts +28 -0
  352. package/lib/server/modules/payment/index.js +168 -0
  353. package/lib/server/modules/payment/types.d.ts +9 -0
  354. package/lib/server/modules/payment/types.js +5 -0
  355. package/lib/server/modules/products/index.d.ts +105 -14
  356. package/lib/server/modules/products/index.js +588 -97
  357. package/lib/server/modules/products/types.d.ts +35 -2
  358. package/lib/server/modules/products/types.js +3 -0
  359. package/lib/server/modules/quotation/index.d.ts +39 -0
  360. package/lib/server/modules/quotation/index.js +145 -1
  361. package/lib/server/modules/resource/index.d.ts +2 -3
  362. package/lib/server/modules/resource/index.js +71 -45
  363. package/lib/server/modules/resource/types.d.ts +1 -1
  364. package/lib/server/modules/schedule/index.d.ts +6 -4
  365. package/lib/server/modules/schedule/index.js +55 -44
  366. package/lib/server/modules/schedule/utils.d.ts +1 -1
  367. package/lib/server/test.json +713 -0
  368. package/lib/server/types.d.ts +6 -4
  369. package/lib/server/utils/product.js +2 -2
  370. package/lib/server/utils/small-ticket.d.ts +71 -0
  371. package/lib/server/utils/small-ticket.js +926 -0
  372. package/lib/solution/BaseSales/index.d.ts +378 -0
  373. package/lib/solution/BaseSales/index.js +2367 -0
  374. package/lib/solution/BaseSales/types.d.ts +394 -0
  375. package/lib/solution/BaseSales/types.js +47 -0
  376. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  377. package/lib/solution/BaseSales/utils/cartPromotion.js +1155 -0
  378. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  379. package/lib/solution/BaseSales/utils/parseSalesResponse.js +140 -0
  380. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  381. package/lib/solution/BaseSales/utils/quotationPrice.js +231 -0
  382. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  383. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +215 -0
  384. package/lib/solution/BaseSales/utils.d.ts +40 -0
  385. package/lib/solution/BaseSales/utils.js +259 -0
  386. package/lib/solution/BookingByStep/index.d.ts +2 -2
  387. package/lib/solution/BookingByStep/utils/resources.d.ts +1 -1
  388. package/lib/solution/BookingTicket/index.d.ts +382 -25
  389. package/lib/solution/BookingTicket/index.js +1350 -76
  390. package/lib/solution/BookingTicket/types.d.ts +191 -6
  391. package/lib/solution/BookingTicket/types.js +71 -10
  392. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  393. package/lib/solution/BookingTicket/utils/addProductDecision.js +353 -0
  394. package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  395. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +94 -0
  396. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  397. package/lib/solution/BookingTicket/utils/bookingStatus.js +136 -0
  398. package/lib/solution/BookingTicket/utils/cartView.d.ts +29 -0
  399. package/lib/solution/BookingTicket/utils/cartView.js +200 -0
  400. package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  401. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  402. package/lib/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  403. package/lib/solution/BookingTicket/utils/orderCustomer.js +35 -0
  404. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  405. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +387 -0
  406. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  407. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +220 -0
  408. package/lib/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  409. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +24 -3
  410. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  411. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +64 -0
  412. package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  413. package/lib/solution/BookingTicket/utils/scan/handleScan.js +4 -2
  414. package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  415. package/lib/solution/BookingTicket/utils/scan/index.js +14 -2
  416. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  417. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +115 -0
  418. package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  419. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +83 -0
  420. package/lib/solution/Checkout/index.d.ts +1 -0
  421. package/lib/solution/Checkout/index.js +18 -19
  422. package/lib/solution/Checkout/utils/index.js +4 -4
  423. package/lib/solution/RegisterAndLogin/config.js +2 -10
  424. package/lib/solution/Sales/index.d.ts +50 -5
  425. package/lib/solution/Sales/index.js +296 -39
  426. package/lib/solution/Sales/types.d.ts +29 -5
  427. package/lib/solution/ScanOrder/index.d.ts +27 -21
  428. package/lib/solution/ScanOrder/index.js +144 -103
  429. package/lib/solution/ScanOrder/types.d.ts +38 -16
  430. package/lib/solution/ScanOrder/types.js +4 -5
  431. package/lib/solution/ScanOrder/utils.d.ts +4 -1
  432. package/lib/solution/ScanOrder/utils.js +98 -26
  433. package/lib/solution/ShopDiscount/index.js +3 -3
  434. package/lib/solution/ShopDiscount/types.d.ts +1 -1
  435. package/lib/solution/ShopDiscount/utils.d.ts +2 -2
  436. package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
  437. package/lib/solution/UnifiedBookingSales/index.js +1050 -0
  438. package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
  439. package/lib/solution/UnifiedBookingSales/types.js +14 -0
  440. package/lib/solution/VenueBooking/index.d.ts +29 -20
  441. package/lib/solution/VenueBooking/index.js +169 -94
  442. package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  443. package/lib/solution/VenueBooking/types.d.ts +1 -1
  444. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  445. package/lib/solution/VenueBooking/utils/slotMerge.js +9 -3
  446. package/lib/solution/index.d.ts +2 -0
  447. package/lib/solution/index.js +22 -0
  448. package/lib/types/index.d.ts +12 -2
  449. package/lib/utils/task.d.ts +2 -2
  450. package/lib/utils/watch.d.ts +2 -2
  451. package/package.json +18 -19
  452. package/dist/model/strategy/adapter/promotion/index.d.ts +0 -4
  453. package/dist/solution/Checkout/appointmentDemo.json +0 -1
  454. package/lib/model/strategy/adapter/promotion/index.d.ts +0 -4
  455. package/lib/solution/Checkout/appointmentDemo.json +0 -1
@@ -18,6 +18,8 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
18
18
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
19
19
  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); } }
20
20
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
21
+ function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
22
+ function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
21
23
  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); }
22
24
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
23
25
  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); }; }
@@ -116,7 +118,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
116
118
  // 非表单类型 holder 视为匹配
117
119
  if (((_discount$holder = discount.holder) === null || _discount$holder === void 0 ? void 0 : _discount$holder.holder_type) !== 'form') return true;
118
120
  // 主预约holder, 目前(20251124)默认只考虑单个holder的情况
119
- var orderHolderId = Array.isArray(holders) && holders.length > 0 ? holders[0].form_record_id : undefined;
121
+ // 旧版 holders[0].form_record_id 新版 holders[0]
122
+ var orderHolderId = Array.isArray(holders) && holders.length > 0 ? holders[0].form_record_id || holders[0] : undefined;
120
123
  var productHolderId = Array.isArray(product.holder_id) ? product.holder_id[0] : product.holder_id;
121
124
  // 商品不需要选holder,则不对比holder,直接返回true,
122
125
  if (!product.isNeedHolder) return true;
@@ -169,8 +172,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
169
172
  var result = this.calcDiscount({
170
173
  discountList: mergedDiscountList,
171
174
  productList: _toConsumableArray(productList),
172
- holders: holders,
173
175
  orderTotalAmount: orderTotalAmount,
176
+ holders: holders,
174
177
  isFormSubject: isFormSubject
175
178
  }, {
176
179
  scan: true
@@ -223,6 +226,21 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
223
226
  });
224
227
  }
225
228
 
229
+ /** 剔除指定 type/tag 的折扣项,保留手动改价(type=product) / 券等 */
230
+ }, {
231
+ key: "excludeDiscountListByType",
232
+ value: function excludeDiscountListByType(discountList, type) {
233
+ return (discountList || []).filter(function (item) {
234
+ return item.type !== type && item.tag !== type;
235
+ });
236
+ }
237
+
238
+ /** 手动改价场景:去掉 promotion,保留 type=product 等行内折扣 */
239
+ }, {
240
+ key: "resolveDiscountListForManualOverride",
241
+ value: function resolveDiscountListForManualOverride(discountList) {
242
+ return this.excludeDiscountListByType(discountList, 'promotion');
243
+ }
226
244
  // 获取券不可用的原因
227
245
  }, {
228
246
  key: "getUnavailableReason",
@@ -299,12 +317,50 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
299
317
  }, {
300
318
  key: "calcDiscount",
301
319
  value: function calcDiscount(_ref2, options) {
302
- var _this3 = this;
320
+ var _options$selectedList,
321
+ _this3 = this;
303
322
  var discountList = _ref2.discountList,
304
323
  productList = _ref2.productList,
305
324
  holders = _ref2.holders,
306
325
  isFormSubject = _ref2.isFormSubject,
307
326
  orderTotalAmount = _ref2.orderTotalAmount;
327
+ var resolveIsFormSubject = function resolveIsFormSubject(product) {
328
+ return typeof isFormSubject === 'function' ? Boolean(isFormSubject(product)) : Boolean(isFormSubject);
329
+ };
330
+
331
+ // 识别出来是不是在编辑的界面里又新增了商品
332
+ // 这种情况下,如果有可用的优惠券,也会自动勾选上
333
+ var isEditModeAddNewProduct = productList.find(function (n) {
334
+ return n.booking_id;
335
+ }) && productList.find(function (n) {
336
+ return !n.booking_id;
337
+ });
338
+ var reapplyBookingDiscountProductUids = new Set(((options === null || options === void 0 ? void 0 : options.reapplyBookingDiscountProductUids) || []).filter(function (uid) {
339
+ return uid !== undefined && uid !== null && uid !== '';
340
+ }).map(String));
341
+ var getOriginProductUid = function getOriginProductUid(originProduct) {
342
+ var _originProduct$metada, _originProduct$metada2;
343
+ var uid = (_originProduct$metada = originProduct === null || originProduct === void 0 || (_originProduct$metada2 = originProduct.metadata) === null || _originProduct$metada2 === void 0 ? void 0 : _originProduct$metada2.unique_identification_number) !== null && _originProduct$metada !== void 0 ? _originProduct$metada : originProduct === null || originProduct === void 0 ? void 0 : originProduct.unique_identification_number;
344
+ if (uid === undefined || uid === null || uid === '') return undefined;
345
+ return String(uid);
346
+ };
347
+ var shouldReapplyBookingDiscount = function shouldReapplyBookingDiscount(originProduct, selectedDiscount) {
348
+ if (!selectedDiscount) return false;
349
+ var uid = getOriginProductUid(originProduct);
350
+ if (!uid || !reapplyBookingDiscountProductUids.has(uid)) return false;
351
+ var discountType = selectedDiscount.tag || selectedDiscount.type;
352
+ return selectedDiscount.isEditMode === true && selectedDiscount.isSelected === true && ['good_pass', 'discount_card', 'product_discount_card'].includes(discountType);
353
+ };
354
+ var resolveReapplyEditModeDiscountPercent = function resolveReapplyEditModeDiscountPercent(originProduct, selectedDiscount) {
355
+ var _discount2;
356
+ if (!shouldReapplyBookingDiscount(originProduct, selectedDiscount)) return undefined;
357
+ var discountType = (selectedDiscount === null || selectedDiscount === void 0 ? void 0 : selectedDiscount.tag) || (selectedDiscount === null || selectedDiscount === void 0 ? void 0 : selectedDiscount.type);
358
+ if (discountType !== 'discount_card' && discountType !== 'product_discount_card') {
359
+ return undefined;
360
+ }
361
+ var percent = Number((_discount2 = selectedDiscount.discount) === null || _discount2 === void 0 ? void 0 : _discount2.percent);
362
+ return Number.isFinite(percent) ? percent : undefined;
363
+ };
308
364
  var editModeDiscount = [];
309
365
  var addModeDiscount = [];
310
366
  discountList.forEach(function (discount) {
@@ -333,11 +389,23 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
333
389
  }
334
390
  });
335
391
  }
392
+ var hasDiscountInput = editModeDiscount.length > 0 || addModeDiscount.length > 0 || Boolean(options === null || options === void 0 ? void 0 : options.discountId) || Boolean(options === null || options === void 0 || (_options$selectedList = options.selectedList) === null || _options$selectedList === void 0 ? void 0 : _options$selectedList.length) || Boolean(options === null || options === void 0 ? void 0 : options.scan);
393
+ if (!hasDiscountInput) {
394
+ return {
395
+ discountList: discountList,
396
+ productList: productList
397
+ };
398
+ }
399
+ var canUseEditModeDiscountForReapply = function canUseEditModeDiscountForReapply(discount) {
400
+ var discountType = discount.tag || discount.type;
401
+ return reapplyBookingDiscountProductUids.size > 0 && discount.isEditMode === true && discount.isSelected === true && ['good_pass', 'discount_card', 'product_discount_card'].includes(discountType);
402
+ };
336
403
 
337
- // 过滤掉手动取消false的优惠券,但仅用于应用优惠逻辑
338
- var filteredDiscountList = addModeDiscount.filter(function (discount) {
404
+ // 过滤掉手动取消false的优惠券,但仅用于应用优惠逻辑。
405
+ // Change time 重报价需要把已选编辑态折扣卡重新放入候选,再由目标 uid 限定作用范围。
406
+ var filteredDiscountList = [].concat(_toConsumableArray(addModeDiscount.filter(function (discount) {
339
407
  return !discount.isManualSelect;
340
- });
408
+ })), _toConsumableArray(editModeDiscount.filter(canUseEditModeDiscountForReapply)));
341
409
 
342
410
  // 🔥 扁平化商品列表:将 bundle 子商品展开为虚拟商品
343
411
  var flattenProductsWithBundle = function flattenProductsWithBundle(productList) {
@@ -518,14 +586,6 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
518
586
  // 🔥 扁平化商品列表(包含主商品和bundle子商品)
519
587
  var flattenedList = flattenProductsWithBundle(productList);
520
588
 
521
- // 识别出来是不是在编辑的界面里又新增了商品
522
- // 这种情况下,如果有可用的优惠券,也会自动勾选上
523
- var isEditModeAddNewProduct = flattenedList.find(function (n) {
524
- return n.booking_id;
525
- }) && flattenedList.find(function (n) {
526
- return !n.booking_id;
527
- });
528
-
529
589
  // 对扁平化后的列表按价格降序排序(用于应用优惠券时优先选择高价商品)
530
590
  var sortedFlattenedList = flattenedList.sort(function (a, b) {
531
591
  var _ref3, _a$original_price, _ref4, _b$original_price;
@@ -784,6 +844,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
784
844
  }
785
845
  }
786
846
  });
847
+
787
848
  // 🔥 第三步:识别 order_level 折扣卡并预计算分摊(排除被其他专属折扣卡占用的商品)
788
849
  sortedDiscountList.forEach(function (discount) {
789
850
  if (!isOrderLevelFixedAmountDiscount(discount)) {
@@ -882,7 +943,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
882
943
  // 拿到discount配置的holder信息 product信息 product.holder 加在 isLimitedProduct
883
944
  var _tempVar = (flatItem === null || flatItem === void 0 ? void 0 : flatItem.type) === 'bundle' ? flatItem === null || flatItem === void 0 ? void 0 : flatItem.parentProduct : flatItem === null || flatItem === void 0 ? void 0 : flatItem.product;
884
945
  var isHolderMatch = _this3.checkHolderMatch(discount, {
885
- isNeedHolder: isFormSubject && !(_tempVar !== null && _tempVar !== void 0 && _tempVar.isNormalProduct),
946
+ isNeedHolder: resolveIsFormSubject(_tempVar) && !(_tempVar !== null && _tempVar !== void 0 && _tempVar.isNormalProduct),
886
947
  holder_id: (_tempVar === null || _tempVar === void 0 ? void 0 : _tempVar.holder_id) || product.holder_id
887
948
  }, holders);
888
949
  var timeLimit = true;
@@ -925,7 +986,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
925
986
  title: discount.format_title,
926
987
  original_amount: product.price || product.origin_total,
927
988
  pre_value: discount.par_value,
928
- product_id: originProduct.id,
989
+ product_id: originProduct.id || originProduct.product_id,
929
990
  discount_product_id: discount.product_id
930
991
  },
931
992
  metadata: {
@@ -1000,7 +1061,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1000
1061
  // 然后再处理应用哪些优惠券,此时只考虑filteredDiscountList中的优惠券
1001
1062
  // 🔥 使用扁平化后的列表进行处理
1002
1063
  sortedFlattenedList.forEach(function (flatItem, index) {
1003
- var _product10, _product$discount_lis2, _product11, _selectedDiscount$con;
1064
+ var _product10, _originProduct, _originProduct2, _originProduct3, _product$discount_lis2, _product11, _selectedDiscount$con;
1004
1065
  // 获取商品数据
1005
1066
  var product, originProduct;
1006
1067
  if (flatItem.type === 'main') {
@@ -1024,11 +1085,16 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1024
1085
  };
1025
1086
  originProduct = flatItem.originProduct;
1026
1087
  }
1088
+ var isPersistedProduct = ((_product10 = product) === null || _product10 === void 0 ? void 0 : _product10.booking_id) || ((_originProduct = originProduct) === null || _originProduct === void 0 ? void 0 : _originProduct.order_detail_id) || ((_originProduct2 = originProduct) === null || _originProduct2 === void 0 ? void 0 : _originProduct2.orderDetailId) || ((_originProduct3 = originProduct) === null || _originProduct3 === void 0 ? void 0 : _originProduct3.booking_id);
1089
+ var hasExistingWalletDiscount = ((_product$discount_lis2 = product.discount_list) === null || _product$discount_lis2 === void 0 ? void 0 : _product$discount_lis2.length) && ((_product11 = product) === null || _product11 === void 0 || (_product11 = _product11.discount_list) === null || _product11 === void 0 ? void 0 : _product11.every(function (discount) {
1090
+ var _discount$id, _discount$discount4;
1091
+ var discountIdentity = (_discount$id = discount.id) !== null && _discount$id !== void 0 ? _discount$id : (_discount$discount4 = discount.discount) === null || _discount$discount4 === void 0 ? void 0 : _discount$discount4.resource_id;
1092
+ var discountType = discount.tag || discount.type;
1093
+ return Boolean(discountIdentity && ['good_pass', 'discount_card', 'product_discount_card'].includes(discountType));
1094
+ }));
1027
1095
 
1028
- // 已有优惠的商品跳过
1029
- if ((_product10 = product) !== null && _product10 !== void 0 && _product10.booking_id && (_product$discount_lis2 = product.discount_list) !== null && _product$discount_lis2 !== void 0 && _product$discount_lis2.length && (_product11 = product) !== null && _product11 !== void 0 && (_product11 = _product11.discount_list) !== null && _product11 !== void 0 && _product11.every(function (discount) {
1030
- return discount.id && ['good_pass', 'discount_card', 'product_discount_card'].includes(discount.tag || discount.type);
1031
- })) {
1096
+ // 已持久化且已有钱包券/折扣卡的商品行跳过,保留后端历史折扣结果。
1097
+ if (isPersistedProduct && hasExistingWalletDiscount) {
1032
1098
  if (flatItem.type === 'main') {
1033
1099
  processedProductsMap.set(product._id, [originProduct]);
1034
1100
  } else {
@@ -1044,7 +1110,14 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1044
1110
  var _product$discount_lis3, _product$discount_lis4;
1045
1111
  // 🔥 检查策略可用性(针对 good_pass 和折扣卡)
1046
1112
  var discountType = discount.tag || discount.type;
1047
- if (['good_pass', 'discount_card', 'product_discount_card'].includes(discountType)) {
1113
+ var currentOriginUid = getOriginProductUid(originProduct);
1114
+ var isReapplyEditModeDiscountForProduct = discount.isEditMode && reapplyBookingDiscountProductUids.size > 0 && currentOriginUid && reapplyBookingDiscountProductUids.has(String(currentOriginUid)) && discount.isSelected === true;
1115
+ if (discount.isEditMode && reapplyBookingDiscountProductUids.size > 0) {
1116
+ var uid = currentOriginUid;
1117
+ if (!uid || !reapplyBookingDiscountProductUids.has(uid)) return false;
1118
+ if (!discount.isSelected) return false;
1119
+ }
1120
+ if (['good_pass', 'discount_card', 'product_discount_card'].includes(discountType) && !isReapplyEditModeDiscountForProduct) {
1048
1121
  var _discount$config2;
1049
1122
  // 如果策略检查后没有config,说明不可用
1050
1123
  if (discount.config === undefined || !(discount !== null && discount !== void 0 && (_discount$config2 = discount.config) !== null && _discount$config2 !== void 0 && _discount$config2.isAvailable)) {
@@ -1094,7 +1167,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1094
1167
  // 拿到discount配置的holder信息 product信息 product.holder 不可用return false
1095
1168
  var _tempVar = (flatItem === null || flatItem === void 0 ? void 0 : flatItem.type) === 'bundle' ? flatItem === null || flatItem === void 0 ? void 0 : flatItem.parentProduct : flatItem === null || flatItem === void 0 ? void 0 : flatItem.product;
1096
1169
  var isHolderMatch = _this3.checkHolderMatch(discount, {
1097
- isNeedHolder: isFormSubject && !(_tempVar !== null && _tempVar !== void 0 && _tempVar.isNormalProduct),
1170
+ isNeedHolder: resolveIsFormSubject(_tempVar) && !(_tempVar !== null && _tempVar !== void 0 && _tempVar.isNormalProduct),
1098
1171
  holder_id: (_tempVar === null || _tempVar === void 0 ? void 0 : _tempVar.holder_id) || product.holder_id
1099
1172
  }, holders);
1100
1173
  // 如果 holder 不匹配,则不适用
@@ -1137,12 +1210,14 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1137
1210
  // 如果是手动折扣,则不适用优惠券
1138
1211
  var isManualDiscount = false;
1139
1212
  if (flatItem.type === 'main') {
1140
- var _product$discount_lis5, _product12, _product12$every;
1213
+ var _product$discount_lis5, _product$discount_lis6, _product12, _product12$every;
1141
1214
  // 主商品:判断自身是否手动折扣
1142
- isManualDiscount = typeof product.isManualDiscount === 'boolean' ? product.isManualDiscount : product.total != product.origin_total && (product.bundle || []).every(function (item) {
1215
+ isManualDiscount = typeof product.isManualDiscount === 'boolean' ? product.isManualDiscount : ((_product$discount_lis5 = product.discount_list) === null || _product$discount_lis5 === void 0 ? void 0 : _product$discount_lis5.some(function (item) {
1216
+ return item.type === 'product';
1217
+ })) || product.total != product.origin_total && (product.bundle || []).every(function (item) {
1143
1218
  var _ref11;
1144
1219
  return !((_ref11 = item.discount_list || []) !== null && _ref11 !== void 0 && _ref11.length);
1145
- }) && (!((_product$discount_lis5 = product.discount_list) !== null && _product$discount_lis5 !== void 0 && _product$discount_lis5.length) || ((_product12 = product) === null || _product12 === void 0 || (_product12 = _product12.discount_list) === null || _product12 === void 0 || (_product12$every = _product12.every) === null || _product12$every === void 0 ? void 0 : _product12$every.call(_product12, function (item) {
1220
+ }) && (!((_product$discount_lis6 = product.discount_list) !== null && _product$discount_lis6 !== void 0 && _product$discount_lis6.length) || ((_product12 = product) === null || _product12 === void 0 || (_product12 = _product12.discount_list) === null || _product12 === void 0 || (_product12$every = _product12.every) === null || _product12$every === void 0 ? void 0 : _product12$every.call(_product12, function (item) {
1146
1221
  return item.type === 'product';
1147
1222
  })));
1148
1223
  if (product.inPromotion) {
@@ -1152,11 +1227,13 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1152
1227
  // bundle子商品:判断父主商品是否手动折扣
1153
1228
  var parentProduct = flatItem.parentProduct;
1154
1229
  if (parentProduct) {
1155
- var _parentProduct$discou, _parentProduct$discou2, _parentProduct$discou3;
1156
- isManualDiscount = typeof parentProduct.isManualDiscount === 'boolean' ? parentProduct.isManualDiscount : parentProduct.total != parentProduct.origin_total && (parentProduct.bundle || []).every(function (item) {
1230
+ var _parentProduct$discou, _parentProduct$discou2, _parentProduct$discou3, _parentProduct$discou4;
1231
+ isManualDiscount = typeof parentProduct.isManualDiscount === 'boolean' ? parentProduct.isManualDiscount : ((_parentProduct$discou = parentProduct.discount_list) === null || _parentProduct$discou === void 0 ? void 0 : _parentProduct$discou.some(function (item) {
1232
+ return item.type === 'product';
1233
+ })) || parentProduct.total != parentProduct.origin_total && (parentProduct.bundle || []).every(function (item) {
1157
1234
  var _ref12;
1158
1235
  return !((_ref12 = item.discount_list || []) !== null && _ref12 !== void 0 && _ref12.length);
1159
- }) && (!((_parentProduct$discou = parentProduct.discount_list) !== null && _parentProduct$discou !== void 0 && _parentProduct$discou.length) || (parentProduct === null || parentProduct === void 0 || (_parentProduct$discou2 = parentProduct.discount_list) === null || _parentProduct$discou2 === void 0 || (_parentProduct$discou3 = _parentProduct$discou2.every) === null || _parentProduct$discou3 === void 0 ? void 0 : _parentProduct$discou3.call(_parentProduct$discou2, function (item) {
1236
+ }) && (!((_parentProduct$discou2 = parentProduct.discount_list) !== null && _parentProduct$discou2 !== void 0 && _parentProduct$discou2.length) || (parentProduct === null || parentProduct === void 0 || (_parentProduct$discou3 = parentProduct.discount_list) === null || _parentProduct$discou3 === void 0 || (_parentProduct$discou4 = _parentProduct$discou3.every) === null || _parentProduct$discou4 === void 0 ? void 0 : _parentProduct$discou4.call(_parentProduct$discou3, function (item) {
1160
1237
  return item.type === 'product';
1161
1238
  })));
1162
1239
  }
@@ -1164,9 +1241,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1164
1241
 
1165
1242
  // 勾选时覆盖手动折扣
1166
1243
  if (options !== null && options !== void 0 && options.discountId) {
1167
- var _product$discount_lis6;
1244
+ var _product$discount_lis7;
1168
1245
  // 主商品:检查自己的 discount_list
1169
- if (flatItem.type === 'main' && (_product$discount_lis6 = product.discount_list) !== null && _product$discount_lis6 !== void 0 && _product$discount_lis6.some(function (item) {
1246
+ if (flatItem.type === 'main' && (_product$discount_lis7 = product.discount_list) !== null && _product$discount_lis7 !== void 0 && _product$discount_lis7.some(function (item) {
1170
1247
  var _item$discount;
1171
1248
  return ((_item$discount = item.discount) === null || _item$discount === void 0 ? void 0 : _item$discount.resource_id) === options.discountId;
1172
1249
  })) {
@@ -1174,8 +1251,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1174
1251
  }
1175
1252
  // bundle子商品:检查自己的 discount_list 或父主商品的 discount_list
1176
1253
  if (flatItem.type === 'bundle') {
1177
- var _product$discount_lis7, _flatItem$parentProdu7;
1178
- if ((_product$discount_lis7 = product.discount_list) !== null && _product$discount_lis7 !== void 0 && _product$discount_lis7.some(function (item) {
1254
+ var _product$discount_lis8, _flatItem$parentProdu7;
1255
+ if ((_product$discount_lis8 = product.discount_list) !== null && _product$discount_lis8 !== void 0 && _product$discount_lis8.some(function (item) {
1179
1256
  var _item$discount2;
1180
1257
  return ((_item$discount2 = item.discount) === null || _item$discount2 === void 0 ? void 0 : _item$discount2.resource_id) === options.discountId;
1181
1258
  }) || (_flatItem$parentProdu7 = flatItem.parentProduct) !== null && _flatItem$parentProdu7 !== void 0 && (_flatItem$parentProdu7 = _flatItem$parentProdu7.discount_list) !== null && _flatItem$parentProdu7 !== void 0 && _flatItem$parentProdu7.some(function (item) {
@@ -1187,11 +1264,11 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1187
1264
  }
1188
1265
  }
1189
1266
  if (options !== null && options !== void 0 && options.selectedList) {
1190
- var _product$discount_lis8;
1267
+ var _product$discount_lis9;
1191
1268
  // 主商品:检查自己的 discount_list
1192
- if (flatItem.type === 'main' && (_product$discount_lis8 = product.discount_list) !== null && _product$discount_lis8 !== void 0 && _product$discount_lis8.some(function (item) {
1193
- var _options$selectedList;
1194
- return options === null || options === void 0 || (_options$selectedList = options.selectedList) === null || _options$selectedList === void 0 ? void 0 : _options$selectedList.some(function (n) {
1269
+ if (flatItem.type === 'main' && (_product$discount_lis9 = product.discount_list) !== null && _product$discount_lis9 !== void 0 && _product$discount_lis9.some(function (item) {
1270
+ var _options$selectedList2;
1271
+ return options === null || options === void 0 || (_options$selectedList2 = options.selectedList) === null || _options$selectedList2 === void 0 ? void 0 : _options$selectedList2.some(function (n) {
1195
1272
  var _item$discount4;
1196
1273
  return n.discountId === ((_item$discount4 = item.discount) === null || _item$discount4 === void 0 ? void 0 : _item$discount4.resource_id);
1197
1274
  });
@@ -1200,16 +1277,16 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1200
1277
  }
1201
1278
  // bundle子商品:检查自己的 discount_list 或父主商品的 discount_list
1202
1279
  if (flatItem.type === 'bundle') {
1203
- var _product$discount_lis9, _flatItem$parentProdu8;
1204
- if ((_product$discount_lis9 = product.discount_list) !== null && _product$discount_lis9 !== void 0 && _product$discount_lis9.some(function (item) {
1205
- var _options$selectedList2;
1206
- return options === null || options === void 0 || (_options$selectedList2 = options.selectedList) === null || _options$selectedList2 === void 0 ? void 0 : _options$selectedList2.some(function (n) {
1280
+ var _product$discount_lis10, _flatItem$parentProdu8;
1281
+ if ((_product$discount_lis10 = product.discount_list) !== null && _product$discount_lis10 !== void 0 && _product$discount_lis10.some(function (item) {
1282
+ var _options$selectedList3;
1283
+ return options === null || options === void 0 || (_options$selectedList3 = options.selectedList) === null || _options$selectedList3 === void 0 ? void 0 : _options$selectedList3.some(function (n) {
1207
1284
  var _item$discount5;
1208
1285
  return n.discountId === ((_item$discount5 = item.discount) === null || _item$discount5 === void 0 ? void 0 : _item$discount5.resource_id);
1209
1286
  });
1210
1287
  }) || (_flatItem$parentProdu8 = flatItem.parentProduct) !== null && _flatItem$parentProdu8 !== void 0 && (_flatItem$parentProdu8 = _flatItem$parentProdu8.discount_list) !== null && _flatItem$parentProdu8 !== void 0 && _flatItem$parentProdu8.some(function (item) {
1211
- var _options$selectedList3;
1212
- return options === null || options === void 0 || (_options$selectedList3 = options.selectedList) === null || _options$selectedList3 === void 0 ? void 0 : _options$selectedList3.some(function (n) {
1288
+ var _options$selectedList4;
1289
+ return options === null || options === void 0 || (_options$selectedList4 = options.selectedList) === null || _options$selectedList4 === void 0 ? void 0 : _options$selectedList4.some(function (n) {
1213
1290
  var _item$discount6;
1214
1291
  return n.discountId === ((_item$discount6 = item.discount) === null || _item$discount6 === void 0 ? void 0 : _item$discount6.resource_id);
1215
1292
  });
@@ -1245,7 +1322,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1245
1322
  price: product.price,
1246
1323
  options: restoredOptions
1247
1324
  }), {}, {
1248
- discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion')
1325
+ discount_list: isManualDiscount ? _this3.resolveDiscountListForManualOverride(product.discount_list) : _this3.filterDiscountListByType(product.discount_list, 'promotion')
1249
1326
  }))]);
1250
1327
  } else {
1251
1328
  var _ref13, _product$_promotion$f, _product13, _product$origin_total, _product$price2;
@@ -1263,26 +1340,26 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1263
1340
  } : {
1264
1341
  _id: product._id.split('___')[0] + '___' + index,
1265
1342
  total: total,
1266
- original_price: product.original_price,
1267
1343
  price: product.price,
1268
1344
  main_product_selling_price: main_product_selling_price,
1269
1345
  options: restoredOptions
1270
1346
  }), {}, {
1271
- discount_list: _this3.filterDiscountListByType(product.discount_list, 'promotion')
1347
+ discount_list: isManualDiscount ? _this3.resolveDiscountListForManualOverride(product.discount_list) : _this3.filterDiscountListByType(product.discount_list, 'promotion')
1272
1348
  }))]);
1273
1349
  }
1274
1350
  } else {
1275
- var _flatItem$bundleItem8;
1351
+ var _flatItem$bundleItem8, _flatItem$bundleItem9;
1276
1352
  // bundle子商品:保存到扁平化Map
1277
1353
  processedFlatItemsMap.set(flatItem._id, [_objectSpread(_objectSpread({}, flatItem), {}, {
1278
- discount_list: _this3.filterDiscountListByType(((_flatItem$bundleItem8 = flatItem.bundleItem) === null || _flatItem$bundleItem8 === void 0 ? void 0 : _flatItem$bundleItem8.discount_list) || [], 'promotion'),
1354
+ discount_list: isManualDiscount ? _this3.resolveDiscountListForManualOverride(((_flatItem$bundleItem8 = flatItem.bundleItem) === null || _flatItem$bundleItem8 === void 0 ? void 0 : _flatItem$bundleItem8.discount_list) || []) : _this3.filterDiscountListByType(((_flatItem$bundleItem9 = flatItem.bundleItem) === null || _flatItem$bundleItem9 === void 0 ? void 0 : _flatItem$bundleItem9.discount_list) || [], 'promotion'),
1279
1355
  price: isManualDiscount ? flatItem.bundleItem.price : flatItem.bundleItem.original_price,
1280
1356
  processed: true
1281
1357
  })]);
1282
1358
  }
1283
1359
  return;
1284
1360
  }
1285
- if (applicableDiscounts.length && product.booking_id && typeof selectedDiscount.isManualSelect === 'undefined' && !(options !== null && options !== void 0 && options.scan) && !isEditModeAddNewProduct) {
1361
+ var shouldReapplyBookingDiscountForProduct = shouldReapplyBookingDiscount(originProduct, selectedDiscount);
1362
+ if (applicableDiscounts.length && product.booking_id && typeof selectedDiscount.isManualSelect === 'undefined' && !(options !== null && options !== void 0 && options.scan) && !isEditModeAddNewProduct && !shouldReapplyBookingDiscountForProduct) {
1286
1363
  return;
1287
1364
  }
1288
1365
 
@@ -1341,7 +1418,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1341
1418
  }));
1342
1419
  }
1343
1420
  for (var i = 0; i < splitCount; i++) {
1344
- var _originProduct, _selectedDiscount$con2, _product$options, _product$options2, _selectedDiscount$met, _selectedDiscount$met2;
1421
+ var _originProduct4, _selectedDiscount$con2, _product$options, _product$options2, _selectedDiscount$met, _selectedDiscount$met2, _reapplyDiscountPerce;
1345
1422
  // 商品券:每个拆分商品使用不同的商品券(从 applicableDiscounts 按索引取)
1346
1423
  // 折扣卡:所有拆分商品使用同一张折扣卡(selectedDiscountCard 或 applicableDiscounts[0])
1347
1424
  var currentSelectedDiscount = isGoodPass ? selectedDiscountCard || applicableDiscounts[i] : selectedDiscountCard || applicableDiscounts[0];
@@ -1369,7 +1446,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1369
1446
  productOriginTotal = product.origin_total;
1370
1447
  }
1371
1448
  // 如果originProduct?._productInit?.original_price为 0,product.origin_total可能为空,此时取 product.total
1372
- if (Number(((_originProduct = originProduct) === null || _originProduct === void 0 || (_originProduct = _originProduct._productInit) === null || _originProduct === void 0 ? void 0 : _originProduct.original_price) || 0) > 0 && product.origin_total && product.total && product.origin_total !== product.total) {
1449
+ if (Number(((_originProduct4 = originProduct) === null || _originProduct4 === void 0 || (_originProduct4 = _originProduct4._productInit) === null || _originProduct4 === void 0 ? void 0 : _originProduct4.original_price) || 0) > 0 && product.origin_total && product.total && product.origin_total !== product.total) {
1373
1450
  productOriginTotal = product.total;
1374
1451
  }
1375
1452
 
@@ -1386,18 +1463,25 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1386
1463
  var productDiscountDifference = void 0;
1387
1464
  var discountedOptions = product.options;
1388
1465
  var optionDiscountAmount = 0;
1466
+ var reapplyDiscountPercent = void 0;
1389
1467
  if (isOrderLevel && productAllocation) {
1390
1468
  // order_level:使用预计算的分摊金额
1391
1469
  amount = productAllocation.discountAmount;
1392
1470
  productDiscountDifference = productAllocation.difference;
1393
1471
  mainProductSellingPrice = Math.max(new Decimal(product.price).minus(amount).toNumber(), 0);
1472
+ } else if (resolveReapplyEditModeDiscountPercent(originProduct, selectedDiscount) !== undefined) {
1473
+ // Change time 重套编辑态折扣卡时,历史 par_value 不是运行时折扣口径,优先使用后端快照里的 percent。
1474
+ var percent = resolveReapplyEditModeDiscountPercent(originProduct, selectedDiscount);
1475
+ reapplyDiscountPercent = new Decimal(percent).toFixed(2);
1476
+ mainProductSellingPrice = new Decimal(product.price || 0).mul(new Decimal(100).minus(percent)).div(100).toDecimalPlaces(2).toNumber();
1477
+ amount = new Decimal(product.price).minus(mainProductSellingPrice).toNumber();
1394
1478
  } else {
1395
1479
  // item_level 或其他类型:使用原有逻辑
1396
- mainProductSellingPrice = getDiscountAmount(currentSelectedDiscount, product.price, product.price);
1480
+ mainProductSellingPrice = getDiscountAmount(selectedDiscount, product.price, product.price);
1397
1481
  amount = new Decimal(product.price).minus(new Decimal(mainProductSellingPrice)).toNumber();
1398
1482
  }
1399
1483
  if (isDeductOptionPrice && (_product$options = product.options) !== null && _product$options !== void 0 && _product$options.length) {
1400
- var optionResult = applyDiscountToOptions(product.options, currentSelectedDiscount);
1484
+ var optionResult = applyDiscountToOptions(product.options, selectedDiscount);
1401
1485
  discountedOptions = optionResult.discountedOptions;
1402
1486
  optionDiscountAmount = optionResult.optionDiscountAmount;
1403
1487
  }
@@ -1410,9 +1494,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1410
1494
  // discount_list.amount / fixed_amount:行级总优惠 = 主商品优惠 + option 优惠(与 total 变化一致)
1411
1495
  var mainProductDiscountAmount = amount;
1412
1496
  var lineDiscountAmount = new Decimal(mainProductDiscountAmount).plus(optionDiscountAmount).toNumber();
1413
- var currentDiscountType = currentSelectedDiscount.tag === 'product_discount_card' ? 'discount_card' : currentSelectedDiscount.tag;
1414
1497
  var _discountType = selectedDiscount.tag || selectedDiscount.type;
1415
- var currentIsGoodPass = currentDiscountType === 'good_pass';
1498
+ var currentIsGoodPass = _discountType === 'good_pass';
1416
1499
  var discountDetail = {
1417
1500
  amount: lineDiscountAmount,
1418
1501
  type: selectedDiscount.tag === 'product_discount_card' ? 'discount_card' : _discountType,
@@ -1423,9 +1506,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1423
1506
  resource_id: selectedDiscount.id,
1424
1507
  title: selectedDiscount.format_title,
1425
1508
  original_amount: product.price,
1426
- product_id: originProduct.id,
1427
- percent: currentSelectedDiscount.par_value,
1428
- discount_product_id: currentSelectedDiscount.product_id
1509
+ product_id: originProduct.id || originProduct.product_id,
1510
+ percent: (_reapplyDiscountPerce = reapplyDiscountPercent) !== null && _reapplyDiscountPerce !== void 0 ? _reapplyDiscountPerce : selectedDiscount.par_value,
1511
+ discount_product_id: selectedDiscount.product_id
1429
1512
  },
1430
1513
  // 前端使用的num数量,为了计算优惠金额(拆分时为1)
1431
1514
  _num: isNeedSplit ? 1 : product.num,
@@ -1442,7 +1525,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1442
1525
  })
1443
1526
  };
1444
1527
  appliedProducts.push(discountDetail);
1445
- appliedDiscountProducts.set(currentSelectedDiscount.id, appliedProducts);
1528
+ appliedDiscountProducts.set(selectedDiscount.id, appliedProducts);
1446
1529
 
1447
1530
  // 记录应用了优惠券的商品
1448
1531
  // 后续更新价格改为 getProductTotalPrice getProductOriginTotalPrice逻辑
@@ -1450,7 +1533,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1450
1533
  arr.push(_this3.hooks.setProduct(originProduct, {
1451
1534
  discount_list: [discountDetail],
1452
1535
  // good_pass:主商品价以折后价为准;勿用 product.price - amount(amount 含 option 优惠时会算错)
1453
- price: currentIsGoodPass ? mainProductSellingPrice : product.price,
1536
+ price: isGoodPass ? mainProductSellingPrice : product.price,
1454
1537
  quantity: isNeedSplit ? 1 : product.quantity,
1455
1538
  origin_total: getProductOriginTotalPrice({
1456
1539
  product: {
@@ -1511,6 +1594,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1511
1594
  // 计算折扣后的价格(使用 getDiscountAmount,内部已处理 maxDeductionAmount)
1512
1595
  var discountedPrice = getDiscountAmount(currentBundleDiscount, product.origin_total, product.origin_total);
1513
1596
  var bundleDiscountAmount = new Decimal(product.origin_total || 0).minus(discountedPrice).toNumber();
1597
+ debugger;
1514
1598
 
1515
1599
  // 确定折扣类型
1516
1600
  var bundleDiscountType = currentBundleDiscount.tag === 'product_discount_card' ? 'discount_card' : currentBundleDiscount.tag;
@@ -1524,9 +1608,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1524
1608
  resource_id: currentBundleDiscount.id,
1525
1609
  title: currentBundleDiscount.format_title,
1526
1610
  original_amount: product.origin_total,
1527
- product_id: product.id,
1528
- percent: currentBundleDiscount.par_value,
1529
- discount_product_id: currentBundleDiscount.product_id
1611
+ product_id: product.id || product.product_id,
1612
+ discount_product_id: selectedDiscount.product_id
1530
1613
  },
1531
1614
  metadata: {
1532
1615
  // 🔥 使用拆分后的唯一 _id
@@ -1563,7 +1646,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1563
1646
  var _nextSelectedDiscount;
1564
1647
  // 重新查找适用于剩余商品的可用折扣(已使用的会被自动过滤掉)
1565
1648
  var nextApplicableDiscounts = sortedDiscountList.filter(function (nextDiscount) {
1566
- var _product$discount_lis10;
1649
+ var _product$discount_lis11;
1567
1650
  var nextDiscountType = nextDiscount.tag || nextDiscount.type;
1568
1651
  // 检查策略可用性
1569
1652
  if (['good_pass', 'discount_card', 'product_discount_card'].includes(nextDiscountType)) {
@@ -1573,7 +1656,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1573
1656
  }
1574
1657
  }
1575
1658
  // 折扣卡时总价为0时不可用
1576
- if ((Number(product.total) <= 0 || !product.total) && !((_product$discount_lis10 = product.discount_list) !== null && _product$discount_lis10 !== void 0 && _product$discount_lis10.find(function (n) {
1659
+ if ((Number(product.total) <= 0 || !product.total) && !((_product$discount_lis11 = product.discount_list) !== null && _product$discount_lis11 !== void 0 && _product$discount_lis11.find(function (n) {
1577
1660
  var _n$discount2;
1578
1661
  return ((_n$discount2 = n.discount) === null || _n$discount2 === void 0 ? void 0 : _n$discount2.resource_id) === nextDiscount.id;
1579
1662
  })) && nextDiscountType !== 'good_pass') return false;
@@ -1829,6 +1912,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1829
1912
 
1830
1913
  // 🔥 使用当前的 _id 作为唯一标识
1831
1914
  var _uniqueId = flatItem._id;
1915
+ debugger;
1832
1916
  var _discountDetail2 = {
1833
1917
  amount: bundleActualDiscountAmount * (product.num || 1),
1834
1918
  type: _currentBundleDiscount.tag === 'product_discount_card' ? 'discount_card' : _currentBundleDiscount.tag,
@@ -1839,9 +1923,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
1839
1923
  resource_id: _currentBundleDiscount.id,
1840
1924
  title: _currentBundleDiscount.format_title,
1841
1925
  original_amount: product.original_price,
1842
- product_id: product.id,
1843
- percent: _currentBundleDiscount.par_value,
1844
- discount_product_id: _currentBundleDiscount.product_id
1926
+ product_id: product.id || product.product_id,
1927
+ percent: selectedDiscount.par_value,
1928
+ discount_product_id: selectedDiscount.product_id
1845
1929
  },
1846
1930
  metadata: _objectSpread({
1847
1931
  // 🔥 使用唯一的 _id
@@ -2158,7 +2242,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2158
2242
  } else {
2159
2243
  // 🔥 没有子商品被拆分,使用原有逻辑
2160
2244
  mainProductArr.forEach(function (mainProduct) {
2161
- var _mainProductData$disc, _mainProductData$disc2, _mainProductData$disc3;
2245
+ var _ref15, _mainProductData$main, _mainProductData$disc, _mainProductData$disc2, _mainProductData$disc3;
2162
2246
  var mainProductData = _this3.hooks.getProduct(mainProduct);
2163
2247
 
2164
2248
  // 重组bundle
@@ -2173,6 +2257,9 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2173
2257
  } else {
2174
2258
  // 🔥 关键:拆分后的bundle item
2175
2259
  processedBundleItems.forEach(function (item) {
2260
+ var _item$price, _ref14, _item$bundle_selling_;
2261
+ var nextBundlePrice = (_item$price = item.price) !== null && _item$price !== void 0 ? _item$price : bundleItem.price;
2262
+ var nextBundleSellingPrice = (_ref14 = (_item$bundle_selling_ = item.bundle_selling_price) !== null && _item$bundle_selling_ !== void 0 ? _item$bundle_selling_ : item.price) !== null && _ref14 !== void 0 ? _ref14 : bundleItem.bundle_selling_price;
2176
2263
  // 🔥 更新 discount_list 中的 num,使其与拆分后的 item.num 一致
2177
2264
  var updatedDiscountList = (item.discount_list || []).map(function (discount) {
2178
2265
  var _discount$metadata11;
@@ -2187,18 +2274,20 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2187
2274
  newBundle.push(_objectSpread(_objectSpread({}, bundleItem), {}, {
2188
2275
  _id: item._id,
2189
2276
  product_id: bundleItem.product_id,
2190
- price: item.price,
2277
+ price: nextBundlePrice,
2191
2278
  num: item.num,
2192
2279
  discount_list: updatedDiscountList,
2193
- bundle_selling_price: bundleItem.bundle_selling_price !== undefined ? item.price : undefined
2280
+ bundle_selling_price: bundleItem.bundle_selling_price !== undefined ? nextBundleSellingPrice : undefined
2194
2281
  }));
2195
2282
  });
2196
2283
  }
2197
2284
  });
2198
2285
  }
2199
2286
 
2200
- // 🔥 重新计算主商品的总价(包含bundle)
2201
- var newTotal = Number(mainProductData.price || 0);
2287
+ // 主商品已经在前面的 setProduct 中应用过折扣;这里只替换 bundle,
2288
+ // 避免把主商品 discount_list 再扣一次。
2289
+ var mainSellingPrice = (_ref15 = (_mainProductData$main = mainProductData.main_product_selling_price) !== null && _mainProductData$main !== void 0 ? _mainProductData$main : mainProductData.price) !== null && _ref15 !== void 0 ? _ref15 : 0;
2290
+ var newTotal = Number(mainSellingPrice || 0);
2202
2291
  var newOriginTotal = Number(mainProductData.original_price || mainProductData.price || 0);
2203
2292
 
2204
2293
  // 判断是否是手动折扣
@@ -2212,21 +2301,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2212
2301
  newTotal = (_mainProductData$tota = mainProductData.total) !== null && _mainProductData$tota !== void 0 ? _mainProductData$tota : newTotal;
2213
2302
  newOriginTotal = (_mainProductData$orig3 = mainProductData.origin_total) !== null && _mainProductData$orig3 !== void 0 ? _mainProductData$orig3 : newOriginTotal;
2214
2303
  } else {
2215
- // 不是手动折扣时,才重新计算
2216
- var _mainDiscountList = mainProductData.discount_list.filter(function (item) {
2217
- var _item$metadata5;
2218
- return !(item !== null && item !== void 0 && (_item$metadata5 = item.metadata) !== null && _item$metadata5 !== void 0 && _item$metadata5.custom_product_bundle_map_id);
2219
- });
2220
-
2221
- // 如果主商品本身有折扣,需要重新计算主商品价格
2222
- if (_mainDiscountList && _mainDiscountList.length > 0) {
2223
- var _Decimal$minus$toNumb3, _mainProductData$orig4;
2224
- var _allDiscountAmount2 = getDiscountListAmount(_mainDiscountList);
2225
- newTotal = (_Decimal$minus$toNumb3 = new Decimal(mainProductData.price || 0).minus(_allDiscountAmount2).toNumber()) !== null && _Decimal$minus$toNumb3 !== void 0 ? _Decimal$minus$toNumb3 : newTotal;
2226
- newOriginTotal = (_mainProductData$orig4 = mainProductData.origin_total) !== null && _mainProductData$orig4 !== void 0 ? _mainProductData$orig4 : newOriginTotal;
2227
- }
2228
-
2229
- // 累加bundle的价格(只累加一次)
2304
+ // 累加bundle的折后价格(只累加一次)
2230
2305
  if (newBundle.length > 0) {
2231
2306
  newBundle.forEach(function (item) {
2232
2307
  var _item$discount_list3;
@@ -2234,6 +2309,12 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2234
2309
  var originalPrice = ((_item$discount_list3 = item.discount_list) === null || _item$discount_list3 === void 0 || (_item$discount_list3 = _item$discount_list3[0]) === null || _item$discount_list3 === void 0 || (_item$discount_list3 = _item$discount_list3.discount) === null || _item$discount_list3 === void 0 ? void 0 : _item$discount_list3.original_amount) || item.price;
2235
2310
  newOriginTotal += Number(originalPrice) * Number(item.num);
2236
2311
  });
2312
+ // 计算原始总价(不考虑折扣)
2313
+ newBundle.forEach(function (item) {
2314
+ var _item$discount_list4;
2315
+ var originalPrice = ((_item$discount_list4 = item.discount_list) === null || _item$discount_list4 === void 0 || (_item$discount_list4 = _item$discount_list4[0]) === null || _item$discount_list4 === void 0 || (_item$discount_list4 = _item$discount_list4.discount) === null || _item$discount_list4 === void 0 ? void 0 : _item$discount_list4.original_amount) || item.price;
2316
+ newOriginTotal += Number(originalPrice) * Number(item.num);
2317
+ });
2237
2318
  }
2238
2319
  }
2239
2320
 
@@ -2342,6 +2423,7 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2342
2423
  }, {
2343
2424
  key: "checkPackageSubItemUsageRules",
2344
2425
  value: function checkPackageSubItemUsageRules(discount, flatItem) {
2426
+ var _flatItem$product;
2345
2427
  var limitedData = discount.limited_relation_product_data;
2346
2428
  var usageRules = limitedData === null || limitedData === void 0 ? void 0 : limitedData.package_sub_item_usage_rules;
2347
2429
  var rules = ['original_price'].concat(_toConsumableArray((usageRules === null || usageRules === void 0 ? void 0 : usageRules.rules) || []));
@@ -2353,16 +2435,18 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2353
2435
  var ruleType = usageRules.type;
2354
2436
  // 套餐适用范围配置
2355
2437
  var packageScope = usageRules === null || usageRules === void 0 ? void 0 : usageRules.package_scope;
2356
- var _ref14 = packageScope || {},
2357
- scopeType = _ref14.type,
2358
- _ref14$exclude_bundle = _ref14.exclude_bundle_product_ids,
2359
- exclude_bundle_product_ids = _ref14$exclude_bundle === void 0 ? [] : _ref14$exclude_bundle,
2360
- _ref14$include_bundle = _ref14.include_bundle_product_ids,
2361
- include_bundle_product_ids = _ref14$include_bundle === void 0 ? [] : _ref14$include_bundle,
2362
- _ref14$filter = _ref14.filter,
2363
- filter = _ref14$filter === void 0 ? 0 : _ref14$filter;
2438
+ var _ref16 = packageScope || {},
2439
+ _ref16$type = _ref16.type,
2440
+ scopeType = _ref16$type === void 0 ? 'product_all' : _ref16$type,
2441
+ _ref16$exclude_bundle = _ref16.exclude_bundle_product_ids,
2442
+ exclude_bundle_product_ids = _ref16$exclude_bundle === void 0 ? [] : _ref16$exclude_bundle,
2443
+ _ref16$include_bundle = _ref16.include_bundle_product_ids,
2444
+ include_bundle_product_ids = _ref16$include_bundle === void 0 ? [] : _ref16$include_bundle,
2445
+ _ref16$filter = _ref16.filter,
2446
+ filter = _ref16$filter === void 0 ? 0 : _ref16$filter;
2364
2447
  var isMainProduct = flatItem.type === 'main'; // 单独购买
2365
2448
  var isBundleItem = flatItem.type === 'bundle'; // 套餐中购买
2449
+ var bundleMainProductId = (_flatItem$product = flatItem.product) === null || _flatItem$product === void 0 ? void 0 : _flatItem$product.product_id;
2366
2450
 
2367
2451
  // 主商品直接可用
2368
2452
  if (isMainProduct) {
@@ -2375,10 +2459,10 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2375
2459
  return true; // 单独购买时可用
2376
2460
  }
2377
2461
  if (isBundleItem) {
2378
- var _flatItem$bundleItem9, _flatItem$bundleItem10, _flatItem$originProdu, _flatItem$parentProdu11;
2462
+ var _flatItem$bundleItem10, _flatItem$bundleItem11, _flatItem$originProdu, _flatItem$parentProdu11;
2379
2463
  // 套餐中购买时,判断是否为原价
2380
- var priceType = (_flatItem$bundleItem9 = flatItem.bundleItem) === null || _flatItem$bundleItem9 === void 0 ? void 0 : _flatItem$bundleItem9.price_type;
2381
- var priceTypeExt = (_flatItem$bundleItem10 = flatItem.bundleItem) === null || _flatItem$bundleItem10 === void 0 ? void 0 : _flatItem$bundleItem10.price_type_ext;
2464
+ var priceType = (_flatItem$bundleItem10 = flatItem.bundleItem) === null || _flatItem$bundleItem10 === void 0 ? void 0 : _flatItem$bundleItem10.price_type;
2465
+ var priceTypeExt = (_flatItem$bundleItem11 = flatItem.bundleItem) === null || _flatItem$bundleItem11 === void 0 ? void 0 : _flatItem$bundleItem11.price_type_ext;
2382
2466
  // 主商品id
2383
2467
  var mainProductId = (flatItem === null || flatItem === void 0 || (_flatItem$originProdu = flatItem.originProduct) === null || _flatItem$originProdu === void 0 || (_flatItem$originProdu = _flatItem$originProdu._productOrigin) === null || _flatItem$originProdu === void 0 ? void 0 : _flatItem$originProdu.id) || (flatItem === null || flatItem === void 0 || (_flatItem$parentProdu11 = flatItem.parentProduct) === null || _flatItem$parentProdu11 === void 0 ? void 0 : _flatItem$parentProdu11.id) || 0;
2384
2468
  // original_price 对应:
@@ -2405,13 +2489,13 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2405
2489
  if (!filter) {
2406
2490
  isScopeValid = true;
2407
2491
  } else {
2408
- isScopeValid = !exclude_bundle_product_ids.includes(Number(mainProductId));
2492
+ isScopeValid = !exclude_bundle_product_ids.includes(Number(bundleMainProductId));
2409
2493
  }
2410
2494
  }
2411
2495
 
2412
2496
  // 包含套餐判断, products值兼容旧数据
2413
2497
  if (scopeType === 'specific_packages' || scopeType === 'products') {
2414
- isScopeValid = include_bundle_product_ids.includes(Number(mainProductId));
2498
+ isScopeValid = include_bundle_product_ids.includes(Number(bundleMainProductId));
2415
2499
  }
2416
2500
 
2417
2501
  // 价格和套餐适用范围都符合,则可用
@@ -2445,10 +2529,10 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2445
2529
  return false; // 单独购买时不可用
2446
2530
  }
2447
2531
  if (isBundleItem) {
2448
- var _flatItem$bundleItem11, _flatItem$bundleItem12;
2532
+ var _flatItem$bundleItem12, _flatItem$bundleItem13;
2449
2533
  // 套餐中购买时,判断是否为原价
2450
- var _priceType = (_flatItem$bundleItem11 = flatItem.bundleItem) === null || _flatItem$bundleItem11 === void 0 ? void 0 : _flatItem$bundleItem11.price_type;
2451
- var _priceTypeExt = (_flatItem$bundleItem12 = flatItem.bundleItem) === null || _flatItem$bundleItem12 === void 0 ? void 0 : _flatItem$bundleItem12.price_type_ext;
2534
+ var _priceType = (_flatItem$bundleItem12 = flatItem.bundleItem) === null || _flatItem$bundleItem12 === void 0 ? void 0 : _flatItem$bundleItem12.price_type;
2535
+ var _priceTypeExt = (_flatItem$bundleItem13 = flatItem.bundleItem) === null || _flatItem$bundleItem13 === void 0 ? void 0 : _flatItem$bundleItem13.price_type_ext;
2452
2536
 
2453
2537
  // original_price 对应:
2454
2538
  // 1. price_type: "markup" && price_type_ext: "product_price"
@@ -2461,16 +2545,43 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2461
2545
 
2462
2546
  // 检查 rules
2463
2547
  if (rules.length > 0) {
2464
- // 检查原价
2465
- if (_isOriginalPrice2 && rules.includes('original_price')) {
2466
- return true;
2548
+ var _isOriginalPrice3 = _isOriginalPrice2 && rules.includes('original_price');
2549
+ var _isMarkupPrice3 = _isMarkupPrice2 && rules.includes('markup_price');
2550
+ // 价格是否符合规则:原价或加价
2551
+ var _isPriceValid = _isOriginalPrice3 || _isMarkupPrice3;
2552
+ // 套餐适用范围校验
2553
+ var _isScopeValid = false;
2554
+
2555
+ // 排除套餐判断, product_all值兼容旧数据
2556
+ if (scopeType === 'all_packages' || scopeType === 'product_all') {
2557
+ // 所有套餐可用
2558
+ if (!filter) {
2559
+ _isScopeValid = true;
2560
+ } else {
2561
+ _isScopeValid = !exclude_bundle_product_ids.includes(Number(bundleMainProductId));
2562
+ }
2467
2563
  }
2468
2564
 
2469
- // 检查加价
2470
- if (_isMarkupPrice2 && rules.includes('markup_price')) {
2565
+ // 包含套餐判断, products值兼容旧数据
2566
+ if (scopeType === 'specific_packages' || scopeType === 'products') {
2567
+ _isScopeValid = include_bundle_product_ids.includes(Number(bundleMainProductId));
2568
+ }
2569
+
2570
+ // 价格和套餐适用范围都符合,则可用
2571
+ if (_isPriceValid && _isScopeValid) {
2471
2572
  return true;
2472
2573
  }
2473
2574
 
2575
+ // 检查原价
2576
+ // if (isOriginalPrice && rules.includes('original_price')) {
2577
+ // return true;
2578
+ // }
2579
+
2580
+ // 检查加价
2581
+ // if (isMarkupPrice && rules.includes('markup_price')) {
2582
+ // return true;
2583
+ // }
2584
+
2474
2585
  // 如果都不匹配,则不可用
2475
2586
  return false;
2476
2587
  }
@@ -2547,6 +2658,8 @@ export var RulesModule = /*#__PURE__*/function (_BaseModule) {
2547
2658
  _context3.next = 3;
2548
2659
  return this.core.effects.emit("".concat(this.name, ":onDestroy"), {});
2549
2660
  case 3:
2661
+ _get(_getPrototypeOf(RulesModule.prototype), "destroy", this).call(this);
2662
+ case 4:
2550
2663
  case "end":
2551
2664
  return _context3.stop();
2552
2665
  }