@pisell/pisellos 2.3.73 → 2.3.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +111 -71
  3. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  4. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +2 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +36 -64
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Quotation/index.d.ts +6 -0
  15. package/dist/modules/Quotation/index.js +75 -19
  16. package/dist/modules/Rules/index.js +1 -4
  17. package/dist/modules/Schedule/index.js +0 -1
  18. package/dist/modules/Schedule/utils.js +0 -1
  19. package/dist/modules/Step/index.js +0 -1
  20. package/dist/plugins/request.d.ts +1 -0
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.d.ts +8 -2
  24. package/dist/server/index.js +303 -269
  25. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  26. package/dist/server/modules/floor-plan/index.js +240 -98
  27. package/dist/server/modules/menu/index.js +75 -59
  28. package/dist/server/modules/order/index.d.ts +17 -7
  29. package/dist/server/modules/order/index.js +421 -211
  30. package/dist/server/modules/products/index.d.ts +8 -2
  31. package/dist/server/modules/products/index.js +191 -117
  32. package/dist/server/modules/quotation/index.js +29 -38
  33. package/dist/server/modules/resource/index.js +24 -17
  34. package/dist/server/modules/schedule/index.js +27 -35
  35. package/dist/server/utils/product.js +0 -1
  36. package/dist/solution/BaseSales/index.js +38 -41
  37. package/dist/solution/BookingByStep/index.d.ts +1 -1
  38. package/dist/solution/BookingByStep/index.js +7 -59
  39. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  40. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  41. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  42. package/dist/solution/BookingTicket/index.js +0 -2
  43. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  44. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  45. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  46. package/dist/solution/BuyTickets/index.js +9 -12
  47. package/dist/solution/Checkout/index.js +177 -252
  48. package/dist/solution/Checkout/utils/index.js +4 -16
  49. package/dist/solution/RegisterAndLogin/index.js +30 -76
  50. package/dist/solution/ScanOrder/index.js +50 -60
  51. package/dist/solution/ShopDiscount/index.js +2 -7
  52. package/dist/solution/VenueBooking/index.js +45 -55
  53. package/dist/utils/task.js +15 -18
  54. package/dist/utils/watch.js +0 -1
  55. package/lib/apis/picoding.js +2 -0
  56. package/lib/core/index.d.ts +7 -0
  57. package/lib/core/index.js +149 -131
  58. package/lib/effects/index.js +46 -57
  59. package/lib/index.js +82 -49
  60. package/lib/model/index.js +14 -21
  61. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  62. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  63. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  64. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  65. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  66. package/lib/model/strategy/adapter/index.js +100 -64
  67. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  68. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  69. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  70. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  71. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  72. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  73. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  74. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  75. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  76. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  77. package/lib/model/strategy/adapter/type.js +4 -16
  78. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  79. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  80. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  81. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  82. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  83. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  84. package/lib/model/strategy/engine.js +270 -168
  85. package/lib/model/strategy/index.js +49 -34
  86. package/lib/model/strategy/strategy-example.js +243 -239
  87. package/lib/model/strategy/type.js +100 -40
  88. package/lib/modules/Account/index.js +39 -53
  89. package/lib/modules/Account/types.js +20 -33
  90. package/lib/modules/AccountList/index.js +116 -154
  91. package/lib/modules/AccountList/types.js +30 -31
  92. package/lib/modules/AccountList/utils.js +18 -30
  93. package/lib/modules/BaseModule.js +23 -42
  94. package/lib/modules/BookingContext/index.js +158 -136
  95. package/lib/modules/BookingContext/types.js +46 -32
  96. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  97. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  98. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  99. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  100. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  101. package/lib/modules/BookingContext/utils/index.js +124 -41
  102. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  103. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  104. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  105. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  106. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  107. package/lib/modules/BookingContext/utils/resources.js +209 -167
  108. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  109. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  110. package/lib/modules/Cart/index.js +170 -124
  111. package/lib/modules/Cart/types.js +46 -51
  112. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  113. package/lib/modules/Cart/utils/cartDate.js +56 -61
  114. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  115. package/lib/modules/Cart/utils/cartNote.js +27 -32
  116. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  117. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  118. package/lib/modules/Cart/utils/cartResource.js +70 -78
  119. package/lib/modules/Cart/utils/changePrice.js +22 -50
  120. package/lib/modules/Cart/utils/index.js +106 -48
  121. package/lib/modules/Customer/constants.js +13 -34
  122. package/lib/modules/Customer/index.js +235 -172
  123. package/lib/modules/Customer/types.js +38 -35
  124. package/lib/modules/Date/index.js +116 -115
  125. package/lib/modules/Date/types.js +16 -28
  126. package/lib/modules/Date/utils.js +174 -123
  127. package/lib/modules/Discount/index.js +122 -127
  128. package/lib/modules/Discount/types.js +9 -31
  129. package/lib/modules/Guests/index.js +30 -56
  130. package/lib/modules/Guests/types.js +23 -33
  131. package/lib/modules/Holder/index.js +209 -189
  132. package/lib/modules/Holder/types.js +4 -16
  133. package/lib/modules/Holder/utils.js +20 -49
  134. package/lib/modules/OpenData/index.js +70 -76
  135. package/lib/modules/OpenData/types.js +4 -16
  136. package/lib/modules/OpenData/utils.js +44 -78
  137. package/lib/modules/Order/index.d.ts +1 -1
  138. package/lib/modules/Order/index.js +1713 -2118
  139. package/lib/modules/Order/payment-utils.js +77 -120
  140. package/lib/modules/Order/types.js +88 -35
  141. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  142. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  143. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  144. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  145. package/lib/modules/Order/utils.js +814 -647
  146. package/lib/modules/Payment/cash.js +20 -33
  147. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  148. package/lib/modules/Payment/eftpos.js +16 -30
  149. package/lib/modules/Payment/index.js +532 -399
  150. package/lib/modules/Payment/mx51.js +1 -0
  151. package/lib/modules/Payment/types.js +230 -108
  152. package/lib/modules/Payment/utils.js +52 -51
  153. package/lib/modules/Payment/walletpass.js +485 -660
  154. package/lib/modules/Product/index.js +51 -46
  155. package/lib/modules/Product/types.js +4 -16
  156. package/lib/modules/Product/utils.js +32 -33
  157. package/lib/modules/ProductList/index.js +113 -123
  158. package/lib/modules/ProductList/types.js +9 -31
  159. package/lib/modules/Quotation/index.d.ts +6 -0
  160. package/lib/modules/Quotation/index.js +110 -103
  161. package/lib/modules/Quotation/types.js +4 -16
  162. package/lib/modules/Resource/index.js +27 -59
  163. package/lib/modules/Resource/types.js +22 -32
  164. package/lib/modules/Resource/utils.js +30 -38
  165. package/lib/modules/ResourcePlanner/index.js +25 -23
  166. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  167. package/lib/modules/ResourcePlanner/planner.js +589 -770
  168. package/lib/modules/ResourcePlanner/types.js +10 -29
  169. package/lib/modules/Rules/index.js +1218 -959
  170. package/lib/modules/Rules/types.js +17 -40
  171. package/lib/modules/SalesSummary/index.js +85 -90
  172. package/lib/modules/SalesSummary/types.js +4 -16
  173. package/lib/modules/SalesSummary/utils.js +355 -430
  174. package/lib/modules/ScanOrderLogger/index.js +59 -79
  175. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  176. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  177. package/lib/modules/ScanOrderLogger/types.js +4 -16
  178. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  179. package/lib/modules/Schedule/index.js +100 -114
  180. package/lib/modules/Schedule/type.js +4 -16
  181. package/lib/modules/Schedule/types.js +4 -16
  182. package/lib/modules/Schedule/utils.js +433 -291
  183. package/lib/modules/Step/index.js +40 -52
  184. package/lib/modules/Step/tyeps.js +4 -16
  185. package/lib/modules/Summary/index.js +66 -71
  186. package/lib/modules/Summary/types.js +4 -16
  187. package/lib/modules/Summary/utils.js +773 -418
  188. package/lib/modules/SurchargeList/index.js +46 -60
  189. package/lib/modules/SurchargeList/types.js +4 -16
  190. package/lib/modules/index.js +245 -63
  191. package/lib/plugins/app.js +4 -16
  192. package/lib/plugins/index.js +36 -25
  193. package/lib/plugins/request.d.ts +1 -0
  194. package/lib/plugins/request.js +137 -126
  195. package/lib/plugins/shopStore.js +4 -16
  196. package/lib/plugins/user.js +4 -16
  197. package/lib/plugins/window.js +171 -179
  198. package/lib/server/index.d.ts +8 -2
  199. package/lib/server/index.js +3083 -2663
  200. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  201. package/lib/server/modules/floor-plan/index.js +159 -127
  202. package/lib/server/modules/floor-plan/types.js +15 -30
  203. package/lib/server/modules/index.js +106 -68
  204. package/lib/server/modules/menu/index.js +170 -124
  205. package/lib/server/modules/menu/types.js +18 -31
  206. package/lib/server/modules/order/index.d.ts +17 -7
  207. package/lib/server/modules/order/index.js +916 -977
  208. package/lib/server/modules/order/types.js +122 -33
  209. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  210. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  211. package/lib/server/modules/payment/index.js +59 -83
  212. package/lib/server/modules/payment/types.js +4 -16
  213. package/lib/server/modules/products/index.d.ts +8 -2
  214. package/lib/server/modules/products/index.js +656 -471
  215. package/lib/server/modules/products/types.js +44 -34
  216. package/lib/server/modules/quotation/index.js +137 -172
  217. package/lib/server/modules/quotation/types.js +21 -31
  218. package/lib/server/modules/resource/index.js +225 -186
  219. package/lib/server/modules/resource/types.js +42 -33
  220. package/lib/server/modules/schedule/index.js +135 -123
  221. package/lib/server/modules/schedule/types.js +14 -21
  222. package/lib/server/modules/schedule/utils.js +334 -163
  223. package/lib/server/types.js +4 -16
  224. package/lib/server/utils/index.js +25 -23
  225. package/lib/server/utils/product.js +196 -139
  226. package/lib/server/utils/schedule.js +34 -41
  227. package/lib/server/utils/small-ticket.js +479 -456
  228. package/lib/server/utils/time.js +40 -49
  229. package/lib/solution/BaseSales/index.js +1186 -1410
  230. package/lib/solution/BaseSales/types.js +42 -38
  231. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  232. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  233. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  234. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  235. package/lib/solution/BaseSales/utils.js +158 -143
  236. package/lib/solution/BookingByStep/index.d.ts +1 -1
  237. package/lib/solution/BookingByStep/index.js +1527 -1340
  238. package/lib/solution/BookingByStep/types.js +40 -99
  239. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  240. package/lib/solution/BookingByStep/utils/products.js +42 -52
  241. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  242. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  243. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  244. package/lib/solution/BookingTicket/index.js +607 -522
  245. package/lib/solution/BookingTicket/types.js +99 -77
  246. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  247. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  248. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  249. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  250. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  251. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  252. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  253. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  254. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  255. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  256. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  257. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  258. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  259. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  260. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  261. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  262. package/lib/solution/BuyTickets/index.js +67 -70
  263. package/lib/solution/BuyTickets/types.js +22 -38
  264. package/lib/solution/Checkout/index.js +1451 -1158
  265. package/lib/solution/Checkout/types.js +91 -61
  266. package/lib/solution/Checkout/utils/index.js +228 -156
  267. package/lib/solution/PlaceOrder/index.js +55 -0
  268. package/lib/solution/RegisterAndLogin/config.js +493 -460
  269. package/lib/solution/RegisterAndLogin/index.js +633 -630
  270. package/lib/solution/RegisterAndLogin/types.js +189 -76
  271. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  272. package/lib/solution/Sales/index.js +328 -324
  273. package/lib/solution/Sales/types.js +27 -33
  274. package/lib/solution/ScanOrder/index.js +832 -864
  275. package/lib/solution/ScanOrder/types.js +33 -34
  276. package/lib/solution/ScanOrder/utils.js +409 -374
  277. package/lib/solution/ShopDiscount/index.js +226 -232
  278. package/lib/solution/ShopDiscount/types.js +15 -37
  279. package/lib/solution/ShopDiscount/utils.js +300 -172
  280. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  281. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  282. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  283. package/lib/solution/VenueBooking/index.js +811 -879
  284. package/lib/solution/VenueBooking/types.js +19 -39
  285. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  286. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  287. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  288. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  289. package/lib/solution/VenueBooking/utils.js +130 -67
  290. package/lib/solution/index.js +124 -41
  291. package/lib/store/createStore.js +32 -29
  292. package/lib/types/index.js +4 -16
  293. package/lib/utils/payment-number.js +26 -46
  294. package/lib/utils/task.js +36 -36
  295. package/lib/utils/watch.js +81 -47
  296. package/package.json +2 -1
