@pisell/pisellos 0.0.567 → 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 (228) 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/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 +88 -121
  21. package/dist/server/modules/menu/index.js +32 -41
  22. package/dist/server/modules/products/index.js +29 -49
  23. package/dist/server/modules/quotation/index.js +29 -38
  24. package/dist/server/modules/resource/index.js +3 -4
  25. package/dist/server/modules/schedule/index.js +32 -40
  26. package/dist/server/utils/product.js +0 -1
  27. package/dist/solution/BookingByStep/index.d.ts +1 -1
  28. package/dist/solution/BookingByStep/index.js +7 -59
  29. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  30. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  31. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  32. package/dist/solution/BookingTicket/index.d.ts +1 -1
  33. package/dist/solution/BookingTicket/index.js +5 -7
  34. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  35. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  36. package/dist/solution/BuyTickets/index.js +9 -12
  37. package/dist/solution/Checkout/index.js +177 -246
  38. package/dist/solution/Checkout/utils/index.js +4 -16
  39. package/dist/solution/RegisterAndLogin/index.js +30 -76
  40. package/dist/solution/ScanOrder/index.js +50 -60
  41. package/dist/solution/ShopDiscount/index.js +2 -7
  42. package/dist/solution/VenueBooking/index.d.ts +5 -0
  43. package/dist/solution/VenueBooking/index.js +364 -327
  44. package/dist/utils/task.js +15 -18
  45. package/dist/utils/watch.js +0 -1
  46. package/lib/apis/picoding.js +2 -0
  47. package/lib/core/index.js +130 -131
  48. package/lib/effects/index.js +46 -57
  49. package/lib/index.js +92 -53
  50. package/lib/model/index.js +14 -21
  51. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  52. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  53. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  54. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  55. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  56. package/lib/model/strategy/adapter/index.js +100 -64
  57. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  58. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  59. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  60. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  61. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  62. package/lib/model/strategy/adapter/promotion/adapter.js +84 -63
  63. package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
  64. package/lib/model/strategy/adapter/promotion/examples.js +139 -159
  65. package/lib/model/strategy/adapter/promotion/index.js +1 -49
  66. package/lib/model/strategy/adapter/promotion/type.js +199 -35
  67. package/lib/model/strategy/adapter/type.js +4 -16
  68. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
  69. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  70. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  71. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  72. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  73. package/lib/model/strategy/adapter/walletPass/utils.js +652 -402
  74. package/lib/model/strategy/engine.js +270 -168
  75. package/lib/model/strategy/index.js +49 -34
  76. package/lib/model/strategy/strategy-example.js +243 -239
  77. package/lib/model/strategy/type.js +100 -40
  78. package/lib/modules/Account/index.js +39 -53
  79. package/lib/modules/Account/types.js +20 -33
  80. package/lib/modules/AccountList/index.js +116 -154
  81. package/lib/modules/AccountList/types.js +30 -31
  82. package/lib/modules/AccountList/utils.js +18 -30
  83. package/lib/modules/BaseModule.js +22 -45
  84. package/lib/modules/Cart/index.js +170 -124
  85. package/lib/modules/Cart/types.js +46 -51
  86. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  87. package/lib/modules/Cart/utils/cartDate.js +56 -61
  88. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  89. package/lib/modules/Cart/utils/cartNote.js +27 -32
  90. package/lib/modules/Cart/utils/cartProduct.js +306 -241
  91. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  92. package/lib/modules/Cart/utils/cartResource.js +72 -78
  93. package/lib/modules/Cart/utils/changePrice.js +26 -62
  94. package/lib/modules/Cart/utils/index.js +106 -48
  95. package/lib/modules/Customer/constants.js +13 -34
  96. package/lib/modules/Customer/index.js +216 -153
  97. package/lib/modules/Customer/types.js +38 -35
  98. package/lib/modules/Date/index.js +116 -115
  99. package/lib/modules/Date/types.js +16 -28
  100. package/lib/modules/Date/utils.js +174 -123
  101. package/lib/modules/Discount/index.js +117 -113
  102. package/lib/modules/Discount/types.js +9 -31
  103. package/lib/modules/Guests/index.js +30 -56
  104. package/lib/modules/Guests/types.js +23 -33
  105. package/lib/modules/Holder/index.js +209 -189
  106. package/lib/modules/Holder/types.js +4 -16
  107. package/lib/modules/Holder/utils.js +20 -49
  108. package/lib/modules/OpenData/index.js +63 -74
  109. package/lib/modules/OpenData/types.js +4 -16
  110. package/lib/modules/OpenData/utils.js +44 -78
  111. package/lib/modules/Order/index.d.ts +1 -1
  112. package/lib/modules/Order/index.js +332 -320
  113. package/lib/modules/Order/types.js +24 -33
  114. package/lib/modules/Order/utils.js +350 -284
  115. package/lib/modules/Payment/cash.js +20 -33
  116. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  117. package/lib/modules/Payment/eftpos.js +16 -30
  118. package/lib/modules/Payment/index.js +566 -432
  119. package/lib/modules/Payment/mx51.js +1 -0
  120. package/lib/modules/Payment/types.js +216 -107
  121. package/lib/modules/Payment/utils.js +50 -47
  122. package/lib/modules/Payment/walletpass.js +221 -203
  123. package/lib/modules/Product/index.js +51 -46
  124. package/lib/modules/Product/types.js +4 -16
  125. package/lib/modules/Product/utils.js +32 -33
  126. package/lib/modules/ProductList/index.js +111 -110
  127. package/lib/modules/ProductList/types.js +9 -31
  128. package/lib/modules/Quotation/index.js +60 -82
  129. package/lib/modules/Quotation/types.js +4 -16
  130. package/lib/modules/Resource/index.js +27 -59
  131. package/lib/modules/Resource/types.js +22 -32
  132. package/lib/modules/Resource/utils.js +30 -38
  133. package/lib/modules/Rules/index.js +1172 -872
  134. package/lib/modules/Rules/types.js +17 -40
  135. package/lib/modules/SalesSummary/index.js +59 -68
  136. package/lib/modules/SalesSummary/types.js +4 -16
  137. package/lib/modules/SalesSummary/utils.js +176 -193
  138. package/lib/modules/ScanOrderLogger/index.js +59 -79
  139. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  140. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  141. package/lib/modules/ScanOrderLogger/types.js +4 -16
  142. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -167
  143. package/lib/modules/Schedule/index.js +97 -107
  144. package/lib/modules/Schedule/type.js +4 -16
  145. package/lib/modules/Schedule/types.js +4 -16
  146. package/lib/modules/Schedule/utils.js +433 -291
  147. package/lib/modules/Step/index.js +40 -52
  148. package/lib/modules/Step/tyeps.js +4 -16
  149. package/lib/modules/Summary/index.js +66 -70
  150. package/lib/modules/Summary/types.js +4 -16
  151. package/lib/modules/Summary/utils.js +782 -429
  152. package/lib/modules/index.js +212 -57
  153. package/lib/plugins/app.js +4 -16
  154. package/lib/plugins/index.js +36 -25
  155. package/lib/plugins/request.js +137 -126
  156. package/lib/plugins/shopStore.js +4 -16
  157. package/lib/plugins/user.js +4 -16
  158. package/lib/plugins/window.js +171 -179
  159. package/lib/server/index.js +882 -623
  160. package/lib/server/modules/index.js +85 -59
  161. package/lib/server/modules/menu/index.js +146 -122
  162. package/lib/server/modules/menu/types.js +18 -31
  163. package/lib/server/modules/order/index.js +195 -231
  164. package/lib/server/modules/order/types.js +107 -32
  165. package/lib/server/modules/order/utils/filterBookings.js +174 -140
  166. package/lib/server/modules/order/utils/filterOrders.js +89 -60
  167. package/lib/server/modules/products/index.js +430 -335
  168. package/lib/server/modules/products/types.js +41 -34
  169. package/lib/server/modules/quotation/index.js +76 -77
  170. package/lib/server/modules/quotation/types.js +21 -31
  171. package/lib/server/modules/resource/index.js +216 -187
  172. package/lib/server/modules/resource/types.js +42 -33
  173. package/lib/server/modules/schedule/index.js +134 -119
  174. package/lib/server/modules/schedule/types.js +14 -21
  175. package/lib/server/modules/schedule/utils.js +334 -163
  176. package/lib/server/types.js +4 -16
  177. package/lib/server/utils/index.js +25 -23
  178. package/lib/server/utils/product.js +196 -139
  179. package/lib/server/utils/schedule.js +34 -41
  180. package/lib/server/utils/time.js +40 -49
  181. package/lib/solution/BookingByStep/index.d.ts +1 -1
  182. package/lib/solution/BookingByStep/index.js +1530 -1343
  183. package/lib/solution/BookingByStep/types.js +40 -99
  184. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  185. package/lib/solution/BookingByStep/utils/products.js +42 -52
  186. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  187. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  188. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  189. package/lib/solution/BookingTicket/index.d.ts +1 -1
  190. package/lib/solution/BookingTicket/index.js +147 -122
  191. package/lib/solution/BookingTicket/types.js +38 -64
  192. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
  193. package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
  194. package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
  195. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  196. package/lib/solution/BuyTickets/index.js +67 -70
  197. package/lib/solution/BuyTickets/types.js +22 -38
  198. package/lib/solution/Checkout/index.js +1451 -1158
  199. package/lib/solution/Checkout/types.js +91 -61
  200. package/lib/solution/Checkout/utils/index.js +227 -158
  201. package/lib/solution/PlaceOrder/index.js +55 -0
  202. package/lib/solution/RegisterAndLogin/config.js +493 -460
  203. package/lib/solution/RegisterAndLogin/index.js +633 -630
  204. package/lib/solution/RegisterAndLogin/types.js +189 -76
  205. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  206. package/lib/solution/Sales/index.js +218 -200
  207. package/lib/solution/Sales/types.js +27 -33
  208. package/lib/solution/ScanOrder/index.js +803 -840
  209. package/lib/solution/ScanOrder/types.js +34 -34
  210. package/lib/solution/ScanOrder/utils.js +372 -331
  211. package/lib/solution/ShopDiscount/index.js +230 -236
  212. package/lib/solution/ShopDiscount/types.js +15 -37
  213. package/lib/solution/ShopDiscount/utils.js +309 -172
  214. package/lib/solution/VenueBooking/index.d.ts +5 -0
  215. package/lib/solution/VenueBooking/index.js +886 -929
  216. package/lib/solution/VenueBooking/types.js +20 -40
  217. package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
  218. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  219. package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
  220. package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
  221. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
  222. package/lib/solution/VenueBooking/utils.js +130 -67
  223. package/lib/solution/index.js +102 -37
  224. package/lib/store/createStore.js +32 -29
  225. package/lib/types/index.js +4 -16
  226. package/lib/utils/task.js +36 -36
  227. package/lib/utils/watch.js +81 -47
  228. package/package.json +2 -1
