@pisell/pisellos 2.3.74 → 2.3.76

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