@@ -1,154 +1,155 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
28
2
 
29
- // src/solution/BookingTicket/utils/addProductDecision.ts
30
- var addProductDecision_exports = {};
31
- __export(addProductDecision_exports, {
32
- buildCacheItemFromCartDetail: () => buildCacheItemFromCartDetail,
33
- buildCacheItemFromDetail: () => buildCacheItemFromDetail,
34
- buildRequiresDetailPayload: () => buildRequiresDetailPayload,
35
- decideAddProduct: () => decideAddProduct,
36
- decideAfterDetail: () => decideAfterDetail,
37
- decideAutoClose: () => decideAutoClose,
38
- getIsEject: () => getIsEject,
39
- getIsOnlySession: () => getIsOnlySession,
40
- prepareBookingCacheItem: () => prepareBookingCacheItem,
41
- transformDetailToProductAndBooking: () => transformDetailToProductAndBooking
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
42
5
  });
43
- module.exports = __toCommonJS(addProductDecision_exports);
44
- var import_dayjs = __toESM(require("dayjs"));
45
- var import_BookingContext = require("../../../modules/BookingContext");
46
- var import_transformBaseProductToOrderProduct = require("../../BaseSales/utils/transformBaseProductToOrderProduct");
47
- var import_weighingProductSku = require("./weighingProductSku");
6
+ exports.buildCacheItemFromCartDetail = buildCacheItemFromCartDetail;
7
+ exports.buildCacheItemFromDetail = buildCacheItemFromDetail;
8
+ exports.buildRequiresDetailPayload = buildRequiresDetailPayload;
9
+ exports.decideAddProduct = decideAddProduct;
10
+ exports.decideAfterDetail = decideAfterDetail;
11
+ exports.decideAutoClose = decideAutoClose;
12
+ exports.getIsEject = getIsEject;
13
+ exports.getIsOnlySession = getIsOnlySession;
14
+ exports.prepareBookingCacheItem = prepareBookingCacheItem;
15
+ exports.transformDetailToProductAndBooking = transformDetailToProductAndBooking;
16
+ var _dayjs = _interopRequireDefault(require("dayjs"));
17
+ var _BookingContext = require("../../../modules/BookingContext");
18
+ var _transformBaseProductToOrderProduct = require("../../BaseSales/utils/transformBaseProductToOrderProduct");
19
+ var _weighingProductSku = require("./weighingProductSku");
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+ /**
22
+ * cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
23
+ *
24
+ * 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
25
+ * 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(kiosk 强制进入;其他渠道由 `getIsAutoClose` 决定)
26
+ * 3. `add`:两关均通过,直接 transform + 加车
27
+ */
28
+
29
+ /** 资源 / 时间编辑抽屉所需的最小 payload。 */
30
+
31
+ /**
32
+ * 第一段:是否需要打开规格 / SKU 详情弹窗(与 addService `handleSelectProduct` 一致,不用 `getIsEject` 做门禁)。
33
+ */
48
34
  function needsSpecDetailModal(item) {
49
- if (item == null ? void 0 : item.open_sold_weight)
50
- return true;
51
- if (item == null ? void 0 : item.isOpenDetailModal)
52
- return true;
53
- if (!(item == null ? void 0 : item.cartDetailValue))
54
- return true;
35
+ if (item?.open_sold_weight) return true;
36
+ if (item?.isOpenDetailModal) return true;
37
+ if (!item?.cartDetailValue) return true;
55
38
  return false;
56
39
  }