@@ -1,122 +1,159 @@
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/modules/Date/utils.ts
30
- var utils_exports = {};
31
- __export(utils_exports, {
32
- disableAllDates: () => disableAllDates,
33
- disableDatesBeforeOneDay: () => disableDatesBeforeOneDay,
34
- generateMonthDates: () => generateMonthDates,
35
- handleAvailableDateByResource: () => handleAvailableDateByResource,
36
- handleAvailableDatesByRules: () => handleAvailableDatesByRules
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
37
5
  });
38
- module.exports = __toCommonJS(utils_exports);
39
- var import_dayjs = __toESM(require("dayjs"));
40
- var generateMonthDates = (startDate, endDate, type) => {
41
- const start = type === "day" ? (0, import_dayjs.default)(startDate).format("YYYY-MM-DD") : (0, import_dayjs.default)(startDate).format("YYYY-MM-01");
42
- const end = (0, import_dayjs.default)(endDate).format("YYYY-MM-DD");
6
+ exports.handleAvailableDatesByRules = exports.handleAvailableDateByResource = exports.generateMonthDates = exports.disableDatesBeforeOneDay = exports.disableAllDates = void 0;
7
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ /**
10
+ * 生成当前月份的所有日期
11
+ * @param startDate 开始日期
12
+ * @param endDate 结束日期
13
+ * @param type 类型:按月查 | 按周查
14
+ * @returns 日期列表
15
+ */
16
+ const generateMonthDates = (startDate, endDate, type) => {
17
+ // 如果是按月查询需要从01号开始,如果是按周查询以开始结束时间为准
18
+ const start = type === 'day' ? (0, _dayjs.default)(startDate).format('YYYY-MM-DD') : (0, _dayjs.default)(startDate).format('YYYY-MM-01');
19
+ const end = (0, _dayjs.default)(endDate).format('YYYY-MM-DD');
43
20
  const dates = [];
44
- let currentDate = (0, import_dayjs.default)(start);
45
- while ((0, import_dayjs.default)(currentDate).isBefore((0, import_dayjs.default)(end), "day") || (0, import_dayjs.default)(currentDate).isSame((0, import_dayjs.default)(end), "day")) {
21
+ let currentDate = (0, _dayjs.default)(start);
22
+ while ((0, _dayjs.default)(currentDate).isBefore((0, _dayjs.default)(end), 'day') || (0, _dayjs.default)(currentDate).isSame((0, _dayjs.default)(end), 'day')) {
46
23
  dates.push({
47
- date: (0, import_dayjs.default)(currentDate).format("YYYY-MM-DD"),
48
- week: (0, import_dayjs.default)(currentDate).format("ddd"),
49
- weekNum: (0, import_dayjs.default)(currentDate).day(),
50
- status: "available"
24
+ date: (0, _dayjs.default)(currentDate).format('YYYY-MM-DD'),
25
+ week: (0, _dayjs.default)(currentDate).format('ddd'),
26
+ weekNum: (0, _dayjs.default)(currentDate).day(),
27
+ status: 'available'
51
28
  });
52
- currentDate = (0, import_dayjs.default)(currentDate).add(1, "day");
29
+ currentDate = (0, _dayjs.default)(currentDate).add(1, 'day');
53
30
  }
54
31
  return dates;
55
32
  };
56
- var disableAllDates = (dates) => {
57
- return dates.map((date) => ({ ...date, status: "unavailable" }));
33
+
34
+ /**
35
+ * 禁用所有日期
36
+ * @param dates 日期列表
37
+ * @returns 日期列表
38
+ */
39
+ exports.generateMonthDates = generateMonthDates;
40
+ const disableAllDates = dates => {
41
+ return dates.map(date => ({
42
+ ...date,
43
+ status: 'unavailable'
44
+ }));
58
45
  };
59
- var disableDatesBeforeOneDay = (dates, oneDay) => {
60
- const day = oneDay ? (0, import_dayjs.default)(oneDay).format("YYYY-MM-DD") : (0, import_dayjs.default)().format("YYYY-MM-DD");
61
- return dates.map((date) => {
62
- if ((0, import_dayjs.default)(date.date).isBefore(day, "day")) {
63
- return { ...date, status: "unavailable" };
46
+
47
+ /**
48
+ * 禁用某一天之前的日期,如不传则默认今天
49
+ * @param dates 日期列表
50
+ * @param oneDay 日期
51
+ * @returns 日期列表
52
+ */
53
+ exports.disableAllDates = disableAllDates;
54
+ const disableDatesBeforeOneDay = (dates, oneDay) => {
55
+ const day = oneDay ? (0, _dayjs.default)(oneDay).format('YYYY-MM-DD') : (0, _dayjs.default)().format('YYYY-MM-DD');
56
+ return dates.map(date => {
57
+ if ((0, _dayjs.default)(date.date).isBefore(day, 'day')) {
58
+ return {
59
+ ...date,
60
+ status: 'unavailable'
61
+ };
64
62
  } else {
65
63
  return date;
66
64
  }
67
65
  });
68
66
  };
69
- var handleAvailableDateByResource = (resources, dates) => {
67
+
68
+ /**
69
+ * 根据资源中的日期处理出每个日期下存在的可用资源,根据form_id进行分类
70
+ * @param resources 资源列表
71
+ * @param dates 日期列表
72
+ * @returns 日期列表
73
+ */
74
+ exports.disableDatesBeforeOneDay = disableDatesBeforeOneDay;
75
+ const handleAvailableDateByResource = (resources, dates) => {
70
76
  const dateMap = {};
71
- resources.forEach((resource) => {
72
- const { form_id, id, times, ...others } = resource;
73
- times.forEach((time) => {
74
- var _a;
75
- const { start_at } = time;
76
- const date = (0, import_dayjs.default)(start_at).format("YYYY-MM-DD");
77
+ resources.forEach(resource => {
78
+ const {
79
+ form_id,
80
+ id,
81
+ times,
82
+ ...others
83
+ } = resource;
84
+ times.forEach(time => {
85
+ const {
86
+ start_at
87
+ } = time;
88
+ const date = (0, _dayjs.default)(start_at).format('YYYY-MM-DD');
77
89
  if (!dateMap[date]) {
78
- dateMap[date] = [{ form_id, id, ...others, times: [time] }];
90
+ dateMap[date] = [{
91
+ form_id,
92
+ id,
93
+ ...others,
94
+ times: [time]
95
+ }];
79
96
  } else {
80
- const temp = (_a = dateMap[date].filter((item) => item.id === id)) == null ? void 0 : _a[0];
97
+ const temp = dateMap[date].filter(item => item.id === id)?.[0];
81
98
  if (temp) {
82
99
  temp.times.push(time);
83
100
  } else {
84
- dateMap[date].push({ form_id, id, ...others, times: [time] });
101
+ dateMap[date].push({
102
+ form_id,
103
+ id,
104
+ ...others,
105
+ times: [time]
106
+ });
85
107
  }
86
108
  }
87
109
  });
88
110
  });
89
- return dates.map((date) => {
111
+ return dates.map(date => {
90
112
  const resource = dateMap[date.date];
91
113
  if (resource) {
92
- return { ...date, resource };
114
+ return {
115
+ ...date,
116
+ resource
117
+ };
93
118
  } else {
94
- return { ...date, status: "unavailable", resource: [] };
119
+ return {
120
+ ...date,
121
+ status: 'unavailable',
122
+ resource: []
123
+ };
95
124
  }
96
125
  });
97
126
  };
98
- var handleAvailableDatesByRules = (dates, rules) => {
127
+
128
+ /**
129
+ * 根据规则判定哪些日期是可用的
130
+ * @param dates 日期列表
131
+ * @param rules 提前量规则
132
+ * @returns 日期列表
133
+ */
134
+ exports.handleAvailableDateByResource = handleAvailableDateByResource;
135
+ const handleAvailableDatesByRules = (dates, rules) => {
99
136
  let newDates = disableDatesBeforeOneDay(dates);
100
- if (!(rules == null ? void 0 : rules.length)) {
137
+ if (!rules?.length) {
101
138
  return newDates;
102
139
  }
103
- let scheduleMap = {};
104
- let latestStartDate = "";
105
- let earliestEndDate = "";
140
+ let scheduleMap = {}; // 日程列表
141
+ let latestStartDate = ''; // 最晚开始日期
142
+ let earliestEndDate = ''; // 最早结束日期
106
143
  let resourceFormIds = [];
107
- rules.forEach((rule) => {
108
- var _a, _b;
109
- if ((_a = rule == null ? void 0 : rule.schedule) == null ? void 0 : _a.length) {
144
+ rules.forEach(rule => {
145
+ // 如果有日程列表,需要将它去重加入到scheduleMap
146
+ if (rule?.schedule?.length) {
110
147
  for (const item of rule.schedule) {
111
- if ((0, import_dayjs.default)(item.date).isBefore((0, import_dayjs.default)(newDates[0].date), "day")) {
148
+ // 判断item.date是否在dates的开始和结束日期范围内,如果不在则跳过
149
+ if ((0, _dayjs.default)(item.date).isBefore((0, _dayjs.default)(newDates[0].date), 'day')) {
112
150
  continue;
113
151
  }
114
- if ((0, import_dayjs.default)(item.date).isAfter(
115
- (0, import_dayjs.default)(newDates[newDates.length - 1].date),
116
- "day"
117
- )) {
152
+ // 判断日程日期是否超过了dates中的最后一个日期,如果超过了则循环break
153
+ if ((0, _dayjs.default)(item.date).isAfter((0, _dayjs.default)(newDates[newDates.length - 1].date), 'day')) {
118
154
  break;
119
155
  }
156
+ // 在范围内的日程如果scheduleMap中不存在,则加入到scheduleMap
120
157
  if (!scheduleMap[item.date]) {
121
158
  scheduleMap[item.date] = item;
122
159
  } else {
@@ -126,70 +163,91 @@ var handleAvailableDatesByRules = (dates, rules) => {
126
163
  }
127
164
  }
128
165
  }
129
- const { future_day, unit, unit_type } = (rule == null ? void 0 : rule.cut_off_time) || {};
166
+ const {
167
+ future_day,
168
+ unit,
169
+ unit_type
170
+ } = rule?.cut_off_time || {};
171
+ // 预定天数存在,则开始计算从当前时间开始往后推预定天数作为结束时间
130
172
  if (future_day) {
131
- const endDate = (0, import_dayjs.default)().add(future_day, "day");
132
- if (!earliestEndDate || endDate.isBefore((0, import_dayjs.default)(earliestEndDate), "day")) {
133
- earliestEndDate = endDate.format("YYYY-MM-DD");
173
+ const endDate = (0, _dayjs.default)().add(future_day, 'day');
174
+ if (!earliestEndDate || endDate.isBefore((0, _dayjs.default)(earliestEndDate), 'day')) {
175
+ earliestEndDate = endDate.format('YYYY-MM-DD');
134
176
  }
135
177
  } else if (future_day === 0) {
136
- const endDate = (0, import_dayjs.default)();
137
- if (!earliestEndDate || endDate.isBefore((0, import_dayjs.default)(earliestEndDate), "day")) {
138
- earliestEndDate = endDate.format("YYYY-MM-DD");
178
+ const endDate = (0, _dayjs.default)();
179
+ if (!earliestEndDate || endDate.isBefore((0, _dayjs.default)(earliestEndDate), 'day')) {
180
+ earliestEndDate = endDate.format('YYYY-MM-DD');
139
181
  }
140
182
  }
183
+
184
+ // 如果存在提前预约时间,则开始计算从当前时间开始往后推提前预约时间作为开始时间
141
185
  if (unit && unit_type) {
142
- const startDate = (0, import_dayjs.default)(
143
- (0, import_dayjs.default)().add(unit, unit_type).format("YYYY-MM-DD")
144
- );
145
- if (!latestStartDate || startDate.isAfter((0, import_dayjs.default)(latestStartDate), "day")) {
146
- latestStartDate = startDate.format("YYYY-MM-DD");
186
+ const startDate = (0, _dayjs.default)((0, _dayjs.default)().add(unit, unit_type).format('YYYY-MM-DD'));
187
+ if (!latestStartDate || startDate.isAfter((0, _dayjs.default)(latestStartDate), 'day')) {
188
+ latestStartDate = startDate.format('YYYY-MM-DD');
147
189
  }
148
190
  }
149
- if ((_b = rule == null ? void 0 : rule.resourceFormIds) == null ? void 0 : _b.length) {
150
- resourceFormIds = [
151
- .../* @__PURE__ */ new Set([...resourceFormIds, ...rule == null ? void 0 : rule.resourceFormIds])
152
- ];
191
+ if (rule?.resourceFormIds?.length) {
192
+ // 去重
193
+ resourceFormIds = [...new Set([...resourceFormIds, ...rule?.resourceFormIds])];
153
194
  }
154
195
  });
155
- newDates = newDates.map((date) => {
156
- var _a;
157
- const disabledDate = { ...date, status: "unavailable" };
158
- const hasScheduleConfig = rules.find((n) => {
159
- var _a2;
160
- return (_a2 = n.schedule) == null ? void 0 : _a2.length;
161
- });
196
+ newDates = newDates.map(date => {
197
+ const disabledDate = {
198
+ ...date,
199
+ status: 'unavailable'
200
+ };
201
+ const hasScheduleConfig = rules.find(n => n.schedule?.length);
202
+ // 如果外面穿了 schedule,但是这个时候scheduleMap为空,则设置为不可用
203
+ // 这种情况为,商品设置了 5.1-5.31 可用,资源设置了 5.1-6.30 可用,session 类商品详情弹窗里里看到的6 月以后的日期都应该是不可用的
162
204
  if (Object.keys(scheduleMap).length === 0 && hasScheduleConfig) {
163
- return { ...date, color: "", status: "unavailable" };
205
+ return {
206
+ ...date,
207
+ color: '',
208
+ status: 'unavailable'
209
+ };
164
210
  }
211
+ // 根据日程判断日期是否可用
165
212
  if (Object.keys(scheduleMap).length) {
166
213
  const schedule = scheduleMap[date.date];
167
- if (!schedule || (schedule == null ? void 0 : schedule.isExcluded)) {
168
- return { ...date, color: schedule == null ? void 0 : schedule.color, status: "unavailable" };
214
+ // 如果日程不存在 或者 日程存在但是需要排除,则设置为不可用
215
+ if (!schedule || schedule?.isExcluded) {
216
+ return {
217
+ ...date,
218
+ color: schedule?.color,
219
+ status: 'unavailable'
220
+ };
169
221
  } else {
170
- date.color = schedule == null ? void 0 : schedule.color;
171
- disabledDate.color = schedule == null ? void 0 : schedule.color;
222
+ date.color = schedule?.color;
223
+ disabledDate.color = schedule?.color;
172
224
  }
173
225
  }
174
- if (!((_a = date == null ? void 0 : date.resource) == null ? void 0 : _a.length)) {
226
+
227
+ // 如果资源不存在,则设置为不可用
228
+ if (!date?.resource?.length) {
175
229
  return disabledDate;
176
230
  }
177
231
  if (latestStartDate || earliestEndDate) {
178
- if (latestStartDate && (0, import_dayjs.default)(date.date).isBefore(latestStartDate, "day")) {
232
+ // 如果时间在最早开始时间之前,则设置为不可用
233
+ if (latestStartDate && (0, _dayjs.default)(date.date).isBefore(latestStartDate, 'day')) {
179
234
  return disabledDate;
180
235
  }
181
- if (earliestEndDate && (0, import_dayjs.default)(date.date).isAfter(earliestEndDate, "day")) {
236
+ // 如果时间在最早结束时间之后,则设置为不可用
237
+ if (earliestEndDate && (0, _dayjs.default)(date.date).isAfter(earliestEndDate, 'day')) {
182
238
  return disabledDate;
183
239
  }
184
240
  }
185
- if (resourceFormIds == null ? void 0 : resourceFormIds.length) {
241
+
242
+ // 如果存在资源form_id,则开始计算资源form_id在日期上是否全部存在
243
+ if (resourceFormIds?.length) {
186
244
  let hasReourceCount = 0;
187
- resourceFormIds.forEach((formId) => {
188
- var _a2;
189
- if (((_a2 = date == null ? void 0 : date.resource) == null ? void 0 : _a2.find((item) => item.form_id === formId)) !== void 0) {
245
+ resourceFormIds.forEach(formId => {
246
+ if (date?.resource?.find(item => item.form_id === formId) !== undefined) {
190
247
  hasReourceCount++;
191
248
  }
192
249
  });
250
+ // 如果所需要的资源在日期上不足,则设置为不可用
193
251
  if (hasReourceCount < resourceFormIds.length) {
194
252
  return disabledDate;
195
253
  }
@@ -198,11 +256,4 @@ var handleAvailableDatesByRules = (dates, rules) => {
198
256
  });
199
257
  return newDates;
200
258
  };
201
- // Annotate the CommonJS export names for ESM import in node:
202
- 0 && (module.exports = {
203
- disableAllDates,
204
- disableDatesBeforeOneDay,
205
- generateMonthDates,
206
- handleAvailableDateByResource,
207
- handleAvailableDatesByRules
208
- });
259
+ exports.handleAvailableDatesByRules = handleAvailableDatesByRules;