@pisell/pisellos 2.2.282 → 2.2.284

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 (285) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.js +0 -2
  10. package/dist/modules/Order/index.d.ts +2 -2
  11. package/dist/modules/Order/index.js +75 -91
  12. package/dist/modules/Order/types.d.ts +3 -1
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Rules/index.js +1 -4
  15. package/dist/modules/Schedule/index.js +0 -1
  16. package/dist/modules/Schedule/utils.js +0 -1
  17. package/dist/modules/Step/index.js +0 -1
  18. package/dist/modules/Summary/utils.d.ts +1 -1
  19. package/dist/plugins/request.js +1 -4
  20. package/dist/plugins/window.js +2 -6
  21. package/dist/server/index.js +97 -129
  22. package/dist/server/modules/menu/index.js +32 -41
  23. package/dist/server/modules/order/index.js +2 -4
  24. package/dist/server/modules/products/index.js +24 -42
  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 +27 -35
  28. package/dist/server/utils/product.js +0 -1
  29. package/dist/solution/BaseSales/index.js +100 -72
  30. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  31. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  32. package/dist/solution/BookingByStep/index.d.ts +1 -1
  33. package/dist/solution/BookingByStep/index.js +7 -59
  34. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  35. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  36. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  37. package/dist/solution/BookingTicket/index.js +8 -4
  38. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  39. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  40. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  41. package/dist/solution/BuyTickets/index.js +9 -12
  42. package/dist/solution/Checkout/index.js +177 -252
  43. package/dist/solution/Checkout/utils/index.js +4 -16
  44. package/dist/solution/RegisterAndLogin/index.js +30 -76
  45. package/dist/solution/ScanOrder/index.js +50 -60
  46. package/dist/solution/ShopDiscount/index.js +2 -7
  47. package/dist/solution/VenueBooking/index.js +45 -55
  48. package/dist/utils/task.js +15 -18
  49. package/dist/utils/watch.js +0 -1
  50. package/lib/apis/picoding.js +2 -0
  51. package/lib/core/index.js +131 -131
  52. package/lib/effects/index.js +46 -57
  53. package/lib/index.js +82 -49
  54. package/lib/model/index.js +14 -21
  55. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  56. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  57. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  58. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  59. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  60. package/lib/model/strategy/adapter/index.js +100 -64
  61. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  62. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  63. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  64. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  65. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  66. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  67. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  68. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  69. package/lib/model/strategy/adapter/promotion/index.js +1 -51
  70. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  71. package/lib/model/strategy/adapter/type.js +4 -16
  72. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  73. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  74. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  75. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  76. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  77. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  78. package/lib/model/strategy/engine.js +270 -168
  79. package/lib/model/strategy/index.js +49 -34
  80. package/lib/model/strategy/strategy-example.js +243 -239
  81. package/lib/model/strategy/type.js +100 -40
  82. package/lib/modules/Account/index.js +39 -53
  83. package/lib/modules/Account/types.js +20 -33
  84. package/lib/modules/AccountList/index.js +116 -154
  85. package/lib/modules/AccountList/types.js +30 -31
  86. package/lib/modules/AccountList/utils.js +18 -30
  87. package/lib/modules/BaseModule.js +23 -42
  88. package/lib/modules/BookingContext/index.js +158 -136
  89. package/lib/modules/BookingContext/types.js +46 -32
  90. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  91. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  92. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  93. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  94. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  95. package/lib/modules/BookingContext/utils/index.js +124 -41
  96. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  97. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  98. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  99. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  100. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  101. package/lib/modules/BookingContext/utils/resources.js +209 -167
  102. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  103. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  104. package/lib/modules/Cart/index.js +170 -124
  105. package/lib/modules/Cart/types.js +46 -51
  106. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  107. package/lib/modules/Cart/utils/cartDate.js +56 -61
  108. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  109. package/lib/modules/Cart/utils/cartNote.js +27 -32
  110. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  111. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  112. package/lib/modules/Cart/utils/cartResource.js +70 -78
  113. package/lib/modules/Cart/utils/changePrice.js +22 -50
  114. package/lib/modules/Cart/utils/index.js +106 -48
  115. package/lib/modules/Customer/constants.js +13 -34
  116. package/lib/modules/Customer/index.js +235 -172
  117. package/lib/modules/Customer/types.js +38 -35
  118. package/lib/modules/Date/index.js +116 -115
  119. package/lib/modules/Date/types.js +16 -28
  120. package/lib/modules/Date/utils.js +174 -123
  121. package/lib/modules/Discount/index.js +122 -127
  122. package/lib/modules/Discount/types.js +9 -31
  123. package/lib/modules/Guests/index.js +30 -56
  124. package/lib/modules/Guests/types.js +23 -33
  125. package/lib/modules/Holder/index.js +209 -189
  126. package/lib/modules/Holder/types.js +4 -16
  127. package/lib/modules/Holder/utils.js +20 -49
  128. package/lib/modules/OpenData/index.js +70 -76
  129. package/lib/modules/OpenData/types.js +4 -16
  130. package/lib/modules/OpenData/utils.js +44 -78
  131. package/lib/modules/Order/index.d.ts +2 -2
  132. package/lib/modules/Order/index.js +1733 -2121
  133. package/lib/modules/Order/payment-utils.js +77 -120
  134. package/lib/modules/Order/types.d.ts +3 -1
  135. package/lib/modules/Order/types.js +87 -35
  136. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  137. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  138. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  139. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  140. package/lib/modules/Order/utils.js +814 -647
  141. package/lib/modules/Payment/cash.js +20 -33
  142. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  143. package/lib/modules/Payment/eftpos.js +16 -30
  144. package/lib/modules/Payment/index.js +532 -399
  145. package/lib/modules/Payment/mx51.js +1 -0
  146. package/lib/modules/Payment/types.js +230 -108
  147. package/lib/modules/Payment/utils.js +52 -51
  148. package/lib/modules/Payment/walletpass.js +485 -660
  149. package/lib/modules/Product/index.js +51 -46
  150. package/lib/modules/Product/types.js +4 -16
  151. package/lib/modules/Product/utils.js +32 -33
  152. package/lib/modules/ProductList/index.js +113 -123
  153. package/lib/modules/ProductList/types.js +9 -31
  154. package/lib/modules/Quotation/index.js +66 -100
  155. package/lib/modules/Quotation/types.js +4 -16
  156. package/lib/modules/Resource/index.js +27 -59
  157. package/lib/modules/Resource/types.js +22 -32
  158. package/lib/modules/Resource/utils.js +30 -38
  159. package/lib/modules/ResourcePlanner/index.js +60 -61
  160. package/lib/modules/ResourcePlanner/planner.js +346 -384
  161. package/lib/modules/ResourcePlanner/types.js +4 -16
  162. package/lib/modules/Rules/index.js +1218 -959
  163. package/lib/modules/Rules/types.js +17 -40
  164. package/lib/modules/SalesSummary/index.js +85 -90
  165. package/lib/modules/SalesSummary/types.js +4 -16
  166. package/lib/modules/SalesSummary/utils.js +355 -430
  167. package/lib/modules/ScanOrderLogger/index.js +59 -79
  168. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  169. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  170. package/lib/modules/ScanOrderLogger/types.js +4 -16
  171. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  172. package/lib/modules/Schedule/index.js +100 -114
  173. package/lib/modules/Schedule/type.js +4 -16
  174. package/lib/modules/Schedule/types.js +4 -16
  175. package/lib/modules/Schedule/utils.js +433 -291
  176. package/lib/modules/Step/index.js +40 -52
  177. package/lib/modules/Step/tyeps.js +4 -16
  178. package/lib/modules/Summary/index.js +66 -71
  179. package/lib/modules/Summary/types.js +4 -16
  180. package/lib/modules/Summary/utils.d.ts +1 -1
  181. package/lib/modules/Summary/utils.js +773 -418
  182. package/lib/modules/SurchargeList/index.js +46 -60
  183. package/lib/modules/SurchargeList/types.js +4 -16
  184. package/lib/modules/index.js +245 -63
  185. package/lib/plugins/app.js +4 -16
  186. package/lib/plugins/index.js +36 -25
  187. package/lib/plugins/request.js +137 -126
  188. package/lib/plugins/shopStore.js +4 -16
  189. package/lib/plugins/user.js +4 -16
  190. package/lib/plugins/window.js +171 -179
  191. package/lib/server/index.js +3027 -2655
  192. package/lib/server/modules/floor-plan/index.js +102 -123
  193. package/lib/server/modules/floor-plan/types.js +15 -30
  194. package/lib/server/modules/index.js +106 -68
  195. package/lib/server/modules/menu/index.js +146 -122
  196. package/lib/server/modules/menu/types.js +18 -31
  197. package/lib/server/modules/order/index.js +758 -956
  198. package/lib/server/modules/order/types.js +122 -33
  199. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  200. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  201. package/lib/server/modules/payment/index.js +59 -83
  202. package/lib/server/modules/payment/types.js +4 -16
  203. package/lib/server/modules/products/index.js +575 -459
  204. package/lib/server/modules/products/types.js +44 -34
  205. package/lib/server/modules/quotation/index.js +137 -172
  206. package/lib/server/modules/quotation/types.js +21 -31
  207. package/lib/server/modules/resource/index.js +213 -184
  208. package/lib/server/modules/resource/types.js +42 -33
  209. package/lib/server/modules/schedule/index.js +135 -123
  210. package/lib/server/modules/schedule/types.js +14 -21
  211. package/lib/server/modules/schedule/utils.js +334 -163
  212. package/lib/server/types.js +4 -16
  213. package/lib/server/utils/index.js +25 -23
  214. package/lib/server/utils/product.js +196 -139
  215. package/lib/server/utils/schedule.js +34 -41
  216. package/lib/server/utils/small-ticket.js +479 -456
  217. package/lib/server/utils/time.js +40 -49
  218. package/lib/solution/BaseSales/index.js +1209 -1412
  219. package/lib/solution/BaseSales/types.js +42 -38
  220. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  221. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  222. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  223. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  224. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  225. package/lib/solution/BaseSales/utils.js +158 -143
  226. package/lib/solution/BookingByStep/index.d.ts +1 -1
  227. package/lib/solution/BookingByStep/index.js +1527 -1340
  228. package/lib/solution/BookingByStep/types.js +40 -99
  229. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  230. package/lib/solution/BookingByStep/utils/products.js +42 -52
  231. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  232. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  233. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  234. package/lib/solution/BookingTicket/index.js +598 -514
  235. package/lib/solution/BookingTicket/types.js +99 -77
  236. package/lib/solution/BookingTicket/utils/addProductDecision.js +225 -187
  237. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  238. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  239. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  240. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  241. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  242. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  243. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  244. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  245. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  246. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  247. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  248. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  249. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  250. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  251. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  252. package/lib/solution/BuyTickets/index.js +67 -70
  253. package/lib/solution/BuyTickets/types.js +22 -38
  254. package/lib/solution/Checkout/index.js +1451 -1158
  255. package/lib/solution/Checkout/types.js +91 -61
  256. package/lib/solution/Checkout/utils/index.js +228 -156
  257. package/lib/solution/PlaceOrder/index.js +55 -0
  258. package/lib/solution/RegisterAndLogin/config.js +493 -460
  259. package/lib/solution/RegisterAndLogin/index.js +633 -630
  260. package/lib/solution/RegisterAndLogin/types.js +189 -76
  261. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  262. package/lib/solution/Sales/index.js +328 -324
  263. package/lib/solution/Sales/types.js +27 -33
  264. package/lib/solution/ScanOrder/index.js +832 -864
  265. package/lib/solution/ScanOrder/types.js +33 -34
  266. package/lib/solution/ScanOrder/utils.js +409 -374
  267. package/lib/solution/ShopDiscount/index.js +226 -232
  268. package/lib/solution/ShopDiscount/types.js +15 -37
  269. package/lib/solution/ShopDiscount/utils.js +300 -172
  270. package/lib/solution/UnifiedBookingSales/index.js +437 -487
  271. package/lib/solution/UnifiedBookingSales/types.js +12 -31
  272. package/lib/solution/VenueBooking/index.js +811 -879
  273. package/lib/solution/VenueBooking/types.js +19 -39
  274. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  275. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  276. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  277. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  278. package/lib/solution/VenueBooking/utils.js +130 -67
  279. package/lib/solution/index.js +124 -41
  280. package/lib/store/createStore.js +32 -29
  281. package/lib/types/index.js +4 -16
  282. package/lib/utils/payment-number.js +26 -46
  283. package/lib/utils/task.js +36 -36
  284. package/lib/utils/watch.js +81 -47
  285. package/package.json +2 -1