40
+
41
+ /**
42
+ * 第二段:预约商品是否仍需打开资源 / 时间编辑(kiosk 强制打开,其他渠道与 info2 `cacheItem.autoClose` 等价)。
43
+ */
57
44
  function needsBookingEdit(cacheItem, ctx) {
58
- if (isNormalBookingProduct(cacheItem))
59
- return false;
60
- if ((ctx == null ? void 0 : ctx.channel) === "kiosk")
61
- return true;
62
- const isAutoAllocationOn = (ctx == null ? void 0 : ctx.isAutoAllocationOn) || (() => true);
63
- return !(0, import_BookingContext.getIsAutoClose)(cacheItem, isAutoAllocationOn);
45
+ if (isNormalBookingProduct(cacheItem)) return false;
46
+ if (ctx?.channel === 'kiosk') return true;
47
+ const isAutoAllocationOn = ctx?.isAutoAllocationOn || (() => true);
48
+ return !(0, _BookingContext.getIsAutoClose)(cacheItem, isAutoAllocationOn);
64
49
  }
65
50
  function buildRequiresBookingEditPayload(cacheItem, ctx) {
66
51
  return {
67
52
  cacheItem,
68
- customerId: ctx == null ? void 0 : ctx.customerId,
69
- date: typeof (ctx == null ? void 0 : ctx.date) === "string" ? ctx.date : null
53
+ customerId: ctx?.customerId,
54
+ date: typeof ctx?.date === 'string' ? ctx.date : null
70
55
  };
71
56
  }
