@pisell/pisellos 2.3.74 → 2.3.76

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 (283) hide show
  1. package/dist/core/index.js +6 -10
  2. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.js +0 -2
  10. package/dist/modules/Order/index.d.ts +1 -1
  11. package/dist/modules/Order/index.js +75 -91
  12. package/dist/modules/Order/types.d.ts +3 -1
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Rules/index.js +1 -4
  15. package/dist/modules/Schedule/index.js +0 -1
  16. package/dist/modules/Schedule/utils.js +0 -1
  17. package/dist/modules/Step/index.js +0 -1
  18. package/dist/plugins/request.js +1 -4
  19. package/dist/plugins/window.js +2 -6
  20. package/dist/server/index.js +97 -129
  21. package/dist/server/modules/menu/index.js +32 -41
  22. package/dist/server/modules/order/index.js +2 -4
  23. package/dist/server/modules/products/index.js +24 -42
  24. package/dist/server/modules/quotation/index.js +29 -38
  25. package/dist/server/modules/resource/index.js +3 -4
  26. package/dist/server/modules/schedule/index.js +27 -35
  27. package/dist/server/utils/product.js +0 -1
  28. package/dist/solution/BaseSales/index.js +100 -72
  29. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  30. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  31. package/dist/solution/BookingByStep/index.js +7 -59
  32. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  33. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  34. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  35. package/dist/solution/BookingTicket/index.js +0 -2
  36. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  37. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  38. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  39. package/dist/solution/BuyTickets/index.js +9 -12
  40. package/dist/solution/Checkout/index.js +177 -252
  41. package/dist/solution/Checkout/utils/index.js +4 -16
  42. package/dist/solution/RegisterAndLogin/index.js +30 -76
  43. package/dist/solution/ScanOrder/index.js +50 -60
  44. package/dist/solution/ShopDiscount/index.js +2 -7
  45. package/dist/solution/VenueBooking/index.js +45 -55
  46. package/dist/utils/task.js +15 -18
  47. package/dist/utils/watch.js +0 -1
  48. package/lib/apis/picoding.js +2 -0
  49. package/lib/core/index.js +134 -134
  50. package/lib/effects/index.js +46 -57
  51. package/lib/index.js +82 -49
  52. package/lib/model/index.js +14 -21
  53. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  54. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  55. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  56. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  57. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  58. package/lib/model/strategy/adapter/index.js +100 -64
  59. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  60. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  61. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  62. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  63. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  64. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  65. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  66. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  67. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  68. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  69. package/lib/model/strategy/adapter/type.js +4 -16
  70. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  71. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  72. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  73. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  74. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  75. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  76. package/lib/model/strategy/engine.js +270 -168
  77. package/lib/model/strategy/index.js +49 -34
  78. package/lib/model/strategy/strategy-example.js +243 -239
  79. package/lib/model/strategy/type.js +100 -40
  80. package/lib/modules/Account/index.js +39 -53
  81. package/lib/modules/Account/types.js +20 -33
  82. package/lib/modules/AccountList/index.js +116 -154
  83. package/lib/modules/AccountList/types.js +30 -31
  84. package/lib/modules/AccountList/utils.js +18 -30
  85. package/lib/modules/BaseModule.js +23 -42
  86. package/lib/modules/BookingContext/index.js +158 -136
  87. package/lib/modules/BookingContext/types.js +46 -32
  88. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  89. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  90. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  91. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  92. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  93. package/lib/modules/BookingContext/utils/index.js +124 -41
  94. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  95. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  96. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  97. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  98. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  99. package/lib/modules/BookingContext/utils/resources.js +209 -167
  100. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  101. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  102. package/lib/modules/Cart/index.js +170 -124
  103. package/lib/modules/Cart/types.js +46 -51
  104. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  105. package/lib/modules/Cart/utils/cartDate.js +56 -61
  106. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  107. package/lib/modules/Cart/utils/cartNote.js +27 -32
  108. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  109. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  110. package/lib/modules/Cart/utils/cartResource.js +70 -78
  111. package/lib/modules/Cart/utils/changePrice.js +22 -50
  112. package/lib/modules/Cart/utils/index.js +106 -48
  113. package/lib/modules/Customer/constants.js +13 -34
  114. package/lib/modules/Customer/index.js +235 -172
  115. package/lib/modules/Customer/types.js +38 -35
  116. package/lib/modules/Date/index.js +116 -115
  117. package/lib/modules/Date/types.js +16 -28
  118. package/lib/modules/Date/utils.js +174 -123
  119. package/lib/modules/Discount/index.js +122 -127
  120. package/lib/modules/Discount/types.js +9 -31
  121. package/lib/modules/Guests/index.js +30 -56
  122. package/lib/modules/Guests/types.js +23 -33
  123. package/lib/modules/Holder/index.js +209 -189
  124. package/lib/modules/Holder/types.js +4 -16
  125. package/lib/modules/Holder/utils.js +20 -49
  126. package/lib/modules/OpenData/index.js +70 -76
  127. package/lib/modules/OpenData/types.js +4 -16
  128. package/lib/modules/OpenData/utils.js +44 -78
  129. package/lib/modules/Order/index.d.ts +1 -1
  130. package/lib/modules/Order/index.js +1733 -2121
  131. package/lib/modules/Order/payment-utils.js +77 -120
  132. package/lib/modules/Order/types.d.ts +3 -1
  133. package/lib/modules/Order/types.js +88 -35
  134. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  135. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  136. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  137. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  138. package/lib/modules/Order/utils.js +814 -647
  139. package/lib/modules/Payment/cash.js +20 -33
  140. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  141. package/lib/modules/Payment/eftpos.js +16 -30
  142. package/lib/modules/Payment/index.js +532 -399
  143. package/lib/modules/Payment/mx51.js +1 -0
  144. package/lib/modules/Payment/types.js +230 -108
  145. package/lib/modules/Payment/utils.js +52 -51
  146. package/lib/modules/Payment/walletpass.js +485 -660
  147. package/lib/modules/Product/index.js +51 -46
  148. package/lib/modules/Product/types.js +4 -16
  149. package/lib/modules/Product/utils.js +32 -33
  150. package/lib/modules/ProductList/index.js +113 -123
  151. package/lib/modules/ProductList/types.js +9 -31
  152. package/lib/modules/Quotation/index.js +81 -118
  153. package/lib/modules/Quotation/types.js +4 -16
  154. package/lib/modules/Resource/index.js +27 -59
  155. package/lib/modules/Resource/types.js +22 -32
  156. package/lib/modules/Resource/utils.js +30 -38
  157. package/lib/modules/ResourcePlanner/index.js +25 -23
  158. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  159. package/lib/modules/ResourcePlanner/planner.js +589 -770
  160. package/lib/modules/ResourcePlanner/types.js +10 -29
  161. package/lib/modules/Rules/index.js +1218 -959
  162. package/lib/modules/Rules/types.js +17 -40
  163. package/lib/modules/SalesSummary/index.js +85 -90
  164. package/lib/modules/SalesSummary/types.js +4 -16
  165. package/lib/modules/SalesSummary/utils.js +355 -430
  166. package/lib/modules/ScanOrderLogger/index.js +59 -79
  167. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  168. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  169. package/lib/modules/ScanOrderLogger/types.js +4 -16
  170. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  171. package/lib/modules/Schedule/index.js +100 -114
  172. package/lib/modules/Schedule/type.js +4 -16
  173. package/lib/modules/Schedule/types.js +4 -16
  174. package/lib/modules/Schedule/utils.js +433 -291
  175. package/lib/modules/Step/index.js +40 -52
  176. package/lib/modules/Step/tyeps.js +4 -16
  177. package/lib/modules/Summary/index.js +66 -71
  178. package/lib/modules/Summary/types.js +4 -16
  179. package/lib/modules/Summary/utils.js +773 -418
  180. package/lib/modules/SurchargeList/index.js +46 -60
  181. package/lib/modules/SurchargeList/types.js +4 -16
  182. package/lib/modules/index.js +245 -63
  183. package/lib/plugins/app.js +4 -16
  184. package/lib/plugins/index.js +36 -25
  185. package/lib/plugins/request.js +137 -126
  186. package/lib/plugins/shopStore.js +4 -16
  187. package/lib/plugins/user.js +4 -16
  188. package/lib/plugins/window.js +171 -179
  189. package/lib/server/index.js +3050 -2665
  190. package/lib/server/modules/floor-plan/index.js +118 -134
  191. package/lib/server/modules/floor-plan/types.js +15 -30
  192. package/lib/server/modules/index.js +106 -68
  193. package/lib/server/modules/menu/index.js +142 -122
  194. package/lib/server/modules/menu/types.js +18 -31
  195. package/lib/server/modules/order/index.js +784 -1002
  196. package/lib/server/modules/order/types.js +122 -33
  197. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  198. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  199. package/lib/server/modules/payment/index.js +59 -83
  200. package/lib/server/modules/payment/types.js +4 -16
  201. package/lib/server/modules/products/index.js +583 -471
  202. package/lib/server/modules/products/types.js +44 -34
  203. package/lib/server/modules/quotation/index.js +137 -172
  204. package/lib/server/modules/quotation/types.js +21 -31
  205. package/lib/server/modules/resource/index.js +220 -186
  206. package/lib/server/modules/resource/types.js +42 -33
  207. package/lib/server/modules/schedule/index.js +135 -123
  208. package/lib/server/modules/schedule/types.js +14 -21
  209. package/lib/server/modules/schedule/utils.js +334 -163
  210. package/lib/server/types.js +4 -16
  211. package/lib/server/utils/index.js +25 -23
  212. package/lib/server/utils/product.js +196 -139
  213. package/lib/server/utils/schedule.js +34 -41
  214. package/lib/server/utils/small-ticket.js +479 -456
  215. package/lib/server/utils/time.js +40 -49
  216. package/lib/solution/BaseSales/index.js +1220 -1412
  217. package/lib/solution/BaseSales/types.js +42 -38
  218. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  219. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  220. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  221. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  222. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  223. package/lib/solution/BaseSales/utils.js +158 -143
  224. package/lib/solution/BookingByStep/index.js +1527 -1340
  225. package/lib/solution/BookingByStep/types.js +40 -99
  226. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  227. package/lib/solution/BookingByStep/utils/products.js +42 -52
  228. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  229. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  230. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  231. package/lib/solution/BookingTicket/index.js +607 -522
  232. package/lib/solution/BookingTicket/types.js +99 -77
  233. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  234. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  235. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  236. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  237. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  238. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  239. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  240. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  241. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  242. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  243. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  244. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  245. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  246. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  247. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  248. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  249. package/lib/solution/BuyTickets/index.js +67 -70
  250. package/lib/solution/BuyTickets/types.js +22 -38
  251. package/lib/solution/Checkout/index.js +1451 -1158
  252. package/lib/solution/Checkout/types.js +91 -61
  253. package/lib/solution/Checkout/utils/index.js +228 -156
  254. package/lib/solution/PlaceOrder/index.js +55 -0
  255. package/lib/solution/RegisterAndLogin/config.js +493 -460
  256. package/lib/solution/RegisterAndLogin/index.js +633 -630
  257. package/lib/solution/RegisterAndLogin/types.js +189 -76
  258. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  259. package/lib/solution/Sales/index.js +328 -324
  260. package/lib/solution/Sales/types.js +27 -33
  261. package/lib/solution/ScanOrder/index.js +832 -864
  262. package/lib/solution/ScanOrder/types.js +33 -34
  263. package/lib/solution/ScanOrder/utils.js +409 -374
  264. package/lib/solution/ShopDiscount/index.js +226 -232
  265. package/lib/solution/ShopDiscount/types.js +15 -37
  266. package/lib/solution/ShopDiscount/utils.js +300 -172
  267. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  268. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  269. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  270. package/lib/solution/VenueBooking/index.js +811 -879
  271. package/lib/solution/VenueBooking/types.js +19 -39
  272. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  273. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  274. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  275. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  276. package/lib/solution/VenueBooking/utils.js +130 -67
  277. package/lib/solution/index.js +124 -41
  278. package/lib/store/createStore.js +32 -29
  279. package/lib/types/index.js +4 -16
  280. package/lib/utils/payment-number.js +26 -46
  281. package/lib/utils/task.js +36 -36
  282. package/lib/utils/watch.js +81 -47
  283. 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
+ }