@pisell/private-materials 6.3.89 → 6.3.90

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 (94) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +1 -1
  6. package/build/lowcode/preview.js +7 -7
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +10 -10
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +10 -10
  11. package/es/components/appointmentBooking/components/TimeSlicing/components/SelectDateOS.d.ts +1 -0
  12. package/es/components/booking/info/date/index.d.ts +0 -1
  13. package/es/components/ecocup/components/CupInfoCard/index.d.ts +1 -0
  14. package/es/components/ecocup/components/CustomerCard/index.d.ts +1 -0
  15. package/es/components/eftposPay/windcave/windcave.d.ts +1 -0
  16. package/es/index.d.ts +1 -0
  17. package/es/index.js +1 -0
  18. package/es/plus/saasAttendance/index.d.ts +6 -0
  19. package/es/plus/saasAttendance/index.js +5 -0
  20. package/es/plus/saasAttendance/locales.d.ts +318 -0
  21. package/es/plus/saasAttendance/locales.js +354 -0
  22. package/es/plus/saasAttendance/settings/BasicInfoTab.d.ts +5 -0
  23. package/es/plus/saasAttendance/settings/BasicInfoTab.js +96 -0
  24. package/es/plus/saasAttendance/settings/ClockInMethodTab.d.ts +8 -0
  25. package/es/plus/saasAttendance/settings/ClockInMethodTab.js +81 -0
  26. package/es/plus/saasAttendance/settings/CorrectionPolicyTab.d.ts +8 -0
  27. package/es/plus/saasAttendance/settings/CorrectionPolicyTab.js +293 -0
  28. package/es/plus/saasAttendance/settings/ShiftScheduleTab.d.ts +5 -0
  29. package/es/plus/saasAttendance/settings/ShiftScheduleTab.js +109 -0
  30. package/es/plus/saasAttendance/settings/components/MapField.d.ts +78 -0
  31. package/es/plus/saasAttendance/settings/components/MapField.js +810 -0
  32. package/es/plus/saasAttendance/settings/components/index.d.ts +3 -0
  33. package/es/plus/saasAttendance/settings/components/index.js +2 -0
  34. package/es/plus/saasAttendance/settings/components/membersField/index.d.ts +7 -0
  35. package/es/plus/saasAttendance/settings/components/membersField/index.js +216 -0
  36. package/es/plus/saasAttendance/settings/components/membersField/index.less +70 -0
  37. package/es/plus/saasAttendance/settings/components/shiftModal/index.d.ts +18 -0
  38. package/es/plus/saasAttendance/settings/components/shiftModal/index.js +438 -0
  39. package/es/plus/saasAttendance/settings/index.d.ts +18 -0
  40. package/es/plus/saasAttendance/settings/index.js +255 -0
  41. package/es/plus/saasAttendance/settings/index.less +495 -0
  42. package/es/plus/saasAttendance/settings/serve.d.ts +27 -0
  43. package/es/plus/saasAttendance/settings/serve.js +83 -0
  44. package/es/plus/saasAttendance/settings/types.d.ts +128 -0
  45. package/es/plus/saasAttendance/settings/types.js +1 -0
  46. package/es/plus/selectHolder/locales.d.ts +6 -0
  47. package/es/plus/selectHolder/locales.js +6 -0
  48. package/es/plus/skuOptionsSelection/components/TitleExtra/index.d.ts +1 -0
  49. package/es/plus/skuOptionsSelection/components/VariantCard/index.d.ts +1 -0
  50. package/es/pro/Selector/demo.d.ts +1 -0
  51. package/lib/components/appointmentBooking/components/TimeSlicing/components/SelectDateOS.d.ts +1 -0
  52. package/lib/components/booking/info/date/index.d.ts +0 -1
  53. package/lib/components/ecocup/components/CupInfoCard/index.d.ts +1 -0
  54. package/lib/components/ecocup/components/CustomerCard/index.d.ts +1 -0
  55. package/lib/components/eftposPay/windcave/windcave.d.ts +1 -0
  56. package/lib/index.d.ts +1 -0
  57. package/lib/index.js +3 -0
  58. package/lib/plus/saasAttendance/index.d.ts +6 -0
  59. package/lib/plus/saasAttendance/index.js +39 -0
  60. package/lib/plus/saasAttendance/locales.d.ts +318 -0
  61. package/lib/plus/saasAttendance/locales.js +342 -0
  62. package/lib/plus/saasAttendance/settings/BasicInfoTab.d.ts +5 -0
  63. package/lib/plus/saasAttendance/settings/BasicInfoTab.js +152 -0
  64. package/lib/plus/saasAttendance/settings/ClockInMethodTab.d.ts +8 -0
  65. package/lib/plus/saasAttendance/settings/ClockInMethodTab.js +88 -0
  66. package/lib/plus/saasAttendance/settings/CorrectionPolicyTab.d.ts +8 -0
  67. package/lib/plus/saasAttendance/settings/CorrectionPolicyTab.js +369 -0
  68. package/lib/plus/saasAttendance/settings/ShiftScheduleTab.d.ts +5 -0
  69. package/lib/plus/saasAttendance/settings/ShiftScheduleTab.js +106 -0
  70. package/lib/plus/saasAttendance/settings/components/MapField.d.ts +78 -0
  71. package/lib/plus/saasAttendance/settings/components/MapField.js +631 -0
  72. package/lib/plus/saasAttendance/settings/components/index.d.ts +3 -0
  73. package/lib/plus/saasAttendance/settings/components/index.js +42 -0
  74. package/lib/plus/saasAttendance/settings/components/membersField/index.d.ts +7 -0
  75. package/lib/plus/saasAttendance/settings/components/membersField/index.js +247 -0
  76. package/lib/plus/saasAttendance/settings/components/membersField/index.less +70 -0
  77. package/lib/plus/saasAttendance/settings/components/shiftModal/index.d.ts +18 -0
  78. package/lib/plus/saasAttendance/settings/components/shiftModal/index.js +447 -0
  79. package/lib/plus/saasAttendance/settings/index.d.ts +18 -0
  80. package/lib/plus/saasAttendance/settings/index.js +283 -0
  81. package/lib/plus/saasAttendance/settings/index.less +495 -0
  82. package/lib/plus/saasAttendance/settings/serve.d.ts +27 -0
  83. package/lib/plus/saasAttendance/settings/serve.js +54 -0
  84. package/lib/plus/saasAttendance/settings/types.d.ts +128 -0
  85. package/lib/plus/saasAttendance/settings/types.js +17 -0
  86. package/lib/plus/selectHolder/locales.d.ts +6 -0
  87. package/lib/plus/selectHolder/locales.js +6 -0
  88. package/lib/plus/skuOptionsSelection/components/TitleExtra/index.d.ts +1 -0
  89. package/lib/plus/skuOptionsSelection/components/VariantCard/index.d.ts +1 -0
  90. package/lib/pro/Selector/demo.d.ts +1 -0
  91. package/lowcode/eco-cup-list/meta.ts +1 -1
  92. package/lowcode/eco-customer-list/meta.ts +1 -1
  93. package/lowcode/saas-attendance-settings/meta.ts +56 -0
  94. package/package.json +3 -3
