@pisell/pisellos 2.1.85 → 2.1.87

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 (111) hide show
  1. package/dist/index.d.ts +0 -1
  2. package/dist/index.js +0 -1
  3. package/dist/modules/Cart/types.d.ts +0 -2
  4. package/dist/modules/Cart/utils/cartProduct.js +0 -11
  5. package/dist/modules/Cart/utils/changePrice.js +6 -0
  6. package/dist/modules/Discount/index.d.ts +1 -0
  7. package/dist/modules/Discount/index.js +2 -1
  8. package/dist/modules/Discount/types.d.ts +0 -15
  9. package/dist/modules/Payment/index.d.ts +1 -2
  10. package/dist/modules/Payment/index.js +7 -10
  11. package/dist/modules/Payment/utils.js +0 -3
  12. package/dist/modules/Payment/walletpass.d.ts +0 -23
  13. package/dist/modules/Payment/walletpass.js +95 -191
  14. package/dist/modules/Rules/index.d.ts +2 -7
  15. package/dist/modules/Rules/index.js +19 -141
  16. package/dist/modules/Rules/types.d.ts +0 -1
  17. package/dist/modules/Schedule/getDateIsInSchedule.d.ts +32 -0
  18. package/dist/modules/Schedule/getDateIsInSchedule.js +747 -0
  19. package/dist/modules/Schedule/index.d.ts +1 -1
  20. package/dist/modules/Schedule/index.js +2 -0
  21. package/dist/modules/Summary/index.js +47 -5
  22. package/dist/modules/Summary/types.d.ts +0 -2
  23. package/dist/modules/Summary/utils.d.ts +1 -7
  24. package/dist/modules/Summary/utils.js +23 -33
  25. package/dist/plugins/window.d.ts +0 -2
  26. package/dist/solution/BookingByStep/index.d.ts +0 -1
  27. package/dist/solution/BookingByStep/index.js +84 -35
  28. package/dist/solution/Checkout/index.js +0 -2
  29. package/dist/solution/ShopDiscount/index.d.ts +0 -1
  30. package/dist/solution/ShopDiscount/index.js +3 -12
  31. package/dist/solution/ShopDiscount/types.d.ts +0 -1
  32. package/lib/index.d.ts +0 -1
  33. package/lib/index.js +1 -3
  34. package/lib/modules/Cart/types.d.ts +0 -2
  35. package/lib/modules/Cart/utils/cartProduct.js +0 -9
  36. package/lib/modules/Cart/utils/changePrice.js +5 -0
  37. package/lib/modules/Discount/index.d.ts +1 -0
  38. package/lib/modules/Discount/index.js +2 -1
  39. package/lib/modules/Discount/types.d.ts +0 -15
  40. package/lib/modules/Payment/index.d.ts +1 -2
  41. package/lib/modules/Payment/index.js +0 -1
  42. package/lib/modules/Payment/utils.js +0 -3
  43. package/lib/modules/Payment/walletpass.d.ts +0 -23
  44. package/lib/modules/Payment/walletpass.js +17 -94
  45. package/lib/modules/Rules/index.d.ts +2 -7
  46. package/lib/modules/Rules/index.js +149 -285
  47. package/lib/modules/Rules/types.d.ts +0 -1
  48. package/lib/modules/Schedule/getDateIsInSchedule.d.ts +32 -0
  49. package/lib/modules/Schedule/getDateIsInSchedule.js +451 -0
  50. package/lib/modules/Schedule/index.d.ts +1 -1
  51. package/lib/modules/Schedule/index.js +2 -0
  52. package/lib/modules/Summary/index.js +22 -9
  53. package/lib/modules/Summary/types.d.ts +0 -2
  54. package/lib/modules/Summary/utils.d.ts +1 -7
  55. package/lib/modules/Summary/utils.js +22 -28
  56. package/lib/plugins/window.d.ts +0 -2
  57. package/lib/solution/BookingByStep/index.d.ts +0 -1
  58. package/lib/solution/BookingByStep/index.js +34 -3
  59. package/lib/solution/Checkout/index.js +0 -2
  60. package/lib/solution/ShopDiscount/index.d.ts +0 -1
  61. package/lib/solution/ShopDiscount/index.js +2 -7
  62. package/lib/solution/ShopDiscount/types.d.ts +0 -1
  63. package/package.json +1 -1
  64. package/dist/model/index.d.ts +0 -1
  65. package/dist/model/index.js +0 -1
  66. package/dist/model/strategy/adapter/index.d.ts +0 -3
  67. package/dist/model/strategy/adapter/index.js +0 -4
  68. package/dist/model/strategy/adapter/type.d.ts +0 -28
  69. package/dist/model/strategy/adapter/type.js +0 -1
  70. package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +0 -84
  71. package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -497
  72. package/dist/model/strategy/adapter/walletPass/example.d.ts +0 -4
  73. package/dist/model/strategy/adapter/walletPass/example.js +0 -258
  74. package/dist/model/strategy/adapter/walletPass/index.d.ts +0 -32
  75. package/dist/model/strategy/adapter/walletPass/index.js +0 -182
  76. package/dist/model/strategy/adapter/walletPass/locales.d.ts +0 -1
  77. package/dist/model/strategy/adapter/walletPass/locales.js +0 -23
  78. package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -168
  79. package/dist/model/strategy/adapter/walletPass/type.js +0 -1
  80. package/dist/model/strategy/adapter/walletPass/utils.d.ts +0 -76
  81. package/dist/model/strategy/adapter/walletPass/utils.js +0 -1043
  82. package/dist/model/strategy/index.d.ts +0 -94
  83. package/dist/model/strategy/index.js +0 -551
  84. package/dist/model/strategy/strategy-example.d.ts +0 -5
  85. package/dist/model/strategy/strategy-example.js +0 -331
  86. package/dist/model/strategy/type.d.ts +0 -228
  87. package/dist/model/strategy/type.js +0 -94
  88. package/lib/model/index.d.ts +0 -1
  89. package/lib/model/index.js +0 -23
  90. package/lib/model/strategy/adapter/index.d.ts +0 -3
  91. package/lib/model/strategy/adapter/index.js +0 -45
  92. package/lib/model/strategy/adapter/type.d.ts +0 -28
  93. package/lib/model/strategy/adapter/type.js +0 -17
  94. package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +0 -84
  95. package/lib/model/strategy/adapter/walletPass/evaluator.js +0 -421
  96. package/lib/model/strategy/adapter/walletPass/example.d.ts +0 -4
  97. package/lib/model/strategy/adapter/walletPass/example.js +0 -207
  98. package/lib/model/strategy/adapter/walletPass/index.d.ts +0 -32
  99. package/lib/model/strategy/adapter/walletPass/index.js +0 -142
  100. package/lib/model/strategy/adapter/walletPass/locales.d.ts +0 -1
  101. package/lib/model/strategy/adapter/walletPass/locales.js +0 -51
  102. package/lib/model/strategy/adapter/walletPass/type.d.ts +0 -168
  103. package/lib/model/strategy/adapter/walletPass/type.js +0 -17
  104. package/lib/model/strategy/adapter/walletPass/utils.d.ts +0 -76
  105. package/lib/model/strategy/adapter/walletPass/utils.js +0 -704
  106. package/lib/model/strategy/index.d.ts +0 -94
  107. package/lib/model/strategy/index.js +0 -413
  108. package/lib/model/strategy/strategy-example.d.ts +0 -5
  109. package/lib/model/strategy/strategy-example.js +0 -318
  110. package/lib/model/strategy/type.d.ts +0 -228
  111. package/lib/model/strategy/type.js +0 -44
