@pisell/pisellos 2.1.38 → 2.2.1

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 (135) hide show
  1. package/dist/core/index.d.ts +8 -1
  2. package/dist/core/index.js +116 -42
  3. package/dist/effects/index.d.ts +1 -0
  4. package/dist/effects/index.js +29 -6
  5. package/dist/modules/Account/index.js +2 -3
  6. package/dist/modules/BaseModule.d.ts +3 -0
  7. package/dist/modules/BaseModule.js +15 -0
  8. package/dist/modules/Customer/index.js +9 -10
  9. package/dist/modules/Customer/types.d.ts +2 -2
  10. package/dist/modules/Customer/types.js +2 -2
  11. package/dist/modules/Discount/index.js +1 -1
  12. package/dist/modules/Guests/index.js +9 -9
  13. package/dist/modules/Order/index.js +1 -1
  14. package/dist/modules/Payment/index.js +63 -73
  15. package/dist/modules/Payment/walletpass.js +4 -1
  16. package/dist/modules/Product/index.d.ts +1 -1
  17. package/dist/modules/Product/types.d.ts +19 -0
  18. package/dist/modules/ProductList/index.js +5 -14
  19. package/dist/modules/Resource/index.js +1 -1
  20. package/dist/modules/Rules/index.js +2 -3
  21. package/dist/modules/Schedule/types.d.ts +2 -0
  22. package/dist/plugins/request.d.ts +1 -0
  23. package/dist/server/index.d.ts +152 -0
  24. package/dist/server/index.js +946 -0
  25. package/dist/server/modules/index.d.ts +16 -0
  26. package/dist/server/modules/index.js +21 -0
  27. package/dist/server/modules/menu/index.d.ts +63 -0
  28. package/dist/server/modules/menu/index.js +476 -0
  29. package/dist/server/modules/menu/types.d.ts +68 -0
  30. package/dist/server/modules/menu/types.js +16 -0
  31. package/dist/server/modules/products/index.d.ts +141 -0
  32. package/dist/server/modules/products/index.js +768 -0
  33. package/dist/server/modules/products/types.d.ts +94 -0
  34. package/dist/server/modules/products/types.js +43 -0
  35. package/dist/server/modules/quotation/index.d.ts +47 -0
  36. package/dist/server/modules/quotation/index.js +367 -0
  37. package/dist/server/modules/quotation/types.d.ts +50 -0
  38. package/dist/server/modules/quotation/types.js +20 -0
  39. package/dist/server/modules/schedule/index.d.ts +62 -0
  40. package/dist/server/modules/schedule/index.js +431 -0
  41. package/dist/server/modules/schedule/types.d.ts +1 -0
  42. package/dist/server/modules/schedule/types.js +2 -0
  43. package/dist/server/modules/schedule/utils.d.ts +32 -0
  44. package/dist/server/modules/schedule/utils.js +747 -0
  45. package/dist/server/types.d.ts +64 -0
  46. package/dist/server/types.js +1 -0
  47. package/dist/server/utils/index.d.ts +5 -0
  48. package/dist/server/utils/index.js +6 -0
  49. package/dist/server/utils/product.d.ts +18 -0
  50. package/dist/server/utils/product.js +339 -0
  51. package/dist/server/utils/schedule.d.ts +14 -0
  52. package/dist/server/utils/schedule.js +108 -0
  53. package/dist/server/utils/time.d.ts +18 -0
  54. package/dist/server/utils/time.js +53 -0
  55. package/dist/solution/BookingByStep/index.d.ts +1 -17
  56. package/dist/solution/BookingByStep/index.js +23 -468
  57. package/dist/solution/BookingByStep/utils/capacity.d.ts +2 -7
  58. package/dist/solution/BookingByStep/utils/capacity.js +8 -24
  59. package/dist/solution/BookingTicket/index.d.ts +12 -0
  60. package/dist/solution/BookingTicket/index.js +122 -79
  61. package/dist/solution/BookingTicket/utils/scan/index.d.ts +4 -0
  62. package/dist/solution/BookingTicket/utils/scan/index.js +25 -16
  63. package/dist/solution/BuyTickets/index.js +7 -8
  64. package/dist/solution/Checkout/index.d.ts +1 -46
  65. package/dist/solution/Checkout/index.js +530 -850
  66. package/dist/solution/ShopDiscount/index.js +9 -10
  67. package/dist/types/index.d.ts +27 -0
  68. package/lib/core/index.d.ts +8 -1
  69. package/lib/core/index.js +48 -1
  70. package/lib/effects/index.d.ts +1 -0
  71. package/lib/effects/index.js +13 -0
  72. package/lib/modules/Account/index.js +2 -3
  73. package/lib/modules/BaseModule.d.ts +3 -0
  74. package/lib/modules/BaseModule.js +9 -0
  75. package/lib/modules/Customer/index.js +9 -10
  76. package/lib/modules/Customer/types.d.ts +2 -2
  77. package/lib/modules/Customer/types.js +2 -2
  78. package/lib/modules/Discount/index.js +1 -1
  79. package/lib/modules/Guests/index.js +9 -9
  80. package/lib/modules/Order/index.js +1 -1
  81. package/lib/modules/Payment/index.js +56 -43
  82. package/lib/modules/Payment/walletpass.js +3 -1
  83. package/lib/modules/Product/index.d.ts +1 -1
  84. package/lib/modules/Product/types.d.ts +19 -0
  85. package/lib/modules/ProductList/index.js +4 -13
  86. package/lib/modules/Resource/index.js +1 -1
  87. package/lib/modules/Rules/index.js +2 -3
  88. package/lib/modules/Schedule/types.d.ts +2 -0
  89. package/lib/plugins/request.d.ts +1 -0
  90. package/lib/server/index.d.ts +152 -0
  91. package/lib/server/index.js +555 -0
  92. package/lib/server/modules/index.d.ts +16 -0
  93. package/lib/server/modules/index.js +47 -0
  94. package/lib/server/modules/menu/index.d.ts +63 -0
  95. package/lib/server/modules/menu/index.js +234 -0
  96. package/lib/server/modules/menu/types.d.ts +68 -0
  97. package/lib/server/modules/menu/types.js +33 -0
  98. package/lib/server/modules/products/index.d.ts +141 -0
  99. package/lib/server/modules/products/index.js +434 -0
  100. package/lib/server/modules/products/types.d.ts +94 -0
  101. package/lib/server/modules/products/types.js +35 -0
  102. package/lib/server/modules/quotation/index.d.ts +47 -0
  103. package/lib/server/modules/quotation/index.js +177 -0
  104. package/lib/server/modules/quotation/types.d.ts +50 -0
  105. package/lib/server/modules/quotation/types.js +33 -0
  106. package/lib/server/modules/schedule/index.d.ts +62 -0
  107. package/lib/server/modules/schedule/index.js +231 -0
  108. package/lib/server/modules/schedule/types.d.ts +1 -0
  109. package/lib/server/modules/schedule/types.js +23 -0
  110. package/lib/server/modules/schedule/utils.d.ts +32 -0
  111. package/lib/server/modules/schedule/utils.js +451 -0
  112. package/lib/server/types.d.ts +64 -0
  113. package/lib/server/types.js +17 -0
  114. package/lib/server/utils/index.d.ts +5 -0
  115. package/lib/server/utils/index.js +25 -0
  116. package/lib/server/utils/product.d.ts +18 -0
  117. package/lib/server/utils/product.js +262 -0
  118. package/lib/server/utils/schedule.d.ts +14 -0
  119. package/lib/server/utils/schedule.js +88 -0
  120. package/lib/server/utils/time.d.ts +18 -0
  121. package/lib/server/utils/time.js +70 -0
  122. package/lib/solution/BookingByStep/index.d.ts +1 -17
  123. package/lib/solution/BookingByStep/index.js +40 -312
  124. package/lib/solution/BookingByStep/utils/capacity.d.ts +2 -7
  125. package/lib/solution/BookingByStep/utils/capacity.js +8 -21
  126. package/lib/solution/BookingTicket/index.d.ts +12 -0
  127. package/lib/solution/BookingTicket/index.js +25 -6
  128. package/lib/solution/BookingTicket/utils/scan/index.d.ts +4 -0
  129. package/lib/solution/BookingTicket/utils/scan/index.js +7 -1
  130. package/lib/solution/BuyTickets/index.js +7 -8
  131. package/lib/solution/Checkout/index.d.ts +1 -46
  132. package/lib/solution/Checkout/index.js +92 -289
  133. package/lib/solution/ShopDiscount/index.js +10 -11
  134. package/lib/types/index.d.ts +27 -0
  135. package/package.json +2 -2
