@feedmepos/mf-hrm-portal 2.3.2-dev.7 → 2.3.2-dev.9

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 (64) hide show
  1. package/dist/{ApprovalCodeList-Bw0E-hZl.js → ApprovalCodeList-gb0bre9J.js} +7 -7
  2. package/dist/{AuditLogList-CA-_t77n.js → AuditLogList-9cwS6bL7.js} +795 -719
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-LtjNCAFN.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DR-c15gr.js} +2 -2
  4. package/dist/{EmployeeList-D_bX0EhQ.js → EmployeeList-DjyoW1we.js} +8 -8
  5. package/dist/{FormSection.vue_vue_type_script_setup_true_lang-CyZxQa-b.js → FormSection.vue_vue_type_script_setup_true_lang-BBWlADve.js} +1 -1
  6. package/dist/{GrantUserList-Cg7ITk_M.js → GrantUserList-yU2NqFVO.js} +8 -8
  7. package/dist/{Main-Bl-Ocx1G.js → Main-4KwMqF3h.js} +5 -5
  8. package/dist/{Main-BaB4vgI5.js → Main-BS_Lk_eB.js} +1005 -999
  9. package/dist/{Main-D5wi42fp.js → Main-BuG7SPnC.js} +10 -10
  10. package/dist/MyPosProfile-CuDzRaRS.js +360 -0
  11. package/dist/{PermissionSetList-kgG9H3DX.js → PermissionSetList-D7SS1iAr.js} +30 -29
  12. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-y1YcZpGA.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-u1UlV2Aw.js} +902 -901
  13. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fQyCtDXM.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-CYkv2x_y.js} +1 -1
  14. package/dist/{RoleForm.vue_vue_type_script_setup_true_lang-3Q8udk43.js → RoleForm.vue_vue_type_script_setup_true_lang-hiMgwiya.js} +9 -9
  15. package/dist/{RoleList-Cmz97HHP.js → RoleList-B3P-LQYV.js} +7 -7
  16. package/dist/{ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CggEy3OI.js → ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang--dsZOhnv.js} +1 -1
  17. package/dist/{ScheduleGeneralPage-B39k3SQH.js → ScheduleGeneralPage-Pq6ufiDu.js} +2 -2
  18. package/dist/{ScheduleModal.vue_vue_type_script_setup_true_lang-C5j3D4eF.js → ScheduleModal.vue_vue_type_script_setup_true_lang-DKFJLsTW.js} +4 -4
  19. package/dist/{SchedulePage-AVmRkFi1.js → SchedulePage-8EAOfiJx.js} +189 -201
  20. package/dist/{SchedulePositionPage-3rE-O8CG.js → SchedulePositionPage-CGXeUnju.js} +3 -3
  21. package/dist/{SelectFilter-R7ry_GEg.js → SelectFilter-C-UEVLla.js} +1 -1
  22. package/dist/{TeamMemberList-CvDnIILn.js → TeamMemberList-Bd1O44Ur.js} +102 -101
  23. package/dist/TimesheetList-CSCmigCM.js +437 -0
  24. package/dist/{app-DKUCzcrc.js → app-BohKQtlz.js} +82 -14
  25. package/dist/app.js +1 -1
  26. package/dist/{approval-code-nsETgIry.js → approval-code-Bfvxsg8h.js} +4 -4
  27. package/dist/{dayjs.min-CtULWW1N.js → dayjs.min-C0MqTPg1.js} +1 -1
  28. package/dist/employee-DWxT78W2.js +172 -0
  29. package/dist/{grant-user-Dpa_Rl6j.js → grant-user-LZ3b6siI.js} +2 -2
  30. package/dist/{iteration-DpHBtiyr.js → index-DDDG-LHm.js} +698 -726
  31. package/dist/iteration-CcXrOMQe.js +30 -0
  32. package/dist/{lodash-YaHCUo_F.js → lodash-BRqMda7F.js} +1 -1
  33. package/dist/{member-grant-CEokFI3_.js → member-grant-a3AGCWfT.js} +2 -2
  34. package/dist/{restaurant-CDFKqEFm.js → restaurant-pL7vHt-H.js} +2 -2
  35. package/dist/{role-DyBVVlEA.js → role--EKCVqho.js} +8 -7
  36. package/dist/{rule-xErZqYmH.js → rule-Db3gFVHx.js} +83 -82
  37. package/dist/src/api/audit-log/index.d.ts +2 -0
  38. package/dist/src/api/employee/index.d.ts +1 -2
  39. package/dist/src/stores/approval-code.d.ts +1 -1
  40. package/dist/src/stores/employee.d.ts +3 -9
  41. package/dist/src/stores/grant-user.d.ts +1 -1
  42. package/dist/src/stores/permission-assignment.d.ts +2 -2
  43. package/dist/src/stores/permission-set.d.ts +2 -2
  44. package/dist/src/stores/restaurant.d.ts +2 -2
  45. package/dist/src/stores/role.d.ts +2 -2
  46. package/dist/src/stores/team.d.ts +1 -1
  47. package/dist/src/stores/timesheet.d.ts +62 -47
  48. package/dist/src/types/timesheet.d.ts +3 -0
  49. package/dist/src/views/audit-log/locales/index.d.ts +28 -0
  50. package/dist/src/views/audit-log/useTraceIdDeepLink.d.ts +19 -0
  51. package/dist/src/views/my-pos-profile/components/PasscodeChangedDialog.vue.d.ts +1 -1
  52. package/dist/src/views/my-pos-profile/locales/index.d.ts +40 -0
  53. package/dist/style.css +1 -1
  54. package/dist/timesheet-NYW1P4rf.js +76 -0
  55. package/dist/tsconfig.app.tsbuildinfo +1 -1
  56. package/dist/{useAppStore-BqsvPsPB.js → useAppStore-DV13z6oc.js} +1 -1
  57. package/dist/{useLoading-BS1bnZg1.js → useLoading-Fcnnfywt.js} +1 -1
  58. package/dist/useMessage-_ywT_N9X.js +17 -0
  59. package/dist/{useReportPermissions-DJEhkyGc.js → useReportPermissions-BcyVoKVq.js} +13 -13
  60. package/package.json +3 -3
  61. package/dist/MyPosProfile-CUG_201f.js +0 -290
  62. package/dist/TimesheetList-DYoglTi8.js +0 -401
  63. package/dist/TimesheetList.vue_vue_type_style_index_0_scoped_d0c6fd51_lang-DBpzyQ17.js +0 -63
  64. package/dist/employee-DlsSqR3i.js +0 -210
