@pisell/private-materials 3.4.77 → 3.4.78
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.
- package/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/index.js +1 -1
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/preview.js +7 -7
- package/build/lowcode/render/default/view.css +1 -1
- package/build/lowcode/render/default/view.js +2 -2
- package/build/lowcode/view.css +1 -1
- package/build/lowcode/view.js +2 -2
- package/es/components/booking/addons/model.d.ts +1 -10
- package/es/components/booking/forms/model.d.ts +1 -10
- package/es/components/booking/forms/sendModal/useSendModal.d.ts +0 -1
- package/es/components/booking/info/model.d.ts +1 -10
- package/es/components/booking/info/service/addService/utils.d.ts +1 -1
- package/es/components/booking/info2/service/addService/utils.d.ts +1 -1
- package/es/components/booking/model.d.ts +1 -9
- package/es/components/booking/notes/model.d.ts +1 -10
- package/es/components/booking/payments/model.d.ts +1 -10
- package/es/components/eftposPay/amount.d.ts +1 -1
- package/es/components/eftposPay/device.d.ts +1 -1
- package/es/components/eftposPay/hooks.d.ts +1 -1
- package/es/components/eftposPay/store/index.d.ts +3 -3
- package/es/components/eventBooking/components/ErrorTip/index.d.ts +0 -1
- package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/CallToBook/index.d.ts +0 -1
- package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/WeekItem/index.d.ts +0 -1
- package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/index.d.ts +0 -1
- package/es/components/pay/toC/model.d.ts +1 -9
- package/es/components/schedules/model.d.ts +1 -9
- package/es/plus/saasAttendance/locales.d.ts +63 -0
- package/es/plus/saasAttendance/locales.js +71 -2
- package/es/plus/saasAttendance/settings/PermissonTab.d.ts +5 -0
- package/es/plus/saasAttendance/settings/PermissonTab.js +79 -0
- package/es/plus/saasAttendance/settings/ShiftScheduleTab.js +9 -3
- package/es/plus/saasAttendance/settings/components/MapField.js +69 -33
- package/es/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.d.ts +7 -0
- package/es/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.js +149 -0
- package/es/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.less +119 -0
- package/es/plus/saasAttendance/settings/index.js +7 -0
- package/es/plus/saasAttendance/settings/index.less +15 -0
- package/es/plus/saasAttendance/settings/types.d.ts +6 -0
- package/es/plus/selectHolder/components/ErrorTip/index.d.ts +0 -1
- package/es/plus/walletEditor/components/ImageUpload/index.d.ts +1 -1
- package/es/pro/Selector/Selector.d.ts +1 -1
- package/lib/components/booking/addons/model.d.ts +1 -10
- package/lib/components/booking/forms/model.d.ts +1 -10
- package/lib/components/booking/forms/sendModal/useSendModal.d.ts +0 -1
- package/lib/components/booking/info/model.d.ts +1 -10
- package/lib/components/booking/info/service/addService/utils.d.ts +1 -1
- package/lib/components/booking/info2/service/addService/utils.d.ts +1 -1
- package/lib/components/booking/model.d.ts +1 -9
- package/lib/components/booking/notes/model.d.ts +1 -10
- package/lib/components/booking/payments/model.d.ts +1 -10
- package/lib/components/eftposPay/amount.d.ts +1 -1
- package/lib/components/eftposPay/device.d.ts +1 -1
- package/lib/components/eftposPay/hooks.d.ts +1 -1
- package/lib/components/eftposPay/store/index.d.ts +3 -3
- package/lib/components/eventBooking/components/ErrorTip/index.d.ts +0 -1
- package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/CallToBook/index.d.ts +0 -1
- package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/WeekItem/index.d.ts +0 -1
- package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/index.d.ts +0 -1
- package/lib/components/pay/toC/model.d.ts +1 -9
- package/lib/components/schedules/model.d.ts +1 -9
- package/lib/plus/saasAttendance/locales.d.ts +63 -0
- package/lib/plus/saasAttendance/locales.js +65 -2
- package/lib/plus/saasAttendance/settings/PermissonTab.d.ts +5 -0
- package/lib/plus/saasAttendance/settings/PermissonTab.js +128 -0
- package/lib/plus/saasAttendance/settings/ShiftScheduleTab.js +2 -1
- package/lib/plus/saasAttendance/settings/components/MapField.js +50 -11
- package/lib/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.d.ts +7 -0
- package/lib/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.js +150 -0
- package/lib/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.less +119 -0
- package/lib/plus/saasAttendance/settings/index.js +12 -0
- package/lib/plus/saasAttendance/settings/index.less +15 -0
- package/lib/plus/saasAttendance/settings/types.d.ts +6 -0
- package/lib/plus/selectHolder/components/ErrorTip/index.d.ts +0 -1
- package/lib/plus/walletEditor/components/ImageUpload/index.d.ts +1 -1
- package/lib/pro/Selector/Selector.d.ts +1 -1
- package/lowcode/eco-cup-list/meta.ts +1 -1
- package/lowcode/eco-customer-list/meta.ts +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,128 @@
|
|
|
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/PermissonTab.tsx
|
|
30
|
+
var PermissonTab_exports = {};
|
|
31
|
+
__export(PermissonTab_exports, {
|
|
32
|
+
default: () => PermissonTab_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(PermissonTab_exports);
|
|
35
|
+
var import_react = __toESM(require("react"));
|
|
36
|
+
var import_antd = require("antd");
|
|
37
|
+
var import_utils = require("@pisell/utils");
|
|
38
|
+
var PermissionField = (props) => {
|
|
39
|
+
var _a;
|
|
40
|
+
(0, import_react.useEffect)(() => {
|
|
41
|
+
var _a2, _b;
|
|
42
|
+
if (typeof ((_a2 = props.value) == null ? void 0 : _a2.member_data_view_range) === "undefined") {
|
|
43
|
+
(_b = props.onChange) == null ? void 0 : _b.call(props, {
|
|
44
|
+
...props.value || {},
|
|
45
|
+
member_data_view_range: ["this_week"]
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}, []);
|
|
49
|
+
const options = [
|
|
50
|
+
{
|
|
51
|
+
label: import_utils.locales.getText(
|
|
52
|
+
"pisell2.attendance.group-settings.basic-info.permission.this-week.recommended"
|
|
53
|
+
),
|
|
54
|
+
value: "this_week"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
label: import_utils.locales.getText(
|
|
58
|
+
"pisell2.attendance.group-settings.basic-info.permission.last-week"
|
|
59
|
+
),
|
|
60
|
+
value: "last_week"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
label: import_utils.locales.getText(
|
|
64
|
+
"pisell2.attendance.group-settings.basic-info.permission.this-month"
|
|
65
|
+
),
|
|
66
|
+
value: "this_month"
|
|
67
|
+
}
|
|
68
|
+
];
|
|
69
|
+
const value = (_a = props.value) == null ? void 0 : _a.member_data_view_range;
|
|
70
|
+
const isLimited = Array.isArray(value) && value.length > 0;
|
|
71
|
+
return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
|
|
72
|
+
import_antd.Radio.Group,
|
|
73
|
+
{
|
|
74
|
+
value: isLimited ? "limited" : "unlimited",
|
|
75
|
+
onChange: (e) => {
|
|
76
|
+
var _a2, _b;
|
|
77
|
+
const nextMode = e.target.value;
|
|
78
|
+
if (nextMode === "limited") {
|
|
79
|
+
const next = Array.isArray(value) && value.length > 0 ? value : ["this_week"];
|
|
80
|
+
(_a2 = props.onChange) == null ? void 0 : _a2.call(props, {
|
|
81
|
+
...props.value || {},
|
|
82
|
+
member_data_view_range: next
|
|
83
|
+
});
|
|
84
|
+
} else {
|
|
85
|
+
(_b = props.onChange) == null ? void 0 : _b.call(props, {
|
|
86
|
+
...props.value || {},
|
|
87
|
+
member_data_view_range: []
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
style: { marginBottom: 8 }
|
|
92
|
+
},
|
|
93
|
+
/* @__PURE__ */ import_react.default.createElement(import_antd.Radio, { value: "limited" }, import_utils.locales.getText(
|
|
94
|
+
"pisell2.attendance.group-settings.basic-info.permission.limited"
|
|
95
|
+
)),
|
|
96
|
+
/* @__PURE__ */ import_react.default.createElement(import_antd.Radio, { value: "unlimited" }, import_utils.locales.getText(
|
|
97
|
+
"pisell2.attendance.group-settings.basic-info.permission.unlimited"
|
|
98
|
+
))
|
|
99
|
+
), isLimited && /* @__PURE__ */ import_react.default.createElement(
|
|
100
|
+
import_antd.Select,
|
|
101
|
+
{
|
|
102
|
+
mode: "multiple",
|
|
103
|
+
allowClear: true,
|
|
104
|
+
value,
|
|
105
|
+
options,
|
|
106
|
+
onChange: (next) => {
|
|
107
|
+
var _a2;
|
|
108
|
+
(_a2 = props.onChange) == null ? void 0 : _a2.call(props, {
|
|
109
|
+
...props.value || {},
|
|
110
|
+
member_data_view_range: next.length > 0 ? next : []
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
));
|
|
115
|
+
};
|
|
116
|
+
var PermissonTab = (props) => {
|
|
117
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__panel", id: props.id }, /* @__PURE__ */ import_react.default.createElement(
|
|
118
|
+
import_antd.Form.Item,
|
|
119
|
+
{
|
|
120
|
+
label: import_utils.locales.getText(
|
|
121
|
+
"pisell2.attendance.group-settings.data-permission.employee-data-view-range"
|
|
122
|
+
),
|
|
123
|
+
name: "permission"
|
|
124
|
+
},
|
|
125
|
+
/* @__PURE__ */ import_react.default.createElement(PermissionField, null)
|
|
126
|
+
));
|
|
127
|
+
};
|
|
128
|
+
var PermissonTab_default = PermissonTab;
|
|
@@ -37,6 +37,7 @@ var import_antd = require("antd");
|
|
|
37
37
|
var import_materials = require("@pisell/materials");
|
|
38
38
|
var import_utils = require("@pisell/utils");
|
|
39
39
|
var import_shiftModal = __toESM(require("./components/shiftModal"));
|
|
40
|
+
var import_ShiftPreview = __toESM(require("./components/shiftModal/ShiftPreview"));
|
|
40
41
|
var ScheduleSetting = (props) => {
|
|
41
42
|
const { value, onChange } = props;
|
|
42
43
|
const [open, setOpen] = (0, import_react.useState)(false);
|
|
@@ -101,6 +102,6 @@ var ShiftScheduleTab = (props) => {
|
|
|
101
102
|
]
|
|
102
103
|
},
|
|
103
104
|
/* @__PURE__ */ import_react.default.createElement(ScheduleSetting, null)
|
|
104
|
-
));
|
|
105
|
+
), /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, { noStyle: true, shouldUpdate: true }, (form) => /* @__PURE__ */ import_react.default.createElement(import_ShiftPreview.default, { value: form.getFieldValue(["shift", "fixed"]) })));
|
|
105
106
|
};
|
|
106
107
|
var ShiftScheduleTab_default = ShiftScheduleTab;
|
|
@@ -401,6 +401,9 @@ var MapField = (0, import_react.forwardRef)((props, ref) => {
|
|
|
401
401
|
const locations = (0, import_react.useMemo)(() => normalizeLocations(value), [value]);
|
|
402
402
|
const [addLocationOpen, setAddLocationOpen] = (0, import_react.useState)(false);
|
|
403
403
|
const [editingLocationValue, setEditingLocationValue] = (0, import_react.useState)(null);
|
|
404
|
+
const [editingLocationId, setEditingLocationId] = (0, import_react.useState)(
|
|
405
|
+
null
|
|
406
|
+
);
|
|
404
407
|
const locationFormMapRef = (0, import_react.useRef)(null);
|
|
405
408
|
const mapRef = (0, import_react.useRef)(null);
|
|
406
409
|
const [isMapReady, setIsMapReady] = (0, import_react.useState)(false);
|
|
@@ -472,6 +475,7 @@ var MapField = (0, import_react.forwardRef)((props, ref) => {
|
|
|
472
475
|
validRangeMeters: defaultRadius
|
|
473
476
|
};
|
|
474
477
|
setAddLocationOpen(true);
|
|
478
|
+
setEditingLocationId(null);
|
|
475
479
|
setEditingLocationValue(baseFormValue);
|
|
476
480
|
const currentPosition = await getCurrentPosition();
|
|
477
481
|
if (currentPosition) {
|
|
@@ -485,12 +489,12 @@ var MapField = (0, import_react.forwardRef)((props, ref) => {
|
|
|
485
489
|
}),
|
|
486
490
|
[defaultRadius]
|
|
487
491
|
);
|
|
488
|
-
const
|
|
492
|
+
const handleSubmitLocation = async () => {
|
|
489
493
|
if (!locationFormMapRef.current) return;
|
|
490
494
|
try {
|
|
491
495
|
const values = await locationFormMapRef.current.validate();
|
|
492
|
-
const
|
|
493
|
-
id: createLocationId(),
|
|
496
|
+
const nextLocation = {
|
|
497
|
+
id: editingLocationId ?? createLocationId(),
|
|
494
498
|
name: toMultiLangName(values.name),
|
|
495
499
|
radius: values.validRangeMeters,
|
|
496
500
|
address: {
|
|
@@ -498,15 +502,37 @@ var MapField = (0, import_react.forwardRef)((props, ref) => {
|
|
|
498
502
|
lng: parseFloat(values.longitude) || 0
|
|
499
503
|
}
|
|
500
504
|
};
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
505
|
+
if (editingLocationId) {
|
|
506
|
+
const nextLocations = locations.map(
|
|
507
|
+
(loc) => loc.id === editingLocationId ? nextLocation : loc
|
|
508
|
+
);
|
|
509
|
+
onChange == null ? void 0 : onChange(nextLocations);
|
|
510
|
+
setActiveLocationId(editingLocationId);
|
|
511
|
+
} else {
|
|
512
|
+
const nextLocations = [nextLocation, ...locations];
|
|
513
|
+
onChange == null ? void 0 : onChange(nextLocations);
|
|
514
|
+
setActiveLocationId(nextLocation.id);
|
|
515
|
+
}
|
|
504
516
|
setAddLocationOpen(false);
|
|
505
517
|
setEditingLocationValue(null);
|
|
518
|
+
setEditingLocationId(null);
|
|
506
519
|
} catch (error) {
|
|
507
520
|
console.error("Validation failed:", error);
|
|
508
521
|
}
|
|
509
522
|
};
|
|
523
|
+
const handleEditLocation = (0, import_react.useCallback)(
|
|
524
|
+
(location) => {
|
|
525
|
+
setAddLocationOpen(true);
|
|
526
|
+
setEditingLocationId(location.id);
|
|
527
|
+
setEditingLocationValue({
|
|
528
|
+
name: toMultiLangName(location.name),
|
|
529
|
+
latitude: String(location.address.lat ?? ""),
|
|
530
|
+
longitude: String(location.address.lng ?? ""),
|
|
531
|
+
validRangeMeters: location.radius ?? defaultRadius
|
|
532
|
+
});
|
|
533
|
+
},
|
|
534
|
+
[defaultRadius]
|
|
535
|
+
);
|
|
510
536
|
const handleRemoveLocation = (locationId) => {
|
|
511
537
|
const nextLocations = locations.filter((loc) => loc.id !== locationId);
|
|
512
538
|
onChange == null ? void 0 : onChange(nextLocations);
|
|
@@ -573,7 +599,19 @@ var MapField = (0, import_react.forwardRef)((props, ref) => {
|
|
|
573
599
|
onClick: () => handleLocationItemClick(location),
|
|
574
600
|
style: { cursor: "pointer" }
|
|
575
601
|
},
|
|
576
|
-
/* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-map-field__location-header" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__location-name" }, getLocationNameText(location.name)), /* @__PURE__ */ import_react.default.createElement(
|
|
602
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-map-field__location-header" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__location-name" }, getLocationNameText(location.name)), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-map-field__location-actions" }, /* @__PURE__ */ import_react.default.createElement(
|
|
603
|
+
import_antd.Button,
|
|
604
|
+
{
|
|
605
|
+
type: "text",
|
|
606
|
+
size: "small",
|
|
607
|
+
icon: /* @__PURE__ */ import_react.default.createElement(import_materials.Icon, { type: "pisell2-edit-05", size: 16 }),
|
|
608
|
+
className: "saas-attendance-map-field__edit-btn",
|
|
609
|
+
onClick: (e) => {
|
|
610
|
+
e.stopPropagation();
|
|
611
|
+
handleEditLocation(location);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
), /* @__PURE__ */ import_react.default.createElement(
|
|
577
615
|
import_antd.Button,
|
|
578
616
|
{
|
|
579
617
|
type: "text",
|
|
@@ -585,7 +623,7 @@ var MapField = (0, import_react.forwardRef)((props, ref) => {
|
|
|
585
623
|
handleRemoveLocation(location.id);
|
|
586
624
|
}
|
|
587
625
|
}
|
|
588
|
-
)),
|
|
626
|
+
))),
|
|
589
627
|
/* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__location-meta" }, import_utils.locales.getText(
|
|
590
628
|
"pisell2.attendance.group-settings.clock-in-method.add-location-modal.valid-range.label"
|
|
591
629
|
), ": ", /* @__PURE__ */ import_react.default.createElement("span", null, location.radius || defaultRadius))
|
|
@@ -601,20 +639,21 @@ var MapField = (0, import_react.forwardRef)((props, ref) => {
|
|
|
601
639
|
{
|
|
602
640
|
open: addLocationOpen,
|
|
603
641
|
title: import_utils.locales.getText(
|
|
604
|
-
"pisell2.attendance.group-settings.clock-in-method.add-location-modal.title"
|
|
642
|
+
editingLocationId ? "pisell2.attendance.group-settings.clock-in-method.edit-location-modal.title" : "pisell2.attendance.group-settings.clock-in-method.add-location-modal.title"
|
|
605
643
|
),
|
|
606
644
|
destroyOnHidden: true,
|
|
607
645
|
onCancel: () => {
|
|
608
646
|
setAddLocationOpen(false);
|
|
609
647
|
setEditingLocationValue(null);
|
|
648
|
+
setEditingLocationId(null);
|
|
610
649
|
},
|
|
611
650
|
okText: import_utils.locales.getText(
|
|
612
|
-
"pisell2.attendance.group-settings.actions.add-location-confirm"
|
|
651
|
+
editingLocationId ? "pisell2.attendance.group-settings.actions.edit-location-confirm" : "pisell2.attendance.group-settings.actions.add-location-confirm"
|
|
613
652
|
),
|
|
614
653
|
cancelText: import_utils.locales.getText(
|
|
615
654
|
"pisell2.attendance.group-settings.actions.cancel"
|
|
616
655
|
),
|
|
617
|
-
onOk:
|
|
656
|
+
onOk: handleSubmitLocation
|
|
618
657
|
},
|
|
619
658
|
/* @__PURE__ */ import_react.default.createElement(
|
|
620
659
|
LocationFormMap,
|
|
@@ -0,0 +1,150 @@
|
|
|
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/ShiftPreview.tsx
|
|
30
|
+
var ShiftPreview_exports = {};
|
|
31
|
+
__export(ShiftPreview_exports, {
|
|
32
|
+
default: () => ShiftPreview_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(ShiftPreview_exports);
|
|
35
|
+
var import_react = __toESM(require("react"));
|
|
36
|
+
var import_utils = require("@pisell/utils");
|
|
37
|
+
var import_ShiftPreview = require("./ShiftPreview.less");
|
|
38
|
+
var WEEKDAYS = [1, 2, 3, 4, 5, 6, 7];
|
|
39
|
+
var getWeekdayText = (weekday) => {
|
|
40
|
+
return import_utils.locales.getText(
|
|
41
|
+
`pisell2.attendance.group-settings.shift-schedule.modal.weekday.${weekday}`
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
var parseMinutes = (hhmm) => {
|
|
45
|
+
const [h, m] = (hhmm || "").split(":").map((v) => Number(v));
|
|
46
|
+
if (!Number.isFinite(h) || !Number.isFinite(m)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return h * 60 + m;
|
|
50
|
+
};
|
|
51
|
+
var formatClock = (hhmm) => {
|
|
52
|
+
const totalMinutes = parseMinutes(hhmm);
|
|
53
|
+
if (totalMinutes === null) return "";
|
|
54
|
+
const hours24 = Math.floor(totalMinutes / 60) % 24;
|
|
55
|
+
const minutes = totalMinutes % 60;
|
|
56
|
+
const suffix = hours24 >= 12 ? import_utils.locales.getText(
|
|
57
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.period.pm"
|
|
58
|
+
) : import_utils.locales.getText(
|
|
59
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.period.am"
|
|
60
|
+
);
|
|
61
|
+
const hours12 = hours24 % 12 === 0 ? 12 : hours24 % 12;
|
|
62
|
+
return `${hours12}:${String(minutes).padStart(2, "0")} ${suffix}`;
|
|
63
|
+
};
|
|
64
|
+
var formatWeeklyHours = (totalMinutes) => {
|
|
65
|
+
const hours = totalMinutes / 60;
|
|
66
|
+
if (Number.isInteger(hours)) return `${hours}`;
|
|
67
|
+
return `${hours.toFixed(2)}`.replace(/\.?0+$/, "");
|
|
68
|
+
};
|
|
69
|
+
var formatDuration = (totalMinutes) => {
|
|
70
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
71
|
+
const minutes = totalMinutes % 60;
|
|
72
|
+
return import_utils.locales.getText(
|
|
73
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.duration"
|
|
74
|
+
)(hours, minutes);
|
|
75
|
+
};
|
|
76
|
+
var ShiftPreview = (props) => {
|
|
77
|
+
const schedule = Array.isArray(props.value) ? props.value : [];
|
|
78
|
+
const previewDays = (0, import_react.useMemo)(() => {
|
|
79
|
+
const byWeekday = /* @__PURE__ */ new Map();
|
|
80
|
+
schedule.forEach((item) => {
|
|
81
|
+
if (item && typeof item.weekday === "number") {
|
|
82
|
+
byWeekday.set(item.weekday, item);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return WEEKDAYS.map((weekday) => {
|
|
86
|
+
const item = byWeekday.get(weekday);
|
|
87
|
+
const times = Array.isArray(item == null ? void 0 : item.times) ? item.times : [];
|
|
88
|
+
const timeRanges = times.map((time) => {
|
|
89
|
+
const startText = formatClock(time == null ? void 0 : time.start);
|
|
90
|
+
const endText = formatClock(time == null ? void 0 : time.end);
|
|
91
|
+
if (!startText || !endText) return null;
|
|
92
|
+
return { startText, endText };
|
|
93
|
+
}).filter(Boolean);
|
|
94
|
+
const totalMinutes = times.reduce((sum, time) => {
|
|
95
|
+
const start = parseMinutes(time == null ? void 0 : time.start);
|
|
96
|
+
const end = parseMinutes(time == null ? void 0 : time.end);
|
|
97
|
+
if (start === null || end === null || end <= start) {
|
|
98
|
+
return sum;
|
|
99
|
+
}
|
|
100
|
+
return sum + (end - start);
|
|
101
|
+
}, 0);
|
|
102
|
+
return {
|
|
103
|
+
weekday,
|
|
104
|
+
timeRanges,
|
|
105
|
+
totalMinutes
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
}, [schedule]);
|
|
109
|
+
const workingDays = previewDays.filter((day) => day.totalMinutes > 0).length;
|
|
110
|
+
const weeklyMinutes = previewDays.reduce(
|
|
111
|
+
(sum, day) => sum + day.totalMinutes,
|
|
112
|
+
0
|
|
113
|
+
);
|
|
114
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-preview" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-card" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-label" }, import_utils.locales.getText(
|
|
115
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.working-days"
|
|
116
|
+
)), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-value" }, workingDays), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-unit" }, import_utils.locales.getText(
|
|
117
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.days-per-week"
|
|
118
|
+
))), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-card" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-label" }, import_utils.locales.getText(
|
|
119
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.weekly-hours"
|
|
120
|
+
)), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-value" }, formatWeeklyHours(weeklyMinutes)), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-summary-unit" }, import_utils.locales.getText(
|
|
121
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.hours"
|
|
122
|
+
)))), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table-head" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table-cell" }, import_utils.locales.getText(
|
|
123
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.table.day"
|
|
124
|
+
)), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table-cell" }, import_utils.locales.getText(
|
|
125
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.table.shift-times"
|
|
126
|
+
)), /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table-cell" }, import_utils.locales.getText(
|
|
127
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.table.duration"
|
|
128
|
+
))), previewDays.map((day) => /* @__PURE__ */ import_react.default.createElement(
|
|
129
|
+
"div",
|
|
130
|
+
{
|
|
131
|
+
key: day.weekday,
|
|
132
|
+
className: "saas-attendance-group-settings__shift-table-row"
|
|
133
|
+
},
|
|
134
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table-cell" }, getWeekdayText(day.weekday)),
|
|
135
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table-cell" }, day.timeRanges.length > 0 ? /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-times" }, day.timeRanges.map((range, index) => /* @__PURE__ */ import_react.default.createElement(
|
|
136
|
+
"div",
|
|
137
|
+
{
|
|
138
|
+
key: `${day.weekday}-${index}`,
|
|
139
|
+
className: "saas-attendance-group-settings__shift-time-tag"
|
|
140
|
+
},
|
|
141
|
+
/* @__PURE__ */ import_react.default.createElement("span", { className: "saas-attendance-group-settings__shift-time-text" }, range.startText),
|
|
142
|
+
/* @__PURE__ */ import_react.default.createElement("span", { className: "saas-attendance-group-settings__shift-time-arrow" }, "→"),
|
|
143
|
+
/* @__PURE__ */ import_react.default.createElement("span", { className: "saas-attendance-group-settings__shift-time-text" }, range.endText)
|
|
144
|
+
))) : /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-empty" }, import_utils.locales.getText(
|
|
145
|
+
"pisell2.attendance.group-settings.shift-schedule.preview.no-shift"
|
|
146
|
+
))),
|
|
147
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-table-cell" }, day.totalMinutes > 0 ? /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-duration" }, formatDuration(day.totalMinutes)) : /* @__PURE__ */ import_react.default.createElement("div", { className: "saas-attendance-group-settings__shift-duration-empty" }, formatDuration(0)))
|
|
148
|
+
))));
|
|
149
|
+
};
|
|
150
|
+
var ShiftPreview_default = ShiftPreview;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
.saas-attendance-group-settings__shift-preview {
|
|
2
|
+
margin-top: 12px;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.saas-attendance-group-settings__shift-summary {
|
|
6
|
+
display: grid;
|
|
7
|
+
grid-template-columns: 1fr 1fr;
|
|
8
|
+
gap: 12px;
|
|
9
|
+
margin-top: 12px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.saas-attendance-group-settings__shift-summary-card {
|
|
13
|
+
border: 1px solid #e5e7eb;
|
|
14
|
+
border-radius: 10px;
|
|
15
|
+
background: #ffffff;
|
|
16
|
+
padding: 14px 16px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.saas-attendance-group-settings__shift-summary-label {
|
|
20
|
+
font-size: 12px;
|
|
21
|
+
line-height: 18px;
|
|
22
|
+
color: #6b7280;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.saas-attendance-group-settings__shift-summary-value {
|
|
26
|
+
margin-top: 8px;
|
|
27
|
+
font-size: 28px;
|
|
28
|
+
line-height: 32px;
|
|
29
|
+
font-weight: 600;
|
|
30
|
+
color: #111827;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.saas-attendance-group-settings__shift-summary-unit {
|
|
34
|
+
margin-top: 4px;
|
|
35
|
+
font-size: 12px;
|
|
36
|
+
line-height: 18px;
|
|
37
|
+
color: #6b7280;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.saas-attendance-group-settings__shift-table {
|
|
41
|
+
margin-top: 12px;
|
|
42
|
+
border: 1px solid #e5e7eb;
|
|
43
|
+
border-radius: 10px;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
background: #ffffff;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.saas-attendance-group-settings__shift-table-head {
|
|
49
|
+
display: grid;
|
|
50
|
+
grid-template-columns: 1fr 3fr 1fr;
|
|
51
|
+
gap: 0;
|
|
52
|
+
padding: 12px 16px;
|
|
53
|
+
background: #f9fafb;
|
|
54
|
+
border-bottom: 1px solid #e5e7eb;
|
|
55
|
+
font-size: 12px;
|
|
56
|
+
color: #6b7280;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.saas-attendance-group-settings__shift-table-row {
|
|
60
|
+
display: grid;
|
|
61
|
+
grid-template-columns: 1fr 3fr 1fr;
|
|
62
|
+
gap: 0;
|
|
63
|
+
padding: 12px 16px;
|
|
64
|
+
border-bottom: 1px solid #f3f4f6;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.saas-attendance-group-settings__shift-table-row:last-child {
|
|
68
|
+
border-bottom: none;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.saas-attendance-group-settings__shift-table-cell {
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.saas-attendance-group-settings__shift-times {
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
gap: 8px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.saas-attendance-group-settings__shift-time-tag {
|
|
83
|
+
padding: 2px 4px;
|
|
84
|
+
border-radius: 6px;
|
|
85
|
+
background: #f3f4f6;
|
|
86
|
+
color: #374151;
|
|
87
|
+
font-size: 12px;
|
|
88
|
+
font-weight: 500;
|
|
89
|
+
display: inline-flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
gap: 6px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.saas-attendance-group-settings__shift-time-text {
|
|
95
|
+
color: inherit;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.saas-attendance-group-settings__shift-time-arrow {
|
|
99
|
+
color: #6b7280;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.saas-attendance-group-settings__shift-empty {
|
|
103
|
+
color: #9ca3af;
|
|
104
|
+
font-size: 12px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.saas-attendance-group-settings__shift-duration {
|
|
108
|
+
padding: 2px 4px;
|
|
109
|
+
border-radius: 2px;
|
|
110
|
+
background: #ecfdf5;
|
|
111
|
+
color: #14532d;
|
|
112
|
+
font-size: 10px;
|
|
113
|
+
font-weight: 600;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.saas-attendance-group-settings__shift-duration-empty {
|
|
117
|
+
color: #9ca3af;
|
|
118
|
+
font-size: 12px;
|
|
119
|
+
}
|
|
@@ -43,6 +43,7 @@ var import_useEngineContext = __toESM(require("../../../hooks/useEngineContext")
|
|
|
43
43
|
var import_utils2 = require("../../../utils");
|
|
44
44
|
var import_locales = __toESM(require("../locales"));
|
|
45
45
|
var import_BasicInfoTab = __toESM(require("./BasicInfoTab"));
|
|
46
|
+
var import_PermissonTab = __toESM(require("./PermissonTab"));
|
|
46
47
|
var import_ShiftScheduleTab = __toESM(require("./ShiftScheduleTab"));
|
|
47
48
|
var import_ClockInMethodTab = __toESM(require("./ClockInMethodTab"));
|
|
48
49
|
var import_CorrectionPolicyTab = __toESM(require("./CorrectionPolicyTab"));
|
|
@@ -68,6 +69,11 @@ var TAB_CONFIGS = [
|
|
|
68
69
|
key: "correction",
|
|
69
70
|
icon: "pisell2-clock",
|
|
70
71
|
labelKey: "pisell2.attendance.group-settings.correction-policy"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: "permission",
|
|
75
|
+
icon: "pisell2-user-01",
|
|
76
|
+
labelKey: "pisell2.attendance.group-settings.data-permission"
|
|
71
77
|
}
|
|
72
78
|
];
|
|
73
79
|
var generateSimpleUUID = () => {
|
|
@@ -272,6 +278,12 @@ var Settings = (0, import_react.forwardRef)((props, ref) => {
|
|
|
272
278
|
form,
|
|
273
279
|
id: `saas-attendance-settings-section-${_uniqueId}-correction`
|
|
274
280
|
}
|
|
281
|
+
),
|
|
282
|
+
/* @__PURE__ */ import_react.default.createElement(
|
|
283
|
+
import_PermissonTab.default,
|
|
284
|
+
{
|
|
285
|
+
id: `saas-attendance-settings-section-${_uniqueId}-permission`
|
|
286
|
+
}
|
|
275
287
|
)
|
|
276
288
|
)
|
|
277
289
|
));
|
|
@@ -485,6 +485,21 @@
|
|
|
485
485
|
gap: 8px;
|
|
486
486
|
}
|
|
487
487
|
|
|
488
|
+
.saas-attendance-map-field__location-actions {
|
|
489
|
+
display: flex;
|
|
490
|
+
align-items: center;
|
|
491
|
+
gap: 4px;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.saas-attendance-map-field__edit-btn {
|
|
495
|
+
color: #9ca3af;
|
|
496
|
+
transition: color 0.2s ease;
|
|
497
|
+
|
|
498
|
+
&:hover {
|
|
499
|
+
color: #7f56d9;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
|
|
488
503
|
.saas-attendance-map-field__delete-btn {
|
|
489
504
|
color: #9ca3af;
|
|
490
505
|
transition: color 0.2s ease;
|
|
@@ -65,6 +65,10 @@ export interface AttendanceCorrection {
|
|
|
65
65
|
period_type: FrequencyType;
|
|
66
66
|
period_custom: number | null;
|
|
67
67
|
}
|
|
68
|
+
export declare type MemberDataViewRange = 'this_week' | 'last_week' | 'this_month';
|
|
69
|
+
export interface AttendancePermission {
|
|
70
|
+
member_data_view_range?: MemberDataViewRange[];
|
|
71
|
+
}
|
|
68
72
|
/**
|
|
69
73
|
* 考勤组设置值 - 完整的API数据结构
|
|
70
74
|
*/
|
|
@@ -76,6 +80,7 @@ export interface AttendanceGroupSettingsValue {
|
|
|
76
80
|
place: AttendancePlace;
|
|
77
81
|
member_ids: number[];
|
|
78
82
|
correction: AttendanceCorrection;
|
|
83
|
+
permission?: AttendancePermission;
|
|
79
84
|
creator_type?: string;
|
|
80
85
|
creator_id?: number;
|
|
81
86
|
editor_type?: string;
|
|
@@ -90,6 +95,7 @@ export interface BasicInfoTabValue {
|
|
|
90
95
|
name: MultiLangName;
|
|
91
96
|
timezone: string;
|
|
92
97
|
member_ids: number[];
|
|
98
|
+
permission?: AttendancePermission;
|
|
93
99
|
}
|
|
94
100
|
/**
|
|
95
101
|
* 排班规则Tab的值
|
|
@@ -3,6 +3,6 @@ export interface ImageUploadProps {
|
|
|
3
3
|
value?: string;
|
|
4
4
|
onChange?: (val: string) => void;
|
|
5
5
|
}
|
|
6
|
-
export declare const getBaseTime: (size: number) =>
|
|
6
|
+
export declare const getBaseTime: (size: number) => 2000 | 1000 | 4000 | 8000;
|
|
7
7
|
declare const ImageUpload: React.FC<ImageUploadProps>;
|
|
8
8
|
export default ImageUpload;
|
|
@@ -3,7 +3,7 @@ import { ItemLayout, ItemProps, PresetConfig, SelectorProps, SelectorVariant } f
|
|
|
3
3
|
import './selector.less';
|
|
4
4
|
export declare const SelectorContext: React.Context<{
|
|
5
5
|
disabled?: boolean | undefined;
|
|
6
|
-
mode?: "
|
|
6
|
+
mode?: "multiple" | "single" | undefined;
|
|
7
7
|
itemLayout?: ItemLayout | undefined;
|
|
8
8
|
valueType?: "object" | "primitive" | undefined;
|
|
9
9
|
variant?: SelectorVariant | undefined;
|