@@ -0,0 +1,747 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
6
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
8
+ import dayjs from "dayjs";
9
+ // 获取时间是否在日程范围内
10
+ export var getDateIsInSchedule = function getDateIsInSchedule(dateTime, scheduleList) {
11
+ if (!dateTime || !scheduleList || scheduleList.length === 0) {
12
+ return false;
13
+ }
14
+ var targetDate = dayjs(dateTime);
15
+ if (!targetDate.isValid()) {
16
+ return false;
17
+ }
18
+
19
+ // 遍历所有日程项
20
+ var _iterator = _createForOfIteratorHelper(scheduleList),
21
+ _step;
22
+ try {
23
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
24
+ var schedule = _step.value;
25
+ if (isTimeInScheduleItem(dateTime, schedule)) {
26
+ return true;
27
+ }
28
+ }
29
+ } catch (err) {
30
+ _iterator.e(err);
31
+ } finally {
32
+ _iterator.f();
33
+ }
34
+ return false;
35
+ };
36
+
37
+ // 判断时间是否在单个日程项范围内
38
+ var isTimeInScheduleItem = function isTimeInScheduleItem(dateTime, schedule) {
39
+ var targetDate = dayjs(dateTime);
40
+ var targetDateString = dateTime.split(' ')[0]; // YYYY-MM-DD
41
+ var targetTimeString = dateTime.split(' ')[1] || '00:00:00'; // HH:mm:ss
42
+
43
+ switch (schedule.type) {
44
+ case 'standard':
45
+ return isInStandardSchedule(targetDate, targetDateString, targetTimeString, schedule);
46
+ case 'time-slots':
47
+ return isInTimeSlotsSchedule(targetDate, targetDateString, targetTimeString, schedule);
48
+ case 'designation':
49
+ return isInDesignationSchedule(targetDate, targetDateString, targetTimeString, schedule);
50
+ default:
51
+ return false;
52
+ }
53
+ };
54
+
55
+ // 处理标准类型日程
56
+ var isInStandardSchedule = function isInStandardSchedule(targetDate, targetDateString, targetTimeString, schedule) {
57
+ if (!schedule.start_time || !schedule.end_time) {
58
+ return false;
59
+ }
60
+ var startDate = dayjs(schedule.start_time);
61
+ var endDate = dayjs(schedule.end_time);
62
+
63
+ // 先检查是否在基础时间范围内(不考虑重复)
64
+ var isInBasicRange = targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate);
65
+ if (schedule.repeat_type === 'none') {
66
+ return isInBasicRange;
67
+ }
68
+
69
+ // 处理重复日程
70
+ return isInRepeatingSchedule(targetDate, targetDateString, targetTimeString, schedule, startDate, endDate);
71
+ };
72
+
73
+ // 处理时间段类型日程
74
+ var isInTimeSlotsSchedule = function isInTimeSlotsSchedule(targetDate, targetDateString, targetTimeString, schedule) {
75
+ if (!schedule.start_time) {
76
+ return false;
77
+ }
78
+ var scheduleDate = schedule.start_time.split(' ')[0];
79
+
80
+ // 检查日期是否匹配
81
+ if (targetDateString !== scheduleDate) {
82
+ return false;
83
+ }
84
+
85
+ // 检查是否在任一时间段内
86
+ var _iterator2 = _createForOfIteratorHelper(schedule.time_slot),
87
+ _step2;
88
+ try {
89
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
90
+ var timeSlot = _step2.value;
91
+ var slotStart = "".concat(scheduleDate, " ").concat(timeSlot.start_time, ":00");
92
+ var slotEnd = "".concat(scheduleDate, " ").concat(timeSlot.end_time, ":00");
93
+ var slotStartDate = dayjs(slotStart);
94
+ var slotEndDate = dayjs(slotEnd);
95
+ if (targetDate.isSameOrAfter(slotStartDate) && targetDate.isSameOrBefore(slotEndDate)) {
96
+ return true;
97
+ }
98
+ }
99
+ } catch (err) {
100
+ _iterator2.e(err);
101
+ } finally {
102
+ _iterator2.f();
103
+ }
104
+ return false;
105
+ };
106
+
107
+ // 处理指定类型日程
108
+ var isInDesignationSchedule = function isInDesignationSchedule(targetDate, targetDateString, targetTimeString, schedule) {
109
+ if (!schedule.designation) {
110
+ return false;
111
+ }
112
+
113
+ // @ts-ignore
114
+ var _iterator3 = _createForOfIteratorHelper(schedule.designation),
115
+ _step3;
116
+ try {
117
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
118
+ var designation = _step3.value;
119
+ var startDateTime = "".concat(designation.start_date, " ").concat(designation.start_time, ":00");
120
+ var endDateTime = "".concat(designation.end_date, " ").concat(designation.end_time, ":00");
121
+ var startDate = dayjs(startDateTime);
122
+ var endDate = dayjs(endDateTime);
123
+ if (targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate)) {
124
+ return true;
125
+ }
126
+ }
127
+ } catch (err) {
128
+ _iterator3.e(err);
129
+ } finally {
130
+ _iterator3.f();
131
+ }
132
+ return false;
133
+ };
134
+
135
+ // 处理重复日程逻辑
136
+ var isInRepeatingSchedule = function isInRepeatingSchedule(targetDate, targetDateString, targetTimeString, schedule, startDate, endDate) {
137
+ if (!schedule.repeat_rule) {
138
+ return false;
139
+ }
140
+ var repeat_rule = schedule.repeat_rule,
141
+ repeat_type = schedule.repeat_type;
142
+ var targetDateOnly = dayjs(targetDateString); // 只取日期部分
143
+
144
+ // 首先检查是否在包含日期中(包含日期是额外增加的有效日期)
145
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
146
+ var _iterator4 = _createForOfIteratorHelper(repeat_rule.included_date),
147
+ _step4;
148
+ try {
149
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
150
+ var includedDate = _step4.value;
151
+ var includeStartDate = dayjs(includedDate.start);
152
+ var includeEndDate = dayjs(includedDate.end);
153
+ if (targetDateOnly.isSameOrAfter(includeStartDate, 'day') && targetDateOnly.isSameOrBefore(includeEndDate, 'day')) {
154
+ // 在包含日期中,直接返回true,无需检查其他条件
155
+ return true;
156
+ }
157
+ }
158
+ } catch (err) {
159
+ _iterator4.e(err);
160
+ } finally {
161
+ _iterator4.f();
162
+ }
163
+ }
164
+
165
+ // 检查是否在排除日期中
166
+ var _iterator5 = _createForOfIteratorHelper(repeat_rule.excluded_date),
167
+ _step5;
168
+ try {
169
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
170
+ var excludedDate = _step5.value;
171
+ var excludeStartDate = dayjs(excludedDate.start);
172
+ var excludeEndDate = dayjs(excludedDate.end);
173
+ // 检查目标日期是否在排除范围内(包含边界)
174
+ if (targetDateOnly.isSameOrAfter(excludeStartDate, 'day') && targetDateOnly.isSameOrBefore(excludeEndDate, 'day')) {
175
+ return false;
176
+ }
177
+ }
178
+
179
+ // 检查重复规则的结束条件
180
+ } catch (err) {
181
+ _iterator5.e(err);
182
+ } finally {
183
+ _iterator5.f();
184
+ }
185
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
186
+ var ruleEndDate = dayjs(repeat_rule.end.end_date);
187
+ if (targetDate.isAfter(ruleEndDate)) {
188
+ return false;
189
+ }
190
+ }
191
+
192
+ // 根据重复类型检查
193
+ switch (repeat_type) {
194
+ case 'daily':
195
+ return isInDailyRepeat(targetDate, startDate, endDate, repeat_rule);
196
+ case 'weekly':
197
+ return isInWeeklyRepeat(targetDate, startDate, endDate, repeat_rule);
198
+ default:
199
+ return false;
200
+ // 不支持月和年重复
201
+ }
202
+ };
203
+
204
+ // 每日重复逻辑
205
+ var isInDailyRepeat = function isInDailyRepeat(targetDate, startDate, endDate, repeatRule) {
206
+ var daysDiff = targetDate.diff(startDate, 'day');
207
+ if (daysDiff < 0) {
208
+ return false;
209
+ }
210
+
211
+ // 检查频率
212
+ if (daysDiff % repeatRule.frequency !== 0) {
213
+ return false;
214
+ }
215
+
216
+ // 检查时间是否在日程的时间范围内
217
+ var targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
218
+ var startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
219
+ var endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
220
+
221
+ // 每日重复:每天都在相同的时间段内有效
222
+ // 例如:01:00:00 - 16:00:00,每天都是这个时间段
223
+ return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
224
+ };
225
+
226
+ // 每周重复逻辑
227
+ var isInWeeklyRepeat = function isInWeeklyRepeat(targetDate, startDate, endDate, repeatRule) {
228
+ var targetDayOfWeek = targetDate.day(); // 0=周日, 1=周一, ..., 6=周六
229
+
230
+ // 检查是否在指定的星期几内
231
+ if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
232
+ return false;
233
+ }
234
+
235
+ // 计算周差
236
+ var weeksDiff = targetDate.diff(startDate, 'week');
237
+ if (weeksDiff < 0) {
238
+ return false;
239
+ }
240
+
241
+ // 检查频率
242
+ if (weeksDiff % repeatRule.frequency !== 0) {
243
+ return false;
244
+ }
245
+
246
+ // 检查时间是否在日程的时间范围内
247
+ var targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
248
+ var startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
249
+ var endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
250
+ return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
251
+ };
252
+
253
+ // 日程时间段类型
254
+
255
+ /**
256
+ * 获取当前日期日程时间点
257
+ * @param date 日期 YYYY-MM-DD
258
+ * @param scheduleList 日程列表
259
+ * @returns 当前日期日程时间点 结构,数组 [{
260
+ *
261
+ * // HH:mm
262
+ * end_time: string,
263
+ * // HH:mm
264
+ * start_time: string,
265
+ * // 日期时间
266
+ * // YYYY-MM-DD HH:mm:ss
267
+ * end_at: Dayjs,
268
+ * // YYYY-MM-DD HH:mm:ss
269
+ * start_at: Dayjs,
270
+ *
271
+ * }]
272
+ */
273
+ export var getScheduleStartEndTimePoints = function getScheduleStartEndTimePoints(date, scheduleList) {
274
+ if (!date || !scheduleList || scheduleList.length === 0) {
275
+ return [];
276
+ }
277
+ var targetDate = dayjs(date);
278
+ if (!targetDate.isValid()) {
279
+ return [];
280
+ }
281
+ var timeSlots = [];
282
+
283
+ // 遍历所有日程
284
+ var _iterator6 = _createForOfIteratorHelper(scheduleList),
285
+ _step6;
286
+ try {
287
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
288
+ var schedule = _step6.value;
289
+ var slots = extractTimeSlotsFromSchedule(date, schedule);
290
+ timeSlots.push.apply(timeSlots, slots);
291
+ }
292
+
293
+ // 去重并排序时间段
294
+ } catch (err) {
295
+ _iterator6.e(err);
296
+ } finally {
297
+ _iterator6.f();
298
+ }
299
+ return mergeAndSortTimeSlots(timeSlots);
300
+ };
301
+
302
+ /**
303
+ * 从单个日程中提取指定日期的时间段
304
+ */
305
+ var extractTimeSlotsFromSchedule = function extractTimeSlotsFromSchedule(date, schedule) {
306
+ switch (schedule.type) {
307
+ case 'standard':
308
+ return extractStandardScheduleTimeSlots(date, schedule);
309
+ case 'time-slots':
310
+ return extractTimeSlotsScheduleTimeSlots(date, schedule);
311
+ case 'designation':
312
+ return extractDesignationScheduleTimeSlots(date, schedule);
313
+ default:
314
+ return [];
315
+ }
316
+ };
317
+
318
+ /**
319
+ * 提取标准类型日程的时间段
320
+ */
321
+ var extractStandardScheduleTimeSlots = function extractStandardScheduleTimeSlots(date, schedule) {
322
+ if (!schedule.start_time || !schedule.end_time) {
323
+ return [];
324
+ }
325
+ var targetDate = dayjs(date);
326
+ var startDate = dayjs(schedule.start_time);
327
+ var endDate = dayjs(schedule.end_time);
328
+
329
+ // 检查日期是否在日程范围内
330
+ if (!isDateInStandardSchedule(targetDate, schedule, startDate, endDate)) {
331
+ return [];
332
+ }
333
+
334
+ // 提取时间部分
335
+ var startTime = startDate.format('HH:mm');
336
+ var endTime = endDate.format('HH:mm');
337
+
338
+ // 构造完整的日期时间
339
+ var startAt = dayjs("".concat(date, " ").concat(startTime, ":00"));
340
+ var endAt = dayjs("".concat(date, " ").concat(endTime, ":00"));
341
+ return [{
342
+ start_time: startTime,
343
+ end_time: endTime,
344
+ start_at: startAt,
345
+ end_at: endAt
346
+ }];
347
+ };
348
+
349
+ /**
350
+ * 提取时间段类型日程的时间段
351
+ */
352
+ var extractTimeSlotsScheduleTimeSlots = function extractTimeSlotsScheduleTimeSlots(date, schedule) {
353
+ if (!schedule.start_time || !schedule.time_slot || schedule.time_slot.length === 0) {
354
+ return [];
355
+ }
356
+ var targetDate = dayjs(date);
357
+ var scheduleStartDate = dayjs(schedule.start_time.split(' ')[0]);
358
+
359
+ // 检查日期是否在日程的有效范围内(考虑重复规则)
360
+ if (!isDateInTimeSlotsSchedule(targetDate, schedule, scheduleStartDate)) {
361
+ return [];
362
+ }
363
+ var slots = [];
364
+
365
+ // 提取所有时间段
366
+ var _iterator7 = _createForOfIteratorHelper(schedule.time_slot),
367
+ _step7;
368
+ try {
369
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
370
+ var timeSlot = _step7.value;
371
+ if (!timeSlot.start_time || !timeSlot.end_time) {
372
+ continue;
373
+ }
374
+ var startAt = dayjs("".concat(date, " ").concat(timeSlot.start_time, ":00"));
375
+ var endAt = dayjs("".concat(date, " ").concat(timeSlot.end_time, ":00"));
376
+ slots.push({
377
+ start_time: timeSlot.start_time,
378
+ end_time: timeSlot.end_time,
379
+ start_at: startAt,
380
+ end_at: endAt
381
+ });
382
+ }
383
+ } catch (err) {
384
+ _iterator7.e(err);
385
+ } finally {
386
+ _iterator7.f();
387
+ }
388
+ return slots;
389
+ };
390
+
391
+ /**
392
+ * 检查日期是否在时间段类型日程范围内
393
+ */
394
+ var isDateInTimeSlotsSchedule = function isDateInTimeSlotsSchedule(targetDate, schedule, scheduleStartDate) {
395
+ // 不重复的日程
396
+ if (schedule.repeat_type === 'none') {
397
+ // 只在 start_time 的日期有效
398
+ return targetDate.isSame(scheduleStartDate, 'day');
399
+ }
400
+
401
+ // 重复的日程,需要检查重复规则
402
+ if (!schedule.repeat_rule) {
403
+ return false;
404
+ }
405
+ var repeat_rule = schedule.repeat_rule,
406
+ repeat_type = schedule.repeat_type;
407
+
408
+ // 检查是否在包含日期中(优先级最高)
409
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
410
+ var _iterator8 = _createForOfIteratorHelper(repeat_rule.included_date),
411
+ _step8;
412
+ try {
413
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
414
+ var includedDate = _step8.value;
415
+ var includeStartDate = dayjs(includedDate.start);
416
+ var includeEndDate = dayjs(includedDate.end);
417
+ if (targetDate.isSameOrAfter(includeStartDate, 'day') && targetDate.isSameOrBefore(includeEndDate, 'day')) {
418
+ return true;
419
+ }
420
+ }
421
+ } catch (err) {
422
+ _iterator8.e(err);
423
+ } finally {
424
+ _iterator8.f();
425
+ }
426
+ }
427
+
428
+ // 检查是否在排除日期中
429
+ if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
430
+ var _iterator9 = _createForOfIteratorHelper(repeat_rule.excluded_date),
431
+ _step9;
432
+ try {
433
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
434
+ var excludedDate = _step9.value;
435
+ var excludeStartDate = dayjs(excludedDate.start);
436
+ var excludeEndDate = dayjs(excludedDate.end);
437
+ if (targetDate.isSameOrAfter(excludeStartDate, 'day') && targetDate.isSameOrBefore(excludeEndDate, 'day')) {
438
+ return false;
439
+ }
440
+ }
441
+ } catch (err) {
442
+ _iterator9.e(err);
443
+ } finally {
444
+ _iterator9.f();
445
+ }
446
+ }
447
+
448
+ // 检查重复规则的结束条件
449
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
450
+ var ruleEndDate = dayjs(repeat_rule.end.end_date);
451
+ if (targetDate.isAfter(ruleEndDate, 'day')) {
452
+ return false;
453
+ }
454
+ }
455
+
456
+ // 检查是否在开始日期之前
457
+ if (targetDate.isBefore(scheduleStartDate, 'day')) {
458
+ return false;
459
+ }
460
+
461
+ // 根据重复类型检查
462
+ switch (repeat_type) {
463
+ case 'daily':
464
+ return isDateInDailyRepeat(targetDate, scheduleStartDate, repeat_rule);
465
+ case 'weekly':
466
+ return isDateInWeeklyRepeat(targetDate, scheduleStartDate, repeat_rule);
467
+ default:
468
+ return false;
469
+ }
470
+ };
471
+
472
+ /**
473
+ * 提取指定日期类型日程的时间段
474
+ */
475
+ var extractDesignationScheduleTimeSlots = function extractDesignationScheduleTimeSlots(date, schedule) {
476
+ if (!schedule.designation) {
477
+ return [];
478
+ }
479
+ var targetDate = dayjs(date);
480
+ var designations = Array.isArray(schedule.designation) ? schedule.designation : [schedule.designation];
481
+ var slots = [];
482
+ var _iterator10 = _createForOfIteratorHelper(designations),
483
+ _step10;
484
+ try {
485
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
486
+ var designation = _step10.value;
487
+ var startDate = dayjs(designation.start_date);
488
+ var endDate = dayjs(designation.end_date);
489
+
490
+ // 检查日期是否在指定范围内(考虑重复规则)
491
+ if (isDateInDesignationSchedule(targetDate, schedule, designation, startDate, endDate)) {
492
+ var startAt = dayjs("".concat(date, " ").concat(designation.start_time, ":00"));
493
+ var endAt = dayjs("".concat(date, " ").concat(designation.end_time, ":00"));
494
+ slots.push({
495
+ start_time: designation.start_time,
496
+ end_time: designation.end_time,
497
+ start_at: startAt,
498
+ end_at: endAt
499
+ });
500
+ }
501
+ }
502
+ } catch (err) {
503
+ _iterator10.e(err);
504
+ } finally {
505
+ _iterator10.f();
506
+ }
507
+ return slots;
508
+ };
509
+
510
+ /**
511
+ * 检查日期是否在指定日期类型日程范围内
512
+ */
513
+ var isDateInDesignationSchedule = function isDateInDesignationSchedule(targetDate, schedule, designation, startDate, endDate) {
514
+ // 不重复的日程
515
+ if (schedule.repeat_type === 'none') {
516
+ // 检查日期是否在指定的日期范围内
517
+ return targetDate.isSameOrAfter(startDate, 'day') && targetDate.isSameOrBefore(endDate, 'day');
518
+ }
519
+
520
+ // 重复的日程,需要检查重复规则
521
+ if (!schedule.repeat_rule) {
522
+ return false;
523
+ }
524
+ var repeat_rule = schedule.repeat_rule,
525
+ repeat_type = schedule.repeat_type;
526
+
527
+ // 检查是否在包含日期中(优先级最高)
528
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
529
+ var _iterator11 = _createForOfIteratorHelper(repeat_rule.included_date),
530
+ _step11;
531
+ try {
532
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
533
+ var includedDate = _step11.value;
534
+ var includeStartDate = dayjs(includedDate.start);
535
+ var includeEndDate = dayjs(includedDate.end);
536
+ if (targetDate.isSameOrAfter(includeStartDate, 'day') && targetDate.isSameOrBefore(includeEndDate, 'day')) {
537
+ return true;
538
+ }
539
+ }
540
+ } catch (err) {
541
+ _iterator11.e(err);
542
+ } finally {
543
+ _iterator11.f();
544
+ }
545
+ }
546
+
547
+ // 检查是否在排除日期中
548
+ if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
549
+ var _iterator12 = _createForOfIteratorHelper(repeat_rule.excluded_date),
550
+ _step12;
551
+ try {
552
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
553
+ var excludedDate = _step12.value;
554
+ var excludeStartDate = dayjs(excludedDate.start);
555
+ var excludeEndDate = dayjs(excludedDate.end);
556
+ if (targetDate.isSameOrAfter(excludeStartDate, 'day') && targetDate.isSameOrBefore(excludeEndDate, 'day')) {
557
+ return false;
558
+ }
559
+ }
560
+ } catch (err) {
561
+ _iterator12.e(err);
562
+ } finally {
563
+ _iterator12.f();
564
+ }
565
+ }
566
+
567
+ // 检查重复规则的结束条件
568
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
569
+ var ruleEndDate = dayjs(repeat_rule.end.end_date);
570
+ if (targetDate.isAfter(ruleEndDate, 'day')) {
571
+ return false;
572
+ }
573
+ }
574
+
575
+ // 检查是否在基本日期范围内
576
+ if (!targetDate.isSameOrAfter(startDate, 'day') || !targetDate.isSameOrBefore(endDate, 'day')) {
577
+ // 对于重复日程,如果不在基本范围内,还需要检查是否符合重复规则
578
+ // 只要在 startDate 之后,并且符合重复规则即可
579
+ if (targetDate.isBefore(startDate, 'day')) {
580
+ return false;
581
+ }
582
+ }
583
+
584
+ // 根据重复类型检查
585
+ switch (repeat_type) {
586
+ case 'daily':
587
+ return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
588
+ case 'weekly':
589
+ return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
590
+ default:
591
+ return false;
592
+ }
593
+ };
594
+
595
+ /**
596
+ * 检查日期是否在标准日程范围内
597
+ */
598
+ var isDateInStandardSchedule = function isDateInStandardSchedule(targetDate, schedule, startDate, endDate) {
599
+ var targetDateString = targetDate.format('YYYY-MM-DD');
600
+
601
+ // 不重复的日程
602
+ if (schedule.repeat_type === 'none') {
603
+ // 检查日期是否在范围内
604
+ var scheduleStartDate = startDate.format('YYYY-MM-DD');
605
+ var scheduleEndDate = endDate.format('YYYY-MM-DD');
606
+ return targetDate.isSameOrAfter(scheduleStartDate, 'day') && targetDate.isSameOrBefore(scheduleEndDate, 'day');
607
+ }
608
+
609
+ // 重复的日程,需要检查重复规则
610
+ if (!schedule.repeat_rule) {
611
+ return false;
612
+ }
613
+ var repeat_rule = schedule.repeat_rule,
614
+ repeat_type = schedule.repeat_type;
615
+
616
+ // 检查是否在包含日期中
617
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
618
+ var _iterator13 = _createForOfIteratorHelper(repeat_rule.included_date),
619
+ _step13;
620
+ try {
621
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
622
+ var includedDate = _step13.value;
623
+ var includeStartDate = dayjs(includedDate.start);
624
+ var includeEndDate = dayjs(includedDate.end);
625
+ if (targetDate.isSameOrAfter(includeStartDate, 'day') && targetDate.isSameOrBefore(includeEndDate, 'day')) {
626
+ return true;
627
+ }
628
+ }
629
+ } catch (err) {
630
+ _iterator13.e(err);
631
+ } finally {
632
+ _iterator13.f();
633
+ }
634
+ }
635
+
636
+ // 检查是否在排除日期中
637
+ var _iterator14 = _createForOfIteratorHelper(repeat_rule.excluded_date),
638
+ _step14;
639
+ try {
640
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
641
+ var excludedDate = _step14.value;
642
+ var excludeStartDate = dayjs(excludedDate.start);
643
+ var excludeEndDate = dayjs(excludedDate.end);
644
+ if (targetDate.isSameOrAfter(excludeStartDate, 'day') && targetDate.isSameOrBefore(excludeEndDate, 'day')) {
645
+ return false;
646
+ }
647
+ }
648
+
649
+ // 检查重复规则的结束条件
650
+ } catch (err) {
651
+ _iterator14.e(err);
652
+ } finally {
653
+ _iterator14.f();
654
+ }
655
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
656
+ var ruleEndDate = dayjs(repeat_rule.end.end_date);
657
+ if (targetDate.isAfter(ruleEndDate, 'day')) {
658
+ return false;
659
+ }
660
+ }
661
+
662
+ // 检查是否在开始日期之前
663
+ if (targetDate.isBefore(startDate, 'day')) {
664
+ return false;
665
+ }
666
+
667
+ // 根据重复类型检查
668
+ switch (repeat_type) {
669
+ case 'daily':
670
+ return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
671
+ case 'weekly':
672
+ return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
673
+ default:
674
+ return false;
675
+ }
676
+ };
677
+
678
+ /**
679
+ * 检查日期是否符合每日重复规则
680
+ */
681
+ var isDateInDailyRepeat = function isDateInDailyRepeat(targetDate, startDate, repeatRule) {
682
+ var daysDiff = targetDate.diff(startDate, 'day');
683
+ if (daysDiff < 0) {
684
+ return false;
685
+ }
686
+
687
+ // 检查频率
688
+ return daysDiff % repeatRule.frequency === 0;
689
+ };
690
+
691
+ /**
692
+ * 检查日期是否符合每周重复规则
693
+ */
694
+ var isDateInWeeklyRepeat = function isDateInWeeklyRepeat(targetDate, startDate, repeatRule) {
695
+ var targetDayOfWeek = targetDate.day(); // 0=周日, 1=周一, ..., 6=周六
696
+
697
+ // 检查是否在指定的星期几内
698
+ if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
699
+ return false;
700
+ }
701
+
702
+ // 计算周差
703
+ var weeksDiff = targetDate.diff(startDate, 'week');
704
+ if (weeksDiff < 0) {
705
+ return false;
706
+ }
707
+
708
+ // 检查频率
709
+ return weeksDiff % repeatRule.frequency === 0;
710
+ };
711
+
712
+ /**
713
+ * 对时间段去重并排序
714
+ * 只移除开始时间和结束时间完全相同的重复时间段
715
+ */
716
+ var mergeAndSortTimeSlots = function mergeAndSortTimeSlots(slots) {
717
+ if (slots.length === 0) {
718
+ return [];
719
+ }
720
+
721
+ // 按开始时间排序
722
+ var sorted = _toConsumableArray(slots).sort(function (a, b) {
723
+ return a.start_at.valueOf() - b.start_at.valueOf();
724
+ });
725
+
726
+ // 去重:移除开始和结束时间完全相同的时间段
727
+ var unique = [];
728
+ var seenKeys = new Set();
729
+ var _iterator15 = _createForOfIteratorHelper(sorted),
730
+ _step15;
731
+ try {
732
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
733
+ var slot = _step15.value;
734
+ // 使用开始时间和结束时间作为唯一键
735
+ var key = "".concat(slot.start_time, "-").concat(slot.end_time);
736
+ if (!seenKeys.has(key)) {
737
+ seenKeys.add(key);
738
+ unique.push(slot);
739
+ }
740
+ }
741
+ } catch (err) {
742
+ _iterator15.e(err);
743
+ } finally {
744
+ _iterator15.f();
745
+ }
746
+ return unique;
747
+ };