@@ -0,0 +1,437 @@
1
+ import { ref as m, computed as v, defineComponent as fe, onMounted as pe, watch as X, resolveComponent as d, createElementBlock as P, openBlock as L, Fragment as Z, createVNode as s, createElementVNode as i, unref as n, withCtx as w, createCommentVNode as ve, toDisplayString as T, createTextVNode as he, isRef as ge, renderList as De, createBlock as ee, nextTick as we } from "vue";
2
+ import { d as l } from "./dayjs.min-C0MqTPg1.js";
3
+ import { useI18n as Ye } from "@feedmepos/mf-common";
4
+ import { useSnackbar as be, components as ye } from "@feedmepos/ui-library";
5
+ import { S as _e } from "./SelectFilter-C-UEVLla.js";
6
+ import { _ as Me } from "./app-BohKQtlz.js";
7
+ import { _ as xe } from "./TableEmptyState.vue_vue_type_script_setup_true_lang-IfAZmWr0.js";
8
+ import { u as ke } from "./useLoading-Fcnnfywt.js";
9
+ import { g as Se, s as Ve } from "./iteration-CcXrOMQe.js";
10
+ import { f as Ce } from "./utils-BZkjJbju.js";
11
+ import { n as Fe } from "./string-DZQ1uNjn.js";
12
+ import { u as Le } from "./restaurant-pL7vHt-H.js";
13
+ import { u as Te } from "./timesheet-NYW1P4rf.js";
14
+ function Oe(Y, a) {
15
+ return ["years", "months"].find((y) => {
16
+ const _ = Y.startOf(y), p = Y.endOf(y);
17
+ return Y.isSame(_, "day") && a.isSame(p, "day");
18
+ }) || "days";
19
+ }
20
+ function Re() {
21
+ const Y = {
22
+ startDate: l().format("YYYY-MM-DD"),
23
+ endDate: l().format("YYYY-MM-DD")
24
+ }, a = m(Y), b = v(() => {
25
+ if (!a.value) return "No dates selected.";
26
+ const p = a.value.startDate ?? "Start", g = a.value.endDate ?? "End";
27
+ return `${p} - ${g}`;
28
+ }), y = v(() => ({
29
+ startDate: new Date(a.value.startDate),
30
+ endDate: new Date(a.value.endDate)
31
+ }));
32
+ function _(p) {
33
+ const g = l(a.value.startDate), c = l(a.value.endDate), h = Oe(g, c), M = h === "days" ? c.diff(g, "days") + 1 : 1, O = p === "subtract" ? (D) => D.subtract(M, h) : (D) => D.add(M, h);
34
+ a.value = {
35
+ startDate: O(g).startOf(h).format("YYYY-MM-DD"),
36
+ endDate: O(c).endOf(h).format("YYYY-MM-DD")
37
+ };
38
+ }
39
+ return { dateRange: a, parsedDateRange: y, dateRangeLabel: b, setRange: _ };
40
+ }
41
+ const Ie = {
42
+ class: "my-16 flex w-[350px] flex-col gap-40"
43
+ }, $e = {
44
+ class: "flex gap-16"
45
+ }, Ae = {
46
+ class: "flex flex-col gap-4"
47
+ }, Ee = {
48
+ class: "fm-typo-body-md-400 text-fm-color-typo-secondary"
49
+ }, Ke = {
50
+ class: "fm-typo-body-md-700 text-fm-color-typo-primary"
51
+ }, Ne = {
52
+ class: "flex flex-col gap-8"
53
+ }, Ue = {
54
+ class: "fm-typo-body-xl-700"
55
+ }, ze = {
56
+ class: "flex flex-col gap-24"
57
+ }, Be = {
58
+ class: "flex flex-col gap-8"
59
+ }, Pe = {
60
+ class: "fm-typo-body-xl-700"
61
+ }, je = {
62
+ class: "flex flex-col gap-24"
63
+ }, He = {
64
+ key: 0,
65
+ class: "fm-typo-body-sm-400 text-fm-color-typo-error mt-1 flex items-center gap-4"
66
+ }, Ge = {
67
+ class: "flex items-center justify-start gap-8"
68
+ }, qe = {
69
+ class: "space-y-8"
70
+ }, Je = {
71
+ class: "flex items-start gap-8 flex-wrap xs:px-16"
72
+ }, Qe = {
73
+ class: "flex items-center gap-8"
74
+ }, We = {
75
+ class: "flex h-full flex-col overflow-auto"
76
+ }, ct = /* @__PURE__ */ fe({
77
+ __name: "TimesheetList",
78
+ setup(Y) {
79
+ const {
80
+ t: a
81
+ } = Ye(), b = be(), y = ke(b), _ = [{
82
+ label: a("hr.timesheet.listView"),
83
+ value: "listView"
84
+ }, {
85
+ label: a("hr.timesheet.userView"),
86
+ value: "userView"
87
+ }], p = m("listView"), g = v(() => {
88
+ var t;
89
+ return (t = _.find((e) => e.value === p.value)) == null ? void 0 : t.label;
90
+ }), c = m(""), h = Te(), M = Le(), O = v(() => new Map(M.restaurants.value.map((t) => [t._id, t.profile.code]))), D = v(() => h.timesheets.value.map((r) => {
91
+ const u = O.value.get(r.restaurantId);
92
+ return {
93
+ ...r,
94
+ restaurantCode: u
95
+ };
96
+ })), R = v(() => D.value.filter((t) => {
97
+ var e, r;
98
+ return t.user.name.toLowerCase().includes(c.value.toLowerCase()) || t.restaurantName.toLowerCase().includes(c.value.toLowerCase()) || ((e = t.restaurantCode) == null ? void 0 : e.toLowerCase().includes(c.value.toLowerCase())) || ((r = t.user.code) == null ? void 0 : r.toLowerCase().includes(c.value.toLowerCase()));
99
+ })), j = v(() => {
100
+ const t = Se(D.value, (r) => r.user.name), e = Object.entries(t).map(([r, u]) => ({
101
+ key: r,
102
+ user: u[0].user.name,
103
+ code: u[0].user.code || "",
104
+ timesheets: u,
105
+ total: Ce(u.reduce((A, B) => A + B.totalMin, 0))
106
+ }));
107
+ return Ve(e, {
108
+ selector: "user"
109
+ });
110
+ }), H = v(() => j.value.filter((t) => {
111
+ var e;
112
+ return t.user.toLowerCase().includes(c.value.toLowerCase()) || ((e = t.code) == null ? void 0 : e.toLowerCase().includes(c.value.toLowerCase()));
113
+ })), K = m(!1), N = v(() => K.value && D.value.length === 0), U = async () => {
114
+ const {
115
+ startDate: t,
116
+ endDate: e
117
+ } = x.value;
118
+ K.value = !0;
119
+ try {
120
+ await h.readTimesheet(new Date(t), new Date(e), I.value), await we(), z.value = Object.fromEntries(Object.entries(new Array(j.value.length).fill(!0)));
121
+ } catch (r) {
122
+ b.open({
123
+ title: r instanceof Error ? r.message : `${r}`,
124
+ type: "error"
125
+ });
126
+ } finally {
127
+ K.value = !1;
128
+ }
129
+ };
130
+ pe(async () => {
131
+ try {
132
+ await M.readRestaurants();
133
+ } catch (t) {
134
+ console.error("Failed to load timesheet dependencies:", t), b.open({
135
+ message: t instanceof Error ? t.message : String(t),
136
+ type: "error"
137
+ });
138
+ }
139
+ U();
140
+ });
141
+ const I = m(), te = v(() => M.restaurants.value.filter((t) => t.managable).map((t) => ({
142
+ label: `${t.profile.code ? `${t.profile.code} - ` : ""}${t.profile.name}`,
143
+ value: t._id
144
+ }))), {
145
+ dateRange: x,
146
+ dateRangeLabel: ae,
147
+ setRange: G
148
+ } = Re(), oe = [{
149
+ label: "Today",
150
+ value: {
151
+ startDate: l().format("YYYY-MM-DD"),
152
+ endDate: l().format("YYYY-MM-DD")
153
+ }
154
+ }, {
155
+ label: "Yesterday",
156
+ value: {
157
+ startDate: l().subtract(1, "day").format("YYYY-MM-DD"),
158
+ endDate: l().subtract(1, "day").format("YYYY-MM-DD")
159
+ }
160
+ }, {
161
+ label: "This week",
162
+ value: {
163
+ startDate: l().startOf("week").format("YYYY-MM-DD"),
164
+ endDate: l().endOf("week").format("YYYY-MM-DD")
165
+ }
166
+ }, {
167
+ label: "Last week",
168
+ value: {
169
+ startDate: l().subtract(1, "week").startOf("week").format("YYYY-MM-DD"),
170
+ endDate: l().subtract(1, "week").endOf("week").format("YYYY-MM-DD")
171
+ }
172
+ }, {
173
+ label: "Last 7 days",
174
+ value: {
175
+ startDate: l().subtract(7, "day").format("YYYY-MM-DD"),
176
+ endDate: l().subtract(1, "day").format("YYYY-MM-DD")
177
+ }
178
+ }, {
179
+ label: "This month",
180
+ value: {
181
+ startDate: l().startOf("month").format("YYYY-MM-DD"),
182
+ endDate: l().endOf("month").format("YYYY-MM-DD")
183
+ }
184
+ }, {
185
+ label: "Last month",
186
+ value: {
187
+ startDate: l().subtract(1, "month").startOf("month").format("YYYY-MM-DD"),
188
+ endDate: l().subtract(1, "month").endOf("month").format("YYYY-MM-DD")
189
+ }
190
+ }];
191
+ X([x, I], async () => {
192
+ U();
193
+ });
194
+ const se = [{
195
+ accessorKey: "user.code",
196
+ size: 100,
197
+ header: () => a("hr.employee.columns.code"),
198
+ cell: (t) => t.row.original.user.code || "--",
199
+ enableSorting: !0
200
+ }, {
201
+ accessorKey: "user",
202
+ header: () => a("hr.timesheet.columns.name"),
203
+ cell: (t) => t.row.original.user.name,
204
+ enableSorting: !1
205
+ }, {
206
+ accessorKey: "restaurantName",
207
+ header: () => a("hr.timesheet.columns.restaurant"),
208
+ cell: (t) => {
209
+ const e = t.row.original.restaurantCode, r = t.row.original.restaurantName;
210
+ return `${e ? e + " - " : ""}${r}`;
211
+ },
212
+ enableSorting: !0
213
+ }, {
214
+ accessorKey: "start",
215
+ header: () => a("hr.timesheet.columns.start"),
216
+ cell: (t) => t.row.original.start || "--",
217
+ enableSorting: !0
218
+ }, {
219
+ accessorKey: "end",
220
+ header: () => a("hr.timesheet.columns.end"),
221
+ cell: (t) => t.row.original.end || "--",
222
+ enableSorting: !0
223
+ }, {
224
+ name: "duration",
225
+ accessorKey: "duration",
226
+ header: () => a("hr.timesheet.columns.duration"),
227
+ cell: (t) => t.row.original.duration || "--",
228
+ enableSorting: !0
229
+ }], z = m({}), le = [{
230
+ accessorKey: "code",
231
+ size: 100,
232
+ header: () => a("hr.employee.columns.code"),
233
+ cell: (t) => t.row.original.code,
234
+ enableSorting: !1
235
+ }, {
236
+ accessorKey: "user",
237
+ header: () => a("hr.timesheet.columns.name"),
238
+ cell: (t) => {
239
+ const e = t.row.original;
240
+ if (typeof e.user == "string") {
241
+ const r = t.row.getIsExpanded();
242
+ return s("div", {
243
+ class: "flex items-center gap-8"
244
+ }, [s("div", {
245
+ onClick: (u) => {
246
+ u.stopPropagation(), t.row.getToggleExpandedHandler()(u);
247
+ }
248
+ }, [s(ye.FmButton, {
249
+ variant: "tertiary",
250
+ icon: r ? "keyboard_arrow_up" : "keyboard_arrow_down"
251
+ }, null)]), e.user]);
252
+ }
253
+ },
254
+ enableSorting: !1
255
+ }, {
256
+ accessorKey: "start",
257
+ header: () => a("hr.timesheet.columns.start"),
258
+ cell: (t) => {
259
+ const e = t.row.original;
260
+ return (e == null ? void 0 : e.start) || "--";
261
+ },
262
+ enableSorting: !1
263
+ }, {
264
+ accessorKey: "end",
265
+ header: () => a("hr.timesheet.columns.end"),
266
+ cell: (t) => {
267
+ const e = t.row.original;
268
+ return (e == null ? void 0 : e.end) || "--";
269
+ },
270
+ enableSorting: !1
271
+ }, {
272
+ name: "duration",
273
+ accessorKey: "duration",
274
+ header: () => a("hr.timesheet.columns.hourMinute"),
275
+ cell: (t) => {
276
+ const e = t.row.original;
277
+ return e.total ? `Total: ${e.total}` : e.duration;
278
+ },
279
+ enableSorting: !1
280
+ }], k = m(!1);
281
+ function q(t) {
282
+ f.value = t, S.value = l(f.value.startedAt).format("YYYY-MM-DD"), C.value = l(f.value.endedAt || f.value.startedAt).format("YYYY-MM-DD"), V.value = l(f.value.startedAt).format("HH:mm"), F.value = l(f.value.endedAt || f.value.startedAt).format("HH:mm"), k.value = !0;
283
+ }
284
+ const S = m(), V = m(), C = m(), F = m(), f = m(), $ = m("");
285
+ async function re() {
286
+ const t = J(S.value, V.value), e = J(C.value, F.value);
287
+ if (l(t).isAfter(e)) {
288
+ $.value = a("hr.timesheet.checkOutMustBeforeCheckIn");
289
+ return;
290
+ }
291
+ y.minor(async () => {
292
+ await h.updateTimesheet(f.value, t, e);
293
+ }, {
294
+ successMessage: a("hr.timesheet.update.successMessage")
295
+ }), U(), k.value = !1;
296
+ }
297
+ const J = (t, e) => l(t).set("h", parseInt(e.split(":")[0])).set("m", parseInt(e.split(":")[1])).toISOString();
298
+ return X([S, C, V, F], ([t, e, r, u]) => {
299
+ (t || e || r || u) && ($.value = "");
300
+ }), (t, e) => {
301
+ const r = d("FmAvatar"), u = d("FmDatePicker"), A = d("FmTimePicker"), B = d("FmIcon"), E = d("FmButton"), ne = d("FmSideSheet"), Q = d("FmChip"), ie = d("FmDateRangePicker"), ue = d("FmMenuItem"), de = d("FmMenu"), me = d("FmSpacer"), ce = d("FmSearch"), W = d("FmTable");
302
+ return L(), P(Z, null, [s(ne, {
303
+ modelValue: k.value,
304
+ "onUpdate:modelValue": e[5] || (e[5] = (o) => k.value = o),
305
+ "dismiss-away": "",
306
+ header: n(a)("hr.timesheet.update.title")
307
+ }, {
308
+ "side-sheet-footer": w(() => [i("div", Ge, [s(E, {
309
+ label: n(a)("common.update"),
310
+ size: "md",
311
+ variant: "primary",
312
+ onClick: re
313
+ }, null, 8, ["label"]), s(E, {
314
+ label: n(a)("common.cancel"),
315
+ size: "md",
316
+ variant: "secondary",
317
+ onClick: e[4] || (e[4] = (o) => k.value = !1)
318
+ }, null, 8, ["label"])])]),
319
+ default: w(() => [i("div", Ie, [i("div", $e, [s(r, {
320
+ name: f.value.user.name,
321
+ initials: n(Fe)(f.value.user.name),
322
+ size: "lg"
323
+ }, null, 8, ["name", "initials"]), i("div", Ae, [i("div", Ee, T(n(a)("hr.timesheet.employeeName")), 1), i("div", Ke, T(f.value.user.name), 1)])]), i("div", Ne, [i("div", Ue, T(n(a)("hr.timesheet.update.checkIn")), 1), i("div", ze, [s(u, {
324
+ modelValue: S.value,
325
+ "onUpdate:modelValue": e[0] || (e[0] = (o) => S.value = o),
326
+ disabled: !1,
327
+ label: n(a)("hr.timesheet.update.date")
328
+ }, null, 8, ["modelValue", "label"]), s(A, {
329
+ modelValue: V.value,
330
+ "onUpdate:modelValue": e[1] || (e[1] = (o) => V.value = o),
331
+ label: n(a)("hr.timesheet.update.time")
332
+ }, null, 8, ["modelValue", "label"])])]), i("div", Be, [i("div", Pe, T(n(a)("hr.timesheet.update.checkOut")), 1), i("div", je, [s(u, {
333
+ modelValue: C.value,
334
+ "onUpdate:modelValue": e[2] || (e[2] = (o) => C.value = o),
335
+ disabled: !1,
336
+ label: n(a)("hr.timesheet.update.date")
337
+ }, null, 8, ["modelValue", "label"]), s(A, {
338
+ modelValue: F.value,
339
+ "onUpdate:modelValue": e[3] || (e[3] = (o) => F.value = o),
340
+ label: n(a)("hr.timesheet.update.time")
341
+ }, null, 8, ["modelValue", "label"])])]), $.value ? (L(), P("div", He, [s(B, {
342
+ color: "#FF3B30",
343
+ name: "error",
344
+ size: "sm"
345
+ }), he(" " + T($.value), 1)])) : ve("", !0)])]),
346
+ _: 1
347
+ }, 8, ["modelValue", "header"]), i("div", qe, [i("div", Je, [s(_e, {
348
+ modelValue: I.value,
349
+ "onUpdate:modelValue": e[6] || (e[6] = (o) => I.value = o),
350
+ multiple: "",
351
+ items: te.value,
352
+ variant: "dark",
353
+ "selected-prefix": n(a)("hr.role.columns.restaurants"),
354
+ placeholder: n(a)("hr.role.columns.restaurants"),
355
+ class: "!w-auto pt-[3px]"
356
+ }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"]), i("div", Qe, [s(ie, {
357
+ modelValue: n(x),
358
+ "onUpdate:modelValue": e[7] || (e[7] = (o) => ge(x) ? x.value = o : null),
359
+ "show-predefined-range": "",
360
+ "predefined-range": oe
361
+ }, {
362
+ "trigger-button": w(() => [s(Q, {
363
+ label: n(ae)
364
+ }, null, 8, ["label"])]),
365
+ _: 1
366
+ }, 8, ["modelValue"]), s(E, {
367
+ icon: "chevron_left",
368
+ variant: "tertiary",
369
+ onClick: e[8] || (e[8] = (o) => n(G)("subtract"))
370
+ }), s(E, {
371
+ icon: "chevron_right",
372
+ variant: "tertiary",
373
+ onClick: e[9] || (e[9] = (o) => n(G)("add"))
374
+ })]), s(de, {
375
+ class: "pt-[3px]"
376
+ }, {
377
+ "menu-button": w(() => [s(Q, {
378
+ label: g.value,
379
+ "right-icon": "keyboard_arrow_down"
380
+ }, null, 8, ["label"])]),
381
+ default: w(() => [(L(), P(Z, null, De(_, (o) => s(ue, {
382
+ key: o.value,
383
+ label: o.label,
384
+ onClick: (Xe) => p.value = o.value
385
+ }, null, 8, ["label", "onClick"])), 64))]),
386
+ _: 1
387
+ }), s(me), s(ce, {
388
+ modelValue: c.value,
389
+ "onUpdate:modelValue": e[10] || (e[10] = (o) => c.value = o),
390
+ class: "w-[320px]",
391
+ placeholder: n(a)("hr.timesheet.search.placeholder")
392
+ }, null, 8, ["modelValue", "placeholder"])]), s(Me, {
393
+ class: "w-full xs:px-16"
394
+ }, {
395
+ default: w(() => [i("div", We, [s(xe, {
396
+ "is-loading": N.value,
397
+ "is-empty": p.value === "listView" ? R.value.length === 0 : H.value.length === 0,
398
+ "collapse-at": !1,
399
+ title: n(a)("hr.timesheet.noData.title"),
400
+ subtitle: ""
401
+ }, {
402
+ default: w(() => [p.value === "listView" ? (L(), ee(W, {
403
+ key: 0,
404
+ class: "min-w-[640px]",
405
+ "column-defs": se,
406
+ "row-data": R.value,
407
+ "page-size": R.value.length,
408
+ loading: N.value,
409
+ virtual: R.value.length > 0,
410
+ "pin-header-row": "",
411
+ "hide-footer": "",
412
+ "shrink-at": !1,
413
+ onRowClick: e[11] || (e[11] = (o) => q(o.original))
414
+ }, null, 8, ["row-data", "page-size", "loading", "virtual"])) : (L(), ee(W, {
415
+ key: 1,
416
+ class: "min-w-[640px]",
417
+ "column-defs": le,
418
+ "row-data": H.value,
419
+ "page-size": 100,
420
+ loading: N.value,
421
+ "pin-header-row": "",
422
+ "shrink-at": !1,
423
+ "expanded-state": z.value,
424
+ "get-sub-row": (o) => o.timesheets,
425
+ "onUpdate:expandedState": e[12] || (e[12] = (o) => z.value = o),
426
+ onRowClick: e[13] || (e[13] = (o) => q(o.original))
427
+ }, null, 8, ["row-data", "loading", "expanded-state", "get-sub-row"]))]),
428
+ _: 1
429
+ }, 8, ["is-loading", "is-empty", "title"])])]),
430
+ _: 1
431
+ })])], 64);
432
+ };
433
+ }
434
+ });
435
+ export {
436
+ ct as default
437
+ };
@@ -2721,7 +2721,14 @@ const gn = {
2721
2721
  requestPath: "Request Path",
2722
2722
  traceId: "Trace ID"
2723
2723
  },