@@ -0,0 +1,447 @@
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/plus/saasAttendance/settings/components/shiftModal/index.tsx
30
+ var shiftModal_exports = {};
31
+ __export(shiftModal_exports, {
32
+ default: () => shiftModal_default
33
+ });
34
+ module.exports = __toCommonJS(shiftModal_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_antd = require("antd");
37
+ var import_icons = require("@ant-design/icons");
38
+ var import_materials = require("@pisell/materials");
39
+ var import_utils = require("@pisell/utils");
40
+ var import_dayjs = __toESM(require("dayjs"));
41
+ var WEEKDAYS = [1, 2, 3, 4, 5, 6, 7];
42
+ var AntRow = import_antd.Row;
43
+ var AntCol = import_antd.Col;
44
+ var AntSpace = import_antd.Space;
45
+ var generateUUID = () => {
46
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
47
+ const r = Math.random() * 16 | 0;
48
+ const v = c === "x" ? r : r & 3 | 8;
49
+ return v.toString(16);
50
+ });
51
+ };
52
+ var pad2 = (val) => String(val).padStart(2, "0");
53
+ var createTime = (hour, minute) => {
54
+ return (0, import_dayjs.default)().hour(hour).minute(minute).second(0).millisecond(0);
55
+ };
56
+ var toMinutes = (val) => val.hour() * 60 + val.minute();
57
+ var parseHHmm = (hhmm) => {
58
+ const [h, m] = (hhmm || "").split(":").map((v) => Number(v));
59
+ if (!Number.isFinite(h) || !Number.isFinite(m)) {
60
+ return null;
61
+ }
62
+ return createTime(h, m);
63
+ };
64
+ var formatHHmm = (val) => `${pad2(val.hour())}:${pad2(val.minute())}`;
65
+ var buildInitialDays = (value) => {
66
+ const byWeekday = /* @__PURE__ */ new Map();
67
+ if (Array.isArray(value)) {
68
+ value.forEach((item) => {
69
+ if (item && typeof item.weekday === "number") {
70
+ byWeekday.set(item.weekday, item);
71
+ }
72
+ });
73
+ }
74
+ return WEEKDAYS.map((weekday) => {
75
+ const src = byWeekday.get(weekday);
76
+ const times = Array.isArray(src == null ? void 0 : src.times) ? src.times : [];
77
+ return {
78
+ weekday,
79
+ enabled: times.length > 0,
80
+ times: times.map((t) => {
81
+ return {
82
+ id: (t == null ? void 0 : t.id) || generateUUID(),
83
+ start: (t == null ? void 0 : t.start) ? parseHHmm(t.start) : null,
84
+ end: (t == null ? void 0 : t.end) ? parseHHmm(t.end) : null
85
+ };
86
+ })
87
+ };
88
+ });
89
+ };
90
+ var getWeekdayText = (weekday) => {
91
+ return import_utils.locales.getText(
92
+ `pisell2.attendance.group-settings.shift-schedule.modal.weekday.${weekday}`
93
+ );
94
+ };
95
+ var ShiftModal = (props) => {
96
+ const [form] = import_antd.Form.useForm();
97
+ (0, import_react.useEffect)(() => {
98
+ if (!props.open) return;
99
+ form.setFieldsValue({ days: buildInitialDays(props.value) });
100
+ }, [form, props.open, props.value]);
101
+ const isTimeOverlapping = (dayIndex, timeIndex) => {
102
+ const times = form.getFieldValue(["days", dayIndex, "times"]) || [];
103
+ const cur = times == null ? void 0 : times[timeIndex];
104
+ if (!(cur == null ? void 0 : cur.start) || !(cur == null ? void 0 : cur.end)) return false;
105
+ const curStart = toMinutes(cur.start);
106
+ const curEnd = toMinutes(cur.end);
107
+ if (curStart >= curEnd) return false;
108
+ for (let i = 0; i < times.length; i += 1) {
109
+ if (i === timeIndex) continue;
110
+ const other = times[i];
111
+ if (!(other == null ? void 0 : other.start) || !(other == null ? void 0 : other.end)) continue;
112
+ const oStart = toMinutes(other.start);
113
+ const oEnd = toMinutes(other.end);
114
+ if (oStart >= oEnd) continue;
115
+ const overlapped = curStart <= oEnd && oStart <= curEnd;
116
+ if (overlapped) return true;
117
+ }
118
+ return false;
119
+ };
120
+ const triggerDayValidation = (dayIndex) => {
121
+ const times = form.getFieldValue(["days", dayIndex, "times"]) || [];
122
+ const fields = [];
123
+ times.forEach((t, idx) => {
124
+ if (t == null ? void 0 : t.start) fields.push(["days", dayIndex, "times", idx, "start"]);
125
+ if (t == null ? void 0 : t.end) fields.push(["days", dayIndex, "times", idx, "end"]);
126
+ });
127
+ if (!fields.length) return;
128
+ form.validateFields(fields).catch(() => {
129
+ });
130
+ };
131
+ const toScheduleValue = (days) => {
132
+ const byWeekday = /* @__PURE__ */ new Map();
133
+ days.forEach((d) => {
134
+ if (d && typeof d.weekday === "number") {
135
+ byWeekday.set(d.weekday, d);
136
+ }
137
+ });
138
+ return WEEKDAYS.map((weekday) => {
139
+ const day = byWeekday.get(weekday);
140
+ if (!(day == null ? void 0 : day.enabled)) {
141
+ return { weekday, times: [] };
142
+ }
143
+ const times = Array.isArray(day.times) ? day.times : [];
144
+ const normalized = times.filter((t) => (t == null ? void 0 : t.start) && (t == null ? void 0 : t.end)).map((t) => ({
145
+ id: t.id || generateUUID(),
146
+ start: formatHHmm(t.start),
147
+ end: formatHHmm(t.end),
148
+ startSort: toMinutes(t.start)
149
+ })).sort((a, b) => a.startSort - b.startSort).map(({ startSort: _startSort, ...rest }) => rest);
150
+ return {
151
+ weekday,
152
+ times: normalized
153
+ };
154
+ });
155
+ };
156
+ const handleConfirm = async () => {
157
+ let values;
158
+ try {
159
+ values = await form.validateFields();
160
+ } catch {
161
+ return;
162
+ }
163
+ const days = Array.isArray(values == null ? void 0 : values.days) ? values.days : [];
164
+ props.onOk(toScheduleValue(days));
165
+ props.onCancel();
166
+ };
167
+ const footer = (0, import_react.useMemo)(() => {
168
+ return /* @__PURE__ */ import_react.default.createElement(AntSpace, { style: { width: "100%", justifyContent: "flex-end" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { onClick: props.onCancel }, import_utils.locales.getText("pisell2.attendance.group-settings.actions.cancel")), /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { type: "primary", onClick: handleConfirm }, import_utils.locales.getText("pisell2.attendance.group-settings.actions.confirm")));
169
+ }, [handleConfirm, props.onCancel]);
170
+ return /* @__PURE__ */ import_react.default.createElement(
171
+ import_materials.PisellModal,
172
+ {
173
+ open: props.open,
174
+ onCancel: props.onCancel,
175
+ title: import_utils.locales.getText(
176
+ "pisell2.attendance.group-settings.shift-schedule.modal.title"
177
+ ),
178
+ width: 720,
179
+ bodyStyle: { padding: 20 },
180
+ footer,
181
+ destroyOnClose: true
182
+ },
183
+ /* @__PURE__ */ import_react.default.createElement(import_antd.Form, { form, layout: "vertical" }, /* @__PURE__ */ import_react.default.createElement(import_antd.Form.List, { name: "days" }, (dayFields) => /* @__PURE__ */ import_react.default.createElement("div", null, dayFields.map((dayField, dayIndex) => {
184
+ return /* @__PURE__ */ import_react.default.createElement("div", { key: dayField.key, style: { padding: "12px 0" } }, /* @__PURE__ */ import_react.default.createElement(AntRow, { gutter: 12, align: "top" }, /* @__PURE__ */ import_react.default.createElement(AntCol, { flex: "180px" }, /* @__PURE__ */ import_react.default.createElement(
185
+ import_antd.Form.Item,
186
+ {
187
+ name: [dayField.name, "enabled"],
188
+ valuePropName: "checked",
189
+ style: { marginBottom: 0 }
190
+ },
191
+ /* @__PURE__ */ import_react.default.createElement(
192
+ import_antd.Checkbox,
193
+ {
194
+ onChange: (e) => {
195
+ const checked = e.target.checked;
196
+ const timesPath = [
197
+ "days",
198
+ dayIndex,
199
+ "times"
200
+ ];
201
+ if (checked) {
202
+ const current = form.getFieldValue(timesPath) || [];
203
+ if (!current.length) {
204
+ form.setFieldValue(timesPath, [
205
+ {
206
+ id: generateUUID(),
207
+ start: null,
208
+ end: null
209
+ }
210
+ ]);
211
+ }
212
+ } else {
213
+ form.setFieldValue(timesPath, []);
214
+ }
215
+ }
216
+ },
217
+ getWeekdayText(dayIndex + 1)
218
+ )
219
+ ), /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, { name: [dayField.name, "weekday"], hidden: true }, /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null))), /* @__PURE__ */ import_react.default.createElement(AntCol, { flex: "auto" }, /* @__PURE__ */ import_react.default.createElement(
220
+ import_antd.Form.Item,
221
+ {
222
+ noStyle: true,
223
+ shouldUpdate: (prev, cur) => {
224
+ var _a, _b, _c, _d, _e, _f, _g, _h;
225
+ return ((_b = (_a = prev == null ? void 0 : prev.days) == null ? void 0 : _a[dayIndex]) == null ? void 0 : _b.enabled) !== ((_d = (_c = cur == null ? void 0 : cur.days) == null ? void 0 : _c[dayIndex]) == null ? void 0 : _d.enabled) || ((_f = (_e = prev == null ? void 0 : prev.days) == null ? void 0 : _e[dayIndex]) == null ? void 0 : _f.times) !== ((_h = (_g = cur == null ? void 0 : cur.days) == null ? void 0 : _g[dayIndex]) == null ? void 0 : _h.times);
226
+ }
227
+ },
228
+ () => {
229
+ const enabled = form.getFieldValue([
230
+ "days",
231
+ dayIndex,
232
+ "enabled"
233
+ ]);
234
+ if (!enabled) {
235
+ return /* @__PURE__ */ import_react.default.createElement(
236
+ "div",
237
+ {
238
+ style: {
239
+ lineHeight: "40px",
240
+ color: "#6b7280"
241
+ }
242
+ },
243
+ import_utils.locales.getText(
244
+ "pisell2.attendance.group-settings.shift-schedule.modal.no-shift"
245
+ )
246
+ );
247
+ }
248
+ return /* @__PURE__ */ import_react.default.createElement(import_antd.Form.List, { name: [dayField.name, "times"] }, (timeFields, { add, remove }) => /* @__PURE__ */ import_react.default.createElement("div", null, timeFields.map((timeField, timeIndex) => {
249
+ return /* @__PURE__ */ import_react.default.createElement(
250
+ AntRow,
251
+ {
252
+ key: timeField.key,
253
+ gutter: 8,
254
+ style: { marginBottom: 8 }
255
+ },
256
+ /* @__PURE__ */ import_react.default.createElement(AntCol, { flex: "1 1 220px" }, /* @__PURE__ */ import_react.default.createElement(
257
+ import_antd.Form.Item,
258
+ {
259
+ name: [timeField.name, "id"],
260
+ hidden: true
261
+ },
262
+ /* @__PURE__ */ import_react.default.createElement(import_antd.Input, null)
263
+ ), /* @__PURE__ */ import_react.default.createElement(
264
+ import_antd.Form.Item,
265
+ {
266
+ label: timeIndex === 0 ? import_utils.locales.getText(
267
+ "pisell2.attendance.group-settings.shift-schedule.modal.start"
268
+ ) : void 0,
269
+ name: [timeField.name, "start"],
270
+ rules: [
271
+ {
272
+ validator: async (_rule, value) => {
273
+ if (!value) {
274
+ throw new Error(
275
+ import_utils.locales.getText(
276
+ "pisell2.attendance.group-settings.shift-schedule.modal.validation.start-required"
277
+ )
278
+ );
279
+ }
280
+ if (isTimeOverlapping(
281
+ dayIndex,
282
+ timeField.name
283
+ )) {
284
+ throw new Error(
285
+ import_utils.locales.getText(
286
+ "pisell2.attendance.group-settings.shift-schedule.modal.validation.overlap"
287
+ )
288
+ );
289
+ }
290
+ }
291
+ }
292
+ ]
293
+ },
294
+ /* @__PURE__ */ import_react.default.createElement(
295
+ import_antd.TimePicker,
296
+ {
297
+ use12Hours: true,
298
+ format: "h:mm A",
299
+ style: { width: "100%" },
300
+ onChange: () => {
301
+ triggerDayValidation(
302
+ dayIndex
303
+ );
304
+ form.validateFields([
305
+ [
306
+ "days",
307
+ dayIndex,
308
+ "times",
309
+ timeField.name,
310
+ "end"
311
+ ]
312
+ ]).catch(() => {
313
+ });
314
+ }
315
+ }
316
+ )
317
+ )),
318
+ /* @__PURE__ */ import_react.default.createElement(AntCol, { flex: "1 1 220px" }, /* @__PURE__ */ import_react.default.createElement(
319
+ import_antd.Form.Item,
320
+ {
321
+ label: timeIndex === 0 ? import_utils.locales.getText(
322
+ "pisell2.attendance.group-settings.shift-schedule.modal.end"
323
+ ) : void 0,
324
+ name: [timeField.name, "end"],
325
+ rules: [
326
+ {
327
+ validator: async (_rule, value) => {
328
+ if (!value) {
329
+ throw new Error(
330
+ import_utils.locales.getText(
331
+ "pisell2.attendance.group-settings.shift-schedule.modal.validation.end-required"
332
+ )
333
+ );
334
+ }
335
+ const startValue = form.getFieldValue([
336
+ "days",
337
+ dayIndex,
338
+ "times",
339
+ timeField.name,
340
+ "start"
341
+ ]) || null;
342
+ if (startValue && toMinutes(startValue) >= toMinutes(value)) {
343
+ throw new Error(
344
+ import_utils.locales.getText(
345
+ "pisell2.attendance.group-settings.shift-schedule.modal.validation.range"
346
+ )
347
+ );
348
+ }
349
+ }
350
+ }
351
+ ]
352
+ },
353
+ /* @__PURE__ */ import_react.default.createElement(
354
+ import_antd.TimePicker,
355
+ {
356
+ use12Hours: true,
357
+ format: "h:mm A",
358
+ style: { width: "100%" },
359
+ onChange: () => {
360
+ triggerDayValidation(
361
+ dayIndex
362
+ );
363
+ }
364
+ }
365
+ )
366
+ )),
367
+ /* @__PURE__ */ import_react.default.createElement(AntCol, { flex: "0 0 40px" }, timeIndex === 0 ? /* @__PURE__ */ import_react.default.createElement("div", { style: { height: 48 } }) : null, /* @__PURE__ */ import_react.default.createElement(
368
+ import_antd.Button,
369
+ {
370
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.DeleteOutlined, null),
371
+ onClick: () => {
372
+ remove(timeField.name);
373
+ triggerDayValidation(dayIndex);
374
+ const left = form.getFieldValue([
375
+ "days",
376
+ dayIndex,
377
+ "times"
378
+ ]) || [];
379
+ if (!left.length) {
380
+ form.setFieldValue(
381
+ [
382
+ "days",
383
+ dayIndex,
384
+ "enabled"
385
+ ],
386
+ false
387
+ );
388
+ }
389
+ }
390
+ }
391
+ ))
392
+ );
393
+ }), /* @__PURE__ */ import_react.default.createElement(
394
+ import_antd.Button,
395
+ {
396
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.PlusOutlined, null),
397
+ onClick: () => {
398
+ const times = form.getFieldValue([
399
+ "days",
400
+ dayIndex,
401
+ "times"
402
+ ]) || [];
403
+ const last = times[times.length - 1];
404
+ if (!(last == null ? void 0 : last.start) || !(last == null ? void 0 : last.end)) {
405
+ add({
406
+ id: generateUUID(),
407
+ start: null,
408
+ end: null
409
+ });
410
+ triggerDayValidation(dayIndex);
411
+ return;
412
+ }
413
+ const lastEnd = last.end;
414
+ const endDateText = lastEnd.format("YYYY-MM-DD");
415
+ const nextStart = lastEnd.add(
416
+ 1,
417
+ "hour"
418
+ );
419
+ const nextEnd = lastEnd.add(2, "hour");
420
+ const crossed = nextEnd.format("YYYY-MM-DD") !== endDateText || nextStart.format("YYYY-MM-DD") !== endDateText;
421
+ if (crossed) {
422
+ add({
423
+ id: generateUUID(),
424
+ start: createTime(23, 0),
425
+ end: createTime(23, 55)
426
+ });
427
+ triggerDayValidation(dayIndex);
428
+ return;
429
+ }
430
+ add({
431
+ id: generateUUID(),
432
+ start: nextStart,
433
+ end: nextEnd
434
+ });
435
+ triggerDayValidation(dayIndex);
436
+ }
437
+ },
438
+ import_utils.locales.getText(
439
+ "pisell2.attendance.group-settings.shift-schedule.modal.add-time"
440
+ )
441
+ )));
442
+ }
443
+ ))));
444
+ }))))
445
+ );
446
+ };
447
+ var shiftModal_default = ShiftModal;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import type { AttendanceGroupSettingsValue, TenantAccount } from './types';
3
+ import './index.less';
4
+ export interface ISettingsProps {
5
+ value?: AttendanceGroupSettingsValue;
6
+ onValuesChange?: (value: AttendanceGroupSettingsValue) => void;
7
+ onFinish?: (value: AttendanceGroupSettingsValue) => void;
8
+ loading?: boolean;
9
+ className?: string;
10
+ style?: React.CSSProperties;
11
+ /** 自定义滚动容器,可以是选择器字符串或 HTMLElement */
12
+ customScrollParent?: string | HTMLElement;
13
+ }
14
+ export declare const settingsContext: React.Context<{
15
+ members: TenantAccount[];
16
+ }>;
17
+ declare const Settings: React.FC<ISettingsProps>;
18
+ export default Settings;