57
+
58
+ /**
59
+ * 加车主决策:对齐 `handleSelectProduct` 两段分支。
60
+ */
72
61
  function decideAddProduct(item, ctx) {
73
62
  const derivedCtx = withDerivedBookingCtx(ctx);
74
63
  if (needsSpecDetailModal(item)) {
75
64
  return {
76
- action: "requiresDetail",
65
+ action: 'requiresDetail',
77
66
  payload: buildRequiresDetailPayload(item, derivedCtx)
78
67
  };
79
68
  }
80
- const cacheItem = prepareBookingCacheItem(
81
- buildCacheItemFromCartDetail(item, derivedCtx),
82
- derivedCtx
83
- );
69
+ const cacheItem = prepareBookingCacheItem(buildCacheItemFromCartDetail(item, derivedCtx), derivedCtx);
84
70
  if (needsBookingEdit(cacheItem, derivedCtx)) {
85
71
  return {
86
- action: "requiresBookingEdit",
72
+ action: 'requiresBookingEdit',
87
73
  cacheItem,
88
74
  payload: buildRequiresBookingEditPayload(cacheItem, derivedCtx)
89
75
  };
90
76
  }
91
- return { action: "add", cacheItem };
77
+ return {
78
+ action: 'add',
79
+ cacheItem
80
+ };
92
81
  }
82
+
83
+ /**
84
+ * 规格弹窗 callback 后的第二段决策(对齐 `handleBooking4Service` 内 `cacheItem.autoClose` 分支)。
85
+ */
93
86
  function decideAfterDetail(cacheItem, ctx) {
94
87
  const derivedCtx = withDerivedBookingCtx(ctx);
95
88
  const extended = prepareBookingCacheItem(cacheItem, derivedCtx);
96
89
  if (needsBookingEdit(extended, derivedCtx)) {
97
90
  return {
98
- action: "requiresBookingEdit",
91
+ action: 'requiresBookingEdit',
99
92
  cacheItem: extended,
100
93
  payload: buildRequiresBookingEditPayload(extended, derivedCtx)
101
94
  };
102
95
  }
103
- return { action: "add", cacheItem: extended };
96
+ return {
97
+ action: 'add',
98
+ cacheItem: extended
99
+ };
104
100
  }
101
+
102
+ /**
103
+ * @deprecated 请用 `decideAddProduct`;保留兼容:autoClose=true 仅表示可直接加车(action=add)。
104
+ */
105
+
105
106
  function isNormalBookingProduct(item) {
106
- return !(0, import_BookingContext.isBookingProduct)(item);
107
+ return !(0, _BookingContext.isBookingProduct)(item);
107
108
  }
