@pisell/pisellos 0.0.566 → 0.0.568

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 (230) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/adapter/walletPass/utils.js +0 -3
  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 +1 -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 +14 -41
  13. package/dist/modules/Payment/index.js +142 -270
  14. package/dist/modules/Payment/walletpass.js +4 -5
  15. package/dist/modules/Rules/index.js +0 -7
  16. package/dist/modules/SalesSummary/utils.js +4 -2
  17. package/dist/modules/Schedule/utils.js +0 -1
  18. package/dist/modules/Step/index.js +0 -1
  19. package/dist/modules/Summary/utils.js +2 -2
  20. package/dist/plugins/request.js +1 -4
  21. package/dist/plugins/window.js +2 -6
  22. package/dist/server/index.js +88 -121
  23. package/dist/server/modules/menu/index.js +32 -41
  24. package/dist/server/modules/products/index.js +29 -49
  25. package/dist/server/modules/quotation/index.js +29 -38
  26. package/dist/server/modules/resource/index.js +3 -4
  27. package/dist/server/modules/schedule/index.js +32 -40
  28. package/dist/server/utils/product.js +0 -1
  29. package/dist/solution/BookingByStep/index.d.ts +1 -1
  30. package/dist/solution/BookingByStep/index.js +7 -59
  31. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  32. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  33. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  34. package/dist/solution/BookingTicket/index.d.ts +1 -1
  35. package/dist/solution/BookingTicket/index.js +5 -7
  36. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  37. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  38. package/dist/solution/BuyTickets/index.js +9 -12
  39. package/dist/solution/Checkout/index.js +177 -246
  40. package/dist/solution/Checkout/utils/index.js +4 -16
  41. package/dist/solution/RegisterAndLogin/index.js +30 -76
  42. package/dist/solution/ScanOrder/index.js +50 -60
  43. package/dist/solution/ShopDiscount/index.js +2 -7
  44. package/dist/solution/VenueBooking/index.d.ts +5 -0
  45. package/dist/solution/VenueBooking/index.js +364 -327
  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 +130 -131
  50. package/lib/effects/index.js +46 -57
  51. package/lib/index.js +92 -53
  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 +84 -63
  65. package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
  66. package/lib/model/strategy/adapter/promotion/examples.js +139 -159
  67. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  68. package/lib/model/strategy/adapter/promotion/type.js +199 -35
  69. package/lib/model/strategy/adapter/type.js +4 -16
  70. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
  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 +652 -402
  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 +22 -45
  86. package/lib/modules/Cart/index.js +170 -124
  87. package/lib/modules/Cart/types.js +46 -51
  88. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  89. package/lib/modules/Cart/utils/cartDate.js +56 -61
  90. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  91. package/lib/modules/Cart/utils/cartNote.js +27 -32
  92. package/lib/modules/Cart/utils/cartProduct.js +306 -241
  93. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  94. package/lib/modules/Cart/utils/cartResource.js +72 -78
  95. package/lib/modules/Cart/utils/changePrice.js +26 -62
  96. package/lib/modules/Cart/utils/index.js +106 -48
  97. package/lib/modules/Customer/constants.js +13 -34
  98. package/lib/modules/Customer/index.js +216 -153
  99. package/lib/modules/Customer/types.js +38 -35
  100. package/lib/modules/Date/index.js +116 -115
  101. package/lib/modules/Date/types.js +16 -28
  102. package/lib/modules/Date/utils.js +174 -123
  103. package/lib/modules/Discount/index.js +117 -113
  104. package/lib/modules/Discount/types.js +9 -31
  105. package/lib/modules/Guests/index.js +30 -56
  106. package/lib/modules/Guests/types.js +23 -33
  107. package/lib/modules/Holder/index.js +209 -189
  108. package/lib/modules/Holder/types.js +4 -16
  109. package/lib/modules/Holder/utils.js +20 -49
  110. package/lib/modules/OpenData/index.js +63 -74
  111. package/lib/modules/OpenData/types.js +4 -16
  112. package/lib/modules/OpenData/utils.js +44 -78
  113. package/lib/modules/Order/index.d.ts +1 -1
  114. package/lib/modules/Order/index.js +332 -320
  115. package/lib/modules/Order/types.js +24 -33
  116. package/lib/modules/Order/utils.js +350 -284
  117. package/lib/modules/Payment/cash.js +20 -33
  118. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  119. package/lib/modules/Payment/eftpos.js +16 -30
  120. package/lib/modules/Payment/index.js +566 -432
  121. package/lib/modules/Payment/mx51.js +1 -0
  122. package/lib/modules/Payment/types.js +216 -107
  123. package/lib/modules/Payment/utils.js +50 -47
  124. package/lib/modules/Payment/walletpass.js +221 -203
  125. package/lib/modules/Product/index.js +51 -46
  126. package/lib/modules/Product/types.js +4 -16
  127. package/lib/modules/Product/utils.js +32 -33
  128. package/lib/modules/ProductList/index.js +111 -110
  129. package/lib/modules/ProductList/types.js +9 -31
  130. package/lib/modules/Quotation/index.js +60 -82
  131. package/lib/modules/Quotation/types.js +4 -16
  132. package/lib/modules/Resource/index.js +27 -59
  133. package/lib/modules/Resource/types.js +22 -32
  134. package/lib/modules/Resource/utils.js +30 -38
  135. package/lib/modules/Rules/index.js +1172 -872
  136. package/lib/modules/Rules/types.js +17 -40
  137. package/lib/modules/SalesSummary/index.js +59 -68
  138. package/lib/modules/SalesSummary/types.js +4 -16
  139. package/lib/modules/SalesSummary/utils.js +178 -193
  140. package/lib/modules/ScanOrderLogger/index.js +59 -79
  141. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  142. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  143. package/lib/modules/ScanOrderLogger/types.js +4 -16
  144. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -167
  145. package/lib/modules/Schedule/index.js +97 -107
  146. package/lib/modules/Schedule/type.js +4 -16
  147. package/lib/modules/Schedule/types.js +4 -16
  148. package/lib/modules/Schedule/utils.js +433 -291
  149. package/lib/modules/Step/index.js +40 -52
  150. package/lib/modules/Step/tyeps.js +4 -16
  151. package/lib/modules/Summary/index.js +66 -70
  152. package/lib/modules/Summary/types.js +4 -16
  153. package/lib/modules/Summary/utils.js +782 -429
  154. package/lib/modules/index.js +212 -57
  155. package/lib/plugins/app.js +4 -16
  156. package/lib/plugins/index.js +36 -25
  157. package/lib/plugins/request.js +137 -126
  158. package/lib/plugins/shopStore.js +4 -16
  159. package/lib/plugins/user.js +4 -16
  160. package/lib/plugins/window.js +171 -179
  161. package/lib/server/index.js +882 -623
  162. package/lib/server/modules/index.js +85 -59
  163. package/lib/server/modules/menu/index.js +146 -122
  164. package/lib/server/modules/menu/types.js +18 -31
  165. package/lib/server/modules/order/index.js +195 -231
  166. package/lib/server/modules/order/types.js +107 -32
  167. package/lib/server/modules/order/utils/filterBookings.js +174 -140
  168. package/lib/server/modules/order/utils/filterOrders.js +89 -60
  169. package/lib/server/modules/products/index.js +430 -335
  170. package/lib/server/modules/products/types.js +41 -34
  171. package/lib/server/modules/quotation/index.js +76 -77
  172. package/lib/server/modules/quotation/types.js +21 -31
  173. package/lib/server/modules/resource/index.js +216 -187
  174. package/lib/server/modules/resource/types.js +42 -33
  175. package/lib/server/modules/schedule/index.js +134 -119
  176. package/lib/server/modules/schedule/types.js +14 -21
  177. package/lib/server/modules/schedule/utils.js +334 -163
  178. package/lib/server/types.js +4 -16
  179. package/lib/server/utils/index.js +25 -23
  180. package/lib/server/utils/product.js +196 -139
  181. package/lib/server/utils/schedule.js +34 -41
  182. package/lib/server/utils/time.js +40 -49
  183. package/lib/solution/BookingByStep/index.d.ts +1 -1
  184. package/lib/solution/BookingByStep/index.js +1530 -1343
  185. package/lib/solution/BookingByStep/types.js +40 -99
  186. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  187. package/lib/solution/BookingByStep/utils/products.js +42 -52
  188. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  189. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  190. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  191. package/lib/solution/BookingTicket/index.d.ts +1 -1
  192. package/lib/solution/BookingTicket/index.js +147 -122
  193. package/lib/solution/BookingTicket/types.js +38 -64
  194. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
  195. package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
  196. package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
  197. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  198. package/lib/solution/BuyTickets/index.js +67 -70
  199. package/lib/solution/BuyTickets/types.js +22 -38
  200. package/lib/solution/Checkout/index.js +1451 -1158
  201. package/lib/solution/Checkout/types.js +91 -61
  202. package/lib/solution/Checkout/utils/index.js +227 -158
  203. package/lib/solution/PlaceOrder/index.js +55 -0
  204. package/lib/solution/RegisterAndLogin/config.js +493 -460
  205. package/lib/solution/RegisterAndLogin/index.js +633 -630
  206. package/lib/solution/RegisterAndLogin/types.js +189 -76
  207. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  208. package/lib/solution/Sales/index.js +218 -200
  209. package/lib/solution/Sales/types.js +27 -33
  210. package/lib/solution/ScanOrder/index.js +803 -840
  211. package/lib/solution/ScanOrder/types.js +34 -34
  212. package/lib/solution/ScanOrder/utils.js +372 -331
  213. package/lib/solution/ShopDiscount/index.js +230 -236
  214. package/lib/solution/ShopDiscount/types.js +15 -37
  215. package/lib/solution/ShopDiscount/utils.js +309 -172
  216. package/lib/solution/VenueBooking/index.d.ts +5 -0
  217. package/lib/solution/VenueBooking/index.js +886 -929
  218. package/lib/solution/VenueBooking/types.js +20 -40
  219. package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
  220. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  221. package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
  222. package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
  223. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
  224. package/lib/solution/VenueBooking/utils.js +130 -67
  225. package/lib/solution/index.js +102 -37
  226. package/lib/store/createStore.js +32 -29
  227. package/lib/types/index.js +4 -16
  228. package/lib/utils/task.js +36 -36
  229. package/lib/utils/watch.js +81 -47
  230. package/package.json +2 -1