@@ -1,47 +1,22 @@
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);
28
-
29
- // src/server/modules/schedule/utils.ts
30
- var utils_exports = {};
31
- __export(utils_exports, {
32
- getDateIsInSchedule: () => getDateIsInSchedule,
33
- getScheduleStartEndTimePoints: () => getScheduleStartEndTimePoints
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
34
5
  });
35
- module.exports = __toCommonJS(utils_exports);
36
- var import_dayjs = __toESM(require("dayjs"));
37
- var getDateIsInSchedule = (dateTime, scheduleList) => {
6
+ exports.getScheduleStartEndTimePoints = exports.getDateIsInSchedule = void 0;
7
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ // 获取时间是否在日程范围内
10
+ const getDateIsInSchedule = (dateTime, scheduleList) => {
38
11
  if (!dateTime || !scheduleList || scheduleList.length === 0) {
39
12
  return false;
40
13
  }
41
- const targetDate = (0, import_dayjs.default)(dateTime);
14
+ const targetDate = (0, _dayjs.default)(dateTime);
42
15
  if (!targetDate.isValid()) {
43
16
  return false;
44
17
  }
18
+
19
+ // 遍历所有日程项
45
20
  for (const schedule of scheduleList) {
46
21
  if (isTimeInScheduleItem(dateTime, schedule)) {
47
22
  return true;
@@ -49,175 +24,270 @@ var getDateIsInSchedule = (dateTime, scheduleList) => {
49
24
  }
50
25
  return false;
51
26
  };
52
- var isTimeInScheduleItem = (dateTime, schedule) => {
53
- const targetDate = (0, import_dayjs.default)(dateTime);
54
- const targetDateString = dateTime.split(" ")[0];
55
- const targetTimeString = dateTime.split(" ")[1] || "00:00:00";
27
+
28
+ // 判断时间是否在单个日程项范围内
29
+ exports.getDateIsInSchedule = getDateIsInSchedule;
30
+ const isTimeInScheduleItem = (dateTime, schedule) => {
31
+ const targetDate = (0, _dayjs.default)(dateTime);
32
+ const targetDateString = dateTime.split(' ')[0]; // YYYY-MM-DD
33
+ const targetTimeString = dateTime.split(' ')[1] || '00:00:00'; // HH:mm:ss
34
+
56
35
  switch (schedule.type) {
57
- case "standard":
36
+ case 'standard':
58
37
  return isInStandardSchedule(targetDate, targetDateString, targetTimeString, schedule);
59
- case "time-slots":
38
+ case 'time-slots':
60
39
  return isInTimeSlotsSchedule(targetDate, targetDateString, targetTimeString, schedule);
61
- case "designation":
40
+ case 'designation':
62
41
  return isInDesignationSchedule(targetDate, targetDateString, targetTimeString, schedule);
63
42
  default:
64
43
  return false;
65
44
  }
66
45
  };
67
- var isInStandardSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
46
+
47
+ // 处理标准类型日程
48
+ const isInStandardSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
68
49
  if (!schedule.start_time || !schedule.end_time) {
69
50
  return false;
70
51
  }
71
- const startDate = (0, import_dayjs.default)(schedule.start_time);
72
- const endDate = (0, import_dayjs.default)(schedule.end_time);
52
+ const startDate = (0, _dayjs.default)(schedule.start_time);
53
+ const endDate = (0, _dayjs.default)(schedule.end_time);
54
+
55
+ // 先检查是否在基础时间范围内(不考虑重复)
73
56
  const isInBasicRange = targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate);
74
- if (schedule.repeat_type === "none") {
57
+ if (schedule.repeat_type === 'none') {
75
58
  return isInBasicRange;
76
59
  }
60
+
61
+ // 处理重复日程
77
62
  return isInRepeatingSchedule(targetDate, targetDateString, targetTimeString, schedule, startDate, endDate);
78
63
  };
79
- var isInTimeSlotsSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
64
+
65
+ // 处理时间段类型日程
66
+ const isInTimeSlotsSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
80
67
  if (!schedule.start_time) {
81
68
  return false;
82
69
  }
83
- const scheduleDate = schedule.start_time.split(" ")[0];
70
+ const scheduleDate = schedule.start_time.split(' ')[0];
71
+
72
+ // 检查日期是否匹配
84
73
  if (targetDateString !== scheduleDate) {
85
74
  return false;
86
75
  }
76
+
77
+ // 检查是否在任一时间段内
87
78
  for (const timeSlot of schedule.time_slot) {
88
79
  const slotStart = `${scheduleDate} ${timeSlot.start_time}:00`;
89
80
  const slotEnd = `${scheduleDate} ${timeSlot.end_time}:00`;
90
- const slotStartDate = (0, import_dayjs.default)(slotStart);
91
- const slotEndDate = (0, import_dayjs.default)(slotEnd);
81
+ const slotStartDate = (0, _dayjs.default)(slotStart);
82
+ const slotEndDate = (0, _dayjs.default)(slotEnd);
92
83
  if (targetDate.isSameOrAfter(slotStartDate) && targetDate.isSameOrBefore(slotEndDate)) {
93
84
  return true;
94
85
  }
95
86
  }
96
87
  return false;
97
88
  };
98
- var isInDesignationSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
89
+
90
+ // 处理指定类型日程
91
+ const isInDesignationSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
99
92
  if (!schedule.designation) {
100
93
  return false;
101
94
  }
95
+
96
+ // @ts-ignore
102
97
  for (const designation of schedule.designation) {
103
98
  const startDateTime = `${designation.start_date} ${designation.start_time}:00`;
104
99
  const endDateTime = `${designation.end_date} ${designation.end_time}:00`;
105
- const startDate = (0, import_dayjs.default)(startDateTime);
106
- const endDate = (0, import_dayjs.default)(endDateTime);
100
+ const startDate = (0, _dayjs.default)(startDateTime);
101
+ const endDate = (0, _dayjs.default)(endDateTime);
107
102
  if (targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate)) {
108
103
  return true;
109
104
  }
110
105
  }
111
106
  return false;
112
107
  };