@@ -31,7 +31,6 @@ export interface RulesModuleAPI {
31
31
  holders: {
32
32
  form_record_id: number;
33
33
  }[];
34
- orderTotalAmount: number;
35
34
  isFormSubject: boolean;
36
35
  }) => DiscountResult;
37
36
  }
@@ -0,0 +1,32 @@
1
+ import dayjs from "dayjs";
2
+ import { ScheduleItem } from "./types";
3
+ export declare const getDateIsInSchedule: (dateTime: string, scheduleList: ScheduleItem[]) => boolean;
4
+ export type ScheduleTimeSlot = {
5
+ /** 开始时间 HH:mm */
6
+ start_time: string;
7
+ /** 结束时间 HH:mm */
8
+ end_time: string;
9
+ /** 开始日期时间 YYYY-MM-DD HH:mm:ss */
10
+ start_at: dayjs.Dayjs;
11
+ /** 结束日期时间 YYYY-MM-DD HH:mm:ss */
12
+ end_at: dayjs.Dayjs;
13
+ };
14
+ /**
15
+ * 获取当前日期日程时间点
16
+ * @param date 日期 YYYY-MM-DD
17
+ * @param scheduleList 日程列表
18
+ * @returns 当前日期日程时间点 结构,数组 [{
19
+ *
20
+ * // HH:mm
21
+ * end_time: string,
22
+ * // HH:mm
23
+ * start_time: string,
24
+ * // 日期时间
25
+ * // YYYY-MM-DD HH:mm:ss
26
+ * end_at: Dayjs,
27
+ * // YYYY-MM-DD HH:mm:ss
28
+ * start_at: Dayjs,
29
+ *
30
+ * }]
31
+ */
32
+ export declare const getScheduleStartEndTimePoints: (date: string, scheduleList: ScheduleItem[]) => ScheduleTimeSlot[];
@@ -0,0 +1,451 @@
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/modules/Schedule/getDateIsInSchedule.ts
30
+ var getDateIsInSchedule_exports = {};
31
+ __export(getDateIsInSchedule_exports, {
32
+ getDateIsInSchedule: () => getDateIsInSchedule,
33
+ getScheduleStartEndTimePoints: () => getScheduleStartEndTimePoints
34
+ });
35
+ module.exports = __toCommonJS(getDateIsInSchedule_exports);
36
+ var import_dayjs = __toESM(require("dayjs"));
37
+ var getDateIsInSchedule = (dateTime, scheduleList) => {
38
+ if (!dateTime || !scheduleList || scheduleList.length === 0) {
39
+ return false;
40
+ }
41
+ const targetDate = (0, import_dayjs.default)(dateTime);
42
+ if (!targetDate.isValid()) {
43
+ return false;
44
+ }
45
+ for (const schedule of scheduleList) {
46
+ if (isTimeInScheduleItem(dateTime, schedule)) {
47
+ return true;
48
+ }
49
+ }
50
+ return false;
51
+ };
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";
56
+ switch (schedule.type) {
57
+ case "standard":
58
+ return isInStandardSchedule(targetDate, targetDateString, targetTimeString, schedule);
59
+ case "time-slots":
60
+ return isInTimeSlotsSchedule(targetDate, targetDateString, targetTimeString, schedule);
61
+ case "designation":
62
+ return isInDesignationSchedule(targetDate, targetDateString, targetTimeString, schedule);
63
+ default:
64
+ return false;
65
+ }
66
+ };
67
+ var isInStandardSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
68
+ if (!schedule.start_time || !schedule.end_time) {
69
+ return false;
70
+ }
71
+ const startDate = (0, import_dayjs.default)(schedule.start_time);
72
+ const endDate = (0, import_dayjs.default)(schedule.end_time);
73
+ const isInBasicRange = targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate);
74
+ if (schedule.repeat_type === "none") {
75
+ return isInBasicRange;
76
+ }
77
+ return isInRepeatingSchedule(targetDate, targetDateString, targetTimeString, schedule, startDate, endDate);
78
+ };
79
+ var isInTimeSlotsSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
80
+ if (!schedule.start_time) {
81
+ return false;
82
+ }
83
+ const scheduleDate = schedule.start_time.split(" ")[0];
84
+ if (targetDateString !== scheduleDate) {
85
+ return false;
86
+ }
87
+ for (const timeSlot of schedule.time_slot) {
88
+ const slotStart = `${scheduleDate} ${timeSlot.start_time}:00`;
89
+ const slotEnd = `${scheduleDate} ${timeSlot.end_time}:00`;
90
+ const slotStartDate = (0, import_dayjs.default)(slotStart);
91
+ const slotEndDate = (0, import_dayjs.default)(slotEnd);
92
+ if (targetDate.isSameOrAfter(slotStartDate) && targetDate.isSameOrBefore(slotEndDate)) {
93
+ return true;
94
+ }
95
+ }
96
+ return false;
97
+ };
98
+ var isInDesignationSchedule = (targetDate, targetDateString, targetTimeString, schedule) => {
99
+ if (!schedule.designation) {
100
+ return false;
101
+ }
102
+ for (const designation of schedule.designation) {
103
+ const startDateTime = `${designation.start_date} ${designation.start_time}:00`;
104
+ 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);
107
+ if (targetDate.isSameOrAfter(startDate) && targetDate.isSameOrBefore(endDate)) {
108
+ return true;
109
+ }
110
+ }
111
+ return false;
112
+ };
113
+ var isInRepeatingSchedule = (targetDate, targetDateString, targetTimeString, schedule, startDate, endDate) => {
114
+ if (!schedule.repeat_rule) {
115
+ return false;
116
+ }
117
+ const { repeat_rule, repeat_type } = schedule;
118
+ const targetDateOnly = (0, import_dayjs.default)(targetDateString);
119
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
120
+ 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")) {
124
+ return true;
125
+ }
126
+ }
127
+ }
128
+ 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")) {
132
+ return false;
133
+ }
134
+ }
135
+ if (repeat_rule.end.type === "date" && repeat_rule.end.end_date) {
136
+ const ruleEndDate = (0, import_dayjs.default)(repeat_rule.end.end_date);
137
+ if (targetDate.isAfter(ruleEndDate)) {
138
+ return false;
139
+ }
140
+ }
141
+ switch (repeat_type) {
142
+ case "daily":
143
+ return isInDailyRepeat(targetDate, startDate, endDate, repeat_rule);
144
+ case "weekly":
145
+ return isInWeeklyRepeat(targetDate, startDate, endDate, repeat_rule);
146
+ default:
147
+ return false;
148
+ }
149
+ };
150
+ var isInDailyRepeat = (targetDate, startDate, endDate, repeatRule) => {
151
+ const daysDiff = targetDate.diff(startDate, "day");
152
+ if (daysDiff < 0) {
153
+ return false;
154
+ }
155
+ if (daysDiff % repeatRule.frequency !== 0) {
156
+ return false;
157
+ }
158
+ const targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
159
+ const startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
160
+ const endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
161
+ return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
162
+ };
163
+ var isInWeeklyRepeat = (targetDate, startDate, endDate, repeatRule) => {
164
+ const targetDayOfWeek = targetDate.day();
165
+ if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
166
+ return false;
167
+ }
168
+ const weeksDiff = targetDate.diff(startDate, "week");
169
+ if (weeksDiff < 0) {
170
+ return false;
171
+ }
172
+ if (weeksDiff % repeatRule.frequency !== 0) {
173
+ return false;
174
+ }
175
+ const targetTimeOfDay = targetDate.hour() * 3600 + targetDate.minute() * 60 + targetDate.second();
176
+ const startTimeOfDay = startDate.hour() * 3600 + startDate.minute() * 60 + startDate.second();
177
+ const endTimeOfDay = endDate.hour() * 3600 + endDate.minute() * 60 + endDate.second();
178
+ return targetTimeOfDay >= startTimeOfDay && targetTimeOfDay <= endTimeOfDay;
179
+ };
180
+ var getScheduleStartEndTimePoints = (date, scheduleList) => {
181
+ if (!date || !scheduleList || scheduleList.length === 0) {
182
+ return [];
183
+ }
184
+ const targetDate = (0, import_dayjs.default)(date);
185
+ if (!targetDate.isValid()) {
186
+ return [];
187
+ }
188
+ const timeSlots = [];
189
+ for (const schedule of scheduleList) {
190
+ const slots = extractTimeSlotsFromSchedule(date, schedule);
191
+ timeSlots.push(...slots);
192
+ }
193
+ return mergeAndSortTimeSlots(timeSlots);
194
+ };
195
+ var extractTimeSlotsFromSchedule = (date, schedule) => {
196
+ switch (schedule.type) {
197
+ case "standard":
198
+ return extractStandardScheduleTimeSlots(date, schedule);
199
+ case "time-slots":
200
+ return extractTimeSlotsScheduleTimeSlots(date, schedule);
201
+ case "designation":
202
+ return extractDesignationScheduleTimeSlots(date, schedule);
203
+ default:
204
+ return [];
205
+ }
206
+ };
207
+ var extractStandardScheduleTimeSlots = (date, schedule) => {
208
+ if (!schedule.start_time || !schedule.end_time) {
209
+ return [];
210
+ }
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);
214
+ if (!isDateInStandardSchedule(targetDate, schedule, startDate, endDate)) {
215
+ return [];
216
+ }
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`);
221
+ return [{
222
+ start_time: startTime,
223
+ end_time: endTime,
224
+ start_at: startAt,
225
+ end_at: endAt
226
+ }];
227
+ };
228
+ var extractTimeSlotsScheduleTimeSlots = (date, schedule) => {
229
+ if (!schedule.start_time || !schedule.time_slot || schedule.time_slot.length === 0) {
230
+ return [];
231
+ }
232
+ const targetDate = (0, import_dayjs.default)(date);
233
+ const scheduleStartDate = (0, import_dayjs.default)(schedule.start_time.split(" ")[0]);
234
+ if (!isDateInTimeSlotsSchedule(targetDate, schedule, scheduleStartDate)) {
235
+ return [];
236
+ }
237
+ const slots = [];
238
+ for (const timeSlot of schedule.time_slot) {
239
+ if (!timeSlot.start_time || !timeSlot.end_time) {
240
+ continue;
241
+ }
242
+ const startAt = (0, import_dayjs.default)(`${date} ${timeSlot.start_time}:00`);
243
+ const endAt = (0, import_dayjs.default)(`${date} ${timeSlot.end_time}:00`);
244
+ slots.push({
245
+ start_time: timeSlot.start_time,
246
+ end_time: timeSlot.end_time,
247
+ start_at: startAt,
248
+ end_at: endAt
249
+ });
250
+ }
251
+ return slots;
252
+ };
253
+ var isDateInTimeSlotsSchedule = (targetDate, schedule, scheduleStartDate) => {
254
+ if (schedule.repeat_type === "none") {
255
+ return targetDate.isSame(scheduleStartDate, "day");
256
+ }
257
+ if (!schedule.repeat_rule) {
258
+ return false;
259
+ }
260
+ const { repeat_rule, repeat_type } = schedule;
261
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
262
+ 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")) {
266
+ return true;
267
+ }
268
+ }
269
+ }
270
+ if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
271
+ 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")) {
275
+ return false;
276
+ }
277
+ }
278
+ }
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")) {
282
+ return false;
283
+ }
284
+ }
285
+ if (targetDate.isBefore(scheduleStartDate, "day")) {
286
+ return false;
287
+ }
288
+ switch (repeat_type) {
289
+ case "daily":
290
+ return isDateInDailyRepeat(targetDate, scheduleStartDate, repeat_rule);
291
+ case "weekly":
292
+ return isDateInWeeklyRepeat(targetDate, scheduleStartDate, repeat_rule);
293
+ default:
294
+ return false;
295
+ }
296
+ };
297
+ var extractDesignationScheduleTimeSlots = (date, schedule) => {
298
+ if (!schedule.designation) {
299
+ return [];
300
+ }
301
+ const targetDate = (0, import_dayjs.default)(date);
302
+ const designations = Array.isArray(schedule.designation) ? schedule.designation : [schedule.designation];
303
+ const slots = [];
304
+ 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);
307
+ 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`);
310
+ slots.push({
311
+ start_time: designation.start_time,
312
+ end_time: designation.end_time,
313
+ start_at: startAt,
314
+ end_at: endAt
315
+ });
316
+ }
317
+ }
318
+ return slots;
319
+ };
320
+ var isDateInDesignationSchedule = (targetDate, schedule, designation, startDate, endDate) => {
321
+ if (schedule.repeat_type === "none") {
322
+ return targetDate.isSameOrAfter(startDate, "day") && targetDate.isSameOrBefore(endDate, "day");
323
+ }
324
+ if (!schedule.repeat_rule) {
325
+ return false;
326
+ }
327
+ const { repeat_rule, repeat_type } = schedule;
328
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
329
+ 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")) {
333
+ return true;
334
+ }
335
+ }
336
+ }
337
+ if (repeat_rule.excluded_date && repeat_rule.excluded_date.length > 0) {
338
+ 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")) {
342
+ return false;
343
+ }
344
+ }
345
+ }
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")) {
349
+ return false;
350
+ }
351
+ }
352
+ if (!targetDate.isSameOrAfter(startDate, "day") || !targetDate.isSameOrBefore(endDate, "day")) {
353
+ if (targetDate.isBefore(startDate, "day")) {
354
+ return false;
355
+ }
356
+ }
357
+ switch (repeat_type) {
358
+ case "daily":
359
+ return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
360
+ case "weekly":
361
+ return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
362
+ default:
363
+ return false;
364
+ }
365
+ };
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");
372
+ }
373
+ if (!schedule.repeat_rule) {
374
+ return false;
375
+ }
376
+ const { repeat_rule, repeat_type } = schedule;
377
+ if (repeat_rule.included_date && repeat_rule.included_date.length > 0) {
378
+ 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")) {
382
+ return true;
383
+ }
384
+ }
385
+ }
386
+ 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")) {
390
+ return false;
391
+ }
392
+ }
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")) {
396
+ return false;
397
+ }
398
+ }
399
+ if (targetDate.isBefore(startDate, "day")) {
400
+ return false;
401
+ }
402
+ switch (repeat_type) {
403
+ case "daily":
404
+ return isDateInDailyRepeat(targetDate, startDate, repeat_rule);
405
+ case "weekly":
406
+ return isDateInWeeklyRepeat(targetDate, startDate, repeat_rule);
407
+ default:
408
+ return false;
409
+ }
410
+ };
411
+ var isDateInDailyRepeat = (targetDate, startDate, repeatRule) => {
412
+ const daysDiff = targetDate.diff(startDate, "day");
413
+ if (daysDiff < 0) {
414
+ return false;
415
+ }
416
+ return daysDiff % repeatRule.frequency === 0;
417
+ };
418
+ var isDateInWeeklyRepeat = (targetDate, startDate, repeatRule) => {
419
+ const targetDayOfWeek = targetDate.day();
420
+ if (!repeatRule.frequency_date.includes(targetDayOfWeek)) {
421
+ return false;
422
+ }
423
+ const weeksDiff = targetDate.diff(startDate, "week");
424
+ if (weeksDiff < 0) {
425
+ return false;
426
+ }
427
+ return weeksDiff % repeatRule.frequency === 0;
428
+ };
429
+ var mergeAndSortTimeSlots = (slots) => {
430
+ if (slots.length === 0) {
431
+ return [];
432
+ }
433
+ const sorted = [...slots].sort((a, b) => {
434
+ return a.start_at.valueOf() - b.start_at.valueOf();
435
+ });
436
+ const unique = [];
437
+ const seenKeys = /* @__PURE__ */ new Set();
438
+ for (const slot of sorted) {
439
+ const key = `${slot.start_time}-${slot.end_time}`;
440
+ if (!seenKeys.has(key)) {
441
+ seenKeys.add(key);
442
+ unique.push(slot);
443
+ }
444
+ }
445
+ return unique;
446
+ };
447
+ // Annotate the CommonJS export names for ESM import in node:
448
+ 0 && (module.exports = {
449
+ getDateIsInSchedule,
450
+ getScheduleStartEndTimePoints
451
+ });
@@ -33,5 +33,5 @@ export declare class ScheduleModule extends BaseModule implements Module, Schedu
33
33
  static isInScheduleByDate({ date, schedule, }: {
34
34
  date: string;
35
35
  schedule: any;
36
- }): boolean | undefined;
36
+ }): boolean;
37
37
  }