2724
+ deepLink: {
2725
+ notFound: "Audit log not found for this link.",
2726
+ loadFailed: "Could not load the audit log for this link. Reload to try again."
2727
+ },
2724
2728
  detail: {
2729
+ copyLink: "Copy link",
2730
+ linkCopied: "Link copied",
2731
+ linkCopyFailed: "Failed to copy link",
2725
2732
  header: "Audit Log Detail",
2726
2733
  date: "Date",
2727
2734
  timestamp: "Timestamp",
@@ -3075,7 +3082,14 @@ const gn = {
3075
3082
  requestPath: "URL ที่เข้าถึง",
3076
3083
  traceId: "รหัสติดตาม"
3077
3084
  },
3085
+ deepLink: {
3086
+ notFound: "ไม่พบบันทึกการตรวจสอบสำหรับลิงก์นี้",
3087
+ loadFailed: "ไม่สามารถโหลดบันทึกการตรวจสอบสำหรับลิงก์นี้ได้ โปรดโหลดหน้าใหม่เพื่อลองอีกครั้ง"
3088
+ },
3078
3089
  detail: {
3090
+ copyLink: "คัดลอกลิงก์",
3091
+ linkCopied: "คัดลอกลิงก์แล้ว",
3092
+ linkCopyFailed: "คัดลอกลิงก์ไม่สำเร็จ",
3079
3093
  header: "รายละเอียดประวัติการใช้งาน",
3080
3094
  date: "วันที่",
3081
3095
  timestamp: "เวลา",
@@ -3430,7 +3444,14 @@ const gn = {
3430
3444
  requestPath: "请求路径",
3431
3445
  traceId: "追踪 ID"
3432
3446
  },
3447
+ deepLink: {
3448
+ notFound: "找不到此链接对应的审计日志。",
3449
+ loadFailed: "无法加载此链接对应的审计日志,请刷新页面重试。"
3450
+ },
3433
3451
  detail: {
3452
+ copyLink: "复制链接",
3453
+ linkCopied: "链接已复制",
3454
+ linkCopyFailed: "复制链接失败",
3434
3455
  header: "审计日志详情",
3435
3456
  date: "日期",
3436
3457
  timestamp: "时间戳",
@@ -3785,7 +3806,14 @@ const gn = {
3785
3806
  requestPath: "請求路徑",
3786
3807
  traceId: "追蹤 ID"
3787
3808
  },
3809
+ deepLink: {
3810
+ notFound: "找不到此連結對應的稽核日誌。",
3811
+ loadFailed: "無法載入此連結對應的稽核日誌,請重新整理頁面後再試。"
3812
+ },
3788
3813
  detail: {
3814
+ copyLink: "複製連結",
3815
+ linkCopied: "連結已複製",
3816
+ linkCopyFailed: "複製連結失敗",
3789
3817
  header: "審計日誌詳情",
3790
3818
  date: "日期",
3791
3819
  timestamp: "時間戳",
@@ -14338,7 +14366,10 @@ Max 5 days / week`,
14338
14366
  updatedJustNow: "Updated just now",
14339
14367
  show: "Show passcode",
14340
14368
  hide: "Hide passcode",
14341
- change: "Change passcode"
14369
+ change: "Change passcode",
14370
+ empty: "No passcode yet",
14371
+ emptyHint: "Generate a passcode to log in to FeedMe POS.",
14372
+ generate: "Generate passcode"
14342
14373
  },
14343
14374
  change: {
14344
14375
  title: "Change POS passcode",
@@ -14348,11 +14379,18 @@ Max 5 days / week`,
14348
14379
  inProgress: "Your passcode is already being changed. Please wait a moment and try again.",
14349
14380
  incomplete: "Your passcode was not updated at every restaurant. Please change it again."
14350
14381
  },
14382
+ generate: {
14383
+ failed: "Couldn't generate your passcode. Please try again."
14384
+ },
14351
14385
  changed: {
14352
14386
  title: "Passcode changed",
14353
14387
  message: "Your old passcode has stopped working. Use this new one to log in to FeedMe POS at all your restaurants.",
14354
14388
  done: "Done"
14355
14389
  },
14390
+ generated: {
14391
+ title: "Passcode generated",
14392
+ message: "Use this passcode to log in to FeedMe POS at all your restaurants."
14393
+ },
14356
14394
  manageAccount: {
14357
14395
  message: "To update your name, phone number, email or account password, go to",
14358
14396
  link: "Manage Account",
@@ -14389,7 +14427,10 @@ Max 5 days / week`,
14389
14427
  updatedJustNow: "อัปเดตเมื่อสักครู่",
14390
14428
  show: "แสดงรหัสผ่าน",
14391
14429
  hide: "ซ่อนรหัสผ่าน",
14392
- change: "เปลี่ยนรหัสผ่าน"
14430
+ change: "เปลี่ยนรหัสผ่าน",
14431
+ empty: "ยังไม่มีรหัสผ่าน",
14432
+ emptyHint: "สร้างรหัสผ่านเพื่อเข้าสู่ระบบ FeedMe POS",
14433
+ generate: "สร้างรหัสผ่าน"
14393
14434
  },
14394
14435
  change: {
14395
14436
  title: "เปลี่ยนรหัสผ่าน POS",
@@ -14399,11 +14440,18 @@ Max 5 days / week`,
14399
14440
  inProgress: "กำลังเปลี่ยนรหัสผ่านของคุณอยู่ โปรดรอสักครู่แล้วลองอีกครั้ง",
14400
14441
  incomplete: "รหัสผ่านของคุณยังไม่ได้อัปเดตในทุกร้านอาหาร โปรดเปลี่ยนอีกครั้ง"
14401
14442
  },
14443
+ generate: {
14444
+ failed: "ไม่สามารถสร้างรหัสผ่านได้ โปรดลองอีกครั้ง"
14445
+ },
14402
14446
  changed: {
14403
14447
  title: "เปลี่ยนรหัสผ่านแล้ว",
14404
14448
  message: "รหัสผ่านเดิมของคุณใช้งานไม่ได้แล้ว ใช้รหัสใหม่นี้เพื่อเข้าสู่ระบบ FeedMe POS ในทุกร้านอาหารของคุณ",
14405
14449
  done: "เสร็จสิ้น"
14406
14450
  },
14451
+ generated: {
14452
+ title: "สร้างรหัสผ่านแล้ว",
14453
+ message: "ใช้รหัสผ่านนี้เพื่อเข้าสู่ระบบ FeedMe POS ในทุกร้านอาหารของคุณ"
14454
+ },
14407
14455
  manageAccount: {
14408
14456
  message: "หากต้องการอัปเดตชื่อ หมายเลขโทรศัพท์ อีเมล หรือรหัสผ่านบัญชี ให้ไปที่",
14409
14457
  link: "จัดการบัญชี",
@@ -14440,7 +14488,10 @@ Max 5 days / week`,
14440
14488
  updatedJustNow: "刚刚更新",
14441
14489
  show: "显示密码",
14442
14490
  hide: "隐藏密码",
14443
- change: "更改密码"
14491
+ change: "更改密码",
14492
+ empty: "尚未设置密码",
14493
+ emptyHint: "生成密码后即可登录 FeedMe POS。",
14494
+ generate: "生成密码"
14444
14495
  },
14445
14496
  change: {
14446
14497
  title: "更改 POS 密码",
@@ -14450,11 +14501,18 @@ Max 5 days / week`,
14450
14501
  inProgress: "您的密码正在更改中,请稍候再试。",
14451
14502
  incomplete: "您的密码未在所有餐厅更新,请再次更改。"
14452
14503
  },
14504
+ generate: {
14505
+ failed: "无法生成密码,请重试。"
14506
+ },
14453
14507
  changed: {
14454
14508
  title: "密码已更改",
14455
14509
  message: "您的旧密码已失效。请使用此新密码登录您所有餐厅的 FeedMe POS。",
14456
14510
  done: "完成"
14457
14511
  },
14512
+ generated: {
14513
+ title: "密码已生成",
14514
+ message: "请使用此密码在您的所有餐厅登录 FeedMe POS。"
14515
+ },
14458
14516
  manageAccount: {
14459
14517
  message: "如需更新姓名、电话号码、电子邮件或账户密码,请前往",
14460
14518
  link: "管理账户",
@@ -14491,7 +14549,10 @@ Max 5 days / week`,
14491
14549
  updatedJustNow: "剛剛更新",
14492
14550
  show: "顯示密碼",
14493
14551
  hide: "隱藏密碼",
14494
- change: "更改密碼"
14552
+ change: "更改密碼",
14553
+ empty: "尚未設定密碼",
14554
+ emptyHint: "產生密碼後即可登入 FeedMe POS。",
14555
+ generate: "產生密碼"
14495
14556
  },
14496
14557
  change: {
14497
14558
  title: "更改 POS 密碼",
@@ -14501,11 +14562,18 @@ Max 5 days / week`,
14501
14562
  inProgress: "您的密碼正在更改中,請稍候再試。",
14502
14563
  incomplete: "您的密碼未在所有餐廳更新,請再次更改。"
14503
14564
  },
14565
+ generate: {
14566
+ failed: "無法產生密碼,請再試一次。"
14567
+ },
14504
14568
  changed: {
14505
14569
  title: "密碼已更改",
14506
14570
  message: "您的舊密碼已失效。請使用此新密碼登入您所有餐廳的 FeedMe POS。",
14507
14571
  done: "完成"
14508
14572
  },
14573
+ generated: {
14574
+ title: "密碼已產生",
14575
+ message: "請使用此密碼在您的所有餐廳登入 FeedMe POS。"
14576
+ },
14509
14577
  manageAccount: {
14510
14578
  message: "如需更新姓名、電話號碼、電子郵件或帳戶密碼,請前往",
14511
14579
  link: "管理帳戶",
@@ -20430,20 +20498,20 @@ const wt = (e) => ({
20430
20498
  }
20431
20499
  ]
20432
20500
  }
20433
- }), Sh = zt(Nt(je(() => import("./Main-BaB4vgI5.js")))), Ph = zt(Nt(je(() => import("./Main-D5wi42fp.js")))), Dh = zt(
20434
- Nt(je(() => import("./AuditLogList-CA-_t77n.js")))
20501
+ }), Sh = zt(Nt(je(() => import("./Main-BS_Lk_eB.js")))), Ph = zt(Nt(je(() => import("./Main-BuG7SPnC.js")))), Dh = zt(
20502
+ Nt(je(() => import("./AuditLogList-9cwS6bL7.js")))
20435
20503
  ), Oh = zt(
20436
- Nt(je(() => import("./Main-Bl-Ocx1G.js")))
20504
+ Nt(je(() => import("./Main-4KwMqF3h.js")))
20437
20505
  ), Mh = zt(
20438
- je(() => import("./MyPosProfile-CUG_201f.js"))
20439
- ), kh = je(() => import("./ApprovalCodeList-Bw0E-hZl.js")), Bh = je(() => import("./GrantUserList-Cg7ITk_M.js")), Th = je(() => import("./EmployeeList-D_bX0EhQ.js")), Eh = je(() => import("./RoleList-Cmz97HHP.js")), xh = je(() => import("./TimesheetList-DYoglTi8.js")), Rh = je(() => import("./TeamMemberList-CvDnIILn.js")), Nh = je(
20440
- () => import("./PermissionSetList-kgG9H3DX.js")
20506
+ je(() => import("./MyPosProfile-CuDzRaRS.js"))
20507
+ ), kh = je(() => import("./ApprovalCodeList-gb0bre9J.js")), Bh = je(() => import("./GrantUserList-yU2NqFVO.js")), Th = je(() => import("./EmployeeList-DjyoW1we.js")), Eh = je(() => import("./RoleList-B3P-LQYV.js")), xh = je(() => import("./TimesheetList-CSCmigCM.js")), Rh = je(() => import("./TeamMemberList-Bd1O44Ur.js")), Nh = je(
20508
+ () => import("./PermissionSetList-D7SS1iAr.js")
20441
20509
  ), Fh = so(
20442
- Nt(je(() => import("./SchedulePage-AVmRkFi1.js")))
20510
+ Nt(je(() => import("./SchedulePage-8EAOfiJx.js")))
20443
20511
  ), jh = so(
20444
- Nt(je(() => import("./SchedulePositionPage-3rE-O8CG.js")))
20512
+ Nt(je(() => import("./SchedulePositionPage-CGXeUnju.js")))
20445
20513
  ), Hh = so(
20446
- Nt(je(() => import("./ScheduleGeneralPage-B39k3SQH.js")))
20514
+ Nt(je(() => import("./ScheduleGeneralPage-Pq6ufiDu.js")))
20447
20515
  ), Gy = [
20448
20516
  // Landing: waits for menu access, then opens the first page the user can open.
20449
20517
  // Declared before the Employee parent (same path) so it wins the exact '/' match.
@@ -21554,7 +21622,7 @@ const Vy = /* @__PURE__ */ dt({
21554
21622
  };
21555
21623
  }
21556
21624
  });
21557
- var ks = { name: "@feedmepos/mf-hrm-portal", version: "2.3.2-dev.7", mode: "fmmf" };
21625
+ var ks = { name: "@feedmepos/mf-hrm-portal", version: "2.3.2-dev.9", mode: "fmmf" };
21558
21626
  console.log(
21559
21627
  `%c${ks.name}%c v${ks.version} %c${ks.mode}`,
21560
21628
  "background:#1f1f1f;color:#fff;padding:2px 6px;border-radius:3px 0 0 3px",
package/dist/app.js CHANGED
@@ -1,4 +1,4 @@
1
- import { E as e, D as o, F as p } from "./app-DKUCzcrc.js";
1
+ import { E as e, D as o, F as p } from "./app-BohKQtlz.js";
2
2
  export {
3
3
  e as FmApp,
4
4
  o as i18nMessages,