113
- var isInRepeatingSchedule = (targetDate, targetDateString, targetTimeString, schedule, startDate, endDate) => {
108
+
109
+ // 处理重复日程逻辑
110
+ const isInRepeatingSchedule = (targetDate, targetDateString, targetTimeString, schedule, startDate, endDate) => {
114
111
  if (!schedule.repeat_rule) {
115
112
  return false;
116
113
  }
117
- const { repeat_rule, repeat_type } = schedule;
118
- const targetDateOnly = (0, import_dayjs.default)(targetDateString);
114
+ const {
115
+ repeat_rule,
116
+ repeat_type
117
+ } = schedule;
118
+ const targetDateOnly = (0, _dayjs.default)(targetDateString); // 只取日期部分
119
+
120
+ // 首先检查是否在包含日期中(包含日期是额外增加的有效日期)
119
121
  if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
120
122
  for (const includedDate of repeat_rule.included_date) {
121
- const includeStartDate = (0, import_dayjs.default)(includedDate.start);
122
- const includeEndDate = (0, import_dayjs.default)(includedDate.end);
123
- if (targetDateOnly.isSameOrAfter(includeStartDate, "day") && targetDateOnly.isSameOrBefore(includeEndDate, "day")) {
123
+ const includeStartDate = (0, _dayjs.default)(includedDate.start);
124
+ const includeEndDate = (0, _dayjs.default)(includedDate.end);
125
+ if (targetDateOnly.isSameOrAfter(includeStartDate, 'day') && targetDateOnly.isSameOrBefore(includeEndDate, 'day')) {
126
+ // 在包含日期中,直接返回true,无需检查其他条件
124
127
  return true;
125
128
  }
126
129
  }
127
130
  }
131
+
132
+ // 检查是否在排除日期中
128
133
  for (const excludedDate of repeat_rule.excluded_date) {
129
- const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
130
- const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
131
- if (targetDateOnly.isSameOrAfter(excludeStartDate, "day") && targetDateOnly.isSameOrBefore(excludeEndDate, "day")) {
134
+ const excludeStartDate = (0, _dayjs.default)(excludedDate.start);
135
+ const excludeEndDate = (0, _dayjs.default)(excludedDate.end);
136
+ // 检查目标日期是否在排除范围内(包含边界)
137
+ if (targetDateOnly.isSameOrAfter(excludeStartDate, 'day') && targetDateOnly.isSameOrBefore(excludeEndDate, 'day')) {
132
138
  return false;
133
139
  }
134
140
  }
135
- if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
136
- const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
141
+
142
+ // 检查重复规则的结束条件
143
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
144
+ const ruleEndDate = (0, _dayjs.default)(repeat_rule.end.end_date);
137
145
  if (targetDate.isAfter(ruleEndDate)) {
138
146
  return false;
139
147
  }
140
148
  }
149
+
150
+ // 根据重复类型检查
141
151
  switch (repeat_type) {
142
- case "daily":
152
+ case 'daily':
143
153
  return isInDailyRepeat(targetDate, startDate, endDate, repeat_rule);
144
- case "weekly":
154
+ case 'weekly':
145
155
  return isInWeeklyRepeat(targetDate, startDate, endDate, repeat_rule);
146
156
  default:
147
157
  return false;
158
+ // 不支持月和年重复
148
159
  }
149
160
  };
150
- var isInDailyRepeat = (targetDate, startDate, endDate, repeatRule) => {
151
- const daysDiff = targetDate.diff(startDate, "day");
161
+
162
+ // 每日重复逻辑
163
+ const isInDailyRepeat = (targetDate, startDate, endDate, repeatRule) => {
164
+ const daysDiff = targetDate.diff(startDate, 'day');
152
165
  if (daysDiff < 0) {
153
166
  return false;
154
167
  }
168
+
169
+ // 检查频率
155
170
  if (daysDiff % repeatRule.frequency !== 0) {
156
171
  return false;
157
172
  }
173
+
174
+ // 检查时间是否在日程的时间范围内
158
175
  const targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
159
176
  const startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
160
177
  const endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
178
+
179
+ // 每日重复:每天都在相同的时间段内有效
180
+ // 例如:01:00:00 - 16:00:00,每天都是这个时间段
161
181
  return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
162
182
  };
163
- var isInWeeklyRepeat = (targetDate, startDate, endDate, repeatRule) => {
164
- const targetDayOfWeek = targetDate.day();
183
+
184
+ // 每周重复逻辑
185
+ const isInWeeklyRepeat = (targetDate, startDate, endDate, repeatRule) => {
186
+ const targetDayOfWeek = targetDate.day(); // 0=周日, 1=周一, ..., 6=周六
187
+
188
+ // 检查是否在指定的星期几内
165
189
  if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
166
190
  return false;
167
191
  }
168
- const weeksDiff = targetDate.diff(startDate, "week");
192
+
193
+ // 计算周差
194
+ const weeksDiff = targetDate.diff(startDate, 'week');
169
195
  if (weeksDiff < 0) {
170
196
  return false;
171
197
  }
198
+
199
+ // 检查频率
172
200
  if (weeksDiff % repeatRule.frequency !== 0) {
173
201
  return false;
174
202
  }
203
+
204
+ // 检查时间是否在日程的时间范围内
175
205
  const targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
176
206
  const startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
177
207
  const endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
178
208
  return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
179
209
  };
180
- var getScheduleStartEndTimePoints = (date, scheduleList) => {
210
+
211
+ // 日程时间段类型
212
+
213
+ /**
214
+ * 获取当前日期日程时间点
215
+ * @param date 日期 YYYY-MM-DD
216
+ * @param scheduleList 日程列表
217
+ * @returns 当前日期日程时间点 结构,数组 [{
218
+ *
219
+ * // HH:mm
220
+ * end_time: string,
221
+ * // HH:mm
222
+ * start_time: string,
223
+ * // 日期时间
224
+ * // YYYY-MM-DD HH:mm:ss
225
+ * end_at: Dayjs,
226
+ * // YYYY-MM-DD HH:mm:ss
227
+ * start_at: Dayjs,
228
+ *
229
+ * }]
230
+ */
231
+ const getScheduleStartEndTimePoints = (date, scheduleList) => {
181
232
  if (!date || !scheduleList || scheduleList.length === 0) {
182
233
  return [];
183
234
  }
184
- const targetDate = (0, import_dayjs.default)(date);
235
+ const targetDate = (0, _dayjs.default)(date);
185
236
  if (!targetDate.isValid()) {
186
237
  return [];
187
238
  }
188
239
  const timeSlots = [];
240
+
241
+ // 遍历所有日程
189
242
  for (const schedule of scheduleList) {
190
243
  const slots = extractTimeSlotsFromSchedule(date, schedule);
191
244
  timeSlots.push(...slots);
192
245
  }
246
+
247
+ // 去重并排序时间段
193
248
  return mergeAndSortTimeSlots(timeSlots);
194
249
  };
195
- var extractTimeSlotsFromSchedule = (date, schedule) => {
250
+
251
+ /**
252
+ * 从单个日程中提取指定日期的时间段
253
+ */
254
+ exports.getScheduleStartEndTimePoints = getScheduleStartEndTimePoints;
255
+ const extractTimeSlotsFromSchedule = (date, schedule) => {
196
256
  switch (schedule.type) {
197
- case "standard":
257
+ case 'standard':
198
258
  return extractStandardScheduleTimeSlots(date, schedule);
199
- case "time-slots":
259
+ case 'time-slots':
200
260
  return extractTimeSlotsScheduleTimeSlots(date, schedule);
201
- case "designation":
261
+ case 'designation':
202
262
  return extractDesignationScheduleTimeSlots(date, schedule);
203
263
  default:
204
264
  return [];
205
265
  }
206
266
  };
207
- var extractStandardScheduleTimeSlots = (date, schedule) => {
267
+
268
+ /**
269
+ * 提取标准类型日程的时间段
270
+ */
271
+ const extractStandardScheduleTimeSlots = (date, schedule) => {
208
272
  if (!schedule.start_time || !schedule.end_time) {
209
273
  return [];
210
274
  }
211
- const targetDate = (0, import_dayjs.default)(date);
212
- const startDate = (0, import_dayjs.default)(schedule.start_time);
213
- const endDate = (0, import_dayjs.default)(schedule.end_time);
275
+ const targetDate = (0, _dayjs.default)(date);
276
+ const startDate = (0, _dayjs.default)(schedule.start_time);
277
+ const endDate = (0, _dayjs.default)(schedule.end_time);
278
+
279
+ // 检查日期是否在日程范围内
214
280
  if (!isDateInStandardSchedule(targetDate, schedule, startDate, endDate)) {
215
281
  return [];
216
282
  }
217
- const startTime = startDate.format("HH:mm");
218
- const endTime = endDate.format("HH:mm");
219
- const startAt = (0, import_dayjs.default)(`${date} ${startTime}:00`);
220
- const endAt = (0, import_dayjs.default)(`${date} ${endTime}:00`);
283
+
284
+ // 提取时间部分
285
+ const startTime = startDate.format('HH:mm');
286
+ const endTime = endDate.format('HH:mm');
287
+
288
+ // 构造完整的日期时间
289
+ const startAt = (0, _dayjs.default)(`${date} ${startTime}:00`);
290
+ const endAt = (0, _dayjs.default)(`${date} ${endTime}:00`);
221
291
  return [{
222
292
  start_time: startTime,
223
293
  end_time: endTime,
@@ -225,22 +295,30 @@ var extractStandardScheduleTimeSlots = (date, schedule) => {
225
295
  end_at: endAt
226
296
  }];
227
297
  };
228
- var extractTimeSlotsScheduleTimeSlots = (date, schedule) => {
298
+
299
+ /**
300
+ * 提取时间段类型日程的时间段
301
+ */
302
+ const extractTimeSlotsScheduleTimeSlots = (date, schedule) => {
229
303
  if (!schedule.start_time || !schedule.time_slot || schedule.time_slot.length === 0) {
230
304
  return [];
231
305
  }
232
- const targetDate = (0, import_dayjs.default)(date);
233
- const scheduleStartDate = (0, import_dayjs.default)(schedule.start_time.split(" ")[0]);
306
+ const targetDate = (0, _dayjs.default)(date);
307
+ const scheduleStartDate = (0, _dayjs.default)(schedule.start_time.split(' ')[0]);
308
+
309
+ // 检查日期是否在日程的有效范围内(考虑重复规则)
234
310
  if (!isDateInTimeSlotsSchedule(targetDate, schedule, scheduleStartDate)) {
235
311
  return [];
236
312
  }
237
313
  const slots = [];
314
+
315
+ // 提取所有时间段
238
316
  for (const timeSlot of schedule.time_slot) {
239
317
  if (!timeSlot.start_time || !timeSlot.end_time) {
240
318
  continue;
241
319
  }
242
- const startAt = (0, import_dayjs.default)(`${date} ${timeSlot.start_time}:00`);
243
- const endAt = (0, import_dayjs.default)(`${date} ${timeSlot.end_time}:00`);
320
+ const startAt = (0, _dayjs.default)(`${date} ${timeSlot.start_time}:00`);
321
+ const endAt = (0, _dayjs.default)(`${date} ${timeSlot.end_time}:00`);
244
322
  slots.push({
245
323
  start_time: timeSlot.start_time,
246
324
  end_time: timeSlot.end_time,
@@ -250,63 +328,90 @@ var extractTimeSlotsScheduleTimeSlots = (date, schedule) => {
250
328
  }
251
329
  return slots;
252
330
  };
253
- var isDateInTimeSlotsSchedule = (targetDate, schedule, scheduleStartDate) => {
254
- if (schedule.repeat_type === "none") {
255
- return targetDate.isSame(scheduleStartDate, "day");
331
+
332
+ /**
333
+ * 检查日期是否在时间段类型日程范围内
334
+ */
335
+ const isDateInTimeSlotsSchedule = (targetDate, schedule, scheduleStartDate) => {
336
+ // 不重复的日程
337
+ if (schedule.repeat_type === 'none') {
338
+ // 只在 start_time 的日期有效
339
+ return targetDate.isSame(scheduleStartDate, 'day');
256
340
  }
341
+
342
+ // 重复的日程,需要检查重复规则
257
343
  if (!schedule.repeat_rule) {
258
344
  return false;
259
345
  }
260
- const { repeat_rule, repeat_type } = schedule;
346
+ const {
347
+ repeat_rule,
348
+ repeat_type
349
+ } = schedule;
350
+
351
+ // 检查是否在包含日期中(优先级最高)
261
352
  if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
262
353
  for (const includedDate of repeat_rule.included_date) {
263
- const includeStartDate = (0, import_dayjs.default)(includedDate.start);
264
- const includeEndDate = (0, import_dayjs.default)(includedDate.end);
265
- if (targetDate.isSameOrAfter(includeStartDate, "day") && targetDate.isSameOrBefore(includeEndDate, "day")) {
354
+ const includeStartDate = (0, _dayjs.default)(includedDate.start);
355
+ const includeEndDate = (0, _dayjs.default)(includedDate.end);
356
+ if (targetDate.isSameOrAfter(includeStartDate, 'day') && targetDate.isSameOrBefore(includeEndDate, 'day')) {
266
357
  return true;
267
358
  }
268
359
  }
269
360
  }
361
+
362
+ // 检查是否在排除日期中
270
363
  if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
271
364
  for (const excludedDate of repeat_rule.excluded_date) {
272
- const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
273
- const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
274
- if (targetDate.isSameOrAfter(excludeStartDate, "day") && targetDate.isSameOrBefore(excludeEndDate, "day")) {
365
+ const excludeStartDate = (0, _dayjs.default)(excludedDate.start);
366
+ const excludeEndDate = (0, _dayjs.default)(excludedDate.end);
367
+ if (targetDate.isSameOrAfter(excludeStartDate, 'day') && targetDate.isSameOrBefore(excludeEndDate, 'day')) {
275
368
  return false;
276
369
  }
277
370
  }
278
371
  }
279
- if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
280
- const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
281
- if (targetDate.isAfter(ruleEndDate, "day")) {
372
+
373
+ // 检查重复规则的结束条件
374
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
375
+ const ruleEndDate = (0, _dayjs.default)(repeat_rule.end.end_date);
376
+ if (targetDate.isAfter(ruleEndDate, 'day')) {
282
377
  return false;
283
378
  }
284
379
  }
285
- if (targetDate.isBefore(scheduleStartDate, "day")) {
380
+
381
+ // 检查是否在开始日期之前
382
+ if (targetDate.isBefore(scheduleStartDate, 'day')) {
286
383
  return false;
287
384
  }
385
+
386
+ // 根据重复类型检查
288
387
  switch (repeat_type) {
289
- case "daily":
388
+ case 'daily':
290
389
  return isDateInDailyRepeat(targetDate, scheduleStartDate, repeat_rule);
291
- case "weekly":
390
+ case 'weekly':
292
391
  return isDateInWeeklyRepeat(targetDate, scheduleStartDate, repeat_rule);
293
392
  default:
294
393
  return false;
295
394
  }
296
395
  };
297
- var extractDesignationScheduleTimeSlots = (date, schedule) => {
396
+
397
+ /**
398
+ * 提取指定日期类型日程的时间段
399
+ */
400
+ const extractDesignationScheduleTimeSlots = (date, schedule) => {
298
401
  if (!schedule.designation) {
299
402
  return [];
300
403
  }
301
- const targetDate = (0, import_dayjs.default)(date);
404
+ const targetDate = (0, _dayjs.default)(date);
302
405
  const designations = Array.isArray(schedule.designation) ? schedule.designation : [schedule.designation];
303
406
  const slots = [];
304
407
  for (const designation of designations) {
305
- const startDate = (0, import_dayjs.default)(designation.start_date);
306
- const endDate = (0, import_dayjs.default)(designation.end_date);
408
+ const startDate = (0, _dayjs.default)(designation.start_date);
409
+ const endDate = (0, _dayjs.default)(designation.end_date);
410
+
411
+ // 检查日期是否在指定范围内(考虑重复规则)
307
412
  if (isDateInDesignationSchedule(targetDate, schedule, designation, startDate, endDate)) {
308
- const startAt = (0, import_dayjs.default)(`${date} ${designation.start_time}:00`);
309
- const endAt = (0, import_dayjs.default)(`${date} ${designation.end_time}:00`);
413
+ const startAt = (0, _dayjs.default)(`${date} ${designation.start_time}:00`);
414
+ const endAt = (0, _dayjs.default)(`${date} ${designation.end_time}:00`);
310
415
  slots.push({
311
416
  start_time: designation.start_time,
312
417
  end_time: designation.end_time,
@@ -317,125 +422,196 @@ var extractDesignationScheduleTimeSlots = (date, schedule) => {
317
422
  }
318
423
  return slots;
319
424
  };
320
- var isDateInDesignationSchedule = (targetDate, schedule, designation, startDate, endDate) => {
321
- if (schedule.repeat_type === "none") {
322
- return targetDate.isSameOrAfter(startDate, "day") && targetDate.isSameOrBefore(endDate, "day");
425
+
426
+ /**
427
+ * 检查日期是否在指定日期类型日程范围内
428
+ */
429
+ const isDateInDesignationSchedule = (targetDate, schedule, designation, startDate, endDate) => {
430
+ // 不重复的日程
431
+ if (schedule.repeat_type === 'none') {
432
+ // 检查日期是否在指定的日期范围内
433
+ return targetDate.isSameOrAfter(startDate, 'day') && targetDate.isSameOrBefore(endDate, 'day');
323
434
  }
435
+
436
+ // 重复的日程,需要检查重复规则
324
437
  if (!schedule.repeat_rule) {
325
438
  return false;
326
439
  }
327
- const { repeat_rule, repeat_type } = schedule;
440
+ const {
441
+ repeat_rule,
442
+ repeat_type
443
+ } = schedule;
444
+
445
+ // 检查是否在包含日期中(优先级最高)
328
446
  if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
329
447
  for (const includedDate of repeat_rule.included_date) {
330
- const includeStartDate = (0, import_dayjs.default)(includedDate.start);
331
- const includeEndDate = (0, import_dayjs.default)(includedDate.end);
332
- if (targetDate.isSameOrAfter(includeStartDate, "day") && targetDate.isSameOrBefore(includeEndDate, "day")) {
448
+ const includeStartDate = (0, _dayjs.default)(includedDate.start);
449
+ const includeEndDate = (0, _dayjs.default)(includedDate.end);
450
+ if (targetDate.isSameOrAfter(includeStartDate, 'day') && targetDate.isSameOrBefore(includeEndDate, 'day')) {
333
451
  return true;
334
452
  }
335
453
  }
336
454
  }
455
+
456
+ // 检查是否在排除日期中
337
457
  if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
338
458
  for (const excludedDate of repeat_rule.excluded_date) {
339
- const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
340
- const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
341
- if (targetDate.isSameOrAfter(excludeStartDate, "day") && targetDate.isSameOrBefore(excludeEndDate, "day")) {
459
+ const excludeStartDate = (0, _dayjs.default)(excludedDate.start);
460
+ const excludeEndDate = (0, _dayjs.default)(excludedDate.end);
461
+ if (targetDate.isSameOrAfter(excludeStartDate, 'day') && targetDate.isSameOrBefore(excludeEndDate, 'day')) {
342
462
  return false;
343
463
  }
344
464
  }
345
465
  }
346
- if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
347
- const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
348
- if (targetDate.isAfter(ruleEndDate, "day")) {
466
+
467
+ // 检查重复规则的结束条件
468
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
469
+ const ruleEndDate = (0, _dayjs.default)(repeat_rule.end.end_date);
470
+ if (targetDate.isAfter(ruleEndDate, 'day')) {
349
471
  return false;
350
472
  }
351
473
  }
352
- if (!targetDate.isSameOrAfter(startDate, "day") || !targetDate.isSameOrBefore(endDate, "day")) {
353
- if (targetDate.isBefore(startDate, "day")) {
474
+
475
+ // 检查是否在基本日期范围内
476
+ if (!targetDate.isSameOrAfter(startDate, 'day') || !targetDate.isSameOrBefore(endDate, 'day')) {
477
+ // 对于重复日程,如果不在基本范围内,还需要检查是否符合重复规则
478
+ // 只要在 startDate 之后,并且符合重复规则即可
479
+ if (targetDate.isBefore(startDate, 'day')) {
354
480
  return false;
355
481
  }
356
482
  }
483
+
484
+ // 根据重复类型检查
357
485
  switch (repeat_type) {
358
- case "daily":
486
+ case 'daily':
359
487
  return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
360
- case "weekly":
488
+ case 'weekly':
361
489
  return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
362
490
  default:
363
491
  return false;
364
492
  }
365
493
  };
366
- var isDateInStandardSchedule = (targetDate, schedule, startDate, endDate) => {
367
- const targetDateString = targetDate.format("YYYY-MM-DD");
368
- if (schedule.repeat_type === "none") {
369
- const scheduleStartDate = startDate.format("YYYY-MM-DD");
370
- const scheduleEndDate = endDate.format("YYYY-MM-DD");
371
- return targetDate.isSameOrAfter(scheduleStartDate, "day") && targetDate.isSameOrBefore(scheduleEndDate, "day");
494
+
495
+ /**
496
+ * 检查日期是否在标准日程范围内
497
+ */
498
+ const isDateInStandardSchedule = (targetDate, schedule, startDate, endDate) => {
499
+ const targetDateString = targetDate.format('YYYY-MM-DD');
500
+
501
+ // 不重复的日程
502
+ if (schedule.repeat_type === 'none') {
503
+ // 检查日期是否在范围内
504
+ const scheduleStartDate = startDate.format('YYYY-MM-DD');
505
+ const scheduleEndDate = endDate.format('YYYY-MM-DD');
506
+ return targetDate.isSameOrAfter(scheduleStartDate, 'day') && targetDate.isSameOrBefore(scheduleEndDate, 'day');
372
507
  }
508
+
509
+ // 重复的日程,需要检查重复规则
373
510
  if (!schedule.repeat_rule) {
374
511
  return false;
375
512
  }
376
- const { repeat_rule, repeat_type } = schedule;
513
+ const {
514
+ repeat_rule,
515
+ repeat_type
516
+ } = schedule;
517
+
518
+ // 检查是否在包含日期中
377
519
  if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
378
520
  for (const includedDate of repeat_rule.included_date) {
379
- const includeStartDate = (0, import_dayjs.default)(includedDate.start);
380
- const includeEndDate = (0, import_dayjs.default)(includedDate.end);
381
- if (targetDate.isSameOrAfter(includeStartDate, "day") && targetDate.isSameOrBefore(includeEndDate, "day")) {
521
+ const includeStartDate = (0, _dayjs.default)(includedDate.start);
522
+ const includeEndDate = (0, _dayjs.default)(includedDate.end);
523
+ if (targetDate.isSameOrAfter(includeStartDate, 'day') && targetDate.isSameOrBefore(includeEndDate, 'day')) {
382
524
  return true;
383
525
  }
384
526
  }
385
527
  }
528
+
529
+ // 检查是否在排除日期中
386
530
  for (const excludedDate of repeat_rule.excluded_date) {
387
- const excludeStartDate = (0, import_dayjs.default)(excludedDate.start);
388
- const excludeEndDate = (0, import_dayjs.default)(excludedDate.end);
389
- if (targetDate.isSameOrAfter(excludeStartDate, "day") && targetDate.isSameOrBefore(excludeEndDate, "day")) {
531
+ const excludeStartDate = (0, _dayjs.default)(excludedDate.start);
532
+ const excludeEndDate = (0, _dayjs.default)(excludedDate.end);
533
+ if (targetDate.isSameOrAfter(excludeStartDate, 'day') && targetDate.isSameOrBefore(excludeEndDate, 'day')) {
390
534
  return false;
391
535
  }
392
536
  }
393
- if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
394
- const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
395
- if (targetDate.isAfter(ruleEndDate, "day")) {
537
+
538
+ // 检查重复规则的结束条件
539
+ if (repeat_rule.end.type === 'date' && repeat_rule.end.end_date) {
540
+ const ruleEndDate = (0, _dayjs.default)(repeat_rule.end.end_date);
541
+ if (targetDate.isAfter(ruleEndDate, 'day')) {
396
542
  return false;
397
543
  }
398
544
  }
399
- if (targetDate.isBefore(startDate, "day")) {
545
+
546
+ // 检查是否在开始日期之前
547
+ if (targetDate.isBefore(startDate, 'day')) {
400
548
  return false;
401
549
  }
550
+
551
+ // 根据重复类型检查
402
552
  switch (repeat_type) {
403
- case "daily":
553
+ case 'daily':
404
554
  return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
405
- case "weekly":
555
+ case 'weekly':
406
556
  return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
407
557
  default:
408
558
  return false;
409
559
  }
410
560
  };
411
- var isDateInDailyRepeat = (targetDate, startDate, repeatRule) => {
412
- const daysDiff = targetDate.diff(startDate, "day");
561
+
562
+ /**
563
+ * 检查日期是否符合每日重复规则
564
+ */
565
+ const isDateInDailyRepeat = (targetDate, startDate, repeatRule) => {
566
+ const daysDiff = targetDate.diff(startDate, 'day');
413
567
  if (daysDiff < 0) {
414
568
  return false;
415
569
  }
570
+
571
+ // 检查频率
416
572
  return daysDiff % repeatRule.frequency === 0;
417
573
  };
418
- var isDateInWeeklyRepeat = (targetDate, startDate, repeatRule) => {
419
- const targetDayOfWeek = targetDate.day();
574
+
575
+ /**
576
+ * 检查日期是否符合每周重复规则
577
+ */
578
+ const isDateInWeeklyRepeat = (targetDate, startDate, repeatRule) => {
579
+ const targetDayOfWeek = targetDate.day(); // 0=周日, 1=周一, ..., 6=周六
580
+
581
+ // 检查是否在指定的星期几内
420
582
  if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
421
583
  return false;
422
584
  }
423
- const weeksDiff = targetDate.diff(startDate, "week");
585
+
586
+ // 计算周差
587
+ const weeksDiff = targetDate.diff(startDate, 'week');
424
588
  if (weeksDiff < 0) {
425
589
  return false;
426
590
  }
591
+
592
+ // 检查频率
427
593
  return weeksDiff % repeatRule.frequency === 0;
428
594
  };
429
- var mergeAndSortTimeSlots = (slots) => {
595
+
596
+ /**
597
+ * 对时间段去重并排序
598
+ * 只移除开始时间和结束时间完全相同的重复时间段
599
+ */
600
+ const mergeAndSortTimeSlots = slots => {
430
601
  if (slots.length === 0) {
431
602
  return [];
432
603
  }
604
+
605
+ // 按开始时间排序
433
606
  const sorted = [...slots].sort((a, b) => {
434
607
  return a.start_at.valueOf() - b.start_at.valueOf();
435
608
  });
609
+
610
+ // 去重:移除开始和结束时间完全相同的时间段
436
611
  const unique = [];
437
- const seenKeys = /* @__PURE__ */ new Set();
612
+ const seenKeys = new Set();
438
613
  for (const slot of sorted) {
614
+ // 使用开始时间和结束时间作为唯一键
439
615
  const key = `${slot.start_time}-${slot.end_time}`;
440
616
  if (!seenKeys.has(key)) {
441
617
  seenKeys.add(key);
@@ -443,9 +619,4 @@ var mergeAndSortTimeSlots = (slots) => {
443
619
  }
444
620
  }
445
621
  return unique;
446
- };
447
- // Annotate the CommonJS export names for ESM import in node:
448
- 0 && (module.exports = {
449
- getDateIsInSchedule,
450
- getScheduleStartEndTimePoints
451
- });
622
+ };