108
109
  function hasPreparedBookingExtend(cacheItem) {
109
- var _a;
110
- if ((0, import_BookingContext.productNeedsResourceExtend)(cacheItem) && !(0, import_BookingContext.hasActualResourceSelection)(cacheItem)) {
110
+ // 场次/时间已写入但资源仍未选中时,须继续走 getProductExtend(对齐 info2 必定调用 getProductExtend)。
111
+ if ((0, _BookingContext.productNeedsResourceExtend)(cacheItem) && !(0, _BookingContext.hasActualResourceSelection)(cacheItem)) {
111
112
  return false;
112
113
  }
113
- const ext = (cacheItem == null ? void 0 : cacheItem._extend) || {};
114
- const hasResourceState = Boolean(
115
- (0, import_BookingContext.hasActualResourceSelection)(cacheItem) && ext.capacity && (ext.endDate || ext.end_date)
116
- );
117
- const hasSessionState = Boolean(
118
- (0, import_BookingContext.isSessionProduct)(cacheItem) && ((_a = ext.other) == null ? void 0 : _a.session) && ext.start_time && (ext.end_time || ext.endDate)
119
- );
114
+ const ext = cacheItem?._extend || {};
115
+ const hasResourceState = Boolean((0, _BookingContext.hasActualResourceSelection)(cacheItem) && ext.capacity && (ext.endDate || ext.end_date));
116
+ const hasSessionState = Boolean((0, _BookingContext.isSessionProduct)(cacheItem) && ext.other?.session && ext.start_time && (ext.end_time || ext.endDate));
120
117
  const hasMultiDayState = Boolean(isNormalBookingProduct(cacheItem) === false && isMultiDayLike(cacheItem));
121
- const hasExplicitTimeState = Boolean(
122
- ext.duration && (ext.start_date || ext.startDate) && ext.start_time && (ext.end_date && ext.end_time || ext.endDate)
123
- );
118
+ const hasExplicitTimeState = Boolean(ext.duration && (ext.start_date || ext.startDate) && ext.start_time && (ext.end_date && ext.end_time || ext.endDate));
124
119
  return hasResourceState || hasSessionState || hasMultiDayState || hasExplicitTimeState;
125
120
  }
121
+
122
+ /** 弹窗 / Host 使用的日历日,与 ticketBooking `state.date.format('YYYY-MM-DD')` 对齐。 */
126
123
  function formatBookingDateForUI(date) {
127
- if (date == null || date === "")
128
- return null;
129
- const parsed = (0, import_dayjs.default)(date);
130
- return parsed.isValid() ? parsed.format("YYYY-MM-DD") : null;
124
+ if (date == null || date === '') return null;
125
+ const parsed = (0, _dayjs.default)(date);
126
+ return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null;
131
127
  }
128
+
129
+ /** 补齐 presetStartTime(decideAutoClose / transform 与 BookingTicket.buildAddProductCtx 共用)。 */
132
130
  function withDerivedBookingCtx(ctx) {
133
- if (!ctx)
134
- return {};
131
+ if (!ctx) return {};
135
132
  return {
136
133
  ...ctx,
137
- presetStartTime: ctx.presetStartTime ?? (0, import_BookingContext.derivePresetStartTimeFromDate)(ctx.date)
134
+ presetStartTime: ctx.presetStartTime ?? (0, _BookingContext.derivePresetStartTimeFromDate)(ctx.date)
138
135
  };
139
136
  }
140
137
  function isMultiDayLike(cacheItem) {
141
- var _a;
142
- const ext = (cacheItem == null ? void 0 : cacheItem._extend) || {};
143
- return Boolean(
144
- ((_a = cacheItem == null ? void 0 : cacheItem.duration) == null ? void 0 : _a.type) === "days" && ext.duration && ext.start_date && ext.end_date
145
- );
138
+ const ext = cacheItem?._extend || {};
139
+ return Boolean(cacheItem?.duration?.type === 'days' && ext.duration && ext.start_date && ext.end_date);
146
140
  }
141
+
142
+ /**
143
+ * 统一补齐预约商品的运行态字段。
144
+ *
145
+ * 新链路不再让决策和提交各自重建 cacheItem;这里作为唯一入口补齐
146
+ * `_extend.resource / capacity / startDate / endDate` 等后续 booking mapper 需要的字段。
147
+ */
147
148
  function prepareBookingCacheItem(cacheItem, ctx) {
148
149
  if (isNormalBookingProduct(cacheItem) || hasPreparedBookingExtend(cacheItem)) {
149
150
  return cacheItem;
150
151
  }
151
- return (0, import_BookingContext.getProductExtend)({
152
+ return (0, _BookingContext.getProductExtend)({
152
153
  cacheItem,
153
154
  ctx: withDerivedBookingCtx(ctx),
154
155
  isDisabledTime: true
@@ -156,62 +157,83 @@ function prepareBookingCacheItem(cacheItem, ctx) {
156
157
  }
157
158
  function decideAutoClose(item, ctx) {
158
159
  const decision = decideAddProduct(item, ctx);
159
- if (decision.action === "add") {
160
- return { autoClose: true, cacheItem: decision.cacheItem };
160
+ if (decision.action === 'add') {
161
+ return {
162
+ autoClose: true,
163
+ cacheItem: decision.cacheItem
164
+ };
161
165
  }
162
- if (decision.action === "requiresBookingEdit") {
163
- return { autoClose: false, cacheItem: decision.cacheItem };
166
+ if (decision.action === 'requiresBookingEdit') {
167
+ return {
168
+ autoClose: false,
169
+ cacheItem: decision.cacheItem
170
+ };
164
171
  }
165
- return { autoClose: false };
172
+ return {
173
+ autoClose: false
174
+ };
166
175
  }
167
- function getIsEject(item, type = "select") {
168
- const isSession = (0, import_BookingContext.isSessionProduct)(item);
169
- const isSoldByWeight = Boolean(item == null ? void 0 : item.open_sold_weight);
170
- const need = type === "detail" || ((item == null ? void 0 : item.bundle_group_count) || 0) > 0 || ((item == null ? void 0 : item.option_group_count) || 0) > 0 || ((item == null ? void 0 : item.is_variant) || 0) > 0 || isSession || isSoldByWeight;
176
+
177
+ /**
178
+ * 替代 info2 `getIsEject`:商品是否需要弹窗(含 type='detail' / option_group / bundle_group / variant / session / sold_by_weight)。
179
+ */
180
+ function getIsEject(item, type = 'select') {
181
+ const isSession = (0, _BookingContext.isSessionProduct)(item);
182
+ const isSoldByWeight = Boolean(item?.open_sold_weight);
183
+ const need = type === 'detail' || (item?.bundle_group_count || 0) > 0 || (item?.option_group_count || 0) > 0 || (item?.is_variant || 0) > 0 || isSession || isSoldByWeight;
171
184
  return need ? 1 : 0;
172
185
  }
186
+
187
+ /** 仅 session 商品(且没有 variant/option/package)。 */
173
188
  function getIsOnlySession(item) {
174
- const isSession = (0, import_BookingContext.isSessionProduct)(item);
175
- return !(((item == null ? void 0 : item.bundle_group_count) || 0) > 0 || ((item == null ? void 0 : item.option_group_count) || 0) > 0 || ((item == null ? void 0 : item.is_variant) || 0) > 0) && isSession;
189
+ const isSession = (0, _BookingContext.isSessionProduct)(item);
190
+ return !((item?.bundle_group_count || 0) > 0 || (item?.option_group_count || 0) > 0 || (item?.is_variant || 0) > 0) && isSession;
176
191
  }
192
+
193
+ /**
194
+ * 拼装 requiresDetail payload;showConfig 与 info2 弹窗内部判断一致。
195
+ */
177
196
  function buildRequiresDetailPayload(item, ctx) {
178
197
  const isOnlySession = getIsOnlySession(item);
179
- const isEject = getIsEject(item, (ctx == null ? void 0 : ctx.type) || "select");
198
+ const isEject = getIsEject(item, ctx?.type || 'select');
180
199
  return {
181
200
  item,
182
201
  showConfig: {
183
- option: ((item == null ? void 0 : item.option_group_count) || 0) > 0,
184
- session: (0, import_BookingContext.isSessionProduct)(item),
185
- variant: ((item == null ? void 0 : item.is_variant) || 0) > 0,
186
- package: ((item == null ? void 0 : item.bundle_group_count) || 0) > 0,
187
- number: Boolean(item == null ? void 0 : item.open_sold_weight)
202
+ option: (item?.option_group_count || 0) > 0,
203
+ session: (0, _BookingContext.isSessionProduct)(item),
204
+ variant: (item?.is_variant || 0) > 0,
205
+ package: (item?.bundle_group_count || 0) > 0,
206
+ number: Boolean(item?.open_sold_weight)
188
207
  },
189
208
  isOnlySession,
190
209
  isEject: isEject ? 1 : 0,
191
- customerId: ctx == null ? void 0 : ctx.customerId,
192
- date: formatBookingDateForUI(ctx == null ? void 0 : ctx.date),
210
+ customerId: ctx?.customerId,
211
+ date: formatBookingDateForUI(ctx?.date),
193
212
  productData: item
194
213
  };
195
214
  }
215
+
216
+ /**
217
+ * 用 item.cartDetailValue 拼装一个 cacheItem 雏形(与 info2 `handleDirectAddService` 等价路径)。
218
+ * 这里只补 `_extend.start_date / quantity / other` 等运行态字段;后续走 getProductExtend 才会补齐资源 / 时间。
219
+ */
196
220
  function buildCacheItemFromCartDetail(item, ctx) {
197
- var _a;
198
221
  const cartDetailValue = item.cartDetailValue || {};
199
222
  const other = JSON.parse(JSON.stringify(cartDetailValue || {}));
200
223
  other.session = cartDetailValue.session;
224
+ /** 列表/接口可能只带 product_id 不带 id,勿用 item.id 覆盖掉已有 product_id */
201
225
  const resolvedId = item.id ?? item.product_id;
202
- let extend = (0, import_BookingContext.applySessionTimesToExtend)(
203
- item,
204
- {
205
- start_date: (ctx == null ? void 0 : ctx.date) || void 0,
206
- /** 列表连点 / 防抖合并时以 ctx.quantity 为准,避免 cartDetailValue 默认 1 盖掉合并数量 */
207
- quantity: (ctx == null ? void 0 : ctx.quantity) ?? (cartDetailValue == null ? void 0 : cartDetailValue.quantity) ?? 1,
208
- product_name: item.title,
209
- other,
210
- isNormalProduct: !(0, import_BookingContext.isBookingProduct)(item),
211
- price: ((_a = item == null ? void 0 : item._extend) == null ? void 0 : _a.price) ?? (item == null ? void 0 : item.price)
212
- },
213
- { date: ctx == null ? void 0 : ctx.date }
214
- );
226
+ let extend = (0, _BookingContext.applySessionTimesToExtend)(item, {
227
+ start_date: ctx?.date || undefined,
228
+ /** 列表连点 / 防抖合并时以 ctx.quantity 为准,避免 cartDetailValue 默认 1 盖掉合并数量 */
229
+ quantity: ctx?.quantity ?? cartDetailValue?.quantity ?? 1,
230
+ product_name: item.title,
231
+ other,
232
+ isNormalProduct: !(0, _BookingContext.isBookingProduct)(item),
233
+ price: item?._extend?.price ?? item?.price
234
+ }, {
235
+ date: ctx?.date
236
+ });
215
237
  return {
216
238
  ...item,
217
239
  id: resolvedId,
@@ -221,104 +243,119 @@ function buildCacheItemFromCartDetail(item, ctx) {
221
243
  new: 1
222
244
  };
223
245
  }
246
+
247
+ /**
248
+ * 用 Info2 callback 的 (e, extension_type, detail) 拼装 cacheItem。
249
+ *
250
+ * 保留 detail._extend 中的 pricing / note(规格弹窗改价、备注等),
251
+ * 再叠加 session 时间、ctx.quantity 等运行态字段;other 以 callback `e` 为准。
252
+ */
224
253
  function buildCacheItemFromDetail(item, detailResult, ctx) {
225
- var _a, _b, _c;
226
254
  const _currentItem = detailResult.detail || item;
227
255
  const _detail = _currentItem;
228
- const detailExtend = (_detail == null ? void 0 : _detail._extend) || {};
256
+ const detailExtend = _detail?._extend || {};
229
257
  const other = JSON.parse(JSON.stringify(detailResult.e || {}));
230
- other.session = (_a = detailResult.e) == null ? void 0 : _a.session;
258
+ other.session = detailResult.e?.session;
231
259
  const resolvedId = _currentItem.id ?? _currentItem.product_id;
232
- const mergedItem = { ...item, ..._detail, extension_type: _detail.extension_type ?? item.extension_type };
233
- const runtimeExtend = (0, import_BookingContext.applySessionTimesToExtend)(
234
- mergedItem,
235
- {
236
- start_date: (ctx == null ? void 0 : ctx.date) || detailExtend.start_date || void 0,
237
- quantity: (ctx == null ? void 0 : ctx.quantity) ?? ((_b = detailResult.e) == null ? void 0 : _b.quantity) ?? detailExtend.quantity ?? 1,
238
- price: detailExtend.price ?? (_detail == null ? void 0 : _detail.price) ?? (item == null ? void 0 : item.price),
239
- product_name: _currentItem.title ?? detailExtend.product_name,
240
- other,
241
- isNormalProduct: !(0, import_BookingContext.isBookingProduct)(mergedItem)
242
- },
243
- { date: ctx == null ? void 0 : ctx.date }
244
- );
260
+ const mergedItem = {
261
+ ...item,
262
+ ..._detail,
263
+ extension_type: _detail.extension_type ?? item.extension_type
264
+ };
265
+ const runtimeExtend = (0, _BookingContext.applySessionTimesToExtend)(mergedItem, {
266
+ start_date: ctx?.date || detailExtend.start_date || undefined,
267
+ quantity: ctx?.quantity ?? detailResult.e?.quantity ?? detailExtend.quantity ?? 1,
268
+ price: detailExtend.price ?? _detail?.price ?? item?.price,
269
+ product_name: _currentItem.title ?? detailExtend.product_name,
270
+ other,
271
+ isNormalProduct: !(0, _BookingContext.isBookingProduct)(mergedItem)
272
+ }, {
273
+ date: ctx?.date
274
+ });
245
275
  const extend = {
246
276
  ...detailExtend,
247
277
  ...runtimeExtend,
248
278
  other
249
279
  };
250
- const note = detailExtend.note ?? (_detail == null ? void 0 : _detail.note);
280
+ const note = detailExtend.note ?? _detail?.note;
251
281
  return {
252
282
  ..._detail,
253
283
  id: resolvedId,
254
284
  product_id: resolvedId,
255
285
  extension_type: mergedItem.extension_type,
256
- _key: (_c = detailResult.e) == null ? void 0 : _c.key,
257
- ...note != null && note !== "" ? { note: String(note) } : {},
286
+ _key: detailResult.e?.key,
287
+ ...(note != null && note !== '' ? {
288
+ note: String(note)
289
+ } : {}),
258
290
  _extend: extend,
259
291
  new: 1
260
292
  };
261
293
  }
294
+
295
+ /**
296
+ * `transformDetailToProductAndBooking`:把 cacheItem 拆成 OS `addProductToOrder` 所需的 `(product, booking)`。
297
+ *
298
+ * - `product` 走 `transformBaseProductToOrderProduct`(沿用 BaseSales 现有 mapper)。
299
+ * - `booking` 走 `cacheItemToBookingInput`(严格按 TEMP_ORDER_FIELDS_SUMMARY.md 协议)。
300
+ * - 普通商品(无 duration / 无 schedules)不产 booking,与 info2 一致。
301
+ */
262
302
  function transformDetailToProductAndBooking(cacheItem, ctx) {
263
303
  const preparedCacheItem = prepareBookingCacheItem(cacheItem, withDerivedBookingCtx(ctx));
264
304
  const payload = buildBasePayloadFromCacheItem(preparedCacheItem, ctx);
265
- const productInput = (0, import_transformBaseProductToOrderProduct.transformBaseProductToOrderProduct)({
305
+ const productInput = (0, _transformBaseProductToOrderProduct.transformBaseProductToOrderProduct)({
266
306
  payload,
267
307
  sourceProduct: preparedCacheItem
268
308
  });
269
309
  if (!productInput) {
270
- throw new Error(
271
- "[BookingTicket] transformDetailToProductAndBooking: product transform failed (missing numeric item.id / item.product_id)"
272
- );
310
+ throw new Error('[BookingTicket] transformDetailToProductAndBooking: product transform failed (missing numeric item.id / item.product_id)');
273
311
  }
274
312
  const isNormalProduct = isNormalBookingProduct(preparedCacheItem);
275
313
  let booking;
276
314
  if (!isNormalProduct) {
277
- booking = (0, import_BookingContext.cacheItemToBookingInput)(preparedCacheItem, { bookingConfig: ctx == null ? void 0 : ctx.bookingConfig });
315
+ booking = (0, _BookingContext.cacheItemToBookingInput)(preparedCacheItem, {
316
+ bookingConfig: ctx?.bookingConfig
317
+ });
278
318
  }
279
- return { product: productInput, booking, cacheItem: preparedCacheItem };
319
+ return {
320
+ product: productInput,
321
+ booking,
322
+ cacheItem: preparedCacheItem
323
+ };
280
324
  }
325
+
326
+ /**
327
+ * 把 cacheItem._extend.other 中的字段 + 顶层运行态拼成 `BaseProductDetailPayload`。
328
+ */
281
329
  function buildBasePayloadFromCacheItem(cacheItem, ctx) {
282
- var _a, _b, _c, _d;
283
- const other = ((_a = cacheItem == null ? void 0 : cacheItem._extend) == null ? void 0 : _a.other) || {};
284
- const quantity = (ctx == null ? void 0 : ctx.quantity) != null && ctx.quantity > 0 ? ctx.quantity : ((_b = cacheItem == null ? void 0 : cacheItem._extend) == null ? void 0 : _b.quantity) ?? 1;
285
- const resolvedPid = (cacheItem == null ? void 0 : cacheItem.product_id) ?? (cacheItem == null ? void 0 : cacheItem.id);
286
- const extend = (cacheItem == null ? void 0 : cacheItem._extend) || {};
287
- const productSku = (0, import_weighingProductSku.buildProductSkuFromCacheItem)(cacheItem);
330
+ const other = cacheItem?._extend?.other || {};
331
+ const quantity = ctx?.quantity != null && ctx.quantity > 0 ? ctx.quantity : cacheItem?._extend?.quantity ?? 1;
332
+ const resolvedPid = cacheItem?.product_id ?? cacheItem?.id;
333
+ const extend = cacheItem?._extend || {};
334
+ const productSku = (0, _weighingProductSku.buildProductSkuFromCacheItem)(cacheItem);
288
335
  return {
289
- id: (cacheItem == null ? void 0 : cacheItem.id) ?? (cacheItem == null ? void 0 : cacheItem.product_id),
336
+ id: cacheItem?.id ?? cacheItem?.product_id,
290
337
  product_id: resolvedPid,
291
- variant_id: (other == null ? void 0 : other.product_variant_id) ?? (other == null ? void 0 : other.variant_id) ?? 0,
338
+ variant_id: other?.product_variant_id ?? other?.variant_id ?? 0,
292
339
  quantity,
293
340
  // 规格弹窗本次选择是 option 权威源,避免目录/旧订单里的空 option 覆盖它。
294
- product_sku: productSku ? { ...productSku, option: (other == null ? void 0 : other.option) || [] } : void 0,
295
- option: (other == null ? void 0 : other.option) || [],
296
- bundle: (other == null ? void 0 : other.bundle) || ((_c = extend == null ? void 0 : extend.skuValue) == null ? void 0 : _c.bundle) || ((_d = extend == null ? void 0 : extend._skuValue) == null ? void 0 : _d.bundle) || [],
297
- unique: other == null ? void 0 : other.unique,
298
- session: other == null ? void 0 : other.session,
299
- note: extend == null ? void 0 : extend.note,
300
- price: (extend == null ? void 0 : extend.price) ?? (cacheItem == null ? void 0 : cacheItem.price),
301
- selling_price: (extend == null ? void 0 : extend.price) ?? (cacheItem == null ? void 0 : cacheItem.price),
302
- line_total: extend == null ? void 0 : extend.total,
303
- total: extend == null ? void 0 : extend.total,
304
- origin_total: extend == null ? void 0 : extend.origin_total,
305
- price_override: extend == null ? void 0 : extend.priceOverride,
306
- bundle_edit: extend == null ? void 0 : extend.bundle_edit,
307
- discount_reason: extend == null ? void 0 : extend.discount_reason,
308
- discount_list: cacheItem == null ? void 0 : cacheItem.discount_list,
341
+ product_sku: productSku ? {
342
+ ...productSku,
343
+ option: other?.option || []
344
+ } : undefined,
345
+ option: other?.option || [],
346
+ bundle: other?.bundle || extend?.skuValue?.bundle || extend?._skuValue?.bundle || [],
347
+ unique: other?.unique,
348
+ session: other?.session,
349
+ note: extend?.note,
350
+ price: extend?.price ?? cacheItem?.price,
351
+ selling_price: extend?.price ?? cacheItem?.price,
352
+ line_total: extend?.total,
353
+ total: extend?.total,
354
+ origin_total: extend?.origin_total,
355
+ price_override: extend?.priceOverride,
356
+ bundle_edit: extend?.bundle_edit,
357
+ discount_reason: extend?.discount_reason,
358
+ discount_list: cacheItem?.discount_list,
309
359
  _extend: extend
310
360
  };
311
- }
312
- // Annotate the CommonJS export names for ESM import in node:
313
- 0 && (module.exports = {
314
- buildCacheItemFromCartDetail,
315
- buildCacheItemFromDetail,
316
- buildRequiresDetailPayload,
317
- decideAddProduct,
318
- decideAfterDetail,
319
- decideAutoClose,
320
- getIsEject,
321
- getIsOnlySession,
322
- prepareBookingCacheItem,
323
- transformDetailToProductAndBooking
324
- });
361
+ }