@@ -1,45 +1,25 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/solution/VenueBooking/types.ts
20
- var types_exports = {};
21
- __export(types_exports, {
22
- DEFAULT_SLOT_CONFIG: () => DEFAULT_SLOT_CONFIG,
23
- VenueBookingHooks: () => VenueBookingHooks
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
24
5
  });
25
- module.exports = __toCommonJS(types_exports);
26
- var VenueBookingHooks = /* @__PURE__ */ ((VenueBookingHooks2) => {
27
- VenueBookingHooks2["onInited"] = "venueBooking:onInited";
28
- VenueBookingHooks2["onDestroy"] = "venueBooking:onDestroy";
29
- VenueBookingHooks2["onRetryInit"] = "venueBooking:onRetryInit";
30
- VenueBookingHooks2["onRefresh"] = "venueBooking:onRefresh";
31
- VenueBookingHooks2["onCartValidationChanged"] = "venueBooking:onCartValidationChanged";
32
- VenueBookingHooks2["onSmartPricingUpdated"] = "venueBooking:onSmartPricingUpdated";
33
- return VenueBookingHooks2;
34
- })(VenueBookingHooks || {});
35
- var DEFAULT_SLOT_CONFIG = {
6
+ exports.VenueBookingHooks = exports.DEFAULT_SLOT_CONFIG = void 0;
7
+ let VenueBookingHooks = exports.VenueBookingHooks = /*#__PURE__*/function (VenueBookingHooks) {
8
+ VenueBookingHooks["onInited"] = "venueBooking:onInited";
9
+ VenueBookingHooks["onDestroy"] = "venueBooking:onDestroy";
10
+ VenueBookingHooks["onRetryInit"] = "venueBooking:onRetryInit";
11
+ VenueBookingHooks["onRefresh"] = "venueBooking:onRefresh";
12
+ VenueBookingHooks["onCartValidationChanged"] = "venueBooking:onCartValidationChanged";
13
+ VenueBookingHooks["onSmartPricingUpdated"] = "venueBooking:onSmartPricingUpdated";
14
+ return VenueBookingHooks;
15
+ }({}); // ─── 场地预定核心类型 ───
16
+ const DEFAULT_SLOT_CONFIG = exports.DEFAULT_SLOT_CONFIG = {
36
17
  slotDurationMinutes: 30,
37
- businessStartTime: "09:00",
38
- businessEndTime: "23:00",
18
+ businessStartTime: '09:00',
19
+ businessEndTime: '23:00',
39
20
  fewLeftThreshold: 0.8
40
21
  };
41
- // Annotate the CommonJS export names for ESM import in node:
42
- 0 && (module.exports = {
43
- DEFAULT_SLOT_CONFIG,
44
- VenueBookingHooks
45
- });
22
+
23
+ // ─── 时段选择 & 合并 ───
24
+
25
+ // ─── Store 状态 ───
@@ -1,39 +1,12 @@
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/VenueBooking/utils/dateSummary.ts
30
- var dateSummary_exports = {};
31
- __export(dateSummary_exports, {
32
- buildDateRangeSummary: () => buildDateRangeSummary
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
33
5
  });
34
- module.exports = __toCommonJS(dateSummary_exports);
35
- var import_dayjs = __toESM(require("dayjs"));
36
- var import_timeSlot = require("./timeSlot");
6
+ exports.buildDateRangeSummary = buildDateRangeSummary;
7
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
+ var _timeSlot = require("./timeSlot");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
10
  function buildDateRangeSummary(params) {
38
11
  const {
39
12
  startDate,
@@ -45,14 +18,14 @@ function buildDateRangeSummary(params) {
45
18
  buildSlotPriceMap
46
19
  } = params;
47
20
  const result = [];
48
- const productIds = buildSlotPriceMap ? [...new Set([...resourceProductMap.values()].flat().map((m) => m.productId))] : [];
49
- let cursor = (0, import_dayjs.default)(startDate);
50
- const end = (0, import_dayjs.default)(endDate);
21
+ const productIds = buildSlotPriceMap ? [...new Set([...resourceProductMap.values()].flat().map(m => m.productId))] : [];
22
+ let cursor = (0, _dayjs.default)(startDate);
23
+ const end = (0, _dayjs.default)(endDate);
51
24
  while (!cursor.isAfter(end)) {
52
- const date = cursor.format("YYYY-MM-DD");
53
- const effectiveConfig = (resolveConfig == null ? void 0 : resolveConfig(date)) || config;
54
- const slotPriceMap = buildSlotPriceMap && productIds.length ? buildSlotPriceMap(date, effectiveConfig, productIds) : void 0;
55
- const grid = (0, import_timeSlot.buildTimeSlotGrid)({
25
+ const date = cursor.format('YYYY-MM-DD');
26
+ const effectiveConfig = resolveConfig?.(date) || config;
27
+ const slotPriceMap = buildSlotPriceMap && productIds.length ? buildSlotPriceMap(date, effectiveConfig, productIds) : undefined;
28
+ const grid = (0, _timeSlot.buildTimeSlotGrid)({
56
29
  date,
57
30
  config: effectiveConfig,
58
31
  rawResources,
@@ -64,10 +37,9 @@ function buildDateRangeSummary(params) {
64
37
  let lowestPrice = null;
65
38
  for (const resource of grid.resources) {
66
39
  for (const slot of resource.slots) {
67
- if (slot.status === "past" || slot.status === "unavailable")
68
- continue;
40
+ if (slot.status === 'past' || slot.status === 'unavailable') continue;
69
41
  totalSlots++;
70
- if (slot.status === "available" || slot.status === "partially_occupied") {
42
+ if (slot.status === 'available' || slot.status === 'partially_occupied') {
71
43
  availableSlots++;
72
44
  if (slot.price !== null) {
73
45
  const priceNum = Number(slot.price);
@@ -80,13 +52,13 @@ function buildDateRangeSummary(params) {
80
52
  }
81
53
  let status;
82
54
  if (totalSlots === 0) {
83
- status = "unavailable";
55
+ status = 'unavailable';
84
56
  } else if (availableSlots === 0) {
85
- status = "sold_out";
57
+ status = 'sold_out';
86
58
  } else if ((totalSlots - availableSlots) / totalSlots >= effectiveConfig.fewLeftThreshold) {
87
- status = "few_left";
59
+ status = 'few_left';
88
60
  } else {
89
- status = "available";
61
+ status = 'available';
90
62
  }
91
63
  result.push({
92
64
  date,
@@ -95,11 +67,7 @@ function buildDateRangeSummary(params) {
95
67
  totalSlots,
96
68
  availableSlots
97
69
  });
98
- cursor = cursor.add(1, "day");
70
+ cursor = cursor.add(1, 'day');
99
71
  }
100
72
  return result;
101
- }
102
- // Annotate the CommonJS export names for ESM import in node:
103
- 0 && (module.exports = {
104
- buildDateRangeSummary
105
- });
73
+ }
@@ -1,69 +1,51 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/solution/VenueBooking/utils/resource.ts
20
- var resource_exports = {};
21
- __export(resource_exports, {
22
- buildResourceProductMap: () => buildResourceProductMap,
23
- extractResourceIds: () => extractResourceIds
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
24
5
  });
25
- module.exports = __toCommonJS(resource_exports);
6
+ exports.buildResourceProductMap = buildResourceProductMap;
7
+ exports.extractResourceIds = extractResourceIds;
8
+ /**
9
+ * 从商品列表里抽取所有 resource_id:
10
+ * - 商品绑定的 default_resource / optional_resource
11
+ * - 以及这些资源上声明的 combined_resource.resource_ids(若可从 product_resource 读取)
12
+ * 用于一次性拉到子资源数据,判定组合资源的可用性。
13
+ */
26
14
  function extractResourceIds(products) {
27
- var _a;
28
- const ids = /* @__PURE__ */ new Set();
15
+ const ids = new Set();
29
16
  for (const product of products) {
30
- const resources = (_a = product.product_resource) == null ? void 0 : _a.resources;
31
- if (!Array.isArray(resources))
32
- continue;
17
+ const resources = product.product_resource?.resources;
18
+ if (!Array.isArray(resources)) continue;
33
19
  for (const resource of resources) {
34
- if (resource.status !== 1)
35
- continue;
20
+ if (resource.status !== 1) continue;
36
21
  const defaultRes = resource.default_resource || [];
37
22
  const optionalRes = resource.optional_resource || [];
38
23
  for (const id of [...defaultRes, ...optionalRes]) {
39
- if (typeof id === "number" && id > 0)
40
- ids.add(id);
24
+ if (typeof id === 'number' && id > 0) ids.add(id);
41
25
  }
42
26
  const combined = resource.combined_resource;
43
27
  if (combined && combined.status === 1 && Array.isArray(combined.resource_ids)) {
44
28
  for (const id of combined.resource_ids) {
45
- if (typeof id === "number" && id > 0)
46
- ids.add(id);
29
+ if (typeof id === 'number' && id > 0) ids.add(id);
47
30
  }
48
31
  }
49
32
  }
50
33
  }
51
34
  return Array.from(ids);
52
35
  }
36
+
37
+ /**
38
+ * 每个 resourceId 可以被多个商品共享(同一场地关联多种运动商品)。
39
+ * Map 的 value 改为 ResourceProductMapping[],按商品出现顺序保留。
40
+ */
53
41
  function buildResourceProductMap(products) {
54
- var _a;
55
- const map = /* @__PURE__ */ new Map();
42
+ const map = new Map();
56
43
  for (const product of products) {
57
- const resources = (_a = product.product_resource) == null ? void 0 : _a.resources;
58
- if (!Array.isArray(resources))
59
- continue;
44
+ const resources = product.product_resource?.resources;
45
+ if (!Array.isArray(resources)) continue;
60
46
  for (const resource of resources) {
61
- if (resource.status !== 1)
62
- continue;
63
- const allResourceIds = [
64
- ...resource.default_resource || [],
65
- ...resource.optional_resource || []
66
- ];
47
+ if (resource.status !== 1) continue;
48
+ const allResourceIds = [...(resource.default_resource || []), ...(resource.optional_resource || [])];
67
49
  for (const resId of allResourceIds) {
68
50
  const existing = map.get(resId);
69
51
  const mapping = {
@@ -72,21 +54,16 @@ function buildResourceProductMap(products) {
72
54
  formName: resource.title,
73
55
  resourceName: resource.title,
74
56
  formId: resource.id,
75
- price: product.price || "0.00",
76
- resourceType: resource.type || "single"
57
+ price: product.price || '0.00',
58
+ resourceType: resource.type || 'single'
77
59
  };
78
60
  if (!existing) {
79
61
  map.set(resId, [mapping]);
80
- } else if (!existing.some((m) => m.productId === mapping.productId)) {
62
+ } else if (!existing.some(m => m.productId === mapping.productId)) {
81
63
  existing.push(mapping);
82
64
  }
83
65
  }
84
66
  }
85
67
  }
86
68
  return map;
87
- }
88
- // Annotate the CommonJS export names for ESM import in node:
89
- 0 && (module.exports = {
90
- buildResourceProductMap,
91
- extractResourceIds
92
- });
69
+ }
@@ -1,62 +1,34 @@
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/VenueBooking/utils/slotMerge.ts
30
- var slotMerge_exports = {};
31
- __export(slotMerge_exports, {
32
- buildPriceBreakdown: () => buildPriceBreakdown,
33
- buildVenueBookingEntry: () => buildVenueBookingEntry,
34
- buildVenueIdentityKey: () => buildVenueIdentityKey,
35
- buildVenueResourceMetadata: () => buildVenueResourceMetadata,
36
- expandMergedSlotToIndividual: () => expandMergedSlotToIndividual,
37
- mergeConsecutiveSlots: () => mergeConsecutiveSlots
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
38
5
  });
39
- module.exports = __toCommonJS(slotMerge_exports);
40
- var import_decimal = __toESM(require("decimal.js"));
41
- var import_dayjs = __toESM(require("dayjs"));
42
- var import_utils = require("../../../modules/Order/utils");
6
+ exports.buildPriceBreakdown = buildPriceBreakdown;
7
+ exports.buildVenueBookingEntry = buildVenueBookingEntry;
8
+ exports.buildVenueIdentityKey = buildVenueIdentityKey;
9
+ exports.buildVenueResourceMetadata = buildVenueResourceMetadata;
10
+ exports.expandMergedSlotToIndividual = expandMergedSlotToIndividual;
11
+ exports.mergeConsecutiveSlots = mergeConsecutiveSlots;
12
+ var _decimal = _interopRequireDefault(require("decimal.js"));
13
+ var _dayjs = _interopRequireDefault(require("dayjs"));
14
+ var _utils = require("../../../modules/Order/utils");
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
16
  function buildVenueIdentityKey(resourceId, groupIndex) {
44
- return `venue:${resourceId}:${groupIndex}:${(0, import_utils.createUuidV4)()}`;
17
+ return `venue:${resourceId}:${groupIndex}:${(0, _utils.createUuidV4)()}`;
45
18
  }
46
19
  function mergeConsecutiveSlots(slots) {
47
- if (!slots.length)
48
- return [];
20
+ if (!slots.length) return [];
49
21
  const sorted = [...slots].sort((a, b) => a.startTime.localeCompare(b.startTime));
50
22
  const groups = [];
51
23
  let currentSlots = [sorted[0]];
52
24
  let currentStart = sorted[0].startTime;
53
25
  let currentEnd = sorted[0].endTime;
54
- let totalPrice = new import_decimal.default(sorted[0].price || "0");
26
+ let totalPrice = new _decimal.default(sorted[0].price || '0');
55
27
  for (let i = 1; i < sorted.length; i++) {
56
28
  const slot = sorted[i];
57
29
  if (slot.startTime === currentEnd) {
58
30
  currentEnd = slot.endTime;
59
- totalPrice = totalPrice.add(new import_decimal.default(slot.price || "0"));
31
+ totalPrice = totalPrice.add(new _decimal.default(slot.price || '0'));
60
32
  currentSlots.push(slot);
61
33
  } else {
62
34
  groups.push({
@@ -69,7 +41,7 @@ function mergeConsecutiveSlots(slots) {
69
41
  currentSlots = [slot];
70
42
  currentStart = slot.startTime;
71
43
  currentEnd = slot.endTime;
72
- totalPrice = new import_decimal.default(slot.price || "0");
44
+ totalPrice = new _decimal.default(slot.price || '0');
73
45
  }
74
46
  }
75
47
  groups.push({
@@ -82,14 +54,15 @@ function mergeConsecutiveSlots(slots) {
82
54
  return groups;
83
55
  }
84
56
  function buildPriceBreakdown(params) {
85
- const { group } = params;
86
- if (!group.slots.length)
87
- return [];
57
+ const {
58
+ group
59
+ } = params;
60
+ if (!group.slots.length) return [];
88
61
  const entries = [];
89
62
  for (const slot of group.slots) {
90
- const unitPrice = Number(slot.price || "0");
91
- const startHm = (0, import_dayjs.default)(slot.startTime, "YYYY-MM-DD HH:mm").format("YYYY-MM-DD HH:mm");
92
- const endHm = (0, import_dayjs.default)(slot.endTime, "YYYY-MM-DD HH:mm").format("YYYY-MM-DD HH:mm");
63
+ const unitPrice = Number(slot.price || '0');
64
+ const startHm = (0, _dayjs.default)(slot.startTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
65
+ const endHm = (0, _dayjs.default)(slot.endTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
93
66
  const last = entries[entries.length - 1];
94
67
  if (last && last.unit_price === unitPrice && last.quotation_shelf_id === 0 && last.end_time === startHm) {
95
68
  last.end_time = endHm;
@@ -107,36 +80,50 @@ function buildPriceBreakdown(params) {
107
80
  return entries;
108
81
  }
109
82
  function buildVenueResourceMetadata(params) {
110
- const { mapping, rawResource } = params;
111
- const combined = rawResource == null ? void 0 : rawResource.combined_resource;
83
+ const {
84
+ mapping,
85
+ rawResource
86
+ } = params;
87
+ const combined = rawResource?.combined_resource;
112
88
  const isCombined = !!(combined && combined.status === 1 && Array.isArray(combined.resource_ids));
113
89
  return {
114
90
  form_name: mapping.formName ?? mapping.resourceName,
115
- resource_name: (rawResource == null ? void 0 : rawResource.main_field) ?? mapping.resourceName,
91
+ resource_name: rawResource?.main_field ?? mapping.resourceName,
116
92
  combined_resource: isCombined ? combined : null
117
93
  };
118
94
  }
119
95
  function buildVenueBookingEntry(params) {
120
- const { group, resourceId, mapping, rawResource, bookingUuid, productUid, childResources } = params;
121
- const startMoment = (0, import_dayjs.default)(group.startTime, "YYYY-MM-DD HH:mm");
122
- const endMoment = (0, import_dayjs.default)(group.endTime, "YYYY-MM-DD HH:mm");
123
- const duration = endMoment.diff(startMoment, "minute");
96
+ const {
97
+ group,
98
+ resourceId,
99
+ mapping,
100
+ rawResource,
101
+ bookingUuid,
102
+ productUid,
103
+ childResources
104
+ } = params;
105
+ const startMoment = (0, _dayjs.default)(group.startTime, 'YYYY-MM-DD HH:mm');
106
+ const endMoment = (0, _dayjs.default)(group.endTime, 'YYYY-MM-DD HH:mm');
107
+ const duration = endMoment.diff(startMoment, 'minute');
124
108
  const resourceEntry = {
125
- relation_type: "form",
126
- like_status: "common",
109
+ relation_type: 'form',
110
+ like_status: 'common',
127
111
  id: resourceId,
128
112
  main_field: mapping.resourceName,
129
- form_id: (rawResource == null ? void 0 : rawResource.form_id) ?? mapping.formId,
113
+ form_id: rawResource?.form_id ?? mapping.formId,
130
114
  relation_id: resourceId,
131
115
  capacity: 1,
132
- metadata: buildVenueResourceMetadata({ mapping, rawResource })
116
+ metadata: buildVenueResourceMetadata({
117
+ mapping,
118
+ rawResource
119
+ })
133
120
  };
134
121
  if (childResources && childResources.length) {
135
- resourceEntry.children = childResources.map((child) => ({
136
- relation_type: "form",
137
- like_status: "common",
122
+ resourceEntry.children = childResources.map(child => ({
123
+ relation_type: 'form',
124
+ like_status: 'common',
138
125
  id: child.resourceId,
139
- main_field: child.main_field || "",
126
+ main_field: child.main_field || '',
140
127
  form_id: child.form_id ?? child.formId,
141
128
  relation_id: child.resourceId,
142
129
  capacity: child.capacity ?? 1,
@@ -145,15 +132,15 @@ function buildVenueBookingEntry(params) {
145
132
  }
146
133
  return {
147
134
  schedule_event_id: null,
148
- appointment_status: "new",
149
- start_date: startMoment.format("YYYY-MM-DD"),
150
- start_time: startMoment.format("HH:mm"),
151
- end_date: endMoment.format("YYYY-MM-DD"),
152
- end_time: endMoment.format("HH:mm"),
153
- select_date: startMoment.format("YYYY-MM-DD"),
135
+ appointment_status: 'new',
136
+ start_date: startMoment.format('YYYY-MM-DD'),
137
+ start_time: startMoment.format('HH:mm'),
138
+ end_date: endMoment.format('YYYY-MM-DD'),
139
+ end_time: endMoment.format('HH:mm'),
140
+ select_date: startMoment.format('YYYY-MM-DD'),
154
141
  duration,
155
- sub_type: "minutes",
156
- like_status: "common",
142
+ sub_type: 'minutes',
143
+ like_status: 'common',
157
144
  number: 1,
158
145
  is_all: false,
159
146
  schedule_id: 0,
@@ -170,67 +157,62 @@ function buildVenueBookingEntry(params) {
170
157
  }
171
158
  };
172
159
  }
160
+
161
+ /**
162
+ * 从一条已合并的订单商品还原出独立的时段列表。
163
+ * 优先使用 metadata.price_breakdown 还原每个时段的精确价格,
164
+ * 回退到按 selling_price / slot_count 均分。
165
+ */
173
166
  function expandMergedSlotToIndividual(product, slotDurationMinutes) {
174
167
  const meta = product.metadata || {};
175
168
  const resourceId = meta.resource_id;
176
- if (resourceId == null)
177
- return [];
169
+ if (resourceId == null) return [];
178
170
  const startTime = meta.start_time;
179
171
  const endTime = meta.end_time;
180
- if (!startTime || !endTime)
181
- return [];
172
+ if (!startTime || !endTime) return [];
182
173
  const productId = Number(product.product_id);
183
174
  const breakdown = meta.price_breakdown;
184
175
  const result = [];
185
- let cursor = (0, import_dayjs.default)(startTime, "YYYY-MM-DD HH:mm");
186
- const end = (0, import_dayjs.default)(endTime, "YYYY-MM-DD HH:mm");
187
- if (breakdown == null ? void 0 : breakdown.length) {
188
- const priceMap = /* @__PURE__ */ new Map();
176
+ let cursor = (0, _dayjs.default)(startTime, 'YYYY-MM-DD HH:mm');
177
+ const end = (0, _dayjs.default)(endTime, 'YYYY-MM-DD HH:mm');
178
+ if (breakdown?.length) {
179
+ const priceMap = new Map();
189
180
  for (const entry of breakdown) {
190
- let entryCursor = (0, import_dayjs.default)(entry.start_time, "YYYY-MM-DD HH:mm");
191
- const entryEnd = (0, import_dayjs.default)(entry.end_time, "YYYY-MM-DD HH:mm");
181
+ let entryCursor = (0, _dayjs.default)(entry.start_time, 'YYYY-MM-DD HH:mm');
182
+ const entryEnd = (0, _dayjs.default)(entry.end_time, 'YYYY-MM-DD HH:mm');
192
183
  while (entryCursor.isBefore(entryEnd)) {
193
- priceMap.set(entryCursor.format("HH:mm"), entry.unit_price);
194
- entryCursor = entryCursor.add(slotDurationMinutes, "minute");
184
+ priceMap.set(entryCursor.format('HH:mm'), entry.unit_price);
185
+ entryCursor = entryCursor.add(slotDurationMinutes, 'minute');
195
186
  }
196
187
  }
197
188
  while (cursor.isBefore(end)) {
198
- const slotEnd = cursor.add(slotDurationMinutes, "minute");
199
- const hm = cursor.format("HH:mm");
189
+ const slotEnd = cursor.add(slotDurationMinutes, 'minute');
190
+ const hm = cursor.format('HH:mm');
200
191
  const price = priceMap.get(hm) ?? 0;
201
192
  result.push({
202
193
  resourceId,
203
194
  productId,
204
- startTime: cursor.format("YYYY-MM-DD HH:mm"),
205
- endTime: slotEnd.format("YYYY-MM-DD HH:mm"),
206
- price: new import_decimal.default(price).toFixed(2)
195
+ startTime: cursor.format('YYYY-MM-DD HH:mm'),
196
+ endTime: slotEnd.format('YYYY-MM-DD HH:mm'),
197
+ price: new _decimal.default(price).toFixed(2)
207
198
  });
208
199
  cursor = slotEnd;
209
200
  }
210
201
  } else {
211
202
  const slotCount = meta.slot_count || 1;
212
- const totalPrice = new import_decimal.default(product.selling_price || "0");
203
+ const totalPrice = new _decimal.default(product.selling_price || '0');
213
204
  const perSlotPrice = slotCount > 0 ? totalPrice.div(slotCount).toFixed(2) : totalPrice.toFixed(2);
214
205
  while (cursor.isBefore(end)) {
215
- const slotEnd = cursor.add(slotDurationMinutes, "minute");
206
+ const slotEnd = cursor.add(slotDurationMinutes, 'minute');
216
207
  result.push({
217
208
  resourceId,
218
209
  productId,
219
- startTime: cursor.format("YYYY-MM-DD HH:mm"),
220
- endTime: slotEnd.format("YYYY-MM-DD HH:mm"),
210
+ startTime: cursor.format('YYYY-MM-DD HH:mm'),
211
+ endTime: slotEnd.format('YYYY-MM-DD HH:mm'),
221
212
  price: perSlotPrice
222
213
  });
223
214
  cursor = slotEnd;
224
215
  }
225
216
  }
226
217
  return result;
227
- }
228
- // Annotate the CommonJS export names for ESM import in node:
229
- 0 && (module.exports = {
230
- buildPriceBreakdown,
231
- buildVenueBookingEntry,
232
- buildVenueIdentityKey,
233
- buildVenueResourceMetadata,
234
- expandMergedSlotToIndividual,
235
- mergeConsecutiveSlots
236
- });
218
+ }