@@ -39,6 +39,7 @@ var import_isSameOrBefore = __toESM(require("dayjs/plugin/isSameOrBefore"));
39
39
  var import_isSameOrAfter = __toESM(require("dayjs/plugin/isSameOrAfter"));
40
40
  var import_utils = require("../Date/utils");
41
41
  var import_utils2 = require("./utils");
42
+ var import_getDateIsInSchedule = require("./getDateIsInSchedule");
42
43
  import_dayjs.default.extend(import_isSameOrBefore.default);
43
44
  import_dayjs.default.extend(import_isSameOrAfter.default);
44
45
  var ScheduleModule = class extends import_BaseModule.BaseModule {
@@ -169,6 +170,7 @@ var ScheduleModule = class extends import_BaseModule.BaseModule {
169
170
  schedule
170
171
  }) {
171
172
  var _a, _b, _c, _d;
173
+ return (0, import_getDateIsInSchedule.getDateIsInSchedule)(date, [schedule]);
172
174
  if (schedule.start_time && schedule.end_time) {
173
175
  const isBeforeStartTime = (0, import_dayjs.default)(date).isBefore(
174
176
  (0, import_dayjs.default)(schedule.start_time)
@@ -65,7 +65,7 @@ var SummaryModule = class extends import_BaseModule.BaseModule {
65
65
  this.getSurchargeList();
66
66
  }
67
67
  async getSurchargeList() {
68
- const surchargeList = await this.request.get("/order/custom-surcharge/available", {
68
+ const surchargeList = await this.request.get("/order/custom-surcharge/available/v2", {
69
69
  channel: "online-store",
70
70
  is_assemble_product_data: 1,
71
71
  is_assemble_schedule_data: 1,
@@ -74,14 +74,18 @@ var SummaryModule = class extends import_BaseModule.BaseModule {
74
74
  this.store.surchargeList = (surchargeList == null ? void 0 : surchargeList.data) || [];
75
75
  }
76
76
  async getSummary(cartItems) {
77
- var _a, _b;
77
+ var _a, _b, _c;
78
78
  const shopInfo = ((_b = (_a = this.shopStore.get("core")) == null ? void 0 : _a.core) == null ? void 0 : _b.shop) || {};
79
- const summary = (0, import_utils.calculatePriceDetails)(
80
- shopInfo,
81
- cartItems,
82
- import_Schedule.ScheduleModule.isInScheduleByDate,
83
- this.store.surchargeList
84
- );
79
+ const scheduleModule = this.core.getModule("appointmentBooking_schedule");
80
+ const needScheduleIds = this.store.surchargeList.map((item) => item.available_schedule_ids).flat();
81
+ const scheduleList = scheduleModule == null ? void 0 : scheduleModule.getScheduleListByIds(needScheduleIds);
82
+ const scheduleById = {};
83
+ if (Array.isArray(scheduleList)) {
84
+ for (let item of scheduleList) {
85
+ scheduleById[item.id] = item;
86
+ }
87
+ }
88
+ const summary = (0, import_utils.calculatePriceDetails)(shopInfo, cartItems, (_c = import_Schedule.ScheduleModule) == null ? void 0 : _c.isInScheduleByDate, this.store.surchargeList, scheduleById);
85
89
  this.store.summary = summary;
86
90
  return this.store.summary;
87
91
  }
@@ -115,7 +119,16 @@ var SummaryModule = class extends import_BaseModule.BaseModule {
115
119
  });
116
120
  }
117
121
  getSurchargeforUtils(items) {
118
- const surchargeList = (0, import_utils.getSurcharge)({ service: items, addons: [], bookingDetail: null, bookingId: void 0 }, { isEdit: false, isInScheduleByDate: import_Schedule.ScheduleModule.isInScheduleByDate, surcharge_list: this.store.surchargeList, scheduleById: {} });
122
+ const scheduleModule = this.core.getModule("appointmentBooking_schedule");
123
+ const needScheduleIds = this.store.surchargeList.map((item) => item.available_schedule_ids).flat();
124
+ const scheduleList = scheduleModule == null ? void 0 : scheduleModule.getScheduleListByIds(needScheduleIds);
125
+ const scheduleById = {};
126
+ if (Array.isArray(scheduleList)) {
127
+ for (let item of scheduleList) {
128
+ scheduleById[item.id] = item;
129
+ }
130
+ }
131
+ const surchargeList = (0, import_utils.getSurcharge)({ service: items, addons: [], bookingDetail: null, bookingId: void 0 }, { isEdit: false, isInScheduleByDate: import_Schedule.ScheduleModule.isInScheduleByDate, surcharge_list: this.store.surchargeList, scheduleById });
119
132
  const surchargeAmount = new import_decimal.default((0, import_utils.getSurchargeAmount)({ bookingDetail: null, bookingId: void 0 }, surchargeList, { isEdit: false }));
120
133
  return {
121
134
  surchargeList,
@@ -6,8 +6,6 @@ export interface ISummaryState {
6
6
  subtotal: string | number;
7
7
  /** 最终总价 */
8
8
  total: string | number;
9
- /** 最终原始价格 不包含折扣卡商品券折扣 */
10
- originTotal: string | number;
11
9
  /** 税率标题 */
12
10
  taxTitle?: string;
13
11
  /** 商品总费率 */
@@ -1,7 +1,7 @@
1
1
  import Decimal from 'decimal.js';
2
2
  import { CartItem } from '../Cart/types';
3
3
  import { ISummaryState } from './types';
4
- export declare const calculatePriceDetails: (shopInfo: any, items: CartItem[], isInScheduleByDate: any, surchargeList: any[]) => ISummaryState['summary'];
4
+ export declare const calculatePriceDetails: (shopInfo: any, items: CartItem[], isInScheduleByDate: any, surchargeList: any[], scheduleById: Record<string, any>) => ISummaryState['summary'];
5
5
  /**
6
6
  * 获取子商品折扣信息
7
7
  * @param item
@@ -58,12 +58,6 @@ export declare const getTax: ({ service, addons, bookingDetail, bookingId }: {
58
58
  * @returns 商品总价字符串,保留2位小数
59
59
  */
60
60
  export declare const calculateSubtotal: (items: CartItem[]) => string;
61
- /**
62
- * 计算商品小计(不含其他费用 不包含折扣卡商品券抵扣金额)
63
- * @param items - 购物车商品数组
64
- * @returns 商品总价字符串,保留2位小数
65
- */
66
- export declare const calculateOriginSubtotal: (items: CartItem[]) => string;
67
61
  /**
68
62
  * @title: 单个商品的税费
69
63
  * @description: