oceanhelm 0.0.6 → 0.0.8
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/dist/oceanhelm.es.js +527 -486
- package/dist/oceanhelm.es.js.map +1 -1
- package/dist/oceanhelm.umd.js +1 -1
- package/dist/oceanhelm.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/ConfigurableSidebar.vue +208 -216
- package/src/components/CrewManagement.vue +82 -120
- package/src/components/VesselList.vue +92 -41
- package/src/utils/sidebarConfig.js +6 -0
package/dist/oceanhelm.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { openBlock as o, createElementBlock as l, normalizeClass as g, createElementVNode as e, toDisplayString as r, createCommentVNode as m, Fragment as p, renderList as
|
|
1
|
+
import { openBlock as o, createElementBlock as l, normalizeClass as g, createElementVNode as e, toDisplayString as r, createCommentVNode as m, Fragment as p, renderList as h, withModifiers as D, createTextVNode as _, renderSlot as O, withDirectives as v, vShow as P, normalizeStyle as E, createStaticVNode as x, vModelText as k, vModelSelect as C, vModelCheckbox as N } from "vue";
|
|
2
2
|
const S = (s, t) => {
|
|
3
3
|
const u = s.__vccOpts || s;
|
|
4
4
|
for (const [b, n] of t)
|
|
@@ -52,13 +52,17 @@ const S = (s, t) => {
|
|
|
52
52
|
return this.customClasses;
|
|
53
53
|
},
|
|
54
54
|
filteredMenuItems() {
|
|
55
|
-
return this.menuItems.filter((s) => this.hasPermission(s));
|
|
55
|
+
return this.menuItems.filter((s) => this.hasPermission(s) ? s.type === "dropdown" && s.children ? s.children.some((t) => this.hasPermission(t)) : !0 : !1);
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
58
|
mounted() {
|
|
59
59
|
this.responsive && this.initializeResponsiveBehavior();
|
|
60
60
|
},
|
|
61
61
|
methods: {
|
|
62
|
+
// Get filtered children for dropdown items
|
|
63
|
+
getFilteredChildren(s) {
|
|
64
|
+
return s.children ? s.children.filter((t) => this.hasPermission(t)) : [];
|
|
65
|
+
},
|
|
62
66
|
// Permission checking
|
|
63
67
|
hasPermission(s) {
|
|
64
68
|
return this.permissionChecker ? this.permissionChecker(s, this.userProfile) : !s.roles || s.roles.length === 0 ? !0 : s.roles.includes(this.userProfile.role);
|
|
@@ -91,7 +95,7 @@ const S = (s, t) => {
|
|
|
91
95
|
}, L = {
|
|
92
96
|
key: 0,
|
|
93
97
|
class: "logo d-flex align-items-center left"
|
|
94
|
-
},
|
|
98
|
+
}, $ = { class: "list-unstyled components mt-4" }, j = ["onClick"], B = ["href", "onClick"], H = ["onClick"], Q = {
|
|
95
99
|
class: "dropdown-toggle",
|
|
96
100
|
type: "button",
|
|
97
101
|
"data-bs-toggle": "dropdown",
|
|
@@ -114,16 +118,16 @@ function Y(s, t, u, b, n, a) {
|
|
|
114
118
|
}, null, 2),
|
|
115
119
|
e("span", null, r(u.brandName), 1)
|
|
116
120
|
])) : m("", !0),
|
|
117
|
-
e("ul",
|
|
118
|
-
(o(!0), l(p, null,
|
|
119
|
-
key:
|
|
121
|
+
e("ul", $, [
|
|
122
|
+
(o(!0), l(p, null, h(a.filteredMenuItems, (i, f) => (o(), l("li", {
|
|
123
|
+
key: f,
|
|
120
124
|
class: g({ active: i.active, dropdown: i.type === "dropdown" }),
|
|
121
|
-
onClick: (
|
|
125
|
+
onClick: (y) => a.handleItemClick(i)
|
|
122
126
|
}, [
|
|
123
127
|
i.type === "link" ? (o(), l("a", {
|
|
124
128
|
key: 0,
|
|
125
129
|
href: i.href || "#",
|
|
126
|
-
onClick: D((
|
|
130
|
+
onClick: D((y) => a.handleNavigation(i), ["prevent"])
|
|
127
131
|
}, [
|
|
128
132
|
i.icon ? (o(), l("i", {
|
|
129
133
|
key: 0,
|
|
@@ -132,7 +136,7 @@ function Y(s, t, u, b, n, a) {
|
|
|
132
136
|
_(" " + r(i.label), 1)
|
|
133
137
|
], 8, B)) : i.type === "button" ? (o(), l("a", {
|
|
134
138
|
key: 1,
|
|
135
|
-
onClick: D((
|
|
139
|
+
onClick: D((y) => a.handleAction(i), ["prevent"]),
|
|
136
140
|
style: { cursor: "pointer" }
|
|
137
141
|
}, [
|
|
138
142
|
i.icon ? (o(), l("i", {
|
|
@@ -149,15 +153,15 @@ function Y(s, t, u, b, n, a) {
|
|
|
149
153
|
_(" " + r(i.label), 1)
|
|
150
154
|
]),
|
|
151
155
|
e("div", J, [
|
|
152
|
-
(o(!0), l(p, null,
|
|
156
|
+
(o(!0), l(p, null, h(a.getFilteredChildren(i), (y, A) => (o(), l("a", {
|
|
153
157
|
key: A,
|
|
154
158
|
class: "dropdown-item black",
|
|
155
|
-
onClick: D((q) => a.handleAction(
|
|
159
|
+
onClick: D((q) => a.handleAction(y), ["prevent"]),
|
|
156
160
|
style: { cursor: "pointer" }
|
|
157
|
-
}, r(
|
|
161
|
+
}, r(y.label), 9, W))), 128))
|
|
158
162
|
])
|
|
159
163
|
], 64)) : i.type === "separator" ? (o(), l("div", G)) : i.type === "text" ? (o(), l("a", z, r(i.label), 1)) : m("", !0)
|
|
160
|
-
], 10,
|
|
164
|
+
], 10, j))), 128))
|
|
161
165
|
]),
|
|
162
166
|
O(s.$slots, "footer")
|
|
163
167
|
], 2);
|
|
@@ -206,7 +210,8 @@ const X = {
|
|
|
206
210
|
"vessel-delete",
|
|
207
211
|
"vessel-toggle-status",
|
|
208
212
|
"vessel-navigate",
|
|
209
|
-
"access-denied"
|
|
213
|
+
"access-denied",
|
|
214
|
+
"date-change"
|
|
210
215
|
],
|
|
211
216
|
computed: {
|
|
212
217
|
activeVesselsCount() {
|
|
@@ -235,7 +240,7 @@ const X = {
|
|
|
235
240
|
id: s.registrationNumber,
|
|
236
241
|
name: s.name
|
|
237
242
|
};
|
|
238
|
-
this.currentRoute === "dashboard" ? this.$emit("vessel-click", s) : this.$emit("vessel-navigate", t);
|
|
243
|
+
this.grantAccess(s) ? this.currentRoute === "dashboard" ? this.$emit("vessel-click", s) : this.$emit("vessel-navigate", t) : this.handleAccessDenied("this protected route");
|
|
239
244
|
},
|
|
240
245
|
handleDeleteVessel(s) {
|
|
241
246
|
if (!this.grantAccess(s)) {
|
|
@@ -265,6 +270,17 @@ const X = {
|
|
|
265
270
|
statusClass(s) {
|
|
266
271
|
return `status-${(s == null ? void 0 : s.toLowerCase()) || ""}`;
|
|
267
272
|
},
|
|
273
|
+
getDuration(s, t) {
|
|
274
|
+
const u = /* @__PURE__ */ new Date(), b = new Date(s), n = u - b;
|
|
275
|
+
if (n < 0)
|
|
276
|
+
return "Invalid (future date)";
|
|
277
|
+
const a = Math.floor(n / (1e3 * 60 * 60)), i = Math.floor(a / 24), f = a % 24;
|
|
278
|
+
let y = "";
|
|
279
|
+
return i > 0 && (y += `${i} day${i > 1 ? "s" : ""}`), f > 0 && (y += (y ? " " : "") + `${f} hr${f > 1 ? "s" : ""}`), y || "0 hr";
|
|
280
|
+
},
|
|
281
|
+
setVesselDate(s) {
|
|
282
|
+
this.$emit("date-change", s);
|
|
283
|
+
},
|
|
268
284
|
grantAccess(s) {
|
|
269
285
|
const { role: t, vessel: u } = this.userProfile;
|
|
270
286
|
return t === "owner" || t === "staff" || t === "captain" && u === s.name;
|
|
@@ -293,8 +309,14 @@ const X = {
|
|
|
293
309
|
}, ce = {
|
|
294
310
|
key: 2,
|
|
295
311
|
class: "row"
|
|
296
|
-
}, me = ["onClick"], ve = { class: "card-body d-flex align-items-center" }, pe = { class: "flex-grow-1" }, fe = { class: "d-flex justify-content-between align-items-center mb-2" }, he = { class: "card-title mb-0" }, ge = { class: "row" }, be = { class: "col-6" }, ye = { class: "mb-0" }, we = {
|
|
297
|
-
|
|
312
|
+
}, me = ["onClick"], ve = { class: "card-body d-flex align-items-center" }, pe = { class: "flex-grow-1" }, fe = { class: "d-flex justify-content-between align-items-center mb-2" }, he = { class: "card-title mb-0" }, ge = { class: "row" }, be = { class: "col-6" }, ye = { class: "mb-0" }, we = {
|
|
313
|
+
key: 0,
|
|
314
|
+
class: "col-6"
|
|
315
|
+
}, ke = { class: "mb-0" }, _e = { class: "mb-0" }, Ce = {
|
|
316
|
+
key: 1,
|
|
317
|
+
class: "col-6"
|
|
318
|
+
}, De = { class: "text-muted" }, xe = ["onClick"], Se = { class: "action-icon v-left delete" }, Pe = ["onClick"], Ae = ["onClick"];
|
|
319
|
+
function qe(s, t, u, b, n, a) {
|
|
298
320
|
return o(), l(p, null, [
|
|
299
321
|
e("div", Z, [
|
|
300
322
|
e("div", ee, [
|
|
@@ -339,7 +361,7 @@ function xe(s, t, u, b, n, a) {
|
|
|
339
361
|
]))
|
|
340
362
|
])) : m("", !0)
|
|
341
363
|
]),
|
|
342
|
-
t[
|
|
364
|
+
t[12] || (t[12] = e("h4", { class: "mb-4" }, [
|
|
343
365
|
e("i", { class: "bi bi-ship me-2" }),
|
|
344
366
|
_("Registered Vessels")
|
|
345
367
|
], -1)),
|
|
@@ -352,16 +374,16 @@ function xe(s, t, u, b, n, a) {
|
|
|
352
374
|
], -1),
|
|
353
375
|
e("p", { class: "mt-2" }, "Loading vessels...", -1)
|
|
354
376
|
]))) : u.vessels.length ? (o(), l("div", ce, [
|
|
355
|
-
(o(!0), l(p, null,
|
|
377
|
+
(o(!0), l(p, null, h(u.vessels, (i) => (o(), l("div", {
|
|
356
378
|
class: "col-lg-6",
|
|
357
379
|
key: i.registrationNumber || i.id
|
|
358
380
|
}, [
|
|
359
381
|
e("div", {
|
|
360
382
|
class: "vessel-card",
|
|
361
|
-
onClick: (
|
|
383
|
+
onClick: (f) => a.handleVesselClick(i)
|
|
362
384
|
}, [
|
|
363
385
|
e("div", ve, [
|
|
364
|
-
t[
|
|
386
|
+
t[11] || (t[11] = e("div", { class: "vessel-icon v-left" }, [
|
|
365
387
|
e("i", { class: "fas fa-ship" })
|
|
366
388
|
], -1)),
|
|
367
389
|
e("div", pe, [
|
|
@@ -376,23 +398,35 @@ function xe(s, t, u, b, n, a) {
|
|
|
376
398
|
t[8] || (t[8] = e("small", { class: "text-muted" }, "Registration #:", -1)),
|
|
377
399
|
e("p", ye, r(i.registrationNumber), 1)
|
|
378
400
|
]),
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
401
|
+
i.date ? (o(), l("div", we, [
|
|
402
|
+
i.status === "Active" ? (o(), l(p, { key: 0 }, [
|
|
403
|
+
t[9] || (t[9] = e("small", { class: "text-muted" }, "Active Duration:", -1)),
|
|
404
|
+
e("p", ke, r(a.getDuration(i.date, i.registrationNumber)), 1)
|
|
405
|
+
], 64)) : (o(), l(p, { key: 1 }, [
|
|
406
|
+
t[10] || (t[10] = e("small", { class: "text-muted" }, "Inactive Duration:", -1)),
|
|
407
|
+
e("p", _e, r(a.getDuration(i.date, i.registrationNumber)), 1)
|
|
408
|
+
], 64))
|
|
409
|
+
])) : (o(), l("div", Ce, [
|
|
410
|
+
e("small", De, r(i.status) + " Duration:", 1),
|
|
411
|
+
e("button", {
|
|
412
|
+
type: "button",
|
|
413
|
+
class: "btn btn-outline-primary btn-sm mt-1",
|
|
414
|
+
onClick: D((f) => a.setVesselDate(i.registrationNumber), ["stop"])
|
|
415
|
+
}, " Set Date ", 8, xe)
|
|
416
|
+
]))
|
|
383
417
|
])
|
|
384
418
|
])
|
|
385
419
|
]),
|
|
386
|
-
e("div",
|
|
420
|
+
e("div", Se, [
|
|
387
421
|
e("i", {
|
|
388
422
|
class: "bi bi-trash",
|
|
389
|
-
onClick: D((
|
|
390
|
-
}, null, 8,
|
|
423
|
+
onClick: D((f) => a.handleDeleteVessel(i), ["stop"])
|
|
424
|
+
}, null, 8, Pe)
|
|
391
425
|
]),
|
|
392
426
|
e("button", {
|
|
393
427
|
class: "btn btn-primary",
|
|
394
|
-
onClick: D((
|
|
395
|
-
}, r(i.status === "Active" ? "Mark Inactive" : "Mark Active"), 9,
|
|
428
|
+
onClick: D((f) => a.handleToggleStatus(i), ["stop"])
|
|
429
|
+
}, r(i.status === "Active" ? "Mark Inactive" : "Mark Active"), 9, Ae)
|
|
396
430
|
], 8, me)
|
|
397
431
|
]))), 128))
|
|
398
432
|
])) : (o(), l("div", ue, t[7] || (t[7] = [
|
|
@@ -403,8 +437,8 @@ function xe(s, t, u, b, n, a) {
|
|
|
403
437
|
])))
|
|
404
438
|
], 64);
|
|
405
439
|
}
|
|
406
|
-
const
|
|
407
|
-
const
|
|
440
|
+
const Te = /* @__PURE__ */ S(X, [["render", qe]]);
|
|
441
|
+
const Ie = {
|
|
408
442
|
name: "DashHead",
|
|
409
443
|
props: {
|
|
410
444
|
name: {
|
|
@@ -429,11 +463,11 @@ const Pe = {
|
|
|
429
463
|
this.$emit("logged-in");
|
|
430
464
|
}
|
|
431
465
|
}
|
|
432
|
-
},
|
|
433
|
-
function
|
|
434
|
-
return o(), l("div",
|
|
435
|
-
e("h2",
|
|
436
|
-
e("div",
|
|
466
|
+
}, Re = { class: "page-header d-flex justify-content-between align-items-center" }, Me = { style: { "margin-left": "20px" } }, Ve = { class: "d-flex" };
|
|
467
|
+
function Fe(s, t, u, b, n, a) {
|
|
468
|
+
return o(), l("div", Re, [
|
|
469
|
+
e("h2", Me, r(u.name), 1),
|
|
470
|
+
e("div", Ve, [
|
|
437
471
|
this.userProfile.role == "owner" ? (o(), l("button", {
|
|
438
472
|
key: 0,
|
|
439
473
|
class: "btn btn-outline-primary me-2",
|
|
@@ -451,7 +485,7 @@ function Re(s, t, u, b, n, a) {
|
|
|
451
485
|
])
|
|
452
486
|
]);
|
|
453
487
|
}
|
|
454
|
-
const
|
|
488
|
+
const Ee = /* @__PURE__ */ S(Ie, [["render", Fe]]), Ne = {
|
|
455
489
|
name: "OceanHelmMaintenance",
|
|
456
490
|
props: {
|
|
457
491
|
vesselInfo: {
|
|
@@ -818,52 +852,52 @@ const Ie = /* @__PURE__ */ S(Pe, [["render", Re]]), Me = {
|
|
|
818
852
|
});
|
|
819
853
|
}
|
|
820
854
|
}
|
|
821
|
-
},
|
|
855
|
+
}, Oe = { key: 0 }, Ue = ["onClick"], Le = { class: "content" }, $e = {
|
|
822
856
|
key: 0,
|
|
823
857
|
class: "loading-container"
|
|
824
|
-
},
|
|
858
|
+
}, je = { key: 1 }, Be = { class: "container" }, He = { class: "d-flex justify-content-between align-items-center" }, Qe = { class: "progress-container" }, Je = { class: "progress-info" }, We = { class: "progress-bar" }, Ge = { class: "checklist" }, ze = ["onClick"], Ye = { key: 0 }, Ke = ["onClick"], Xe = ["onClick"], Ze = { key: 0 }, et = { class: "checklist" }, tt = { class: "checklist-item" }, st = { class: "attachment-area" }, it = {
|
|
825
859
|
key: 2,
|
|
826
860
|
class: "status"
|
|
827
|
-
},
|
|
861
|
+
}, nt = { class: "form-group" }, ot = { class: "form-group" }, lt = { class: "input-group" }, rt = { class: "form-group" }, at = { class: "form-group" }, dt = { class: "input-group" }, ut = { class: "form-group" }, ct = { class: "form-group" }, mt = { class: "input-group" }, vt = { class: "form-group" }, pt = { class: "form-group" }, ft = ["value"], ht = { class: "input-group" }, gt = { class: "form-group" }, bt = { class: "input-group" }, yt = { class: "form-group" }, wt = { class: "form-group" }, kt = { class: "form-group" }, _t = { class: "checkbox-group" }, Ct = { class: "checkbox-item" }, Dt = { class: "checkbox-item" }, xt = { class: "input-group" }, St = { class: "form-group" }, Pt = { class: "form-group" }, At = { class: "form-group" }, qt = { class: "attachment-area" }, Tt = { class: "action-buttons" }, It = ["disabled"], Rt = { class: "task-table-wrapper" }, Mt = { class: "table-controls" }, Vt = { class: "filters" }, Ft = { class: "task-table" }, Et = ["onClick"], Nt = ["onClick"], Ot = { key: 0 }, Ut = {
|
|
828
862
|
class: "alert alert-primary",
|
|
829
863
|
role: "alert"
|
|
830
|
-
},
|
|
864
|
+
}, Lt = { class: "mb-0" }, $t = {
|
|
831
865
|
class: "report-container",
|
|
832
866
|
ref: "reportContainer"
|
|
833
|
-
},
|
|
867
|
+
}, jt = { class: "report-info" }, Bt = { class: "info-box" }, Ht = { class: "info-box" }, Qt = { class: "info-box" }, Jt = { class: "section" }, Wt = { class: "summary-grid" }, Gt = { class: "summary-card" }, zt = { class: "summary-number" }, Yt = { class: "section" }, Kt = { class: "task-header" }, Xt = { class: "task-title" }, Zt = { class: "task-component" }, es = { class: "task-details" }, ts = { class: "detail-item" }, ss = { class: "detail-value" }, is = { class: "detail-item" }, ns = { class: "detail-value" }, os = { class: "detail-item" }, ls = { class: "detail-value" }, rs = { class: "detail-item" }, as = { class: "detail-value" }, ds = { class: "detail-item" }, us = { class: "detail-value" }, cs = { class: "detail-item" }, ms = { class: "detail-value" }, vs = {
|
|
834
868
|
key: 0,
|
|
835
869
|
style: { margin: "15px 0", padding: "10px", background: "white", "border-radius": "5px" }
|
|
836
|
-
},
|
|
870
|
+
}, ps = { class: "detail-value" }, fs = {
|
|
837
871
|
key: 1,
|
|
838
872
|
style: { margin: "15px 0", padding: "10px", background: "white", "border-radius": "5px" }
|
|
839
|
-
},
|
|
873
|
+
}, hs = { class: "detail-value" }, gs = {
|
|
840
874
|
key: 2,
|
|
841
875
|
class: "checklist-progress"
|
|
842
|
-
},
|
|
843
|
-
function
|
|
844
|
-
return n.ready ? (o(), l("div",
|
|
876
|
+
}, bs = { class: "progress-bar" }, ys = { style: { "font-size": "0.9em", color: "#666", "margin-top": "5px" } }, ws = { class: "checklist-items" }, ks = { class: "checklist-icon" }, _s = { class: "section" }, Cs = { class: "info-box" }, Ds = { class: "signature-section" }, xs = { class: "signature-box" }, Ss = { style: { "margin-top": "10px", color: "#666" } };
|
|
877
|
+
function Ps(s, t, u, b, n, a) {
|
|
878
|
+
return n.ready ? (o(), l("div", Oe, [
|
|
845
879
|
e("div", null, [
|
|
846
880
|
v(e("nav", null, [
|
|
847
|
-
(o(!0), l(p, null,
|
|
881
|
+
(o(!0), l(p, null, h(n.sections, (i) => (o(), l("button", {
|
|
848
882
|
key: i.id,
|
|
849
883
|
class: g(["nav-btn", { active: n.activeSection === i.id }]),
|
|
850
|
-
onClick: (
|
|
851
|
-
}, r(i.icon) + " " + r(i.name), 11,
|
|
884
|
+
onClick: (f) => a.handleSectionClick(i)
|
|
885
|
+
}, r(i.icon) + " " + r(i.name), 11, Ue))), 128))
|
|
852
886
|
], 512), [
|
|
853
887
|
[P, !n.showReport]
|
|
854
888
|
]),
|
|
855
|
-
v(e("div",
|
|
889
|
+
v(e("div", Le, [
|
|
856
890
|
v(e("section", {
|
|
857
891
|
class: g(["form-section", { active: n.activeSection === "maintenance" }])
|
|
858
892
|
}, [
|
|
859
893
|
t[37] || (t[37] = e("h2", null, "🛠️ Maintenance Tasks", -1)),
|
|
860
|
-
n.isLoading ? (o(), l("div",
|
|
894
|
+
n.isLoading ? (o(), l("div", $e, t[27] || (t[27] = [
|
|
861
895
|
e("div", { class: "loading-spinner" }, null, -1),
|
|
862
896
|
e("p", null, "Loading checklist...", -1)
|
|
863
897
|
]))) : m("", !0),
|
|
864
|
-
n.isLoading ? m("", !0) : (o(), l("form",
|
|
865
|
-
e("div",
|
|
866
|
-
e("div",
|
|
898
|
+
n.isLoading ? m("", !0) : (o(), l("form", je, [
|
|
899
|
+
e("div", Be, [
|
|
900
|
+
e("div", He, [
|
|
867
901
|
t[29] || (t[29] = e("h1", null, "Maintenance Checklist", -1)),
|
|
868
902
|
a.showAddTaskButton ? (o(), l("button", {
|
|
869
903
|
key: 0,
|
|
@@ -874,44 +908,44 @@ function Cs(s, t, u, b, n, a) {
|
|
|
874
908
|
e("i", { class: "fas fa-plus" }, null, -1)
|
|
875
909
|
]))) : m("", !0)
|
|
876
910
|
]),
|
|
877
|
-
e("div",
|
|
878
|
-
e("div",
|
|
879
|
-
e("div",
|
|
911
|
+
e("div", Qe, [
|
|
912
|
+
e("div", Je, " Progress: " + r(a.progress) + "% (" + r(a.completedCount.length) + "/" + r(n.checklists.length) + ") ", 1),
|
|
913
|
+
e("div", We, [
|
|
880
914
|
e("div", {
|
|
881
915
|
class: "progress-fill",
|
|
882
916
|
style: E({ width: a.progress + "%" })
|
|
883
917
|
}, null, 4)
|
|
884
918
|
])
|
|
885
919
|
]),
|
|
886
|
-
e("ul",
|
|
887
|
-
(o(!0), l(p, null,
|
|
920
|
+
e("ul", Ge, [
|
|
921
|
+
(o(!0), l(p, null, h(n.checklists, (i) => (o(), l("li", {
|
|
888
922
|
key: i.id,
|
|
889
923
|
class: "checklist-item"
|
|
890
924
|
}, [
|
|
891
925
|
e("div", {
|
|
892
926
|
class: g(["checkbox", { checked: i.completed }]),
|
|
893
|
-
onClick: (
|
|
927
|
+
onClick: (f) => a.toggleTask(i)
|
|
894
928
|
}, [
|
|
895
|
-
i.completed ? (o(), l("span",
|
|
896
|
-
], 10,
|
|
929
|
+
i.completed ? (o(), l("span", Ye, "✓")) : m("", !0)
|
|
930
|
+
], 10, ze),
|
|
897
931
|
e("span", {
|
|
898
932
|
class: g(["task-text", { completed: i.completed }]),
|
|
899
|
-
onClick: (
|
|
900
|
-
}, r(i.text), 11,
|
|
933
|
+
onClick: (f) => a.toggleTask(i)
|
|
934
|
+
}, r(i.text), 11, Ke),
|
|
901
935
|
a.showAddTaskButton ? (o(), l("button", {
|
|
902
936
|
key: 0,
|
|
903
937
|
class: "delete-btn",
|
|
904
|
-
onClick: (
|
|
938
|
+
onClick: (f) => a.deleteTask(i.id),
|
|
905
939
|
title: "Delete task"
|
|
906
940
|
}, t[30] || (t[30] = [
|
|
907
941
|
x('<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3,6 5,6 21,6"></polyline><path d="m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg>', 1)
|
|
908
|
-
]), 8,
|
|
942
|
+
]), 8, Xe)) : m("", !0)
|
|
909
943
|
]))), 128))
|
|
910
944
|
]),
|
|
911
|
-
n.after ? (o(), l("div",
|
|
945
|
+
n.after ? (o(), l("div", Ze, [
|
|
912
946
|
t[33] || (t[33] = e("label", null, "Upload Image Evidence", -1)),
|
|
913
|
-
e("ul",
|
|
914
|
-
e("li",
|
|
947
|
+
e("ul", et, [
|
|
948
|
+
e("li", tt, [
|
|
915
949
|
t[32] || (t[32] = e("span", { class: "task-text" }, " Image Evidence Already Uploaded ", -1)),
|
|
916
950
|
e("button", {
|
|
917
951
|
type: "button",
|
|
@@ -929,7 +963,7 @@ function Cs(s, t, u, b, n, a) {
|
|
|
929
963
|
}, [
|
|
930
964
|
t[35] || (t[35] = e("label", null, "Upload Image Evidence", -1)),
|
|
931
965
|
t[36] || (t[36] = e("p", null, "You can only upload one image evidence here.", -1)),
|
|
932
|
-
e("div",
|
|
966
|
+
e("div", st, [
|
|
933
967
|
e("p", null, r(n.fileText), 1),
|
|
934
968
|
e("input", {
|
|
935
969
|
type: "file",
|
|
@@ -943,7 +977,7 @@ function Cs(s, t, u, b, n, a) {
|
|
|
943
977
|
}, "Browse Files", -1))
|
|
944
978
|
])
|
|
945
979
|
])),
|
|
946
|
-
a.completedCount === n.checklists.length ? (o(), l("div",
|
|
980
|
+
a.completedCount === n.checklists.length ? (o(), l("div", it, " All tasks completed! ✅ ")) : m("", !0),
|
|
947
981
|
e("button", {
|
|
948
982
|
class: "reset-button",
|
|
949
983
|
onClick: t[3] || (t[3] = D((...i) => a.resetTasks && a.resetTasks(...i), ["prevent"]))
|
|
@@ -958,7 +992,7 @@ function Cs(s, t, u, b, n, a) {
|
|
|
958
992
|
}, [
|
|
959
993
|
t[62] || (t[62] = e("h2", null, "📅 Maintenance Schedule", -1)),
|
|
960
994
|
e("form", null, [
|
|
961
|
-
e("div",
|
|
995
|
+
e("div", nt, [
|
|
962
996
|
t[38] || (t[38] = e("label", { for: "task-name" }, "Task Name", -1)),
|
|
963
997
|
v(e("input", {
|
|
964
998
|
type: "text",
|
|
@@ -966,21 +1000,21 @@ function Cs(s, t, u, b, n, a) {
|
|
|
966
1000
|
"onUpdate:modelValue": t[4] || (t[4] = (i) => n.form.taskName = i),
|
|
967
1001
|
required: ""
|
|
968
1002
|
}, null, 512), [
|
|
969
|
-
[
|
|
1003
|
+
[k, n.form.taskName]
|
|
970
1004
|
])
|
|
971
1005
|
]),
|
|
972
|
-
e("div",
|
|
1006
|
+
e("div", ot, [
|
|
973
1007
|
t[39] || (t[39] = e("label", { for: "task-description" }, "Description", -1)),
|
|
974
1008
|
v(e("textarea", {
|
|
975
1009
|
id: "task-description",
|
|
976
1010
|
"onUpdate:modelValue": t[5] || (t[5] = (i) => n.form.description = i),
|
|
977
1011
|
required: ""
|
|
978
1012
|
}, null, 512), [
|
|
979
|
-
[
|
|
1013
|
+
[k, n.form.description]
|
|
980
1014
|
])
|
|
981
1015
|
]),
|
|
982
|
-
e("div",
|
|
983
|
-
e("div",
|
|
1016
|
+
e("div", lt, [
|
|
1017
|
+
e("div", rt, [
|
|
984
1018
|
t[41] || (t[41] = e("label", { for: "maintenance-type" }, "Maintenance Type", -1)),
|
|
985
1019
|
v(e("select", {
|
|
986
1020
|
id: "maintenance-type",
|
|
@@ -992,7 +1026,7 @@ function Cs(s, t, u, b, n, a) {
|
|
|
992
1026
|
[C, n.form.maintenanceType]
|
|
993
1027
|
])
|
|
994
1028
|
]),
|
|
995
|
-
e("div",
|
|
1029
|
+
e("div", at, [
|
|
996
1030
|
t[43] || (t[43] = e("label", { for: "component" }, "Component/System", -1)),
|
|
997
1031
|
v(e("select", {
|
|
998
1032
|
id: "component",
|
|
@@ -1010,12 +1044,12 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1010
1044
|
"onUpdate:modelValue": t[8] || (t[8] = (i) => n.form.customComponent = i),
|
|
1011
1045
|
style: { "margin-top": "8px" }
|
|
1012
1046
|
}, null, 512)), [
|
|
1013
|
-
[
|
|
1047
|
+
[k, n.form.customComponent]
|
|
1014
1048
|
]) : m("", !0)
|
|
1015
1049
|
])
|
|
1016
1050
|
]),
|
|
1017
|
-
e("div",
|
|
1018
|
-
e("div",
|
|
1051
|
+
e("div", dt, [
|
|
1052
|
+
e("div", ut, [
|
|
1019
1053
|
t[45] || (t[45] = e("label", { for: "priority" }, "Priority", -1)),
|
|
1020
1054
|
v(e("select", {
|
|
1021
1055
|
id: "priority",
|
|
@@ -1030,7 +1064,7 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1030
1064
|
[C, n.form.priority]
|
|
1031
1065
|
])
|
|
1032
1066
|
]),
|
|
1033
|
-
e("div",
|
|
1067
|
+
e("div", ct, [
|
|
1034
1068
|
t[46] || (t[46] = e("label", { for: "status" }, "Status", -1)),
|
|
1035
1069
|
v(e("input", {
|
|
1036
1070
|
type: "text",
|
|
@@ -1038,12 +1072,12 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1038
1072
|
"onUpdate:modelValue": t[10] || (t[10] = (i) => n.form.status = i),
|
|
1039
1073
|
readonly: ""
|
|
1040
1074
|
}, null, 512), [
|
|
1041
|
-
[
|
|
1075
|
+
[k, n.form.status]
|
|
1042
1076
|
])
|
|
1043
1077
|
])
|
|
1044
1078
|
]),
|
|
1045
|
-
e("div",
|
|
1046
|
-
e("div",
|
|
1079
|
+
e("div", mt, [
|
|
1080
|
+
e("div", vt, [
|
|
1047
1081
|
t[47] || (t[47] = e("label", { for: "estimated-hours" }, "Estimated Hours", -1)),
|
|
1048
1082
|
v(e("input", {
|
|
1049
1083
|
type: "number",
|
|
@@ -1052,27 +1086,27 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1052
1086
|
min: "0",
|
|
1053
1087
|
step: "0.5"
|
|
1054
1088
|
}, null, 512), [
|
|
1055
|
-
[
|
|
1089
|
+
[k, n.form.estimatedHours]
|
|
1056
1090
|
])
|
|
1057
1091
|
])
|
|
1058
1092
|
]),
|
|
1059
|
-
e("div",
|
|
1093
|
+
e("div", pt, [
|
|
1060
1094
|
t[49] || (t[49] = e("label", { for: "assigned-to" }, "Assigned To", -1)),
|
|
1061
1095
|
v(e("select", {
|
|
1062
1096
|
id: "assigned-to",
|
|
1063
1097
|
"onUpdate:modelValue": t[12] || (t[12] = (i) => n.form.assignedTo = i)
|
|
1064
1098
|
}, [
|
|
1065
1099
|
t[48] || (t[48] = e("option", { value: "" }, "-- Select Personnel --", -1)),
|
|
1066
|
-
(o(!0), l(p, null,
|
|
1100
|
+
(o(!0), l(p, null, h(u.vesselCrew, (i) => (o(), l("option", {
|
|
1067
1101
|
key: i.id,
|
|
1068
1102
|
value: `${i.name} - ${i.role}`
|
|
1069
|
-
}, r(i.name) + " - " + r(i.role), 9,
|
|
1103
|
+
}, r(i.name) + " - " + r(i.role), 9, ft))), 128))
|
|
1070
1104
|
], 512), [
|
|
1071
1105
|
[C, n.form.assignedTo]
|
|
1072
1106
|
])
|
|
1073
1107
|
]),
|
|
1074
|
-
e("div",
|
|
1075
|
-
e("div",
|
|
1108
|
+
e("div", ht, [
|
|
1109
|
+
e("div", gt, [
|
|
1076
1110
|
t[51] || (t[51] = e("label", { for: "recurrence-type" }, "Recurrence", -1)),
|
|
1077
1111
|
v(e("select", {
|
|
1078
1112
|
id: "recurrence-type",
|
|
@@ -1085,18 +1119,18 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1085
1119
|
])
|
|
1086
1120
|
])
|
|
1087
1121
|
]),
|
|
1088
|
-
e("div",
|
|
1089
|
-
e("div",
|
|
1122
|
+
e("div", bt, [
|
|
1123
|
+
e("div", yt, [
|
|
1090
1124
|
t[52] || (t[52] = e("label", { for: "last-performed" }, "Last Performed Date", -1)),
|
|
1091
1125
|
v(e("input", {
|
|
1092
1126
|
type: "date",
|
|
1093
1127
|
id: "last-performed",
|
|
1094
1128
|
"onUpdate:modelValue": t[14] || (t[14] = (i) => n.form.lastPerformed = i)
|
|
1095
1129
|
}, null, 512), [
|
|
1096
|
-
[
|
|
1130
|
+
[k, n.form.lastPerformed]
|
|
1097
1131
|
])
|
|
1098
1132
|
]),
|
|
1099
|
-
e("div",
|
|
1133
|
+
e("div", wt, [
|
|
1100
1134
|
t[53] || (t[53] = e("label", { for: "next-due" }, "Due Date", -1)),
|
|
1101
1135
|
v(e("input", {
|
|
1102
1136
|
type: "date",
|
|
@@ -1104,14 +1138,14 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1104
1138
|
"onUpdate:modelValue": t[15] || (t[15] = (i) => n.form.nextDue = i),
|
|
1105
1139
|
required: ""
|
|
1106
1140
|
}, null, 512), [
|
|
1107
|
-
[
|
|
1141
|
+
[k, n.form.nextDue]
|
|
1108
1142
|
])
|
|
1109
1143
|
])
|
|
1110
1144
|
]),
|
|
1111
|
-
e("div",
|
|
1145
|
+
e("div", kt, [
|
|
1112
1146
|
t[56] || (t[56] = e("label", null, "Notifications", -1)),
|
|
1113
|
-
e("div",
|
|
1114
|
-
e("div",
|
|
1147
|
+
e("div", _t, [
|
|
1148
|
+
e("div", Ct, [
|
|
1115
1149
|
v(e("input", {
|
|
1116
1150
|
type: "checkbox",
|
|
1117
1151
|
id: "notify-email",
|
|
@@ -1121,7 +1155,7 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1121
1155
|
]),
|
|
1122
1156
|
t[54] || (t[54] = e("label", { for: "notify-email" }, "Email Notification", -1))
|
|
1123
1157
|
]),
|
|
1124
|
-
e("div",
|
|
1158
|
+
e("div", Dt, [
|
|
1125
1159
|
v(e("input", {
|
|
1126
1160
|
type: "checkbox",
|
|
1127
1161
|
id: "notify-sms",
|
|
@@ -1133,8 +1167,8 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1133
1167
|
])
|
|
1134
1168
|
])
|
|
1135
1169
|
]),
|
|
1136
|
-
e("div",
|
|
1137
|
-
e("div",
|
|
1170
|
+
e("div", xt, [
|
|
1171
|
+
e("div", St, [
|
|
1138
1172
|
t[58] || (t[58] = e("label", { for: "reminder-days" }, "Reminder (Days Before)", -1)),
|
|
1139
1173
|
v(e("select", {
|
|
1140
1174
|
id: "reminder-days",
|
|
@@ -1146,18 +1180,18 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1146
1180
|
])
|
|
1147
1181
|
])
|
|
1148
1182
|
]),
|
|
1149
|
-
e("div",
|
|
1183
|
+
e("div", Pt, [
|
|
1150
1184
|
t[59] || (t[59] = e("label", { for: "schedule-notes" }, "Notes", -1)),
|
|
1151
1185
|
v(e("textarea", {
|
|
1152
1186
|
id: "schedule-notes",
|
|
1153
1187
|
"onUpdate:modelValue": t[19] || (t[19] = (i) => n.form.notes = i)
|
|
1154
1188
|
}, null, 512), [
|
|
1155
|
-
[
|
|
1189
|
+
[k, n.form.notes]
|
|
1156
1190
|
])
|
|
1157
1191
|
]),
|
|
1158
|
-
e("div",
|
|
1192
|
+
e("div", At, [
|
|
1159
1193
|
t[61] || (t[61] = e("label", null, "Attachments", -1)),
|
|
1160
|
-
e("div",
|
|
1194
|
+
e("div", qt, [
|
|
1161
1195
|
e("p", null, r(n.imgText), 1),
|
|
1162
1196
|
e("input", {
|
|
1163
1197
|
type: "file",
|
|
@@ -1172,13 +1206,13 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1172
1206
|
}, "Browse Files", -1))
|
|
1173
1207
|
])
|
|
1174
1208
|
]),
|
|
1175
|
-
e("div",
|
|
1209
|
+
e("div", Tt, [
|
|
1176
1210
|
e("button", {
|
|
1177
1211
|
type: "button",
|
|
1178
1212
|
class: "btn btn-primary",
|
|
1179
1213
|
onClick: t[21] || (t[21] = D((...i) => a.saveSchedule && a.saveSchedule(...i), ["prevent"])),
|
|
1180
1214
|
disabled: n.isSaving
|
|
1181
|
-
}, r(n.isSaving ? "Saving..." : "Save Schedule"), 9,
|
|
1215
|
+
}, r(n.isSaving ? "Saving..." : "Save Schedule"), 9, It)
|
|
1182
1216
|
])
|
|
1183
1217
|
])
|
|
1184
1218
|
], 2), [
|
|
@@ -1188,9 +1222,9 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1188
1222
|
class: g(["form-section", { active: n.activeSection === "inventory" }])
|
|
1189
1223
|
}, [
|
|
1190
1224
|
t[68] || (t[68] = e("h2", null, "All Maintenance", -1)),
|
|
1191
|
-
e("div",
|
|
1192
|
-
e("div",
|
|
1193
|
-
e("div",
|
|
1225
|
+
e("div", Rt, [
|
|
1226
|
+
e("div", Mt, [
|
|
1227
|
+
e("div", Vt, [
|
|
1194
1228
|
e("button", {
|
|
1195
1229
|
class: g({ active: n.activeFilter === "due" }),
|
|
1196
1230
|
onClick: t[22] || (t[22] = (i) => a.setFilter("due"))
|
|
@@ -1208,11 +1242,11 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1208
1242
|
"onUpdate:modelValue": t[25] || (t[25] = (i) => n.searchQuery = i),
|
|
1209
1243
|
placeholder: "Search..."
|
|
1210
1244
|
}, null, 512), [
|
|
1211
|
-
[
|
|
1245
|
+
[k, n.searchQuery]
|
|
1212
1246
|
])
|
|
1213
1247
|
])
|
|
1214
1248
|
]),
|
|
1215
|
-
e("table",
|
|
1249
|
+
e("table", Ft, [
|
|
1216
1250
|
t[63] || (t[63] = e("thead", null, [
|
|
1217
1251
|
e("tr", null, [
|
|
1218
1252
|
e("th", null, "Equipment"),
|
|
@@ -1226,7 +1260,7 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1226
1260
|
])
|
|
1227
1261
|
], -1)),
|
|
1228
1262
|
e("tbody", null, [
|
|
1229
|
-
(o(!0), l(p, null,
|
|
1263
|
+
(o(!0), l(p, null, h(a.filteredTasks, (i) => (o(), l("tr", {
|
|
1230
1264
|
key: i.id
|
|
1231
1265
|
}, [
|
|
1232
1266
|
e("td", null, r(i.component), 1),
|
|
@@ -1243,23 +1277,23 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1243
1277
|
e("td", null, [
|
|
1244
1278
|
i.status === "Completed" ? (o(), l("button", {
|
|
1245
1279
|
key: 0,
|
|
1246
|
-
onClick: (
|
|
1280
|
+
onClick: (f) => a.printMaintenance(i.component),
|
|
1247
1281
|
class: "status-action"
|
|
1248
|
-
}, "Print", 8,
|
|
1282
|
+
}, "Print", 8, Et)) : (o(), l("button", {
|
|
1249
1283
|
key: 1,
|
|
1250
|
-
onClick: (
|
|
1284
|
+
onClick: (f) => a.showMaintenance(i.component),
|
|
1251
1285
|
class: "status-action"
|
|
1252
|
-
}, "Start", 8,
|
|
1286
|
+
}, "Start", 8, Nt))
|
|
1253
1287
|
])
|
|
1254
1288
|
]))), 128))
|
|
1255
1289
|
])
|
|
1256
1290
|
]),
|
|
1257
|
-
u.tasks.length ? m("", !0) : (o(), l("div",
|
|
1258
|
-
e("div",
|
|
1291
|
+
u.tasks.length ? m("", !0) : (o(), l("div", Ot, [
|
|
1292
|
+
e("div", Ut, [
|
|
1259
1293
|
t[65] || (t[65] = e("h4", { class: "alert-heading" }, "Such Empty!!!", -1)),
|
|
1260
1294
|
t[66] || (t[66] = e("p", null, "You have no maintenance, because you have not scheduled any for this ship.", -1)),
|
|
1261
1295
|
t[67] || (t[67] = e("hr", null, null, -1)),
|
|
1262
|
-
e("p",
|
|
1296
|
+
e("p", Lt, [
|
|
1263
1297
|
t[64] || (t[64] = _("Navigate to the schedule tab, to start scheduling. Or click on this button to ", -1)),
|
|
1264
1298
|
e("button", {
|
|
1265
1299
|
type: "button",
|
|
@@ -1276,20 +1310,20 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1276
1310
|
], 512), [
|
|
1277
1311
|
[P, !n.showReport]
|
|
1278
1312
|
]),
|
|
1279
|
-
v(e("div",
|
|
1313
|
+
v(e("div", $t, [
|
|
1280
1314
|
t[89] || (t[89] = e("div", { class: "header" }, [
|
|
1281
1315
|
e("div", { class: "report-title" }, "MAINTENANCE TASK REPORT")
|
|
1282
1316
|
], -1)),
|
|
1283
|
-
e("div",
|
|
1284
|
-
e("div",
|
|
1317
|
+
e("div", jt, [
|
|
1318
|
+
e("div", Bt, [
|
|
1285
1319
|
t[69] || (t[69] = e("div", { class: "info-label" }, "Report Generated:", -1)),
|
|
1286
1320
|
e("div", null, r(n.reportDate), 1)
|
|
1287
1321
|
]),
|
|
1288
|
-
e("div",
|
|
1322
|
+
e("div", Ht, [
|
|
1289
1323
|
t[70] || (t[70] = e("div", { class: "info-label" }, "Report ID:", -1)),
|
|
1290
1324
|
e("div", null, r(n.reportId), 1)
|
|
1291
1325
|
]),
|
|
1292
|
-
e("div",
|
|
1326
|
+
e("div", Qt, [
|
|
1293
1327
|
t[71] || (t[71] = e("div", { class: "info-label" }, "Total Tasks:", -1)),
|
|
1294
1328
|
e("div", null, r(n.maintenanceTasks.length), 1)
|
|
1295
1329
|
]),
|
|
@@ -1298,111 +1332,111 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1298
1332
|
e("div", null, "OceanHelm System")
|
|
1299
1333
|
], -1))
|
|
1300
1334
|
]),
|
|
1301
|
-
e("div",
|
|
1335
|
+
e("div", Jt, [
|
|
1302
1336
|
t[75] || (t[75] = e("div", { class: "section-title" }, "📊 Task Summary", -1)),
|
|
1303
|
-
e("div",
|
|
1337
|
+
e("div", Wt, [
|
|
1304
1338
|
t[74] || (t[74] = x('<div class="summary-card"><div class="summary-number">1</div><div class="summary-label">Completed</div></div><div class="summary-card"><div class="summary-number">0</div><div class="summary-label">Pending</div></div><div class="summary-card"><div class="summary-number">0</div><div class="summary-label">Overdue</div></div>', 3)),
|
|
1305
|
-
e("div",
|
|
1306
|
-
e("div",
|
|
1339
|
+
e("div", Gt, [
|
|
1340
|
+
e("div", zt, r(a.totalEstimatedHours), 1),
|
|
1307
1341
|
t[73] || (t[73] = e("div", { class: "summary-label" }, "Total Hours", -1))
|
|
1308
1342
|
])
|
|
1309
1343
|
])
|
|
1310
1344
|
]),
|
|
1311
|
-
e("div",
|
|
1345
|
+
e("div", Yt, [
|
|
1312
1346
|
t[85] || (t[85] = e("div", { class: "section-title" }, "🔧 Maintenance Tasks", -1)),
|
|
1313
|
-
(o(!0), l(p, null,
|
|
1347
|
+
(o(!0), l(p, null, h(n.maintenanceTasks, (i) => (o(), l("div", {
|
|
1314
1348
|
key: i.taskName,
|
|
1315
1349
|
class: g(["task-item", a.getTaskStatusClass(i)])
|
|
1316
1350
|
}, [
|
|
1317
|
-
e("div",
|
|
1351
|
+
e("div", Kt, [
|
|
1318
1352
|
e("div", null, [
|
|
1319
|
-
e("div",
|
|
1353
|
+
e("div", Xt, [
|
|
1320
1354
|
_(r(i.taskName) + " ", 1),
|
|
1321
1355
|
e("span", {
|
|
1322
1356
|
class: g(["maintenance-type", "type-" + i.maintenanceType])
|
|
1323
1357
|
}, r(i.maintenanceType), 3)
|
|
1324
1358
|
]),
|
|
1325
|
-
e("div",
|
|
1359
|
+
e("div", Zt, "Component: " + r(i.component), 1)
|
|
1326
1360
|
]),
|
|
1327
1361
|
e("span", {
|
|
1328
1362
|
class: g(["status-badge", "status-" + i.status.toLowerCase().replace(" ", "-")])
|
|
1329
1363
|
}, r(i.status), 3)
|
|
1330
1364
|
]),
|
|
1331
|
-
e("div",
|
|
1332
|
-
e("div",
|
|
1365
|
+
e("div", es, [
|
|
1366
|
+
e("div", ts, [
|
|
1333
1367
|
t[76] || (t[76] = e("div", { class: "detail-label" }, "Assigned To", -1)),
|
|
1334
|
-
e("div",
|
|
1368
|
+
e("div", ss, r(i.assignedTo), 1)
|
|
1335
1369
|
]),
|
|
1336
|
-
e("div",
|
|
1370
|
+
e("div", is, [
|
|
1337
1371
|
t[77] || (t[77] = e("div", { class: "detail-label" }, "Estimated Hours", -1)),
|
|
1338
|
-
e("div",
|
|
1372
|
+
e("div", ns, r(i.estimatedHours) + " hours", 1)
|
|
1339
1373
|
]),
|
|
1340
|
-
e("div",
|
|
1374
|
+
e("div", os, [
|
|
1341
1375
|
t[78] || (t[78] = e("div", { class: "detail-label" }, "Last Performed", -1)),
|
|
1342
|
-
e("div",
|
|
1376
|
+
e("div", ls, r(a.formatDate(i.lastPerformed)), 1)
|
|
1343
1377
|
]),
|
|
1344
|
-
e("div",
|
|
1378
|
+
e("div", rs, [
|
|
1345
1379
|
t[79] || (t[79] = e("div", { class: "detail-label" }, "Next Due", -1)),
|
|
1346
|
-
e("div",
|
|
1380
|
+
e("div", as, r(a.formatDate(i.nextDue)), 1)
|
|
1347
1381
|
]),
|
|
1348
|
-
e("div",
|
|
1382
|
+
e("div", ds, [
|
|
1349
1383
|
t[80] || (t[80] = e("div", { class: "detail-label" }, "Recurrence", -1)),
|
|
1350
|
-
e("div",
|
|
1384
|
+
e("div", us, r(i.recurrence), 1)
|
|
1351
1385
|
]),
|
|
1352
|
-
e("div",
|
|
1386
|
+
e("div", cs, [
|
|
1353
1387
|
t[81] || (t[81] = e("div", { class: "detail-label" }, "Remaining Days", -1)),
|
|
1354
|
-
e("div",
|
|
1388
|
+
e("div", ms, r(i.remainingDays) + " days", 1)
|
|
1355
1389
|
])
|
|
1356
1390
|
]),
|
|
1357
|
-
i.description ? (o(), l("div",
|
|
1391
|
+
i.description ? (o(), l("div", vs, [
|
|
1358
1392
|
t[82] || (t[82] = e("div", { class: "detail-label" }, "Description", -1)),
|
|
1359
|
-
e("div",
|
|
1393
|
+
e("div", ps, r(i.description), 1)
|
|
1360
1394
|
])) : m("", !0),
|
|
1361
|
-
i.notes ? (o(), l("div",
|
|
1395
|
+
i.notes ? (o(), l("div", fs, [
|
|
1362
1396
|
t[83] || (t[83] = e("div", { class: "detail-label" }, "Notes", -1)),
|
|
1363
|
-
e("div",
|
|
1397
|
+
e("div", hs, r(i.notes), 1)
|
|
1364
1398
|
])) : m("", !0),
|
|
1365
|
-
i.checklistProgress && i.checklistProgress.length > 0 ? (o(), l("div",
|
|
1399
|
+
i.checklistProgress && i.checklistProgress.length > 0 ? (o(), l("div", gs, [
|
|
1366
1400
|
t[84] || (t[84] = e("div", { class: "detail-label" }, "Checklist Progress", -1)),
|
|
1367
|
-
e("div",
|
|
1401
|
+
e("div", bs, [
|
|
1368
1402
|
e("div", {
|
|
1369
1403
|
class: "progress-fill",
|
|
1370
1404
|
style: E({ width: a.getChecklistProgress(i) + "%" })
|
|
1371
1405
|
}, null, 4)
|
|
1372
1406
|
]),
|
|
1373
|
-
e("div",
|
|
1374
|
-
e("div",
|
|
1375
|
-
(o(!0), l(p, null,
|
|
1376
|
-
key:
|
|
1407
|
+
e("div", ys, r(a.getCompletedChecklistItems(i)) + " of " + r(i.checklistProgress.length) + " items completed (" + r(a.getChecklistProgress(i)) + "%) ", 1),
|
|
1408
|
+
e("div", ws, [
|
|
1409
|
+
(o(!0), l(p, null, h(i.checklistProgress, (f, y) => (o(), l("div", {
|
|
1410
|
+
key: y,
|
|
1377
1411
|
class: "checklist-item"
|
|
1378
1412
|
}, [
|
|
1379
|
-
e("span",
|
|
1380
|
-
e("span", null, r(
|
|
1413
|
+
e("span", ks, r(f.completed ? "✅" : "⭕"), 1),
|
|
1414
|
+
e("span", null, r(f.text || "Checklist Item " + (y + 1)), 1)
|
|
1381
1415
|
]))), 128))
|
|
1382
1416
|
])
|
|
1383
1417
|
])) : m("", !0)
|
|
1384
1418
|
], 2))), 128))
|
|
1385
1419
|
]),
|
|
1386
|
-
e("div",
|
|
1420
|
+
e("div", _s, [
|
|
1387
1421
|
t[86] || (t[86] = e("div", { class: "section-title" }, "📋 Recommendations", -1)),
|
|
1388
|
-
e("div",
|
|
1422
|
+
e("div", Cs, [
|
|
1389
1423
|
e("ul", null, [
|
|
1390
|
-
(o(!0), l(p, null,
|
|
1424
|
+
(o(!0), l(p, null, h(a.generateRecommendations(), (i) => (o(), l("li", { key: i }, r(i), 1))), 128))
|
|
1391
1425
|
])
|
|
1392
1426
|
])
|
|
1393
1427
|
]),
|
|
1394
|
-
e("div",
|
|
1428
|
+
e("div", Ds, [
|
|
1395
1429
|
t[88] || (t[88] = e("div", { class: "signature-box" }, [
|
|
1396
1430
|
e("div", null, [
|
|
1397
1431
|
e("strong", null, "Report Generated By")
|
|
1398
1432
|
]),
|
|
1399
1433
|
e("div", { style: { "margin-top": "10px", color: "#666" } }, "OceanHelm Maintenance System")
|
|
1400
1434
|
], -1)),
|
|
1401
|
-
e("div",
|
|
1435
|
+
e("div", xs, [
|
|
1402
1436
|
t[87] || (t[87] = e("div", null, [
|
|
1403
1437
|
e("strong", null, "Date")
|
|
1404
1438
|
], -1)),
|
|
1405
|
-
e("div",
|
|
1439
|
+
e("div", Ss, r(n.reportDate), 1)
|
|
1406
1440
|
])
|
|
1407
1441
|
])
|
|
1408
1442
|
], 512), [
|
|
@@ -1411,8 +1445,8 @@ function Cs(s, t, u, b, n, a) {
|
|
|
1411
1445
|
])
|
|
1412
1446
|
])) : m("", !0);
|
|
1413
1447
|
}
|
|
1414
|
-
const
|
|
1415
|
-
const
|
|
1448
|
+
const As = /* @__PURE__ */ S(Ne, [["render", Ps]]);
|
|
1449
|
+
const qs = {
|
|
1416
1450
|
name: "ActivityLogs",
|
|
1417
1451
|
props: {
|
|
1418
1452
|
loading: Boolean,
|
|
@@ -1442,23 +1476,23 @@ const xs = {
|
|
|
1442
1476
|
}[s] || "badge-view";
|
|
1443
1477
|
}
|
|
1444
1478
|
}
|
|
1445
|
-
},
|
|
1479
|
+
}, Ts = { class: "activity-logs" }, Is = { class: "a-controls" }, Rs = { class: "a-search-box" }, Ms = ["value"], Vs = ["value"], Fs = { class: "stats-grid" }, Es = { class: "stat-card" }, Ns = { class: "value" }, Os = { class: "stat-card" }, Us = { class: "value" }, Ls = { class: "stat-card" }, $s = { class: "value" }, js = { class: "logs-container" }, Bs = {
|
|
1446
1480
|
key: 0,
|
|
1447
1481
|
class: "loading"
|
|
1448
|
-
},
|
|
1482
|
+
}, Hs = {
|
|
1449
1483
|
key: 1,
|
|
1450
1484
|
class: "no-logs"
|
|
1451
|
-
},
|
|
1452
|
-
function
|
|
1453
|
-
return o(), l("div",
|
|
1454
|
-
e("div",
|
|
1455
|
-
e("div",
|
|
1485
|
+
}, Qs = { key: 2 }, Js = { class: "logs-table" }, Ws = { style: { color: "gray" } }, Gs = { style: { color: "gray" } }, zs = { class: "pagination" }, Ys = ["disabled"], Ks = ["onClick"], Xs = ["disabled"];
|
|
1486
|
+
function Zs(s, t, u, b, n, a) {
|
|
1487
|
+
return o(), l("div", Ts, [
|
|
1488
|
+
e("div", Is, [
|
|
1489
|
+
e("div", Rs, [
|
|
1456
1490
|
e("input", {
|
|
1457
1491
|
type: "text",
|
|
1458
1492
|
placeholder: "Search activities, users, or actions...",
|
|
1459
1493
|
value: u.searchTerm,
|
|
1460
1494
|
onInput: t[0] || (t[0] = (i) => s.$emit("update:searchTerm", i.target.value))
|
|
1461
|
-
}, null, 40,
|
|
1495
|
+
}, null, 40, Ms)
|
|
1462
1496
|
]),
|
|
1463
1497
|
e("select", {
|
|
1464
1498
|
class: "filter-select",
|
|
@@ -1466,7 +1500,7 @@ function zs(s, t, u, b, n, a) {
|
|
|
1466
1500
|
onChange: t[1] || (t[1] = (i) => s.$emit("update:selectedFilter", i.target.value))
|
|
1467
1501
|
}, t[6] || (t[6] = [
|
|
1468
1502
|
x('<option value="all">All Activities</option><option value="login">Login</option><option value="logout">Logout</option><option value="create">Create</option><option value="update">Update</option><option value="delete">Delete</option><option value="view">View</option>', 7)
|
|
1469
|
-
]), 40,
|
|
1503
|
+
]), 40, Vs),
|
|
1470
1504
|
e("button", {
|
|
1471
1505
|
class: "btn btn-primary",
|
|
1472
1506
|
onClick: t[2] || (t[2] = (i) => s.$emit("refresh"))
|
|
@@ -1476,33 +1510,33 @@ function zs(s, t, u, b, n, a) {
|
|
|
1476
1510
|
onClick: t[3] || (t[3] = (i) => s.$emit("download"))
|
|
1477
1511
|
}, "📥 Download Report")
|
|
1478
1512
|
]),
|
|
1479
|
-
e("div",
|
|
1480
|
-
e("div",
|
|
1513
|
+
e("div", Fs, [
|
|
1514
|
+
e("div", Es, [
|
|
1481
1515
|
t[7] || (t[7] = e("h3", null, "Total Activities", -1)),
|
|
1482
|
-
e("div",
|
|
1516
|
+
e("div", Ns, r(u.totalActivities), 1)
|
|
1483
1517
|
]),
|
|
1484
|
-
e("div",
|
|
1518
|
+
e("div", Os, [
|
|
1485
1519
|
t[8] || (t[8] = e("h3", null, "Today's Activities", -1)),
|
|
1486
|
-
e("div",
|
|
1520
|
+
e("div", Us, r(u.todayActivities), 1)
|
|
1487
1521
|
]),
|
|
1488
|
-
e("div",
|
|
1522
|
+
e("div", Ls, [
|
|
1489
1523
|
t[9] || (t[9] = e("h3", null, "Active Users", -1)),
|
|
1490
|
-
e("div",
|
|
1524
|
+
e("div", $s, r(u.activeUsers), 1)
|
|
1491
1525
|
]),
|
|
1492
1526
|
t[10] || (t[10] = e("div", { class: "stat-card" }, [
|
|
1493
1527
|
e("h3", null, "Important"),
|
|
1494
1528
|
e("div", { class: "badge-danger" }, " Logs are deleted at the end of every month, please download a copy ")
|
|
1495
1529
|
], -1))
|
|
1496
1530
|
]),
|
|
1497
|
-
e("div",
|
|
1498
|
-
u.loading ? (o(), l("div",
|
|
1531
|
+
e("div", js, [
|
|
1532
|
+
u.loading ? (o(), l("div", Bs, t[11] || (t[11] = [
|
|
1499
1533
|
e("div", { class: "spinner" }, null, -1),
|
|
1500
1534
|
e("p", null, "Loading activity logs...", -1)
|
|
1501
|
-
]))) : u.logs.length === 0 ? (o(), l("div",
|
|
1535
|
+
]))) : u.logs.length === 0 ? (o(), l("div", Hs, t[12] || (t[12] = [
|
|
1502
1536
|
e("h3", null, "No activities found", -1),
|
|
1503
1537
|
e("p", null, "Try adjusting your search or filter criteria", -1)
|
|
1504
|
-
]))) : (o(), l("div",
|
|
1505
|
-
e("table",
|
|
1538
|
+
]))) : (o(), l("div", Qs, [
|
|
1539
|
+
e("table", Js, [
|
|
1506
1540
|
t[13] || (t[13] = e("thead", null, [
|
|
1507
1541
|
e("tr", null, [
|
|
1508
1542
|
e("th", null, "Timestamp"),
|
|
@@ -1513,13 +1547,13 @@ function zs(s, t, u, b, n, a) {
|
|
|
1513
1547
|
])
|
|
1514
1548
|
], -1)),
|
|
1515
1549
|
e("tbody", null, [
|
|
1516
|
-
(o(!0), l(p, null,
|
|
1550
|
+
(o(!0), l(p, null, h(u.paginatedLogs, (i) => (o(), l("tr", {
|
|
1517
1551
|
key: i.id
|
|
1518
1552
|
}, [
|
|
1519
1553
|
e("td", null, r(a.formatDate(i.timestamp)), 1),
|
|
1520
1554
|
e("td", null, [
|
|
1521
1555
|
e("div", null, r(i.user_name), 1),
|
|
1522
|
-
e("small",
|
|
1556
|
+
e("small", Ws, r(i.email), 1)
|
|
1523
1557
|
]),
|
|
1524
1558
|
e("td", null, [
|
|
1525
1559
|
e("span", {
|
|
@@ -1528,36 +1562,36 @@ function zs(s, t, u, b, n, a) {
|
|
|
1528
1562
|
]),
|
|
1529
1563
|
e("td", null, [
|
|
1530
1564
|
_(r(i.details.status) + " ", 1),
|
|
1531
|
-
(o(!0), l(p, null,
|
|
1532
|
-
e("strong", null, r(
|
|
1533
|
-
e("small",
|
|
1565
|
+
(o(!0), l(p, null, h(i.details.information, (f, y) => (o(), l("div", { key: y }, [
|
|
1566
|
+
e("strong", null, r(y) + ": ", 1),
|
|
1567
|
+
e("small", Gs, r(f.from || "") + " → " + r(f.to || f), 1)
|
|
1534
1568
|
]))), 128))
|
|
1535
1569
|
]),
|
|
1536
1570
|
e("td", null, r(i.table_name), 1)
|
|
1537
1571
|
]))), 128))
|
|
1538
1572
|
])
|
|
1539
1573
|
]),
|
|
1540
|
-
e("div",
|
|
1574
|
+
e("div", zs, [
|
|
1541
1575
|
e("button", {
|
|
1542
1576
|
onClick: t[4] || (t[4] = (i) => s.$emit("change-page", u.currentPage - 1)),
|
|
1543
1577
|
disabled: u.currentPage === 1
|
|
1544
|
-
}, " Previous ", 8,
|
|
1545
|
-
(o(!0), l(p, null,
|
|
1578
|
+
}, " Previous ", 8, Ys),
|
|
1579
|
+
(o(!0), l(p, null, h(u.totalPages, (i) => (o(), l("button", {
|
|
1546
1580
|
key: i,
|
|
1547
|
-
onClick: (
|
|
1581
|
+
onClick: (f) => s.$emit("change-page", i),
|
|
1548
1582
|
class: g({ active: u.currentPage === i })
|
|
1549
|
-
}, r(i), 11,
|
|
1583
|
+
}, r(i), 11, Ks))), 128)),
|
|
1550
1584
|
e("button", {
|
|
1551
1585
|
onClick: t[5] || (t[5] = (i) => s.$emit("change-page", u.currentPage + 1)),
|
|
1552
1586
|
disabled: u.currentPage === u.totalPages
|
|
1553
|
-
}, " Next ", 8,
|
|
1587
|
+
}, " Next ", 8, Xs)
|
|
1554
1588
|
])
|
|
1555
1589
|
]))
|
|
1556
1590
|
])
|
|
1557
1591
|
]);
|
|
1558
1592
|
}
|
|
1559
|
-
const
|
|
1560
|
-
const
|
|
1593
|
+
const ei = /* @__PURE__ */ S(qs, [["render", Zs]]);
|
|
1594
|
+
const ti = {
|
|
1561
1595
|
name: "CrewManagement",
|
|
1562
1596
|
props: {
|
|
1563
1597
|
// Required props
|
|
@@ -1652,14 +1686,15 @@ const Ks = {
|
|
|
1652
1686
|
methods: {
|
|
1653
1687
|
// Permission checking
|
|
1654
1688
|
hasPermission(s) {
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
return ((b = {
|
|
1689
|
+
const { role: t, vessel: u } = this.userProfile, b = u === this.vesselName;
|
|
1690
|
+
let a = {
|
|
1658
1691
|
owner: ["add", "edit", "delete", "assign", "view"],
|
|
1659
1692
|
staff: ["add", "edit", "assign", "view"],
|
|
1660
1693
|
captain: ["assign", "view"],
|
|
1694
|
+
// default for captain
|
|
1661
1695
|
viewer: ["view"]
|
|
1662
|
-
}[t]
|
|
1696
|
+
}[t] || [];
|
|
1697
|
+
return t === "captain" && b && (a = [...a, "add"]), a.includes(s);
|
|
1663
1698
|
},
|
|
1664
1699
|
// Event handlers
|
|
1665
1700
|
handleToggleAddForm() {
|
|
@@ -1779,39 +1814,39 @@ const Ks = {
|
|
|
1779
1814
|
return b.setMonth(u.getMonth() + 1), t <= u ? "expired" : t <= b ? "expiringSoon" : "valid";
|
|
1780
1815
|
}
|
|
1781
1816
|
}
|
|
1782
|
-
},
|
|
1817
|
+
}, si = { class: "crew-management" }, ii = {
|
|
1783
1818
|
key: 0,
|
|
1784
1819
|
class: "wave-bg"
|
|
1785
|
-
},
|
|
1820
|
+
}, ni = { class: "crew-section" }, oi = { class: "crew-section-header" }, li = { class: "search-filter" }, ri = {
|
|
1786
1821
|
key: 0,
|
|
1787
1822
|
class: "loading-state"
|
|
1788
|
-
},
|
|
1823
|
+
}, ai = {
|
|
1789
1824
|
key: 1,
|
|
1790
1825
|
class: "crew-grid"
|
|
1791
|
-
},
|
|
1826
|
+
}, di = { class: "crew-name" }, ui = { class: "crew-role" }, ci = { class: "crew-certifications" }, mi = ["onClick"], vi = ["onClick"], pi = { class: "crew-availability" }, fi = { class: "crew-availability" }, hi = { class: "action-buttons" }, gi = {
|
|
1792
1827
|
key: 0,
|
|
1793
1828
|
class: "status-available crew-availability vcard"
|
|
1794
|
-
},
|
|
1829
|
+
}, bi = {
|
|
1795
1830
|
key: 1,
|
|
1796
1831
|
class: "status-unavailable crew-availability vcard"
|
|
1797
|
-
},
|
|
1832
|
+
}, yi = ["onClick"], wi = ["onClick"], ki = {
|
|
1798
1833
|
key: 2,
|
|
1799
1834
|
class: "no-results"
|
|
1800
|
-
},
|
|
1835
|
+
}, _i = {
|
|
1801
1836
|
key: 3,
|
|
1802
1837
|
class: "add-crew-form"
|
|
1803
|
-
},
|
|
1838
|
+
}, Ci = { class: "form-row" }, Di = { class: "form-group" }, xi = {
|
|
1804
1839
|
key: 0,
|
|
1805
1840
|
class: "error-message"
|
|
1806
|
-
},
|
|
1841
|
+
}, Si = { class: "form-group" }, Pi = ["value"], Ai = { class: "form-row" }, qi = { class: "form-group" }, Ti = { class: "form-group" }, Ii = {
|
|
1807
1842
|
key: 0,
|
|
1808
1843
|
class: "error-message"
|
|
1809
|
-
},
|
|
1810
|
-
function
|
|
1811
|
-
return o(), l("div",
|
|
1812
|
-
u.config.showWaveBackground ? (o(), l("div",
|
|
1813
|
-
e("div",
|
|
1814
|
-
e("div",
|
|
1844
|
+
}, Ri = { class: "certification-section" }, Mi = { class: "form-row" }, Vi = { class: "form-group" }, Fi = ["onUpdate:modelValue"], Ei = { class: "form-group" }, Ni = ["onUpdate:modelValue"], Oi = { class: "form-group" }, Ui = ["onClick"], Li = { class: "form-row" }, $i = { class: "form-group" }, ji = { class: "form-actions" };
|
|
1845
|
+
function Bi(s, t, u, b, n, a) {
|
|
1846
|
+
return o(), l("div", si, [
|
|
1847
|
+
u.config.showWaveBackground ? (o(), l("div", ii)) : m("", !0),
|
|
1848
|
+
e("div", ni, [
|
|
1849
|
+
e("div", oi, [
|
|
1815
1850
|
e("h2", null, r(a.sectionTitle), 1),
|
|
1816
1851
|
a.canAddCrew ? (o(), l("button", {
|
|
1817
1852
|
key: 0,
|
|
@@ -1819,14 +1854,14 @@ function Ui(s, t, u, b, n, a) {
|
|
|
1819
1854
|
onClick: t[0] || (t[0] = (...i) => a.handleToggleAddForm && a.handleToggleAddForm(...i))
|
|
1820
1855
|
}, r(n.showAddForm ? "Cancel" : "+ Add Crew Member"), 1)) : m("", !0)
|
|
1821
1856
|
]),
|
|
1822
|
-
e("div",
|
|
1857
|
+
e("div", li, [
|
|
1823
1858
|
v(e("input", {
|
|
1824
1859
|
type: "text",
|
|
1825
1860
|
placeholder: "Search crew by name or role...",
|
|
1826
1861
|
"onUpdate:modelValue": t[1] || (t[1] = (i) => n.searchQuery = i),
|
|
1827
1862
|
onInput: t[2] || (t[2] = (...i) => a.handleSearch && a.handleSearch(...i))
|
|
1828
1863
|
}, null, 544), [
|
|
1829
|
-
[
|
|
1864
|
+
[k, n.searchQuery]
|
|
1830
1865
|
]),
|
|
1831
1866
|
v(e("select", {
|
|
1832
1867
|
"onUpdate:modelValue": t[3] || (t[3] = (i) => n.filterStatus = i),
|
|
@@ -1840,7 +1875,7 @@ function Ui(s, t, u, b, n, a) {
|
|
|
1840
1875
|
[C, n.filterStatus]
|
|
1841
1876
|
])
|
|
1842
1877
|
]),
|
|
1843
|
-
u.loading ? (o(), l("div",
|
|
1878
|
+
u.loading ? (o(), l("div", ri, t[15] || (t[15] = [
|
|
1844
1879
|
e("div", {
|
|
1845
1880
|
class: "spinner-border text-primary",
|
|
1846
1881
|
role: "status"
|
|
@@ -1848,55 +1883,55 @@ function Ui(s, t, u, b, n, a) {
|
|
|
1848
1883
|
e("span", { class: "visually-hidden" }, "Loading crew...")
|
|
1849
1884
|
], -1),
|
|
1850
1885
|
e("p", null, "Loading crew members...", -1)
|
|
1851
|
-
]))) : a.filteredCrew.length > 0 ? (o(), l("div",
|
|
1852
|
-
(o(!0), l(p, null,
|
|
1886
|
+
]))) : a.filteredCrew.length > 0 ? (o(), l("div", ai, [
|
|
1887
|
+
(o(!0), l(p, null, h(a.filteredCrew, (i) => (o(), l("div", {
|
|
1853
1888
|
key: i.id,
|
|
1854
1889
|
class: g(["crew-card", { unavailable: i.status === "unavailable" }])
|
|
1855
1890
|
}, [
|
|
1856
1891
|
e("div", {
|
|
1857
1892
|
class: g(["crew-status-badge", a.getStatusClass(i.status)])
|
|
1858
1893
|
}, r(a.formatStatus(i.status)), 3),
|
|
1859
|
-
e("div",
|
|
1860
|
-
e("div",
|
|
1861
|
-
e("div",
|
|
1862
|
-
(o(!0), l(p, null,
|
|
1863
|
-
key:
|
|
1864
|
-
class: g(["certification-tag", a.getCertificationClass(
|
|
1865
|
-
onClick: (
|
|
1866
|
-
}, r(
|
|
1894
|
+
e("div", di, r(i.name), 1),
|
|
1895
|
+
e("div", ui, r(i.role), 1),
|
|
1896
|
+
e("div", ci, [
|
|
1897
|
+
(o(!0), l(p, null, h(i.certifications, (f) => (o(), l("div", {
|
|
1898
|
+
key: f.name,
|
|
1899
|
+
class: g(["certification-tag", a.getCertificationClass(f.expiryDate)]),
|
|
1900
|
+
onClick: (y) => a.handleViewCertification(f, i)
|
|
1901
|
+
}, r(f.name), 11, mi))), 128)),
|
|
1867
1902
|
a.canEditCrew ? (o(), l("i", {
|
|
1868
1903
|
key: 0,
|
|
1869
1904
|
class: "bi bi-patch-plus-fill icon",
|
|
1870
|
-
onClick: (
|
|
1871
|
-
}, null, 8,
|
|
1905
|
+
onClick: (f) => a.handleAddCertification(i)
|
|
1906
|
+
}, null, 8, vi)) : m("", !0)
|
|
1872
1907
|
]),
|
|
1873
|
-
e("div",
|
|
1908
|
+
e("div", pi, [
|
|
1874
1909
|
t[16] || (t[16] = e("strong", null, "Embarkation Date:", -1)),
|
|
1875
1910
|
_(" " + r(i.nextShift || "Not Scheduled"), 1)
|
|
1876
1911
|
]),
|
|
1877
|
-
e("div",
|
|
1912
|
+
e("div", fi, [
|
|
1878
1913
|
t[17] || (t[17] = e("strong", null, "Expected Days Onboard (in days):", -1)),
|
|
1879
1914
|
_(" " + r(i.onBoard || "Not Scheduled"), 1)
|
|
1880
1915
|
]),
|
|
1881
|
-
e("div",
|
|
1882
|
-
i.vessel ? (o(), l("div",
|
|
1916
|
+
e("div", hi, [
|
|
1917
|
+
i.vessel ? (o(), l("div", gi, " Vessel: " + r(i.vessel), 1)) : (o(), l("div", bi, " Vessel: Unassigned ")),
|
|
1883
1918
|
a.canAssignShift ? (o(), l("button", {
|
|
1884
1919
|
key: 2,
|
|
1885
1920
|
class: "btn btn-primary",
|
|
1886
|
-
onClick: (
|
|
1887
|
-
}, " Assign Shift ", 8,
|
|
1921
|
+
onClick: (f) => a.handleAssignShift(i)
|
|
1922
|
+
}, " Assign Shift ", 8, yi)) : m("", !0)
|
|
1888
1923
|
]),
|
|
1889
1924
|
a.canDeleteCrew ? (o(), l("i", {
|
|
1890
1925
|
key: 0,
|
|
1891
1926
|
class: "bi bi-trash icon delete-icon",
|
|
1892
|
-
onClick: (
|
|
1893
|
-
}, null, 8,
|
|
1927
|
+
onClick: (f) => a.handleDeleteCrew(i)
|
|
1928
|
+
}, null, 8, wi)) : m("", !0)
|
|
1894
1929
|
], 2))), 128))
|
|
1895
|
-
])) : u.loading ? m("", !0) : (o(), l("div",
|
|
1896
|
-
n.showAddForm ? (o(), l("div",
|
|
1930
|
+
])) : u.loading ? m("", !0) : (o(), l("div", ki, r(u.crew.length === 0 ? "No crew members found." : "No crew members found matching your search criteria."), 1)),
|
|
1931
|
+
n.showAddForm ? (o(), l("div", _i, [
|
|
1897
1932
|
t[28] || (t[28] = e("h2", null, "Add New Crew Member", -1)),
|
|
1898
|
-
e("div",
|
|
1899
|
-
e("div",
|
|
1933
|
+
e("div", Ci, [
|
|
1934
|
+
e("div", Di, [
|
|
1900
1935
|
t[18] || (t[18] = e("label", { for: "crew-name" }, "Full Name *", -1)),
|
|
1901
1936
|
v(e("input", {
|
|
1902
1937
|
type: "text",
|
|
@@ -1904,20 +1939,20 @@ function Ui(s, t, u, b, n, a) {
|
|
|
1904
1939
|
"onUpdate:modelValue": t[5] || (t[5] = (i) => n.newCrew.name = i),
|
|
1905
1940
|
class: g({ error: n.formErrors.name })
|
|
1906
1941
|
}, null, 2), [
|
|
1907
|
-
[
|
|
1942
|
+
[k, n.newCrew.name]
|
|
1908
1943
|
]),
|
|
1909
|
-
n.formErrors.name ? (o(), l("div",
|
|
1944
|
+
n.formErrors.name ? (o(), l("div", xi, r(n.formErrors.name), 1)) : m("", !0)
|
|
1910
1945
|
]),
|
|
1911
|
-
e("div",
|
|
1946
|
+
e("div", Si, [
|
|
1912
1947
|
t[20] || (t[20] = e("label", { for: "crew-role" }, "Role/Position *", -1)),
|
|
1913
1948
|
v(e("select", {
|
|
1914
1949
|
id: "crew-role",
|
|
1915
1950
|
"onUpdate:modelValue": t[6] || (t[6] = (i) => n.newCrew.role = i)
|
|
1916
1951
|
}, [
|
|
1917
|
-
(o(!0), l(p, null,
|
|
1952
|
+
(o(!0), l(p, null, h(u.availableRoles, (i) => (o(), l("option", {
|
|
1918
1953
|
key: i,
|
|
1919
1954
|
value: i
|
|
1920
|
-
}, r(i), 9,
|
|
1955
|
+
}, r(i), 9, Pi))), 128)),
|
|
1921
1956
|
t[19] || (t[19] = e("option", { value: "Other" }, "Other", -1))
|
|
1922
1957
|
], 512), [
|
|
1923
1958
|
[C, n.newCrew.role]
|
|
@@ -1929,12 +1964,12 @@ function Ui(s, t, u, b, n, a) {
|
|
|
1929
1964
|
"onUpdate:modelValue": t[7] || (t[7] = (i) => n.newCrew.customRole = i),
|
|
1930
1965
|
style: { "margin-top": "8px" }
|
|
1931
1966
|
}, null, 512)), [
|
|
1932
|
-
[
|
|
1967
|
+
[k, n.newCrew.customRole]
|
|
1933
1968
|
]) : m("", !0)
|
|
1934
1969
|
])
|
|
1935
1970
|
]),
|
|
1936
|
-
e("div",
|
|
1937
|
-
e("div",
|
|
1971
|
+
e("div", Ai, [
|
|
1972
|
+
e("div", qi, [
|
|
1938
1973
|
t[22] || (t[22] = e("label", { for: "crew-status" }, "Status *", -1)),
|
|
1939
1974
|
v(e("select", {
|
|
1940
1975
|
id: "crew-status",
|
|
@@ -1947,7 +1982,7 @@ function Ui(s, t, u, b, n, a) {
|
|
|
1947
1982
|
[C, n.newCrew.status]
|
|
1948
1983
|
])
|
|
1949
1984
|
]),
|
|
1950
|
-
e("div",
|
|
1985
|
+
e("div", Ti, [
|
|
1951
1986
|
t[23] || (t[23] = e("label", { for: "crew-email" }, "Email Address *", -1)),
|
|
1952
1987
|
v(e("input", {
|
|
1953
1988
|
type: "email",
|
|
@@ -1955,44 +1990,44 @@ function Ui(s, t, u, b, n, a) {
|
|
|
1955
1990
|
"onUpdate:modelValue": t[9] || (t[9] = (i) => n.newCrew.email = i),
|
|
1956
1991
|
class: g({ error: n.formErrors.email })
|
|
1957
1992
|
}, null, 2), [
|
|
1958
|
-
[
|
|
1993
|
+
[k, n.newCrew.email]
|
|
1959
1994
|
]),
|
|
1960
|
-
n.formErrors.email ? (o(), l("div",
|
|
1995
|
+
n.formErrors.email ? (o(), l("div", Ii, r(n.formErrors.email), 1)) : m("", !0)
|
|
1961
1996
|
])
|
|
1962
1997
|
]),
|
|
1963
|
-
e("div",
|
|
1998
|
+
e("div", Ri, [
|
|
1964
1999
|
t[26] || (t[26] = e("h3", null, "Certifications", -1)),
|
|
1965
|
-
(o(!0), l(p, null,
|
|
1966
|
-
key:
|
|
2000
|
+
(o(!0), l(p, null, h(n.newCrew.certifications, (i, f) => (o(), l("div", {
|
|
2001
|
+
key: f,
|
|
1967
2002
|
class: "certification-entry"
|
|
1968
2003
|
}, [
|
|
1969
|
-
e("div",
|
|
1970
|
-
e("div",
|
|
2004
|
+
e("div", Mi, [
|
|
2005
|
+
e("div", Vi, [
|
|
1971
2006
|
t[24] || (t[24] = e("label", null, "Certification Name", -1)),
|
|
1972
2007
|
v(e("input", {
|
|
1973
2008
|
type: "text",
|
|
1974
|
-
"onUpdate:modelValue": (
|
|
2009
|
+
"onUpdate:modelValue": (y) => i.name = y,
|
|
1975
2010
|
placeholder: "Enter certification name"
|
|
1976
|
-
}, null, 8,
|
|
1977
|
-
[
|
|
2011
|
+
}, null, 8, Fi), [
|
|
2012
|
+
[k, i.name]
|
|
1978
2013
|
])
|
|
1979
2014
|
]),
|
|
1980
|
-
e("div",
|
|
2015
|
+
e("div", Ei, [
|
|
1981
2016
|
t[25] || (t[25] = e("label", null, "Expiry Date", -1)),
|
|
1982
2017
|
v(e("input", {
|
|
1983
2018
|
type: "date",
|
|
1984
|
-
"onUpdate:modelValue": (
|
|
1985
|
-
}, null, 8,
|
|
1986
|
-
[
|
|
2019
|
+
"onUpdate:modelValue": (y) => i.expiryDate = y
|
|
2020
|
+
}, null, 8, Ni), [
|
|
2021
|
+
[k, i.expiryDate]
|
|
1987
2022
|
])
|
|
1988
2023
|
]),
|
|
1989
|
-
e("div",
|
|
2024
|
+
e("div", Oi, [
|
|
1990
2025
|
n.newCrew.certifications.length > 1 ? (o(), l("button", {
|
|
1991
2026
|
key: 0,
|
|
1992
2027
|
type: "button",
|
|
1993
2028
|
class: "btn btn-danger btn-sm",
|
|
1994
|
-
onClick: (
|
|
1995
|
-
}, " Remove ", 8,
|
|
2029
|
+
onClick: (y) => a.removeCertification(f)
|
|
2030
|
+
}, " Remove ", 8, Ui)) : m("", !0)
|
|
1996
2031
|
])
|
|
1997
2032
|
])
|
|
1998
2033
|
]))), 128)),
|
|
@@ -2002,19 +2037,19 @@ function Ui(s, t, u, b, n, a) {
|
|
|
2002
2037
|
onClick: t[10] || (t[10] = (...i) => a.addCertificationEntry && a.addCertificationEntry(...i))
|
|
2003
2038
|
}, " + Add More Certification ")
|
|
2004
2039
|
]),
|
|
2005
|
-
e("div",
|
|
2006
|
-
e("div",
|
|
2040
|
+
e("div", Li, [
|
|
2041
|
+
e("div", $i, [
|
|
2007
2042
|
t[27] || (t[27] = e("label", { for: "crew-notes" }, "Notes", -1)),
|
|
2008
2043
|
v(e("textarea", {
|
|
2009
2044
|
id: "crew-notes",
|
|
2010
2045
|
rows: "3",
|
|
2011
2046
|
"onUpdate:modelValue": t[11] || (t[11] = (i) => n.newCrew.notes = i)
|
|
2012
2047
|
}, null, 512), [
|
|
2013
|
-
[
|
|
2048
|
+
[k, n.newCrew.notes]
|
|
2014
2049
|
])
|
|
2015
2050
|
])
|
|
2016
2051
|
]),
|
|
2017
|
-
e("div",
|
|
2052
|
+
e("div", ji, [
|
|
2018
2053
|
e("button", {
|
|
2019
2054
|
class: "btn btn-secondary",
|
|
2020
2055
|
onClick: t[12] || (t[12] = (...i) => a.handleCancelForm && a.handleCancelForm(...i))
|
|
@@ -2028,8 +2063,8 @@ function Ui(s, t, u, b, n, a) {
|
|
|
2028
2063
|
])
|
|
2029
2064
|
]);
|
|
2030
2065
|
}
|
|
2031
|
-
const
|
|
2032
|
-
const
|
|
2066
|
+
const Hi = /* @__PURE__ */ S(ti, [["render", Bi]]);
|
|
2067
|
+
const Qi = {
|
|
2033
2068
|
name: "RequisitionSystem",
|
|
2034
2069
|
props: {
|
|
2035
2070
|
userProfile: {
|
|
@@ -2277,75 +2312,75 @@ const ji = {
|
|
|
2277
2312
|
created() {
|
|
2278
2313
|
this.addItem();
|
|
2279
2314
|
}
|
|
2280
|
-
},
|
|
2315
|
+
}, Ji = { class: "s-container container" }, Wi = { class: "nav-tabs" }, Gi = ["onClick"], zi = {
|
|
2281
2316
|
key: 0,
|
|
2282
2317
|
class: "tab-content active"
|
|
2283
|
-
},
|
|
2318
|
+
}, Yi = { class: "form-grid" }, Ki = { class: "form-group" }, Xi = ["value"], Zi = { class: "form-group" }, en = ["value"], tn = { class: "form-group" }, sn = ["value"], nn = { class: "form-group" }, on = { class: "form-group" }, ln = { class: "items-section" }, rn = { class: "items-header" }, an = { class: "form-group" }, dn = ["onUpdate:modelValue"], un = { class: "form-group" }, cn = ["onUpdate:modelValue"], mn = { class: "form-group" }, vn = ["onUpdate:modelValue"], pn = { class: "form-group" }, fn = ["onUpdate:modelValue"], hn = ["value"], gn = { class: "form-group" }, bn = ["onUpdate:modelValue"], yn = ["onClick"], wn = {
|
|
2284
2319
|
key: 1,
|
|
2285
2320
|
class: "tab-content active"
|
|
2286
|
-
},
|
|
2321
|
+
}, kn = { class: "requisition-list" }, _n = { class: "requisition-header" }, Cn = { class: "requisition-id" }, Dn = { class: "requisition-details" }, xn = { class: "detail-label" }, Sn = { class: "detail-value" }, Pn = {
|
|
2287
2322
|
key: 0,
|
|
2288
2323
|
class: "form-group comments-section"
|
|
2289
|
-
},
|
|
2324
|
+
}, An = ["onClick"], qn = {
|
|
2290
2325
|
key: 2,
|
|
2291
2326
|
class: "tab-content active"
|
|
2292
|
-
},
|
|
2327
|
+
}, Tn = { class: "requisition-list" }, In = { class: "requisition-header" }, Rn = { class: "requisition-id" }, Mn = { class: "requisition-details" }, Vn = { class: "detail-label" }, Fn = { class: "detail-value" }, En = {
|
|
2293
2328
|
key: 0,
|
|
2294
2329
|
class: "form-group comments-section"
|
|
2295
|
-
},
|
|
2330
|
+
}, Nn = ["onClick"], On = {
|
|
2296
2331
|
key: 3,
|
|
2297
2332
|
class: "tab-content active"
|
|
2298
|
-
},
|
|
2333
|
+
}, Un = {
|
|
2299
2334
|
class: "requisition-list",
|
|
2300
2335
|
id: "approvalsQueue"
|
|
2301
|
-
},
|
|
2336
|
+
}, Ln = { class: "requisition-header" }, $n = { class: "requisition-id" }, jn = { class: "requisition-details" }, Bn = { class: "detail-label" }, Hn = { class: "detail-value" }, Qn = { class: "detail-item" }, Jn = { class: "detail-value" }, Wn = { class: "detail-item" }, Gn = { class: "item-list" }, zn = ["onClick"], Yn = ["onClick"], Kn = ["onClick"], Xn = {
|
|
2302
2337
|
key: 4,
|
|
2303
2338
|
class: "tab-content active"
|
|
2304
|
-
},
|
|
2339
|
+
}, Zn = {
|
|
2305
2340
|
class: "requisition-list",
|
|
2306
2341
|
id: "purchasingQueue"
|
|
2307
|
-
},
|
|
2342
|
+
}, eo = { class: "requisition-header" }, to = { class: "requisition-id" }, so = { class: "requisition-details" }, io = { class: "detail-label" }, no = { class: "detail-value" }, oo = { class: "detail-item" }, lo = { class: "detail-value" }, ro = { class: "detail-item" }, ao = { class: "item-list" }, uo = ["onClick"], co = {
|
|
2308
2343
|
key: 5,
|
|
2309
2344
|
class: "tab-content active"
|
|
2310
|
-
},
|
|
2345
|
+
}, mo = {
|
|
2311
2346
|
class: "requisition-list",
|
|
2312
2347
|
id: "receivingQueue"
|
|
2313
|
-
},
|
|
2348
|
+
}, vo = { class: "requisition-header" }, po = { class: "requisition-id" }, fo = { class: "requisition-details" }, ho = { class: "detail-label" }, go = { class: "detail-value" }, bo = { class: "detail-item" }, yo = { class: "detail-value" }, wo = { class: "detail-item" }, ko = { class: "item-list" }, _o = ["onClick"], Co = {
|
|
2314
2349
|
key: 6,
|
|
2315
2350
|
class: "tab-content active"
|
|
2316
|
-
},
|
|
2351
|
+
}, Do = {
|
|
2317
2352
|
class: "po-content",
|
|
2318
2353
|
id: "po-content"
|
|
2319
|
-
},
|
|
2354
|
+
}, xo = { class: "po-header" }, So = { class: "company-info" }, Po = { class: "info-row" }, Ao = { class: "info-value" }, qo = { class: "info-row" }, To = { class: "info-value" }, Io = { class: "info-row" }, Ro = { class: "info-value" }, Mo = { class: "info-row" }, Vo = { class: "info-value" }, Fo = { class: "info-row" }, Eo = { class: "info-value" }, No = { class: "company-info" }, Oo = { class: "info-row" }, Uo = { class: "info-value" }, Lo = { class: "info-row" }, $o = { class: "info-value" }, jo = { class: "info-row" }, Bo = { class: "info-value" }, Ho = { class: "info-row" }, Qo = { class: "info-value" }, Jo = { class: "info-row" }, Wo = { class: "info-value" }, Go = { class: "items-section" }, zo = { class: "items-table" }, Yo = { key: 0 }, Ko = { key: 0 }, Xo = {
|
|
2320
2355
|
key: 0,
|
|
2321
2356
|
class: "price-change-indicator"
|
|
2322
|
-
},
|
|
2357
|
+
}, Zo = ["onUpdate:modelValue"], el = { key: 0 }, tl = ["onClick"], sl = { key: 1 }, il = ["onClick"], nl = ["onClick"], ol = {
|
|
2323
2358
|
key: 0,
|
|
2324
2359
|
class: "justification-note"
|
|
2325
|
-
},
|
|
2360
|
+
}, ll = { class: "totals" }, rl = { class: "total-row" }, al = { class: "total-row" }, dl = { class: "total-row" }, ul = { class: "total-row grand-total" }, cl = { class: "modal-content" }, ml = { style: { "margin-bottom": "15px", color: "#666" } }, vl = { class: "modal-buttons" }, pl = ["disabled"], fl = {
|
|
2326
2361
|
key: 7,
|
|
2327
2362
|
class: "tab-content active"
|
|
2328
2363
|
};
|
|
2329
|
-
function
|
|
2330
|
-
var i,
|
|
2331
|
-
return o(), l("div",
|
|
2364
|
+
function hl(s, t, u, b, n, a) {
|
|
2365
|
+
var i, f, y, A, q, T, I, R, M, V, F;
|
|
2366
|
+
return o(), l("div", Ji, [
|
|
2332
2367
|
t[62] || (t[62] = e("div", { class: "header" }, [
|
|
2333
2368
|
e("h1", null, "OceanHelm Requisition System"),
|
|
2334
2369
|
e("p", null, "Streamlined Material Request & Ordering Process")
|
|
2335
2370
|
], -1)),
|
|
2336
|
-
e("div",
|
|
2337
|
-
(o(!0), l(p, null,
|
|
2371
|
+
e("div", Wi, [
|
|
2372
|
+
(o(!0), l(p, null, h(a.visibleTabs, (d) => (o(), l("button", {
|
|
2338
2373
|
key: d.name,
|
|
2339
2374
|
class: g(["nav-tab", { active: n.activeTab === d.name }]),
|
|
2340
2375
|
onClick: (c) => a.setActiveTab(d.name)
|
|
2341
|
-
}, r(d.label), 11,
|
|
2376
|
+
}, r(d.label), 11, Gi))), 128))
|
|
2342
2377
|
]),
|
|
2343
|
-
n.activeTab === "new-requisition" ? (o(), l("div",
|
|
2378
|
+
n.activeTab === "new-requisition" ? (o(), l("div", zi, [
|
|
2344
2379
|
e("form", {
|
|
2345
2380
|
onSubmit: t[5] || (t[5] = D((...d) => a.handleSubmitRequisition && a.handleSubmitRequisition(...d), ["prevent"]))
|
|
2346
2381
|
}, [
|
|
2347
|
-
e("div",
|
|
2348
|
-
e("div",
|
|
2382
|
+
e("div", Yi, [
|
|
2383
|
+
e("div", Ki, [
|
|
2349
2384
|
t[12] || (t[12] = e("label", null, "Requestor Name *", -1)),
|
|
2350
2385
|
e("input", {
|
|
2351
2386
|
type: "text",
|
|
@@ -2353,24 +2388,24 @@ function ml(s, t, u, b, n, a) {
|
|
|
2353
2388
|
readonly: "",
|
|
2354
2389
|
required: "",
|
|
2355
2390
|
class: "form-control"
|
|
2356
|
-
}, null, 8,
|
|
2391
|
+
}, null, 8, Xi)
|
|
2357
2392
|
]),
|
|
2358
|
-
e("div",
|
|
2393
|
+
e("div", Zi, [
|
|
2359
2394
|
t[14] || (t[14] = e("label", null, "Department *", -1)),
|
|
2360
2395
|
v(e("select", {
|
|
2361
2396
|
"onUpdate:modelValue": t[0] || (t[0] = (d) => n.form.department = d),
|
|
2362
2397
|
required: ""
|
|
2363
2398
|
}, [
|
|
2364
2399
|
t[13] || (t[13] = e("option", { value: "" }, "Select Department", -1)),
|
|
2365
|
-
(o(!0), l(p, null,
|
|
2400
|
+
(o(!0), l(p, null, h(n.departments, (d) => (o(), l("option", {
|
|
2366
2401
|
key: d,
|
|
2367
2402
|
value: d
|
|
2368
|
-
}, r(d), 9,
|
|
2403
|
+
}, r(d), 9, en))), 128))
|
|
2369
2404
|
], 512), [
|
|
2370
2405
|
[C, n.form.department]
|
|
2371
2406
|
])
|
|
2372
2407
|
]),
|
|
2373
|
-
e("div",
|
|
2408
|
+
e("div", tn, [
|
|
2374
2409
|
t[16] || (t[16] = e("label", null, "Vessel *", -1)),
|
|
2375
2410
|
v(e("select", {
|
|
2376
2411
|
"onUpdate:modelValue": t[1] || (t[1] = (d) => n.form.project = d),
|
|
@@ -2381,37 +2416,37 @@ function ml(s, t, u, b, n, a) {
|
|
|
2381
2416
|
disabled: "",
|
|
2382
2417
|
value: ""
|
|
2383
2418
|
}, "Select a vessel", -1)),
|
|
2384
|
-
(o(!0), l(p, null,
|
|
2419
|
+
(o(!0), l(p, null, h(u.vessels, (d) => (o(), l("option", {
|
|
2385
2420
|
key: d.id,
|
|
2386
2421
|
value: d.name
|
|
2387
|
-
}, r(d.name), 9,
|
|
2422
|
+
}, r(d.name), 9, sn))), 128))
|
|
2388
2423
|
], 512), [
|
|
2389
2424
|
[C, n.form.project]
|
|
2390
2425
|
])
|
|
2391
2426
|
]),
|
|
2392
|
-
e("div",
|
|
2427
|
+
e("div", nn, [
|
|
2393
2428
|
t[17] || (t[17] = e("label", null, "Date Needed *", -1)),
|
|
2394
2429
|
v(e("input", {
|
|
2395
2430
|
type: "date",
|
|
2396
2431
|
"onUpdate:modelValue": t[2] || (t[2] = (d) => n.form.neededDate = d),
|
|
2397
2432
|
required: ""
|
|
2398
2433
|
}, null, 512), [
|
|
2399
|
-
[
|
|
2434
|
+
[k, n.form.neededDate]
|
|
2400
2435
|
])
|
|
2401
2436
|
])
|
|
2402
2437
|
]),
|
|
2403
|
-
e("div",
|
|
2438
|
+
e("div", on, [
|
|
2404
2439
|
t[18] || (t[18] = e("label", null, "Business Justification *", -1)),
|
|
2405
2440
|
v(e("textarea", {
|
|
2406
2441
|
"onUpdate:modelValue": t[3] || (t[3] = (d) => n.form.justification = d),
|
|
2407
2442
|
placeholder: "Explain why these materials are needed...",
|
|
2408
2443
|
required: ""
|
|
2409
2444
|
}, null, 512), [
|
|
2410
|
-
[
|
|
2445
|
+
[k, n.form.justification]
|
|
2411
2446
|
])
|
|
2412
2447
|
]),
|
|
2413
|
-
e("div",
|
|
2414
|
-
e("div",
|
|
2448
|
+
e("div", ln, [
|
|
2449
|
+
e("div", rn, [
|
|
2415
2450
|
t[19] || (t[19] = e("h3", null, "Requested Items", -1)),
|
|
2416
2451
|
e("button", {
|
|
2417
2452
|
type: "button",
|
|
@@ -2420,71 +2455,71 @@ function ml(s, t, u, b, n, a) {
|
|
|
2420
2455
|
}, "+ Add Item")
|
|
2421
2456
|
]),
|
|
2422
2457
|
e("div", null, [
|
|
2423
|
-
(o(!0), l(p, null,
|
|
2458
|
+
(o(!0), l(p, null, h(n.form.items, (d, c) => (o(), l("div", {
|
|
2424
2459
|
key: c,
|
|
2425
2460
|
class: "item-row"
|
|
2426
2461
|
}, [
|
|
2427
|
-
e("div",
|
|
2462
|
+
e("div", an, [
|
|
2428
2463
|
t[20] || (t[20] = e("label", null, "Item Code *", -1)),
|
|
2429
2464
|
v(e("input", {
|
|
2430
2465
|
type: "text",
|
|
2431
|
-
"onUpdate:modelValue": (
|
|
2466
|
+
"onUpdate:modelValue": (w) => d.id = w,
|
|
2432
2467
|
required: ""
|
|
2433
|
-
}, null, 8,
|
|
2434
|
-
[
|
|
2468
|
+
}, null, 8, dn), [
|
|
2469
|
+
[k, d.id]
|
|
2435
2470
|
])
|
|
2436
2471
|
]),
|
|
2437
|
-
e("div",
|
|
2472
|
+
e("div", un, [
|
|
2438
2473
|
t[21] || (t[21] = e("label", null, "Item Description *", -1)),
|
|
2439
2474
|
v(e("input", {
|
|
2440
2475
|
type: "text",
|
|
2441
|
-
"onUpdate:modelValue": (
|
|
2476
|
+
"onUpdate:modelValue": (w) => d.desc = w,
|
|
2442
2477
|
required: ""
|
|
2443
|
-
}, null, 8,
|
|
2444
|
-
[
|
|
2478
|
+
}, null, 8, cn), [
|
|
2479
|
+
[k, d.desc]
|
|
2445
2480
|
])
|
|
2446
2481
|
]),
|
|
2447
|
-
e("div",
|
|
2482
|
+
e("div", mn, [
|
|
2448
2483
|
t[22] || (t[22] = e("label", null, "Quantity *", -1)),
|
|
2449
2484
|
v(e("input", {
|
|
2450
2485
|
type: "number",
|
|
2451
|
-
"onUpdate:modelValue": (
|
|
2486
|
+
"onUpdate:modelValue": (w) => d.qty = w,
|
|
2452
2487
|
min: "1",
|
|
2453
2488
|
required: ""
|
|
2454
|
-
}, null, 8,
|
|
2489
|
+
}, null, 8, vn), [
|
|
2455
2490
|
[
|
|
2456
|
-
|
|
2491
|
+
k,
|
|
2457
2492
|
d.qty,
|
|
2458
2493
|
void 0,
|
|
2459
2494
|
{ number: !0 }
|
|
2460
2495
|
]
|
|
2461
2496
|
])
|
|
2462
2497
|
]),
|
|
2463
|
-
e("div",
|
|
2498
|
+
e("div", pn, [
|
|
2464
2499
|
t[23] || (t[23] = e("label", null, "Unit *", -1)),
|
|
2465
2500
|
v(e("select", {
|
|
2466
|
-
"onUpdate:modelValue": (
|
|
2501
|
+
"onUpdate:modelValue": (w) => d.unit = w,
|
|
2467
2502
|
required: ""
|
|
2468
2503
|
}, [
|
|
2469
|
-
(o(!0), l(p, null,
|
|
2470
|
-
key:
|
|
2471
|
-
value:
|
|
2472
|
-
}, r(
|
|
2473
|
-
], 8,
|
|
2504
|
+
(o(!0), l(p, null, h(n.units, (w) => (o(), l("option", {
|
|
2505
|
+
key: w,
|
|
2506
|
+
value: w
|
|
2507
|
+
}, r(w), 9, hn))), 128))
|
|
2508
|
+
], 8, fn), [
|
|
2474
2509
|
[C, d.unit]
|
|
2475
2510
|
])
|
|
2476
2511
|
]),
|
|
2477
|
-
e("div",
|
|
2512
|
+
e("div", gn, [
|
|
2478
2513
|
t[24] || (t[24] = e("label", null, "Est. Unit Cost *", -1)),
|
|
2479
2514
|
v(e("input", {
|
|
2480
2515
|
type: "number",
|
|
2481
|
-
"onUpdate:modelValue": (
|
|
2516
|
+
"onUpdate:modelValue": (w) => d.cost = w,
|
|
2482
2517
|
step: "0.01",
|
|
2483
2518
|
placeholder: "0.00",
|
|
2484
2519
|
required: ""
|
|
2485
|
-
}, null, 8,
|
|
2520
|
+
}, null, 8, bn), [
|
|
2486
2521
|
[
|
|
2487
|
-
|
|
2522
|
+
k,
|
|
2488
2523
|
d.cost,
|
|
2489
2524
|
void 0,
|
|
2490
2525
|
{ number: !0 }
|
|
@@ -2494,8 +2529,8 @@ function ml(s, t, u, b, n, a) {
|
|
|
2494
2529
|
e("button", {
|
|
2495
2530
|
type: "button",
|
|
2496
2531
|
class: "remove-item-btn",
|
|
2497
|
-
onClick: (
|
|
2498
|
-
}, "Remove", 8,
|
|
2532
|
+
onClick: (w) => a.removeItem(c)
|
|
2533
|
+
}, "Remove", 8, yn)
|
|
2499
2534
|
]))), 128))
|
|
2500
2535
|
])
|
|
2501
2536
|
]),
|
|
@@ -2507,75 +2542,75 @@ function ml(s, t, u, b, n, a) {
|
|
|
2507
2542
|
], -1))
|
|
2508
2543
|
], 32)
|
|
2509
2544
|
])) : m("", !0),
|
|
2510
|
-
n.activeTab === "all-requisitions" ? (o(), l("div",
|
|
2511
|
-
e("div",
|
|
2512
|
-
(o(!0), l(p, null,
|
|
2545
|
+
n.activeTab === "all-requisitions" ? (o(), l("div", wn, [
|
|
2546
|
+
e("div", kn, [
|
|
2547
|
+
(o(!0), l(p, null, h(u.requisitions, (d) => (o(), l("div", {
|
|
2513
2548
|
key: d.id,
|
|
2514
2549
|
class: "requisition-card"
|
|
2515
2550
|
}, [
|
|
2516
|
-
e("div",
|
|
2517
|
-
e("div",
|
|
2551
|
+
e("div", _n, [
|
|
2552
|
+
e("div", Cn, r(d.id), 1),
|
|
2518
2553
|
e("div", {
|
|
2519
2554
|
class: g(["status-badge", `status-${d.status}`])
|
|
2520
2555
|
}, r(d.status), 3)
|
|
2521
2556
|
]),
|
|
2522
|
-
e("div",
|
|
2523
|
-
(o(!0), l(p, null,
|
|
2557
|
+
e("div", Dn, [
|
|
2558
|
+
(o(!0), l(p, null, h(a.getRequisitionFields(d), (c) => (o(), l("div", {
|
|
2524
2559
|
class: "detail-item",
|
|
2525
2560
|
key: c.label
|
|
2526
2561
|
}, [
|
|
2527
|
-
e("div",
|
|
2528
|
-
e("div",
|
|
2562
|
+
e("div", xn, r(c.label), 1),
|
|
2563
|
+
e("div", Sn, r(c.value(d)), 1)
|
|
2529
2564
|
]))), 128))
|
|
2530
2565
|
]),
|
|
2531
|
-
d.status === "po-created" || d.status === "delivered" ? (o(), l("div",
|
|
2566
|
+
d.status === "po-created" || d.status === "delivered" ? (o(), l("div", Pn, [
|
|
2532
2567
|
e("button", {
|
|
2533
2568
|
onClick: (c) => a.handleOpenPO(d.id),
|
|
2534
2569
|
class: "add-item-btn comments-section"
|
|
2535
|
-
}, " Print PO ", 8,
|
|
2570
|
+
}, " Print PO ", 8, An)
|
|
2536
2571
|
])) : m("", !0)
|
|
2537
2572
|
]))), 128))
|
|
2538
2573
|
])
|
|
2539
2574
|
])) : m("", !0),
|
|
2540
|
-
n.activeTab === "my-requisitions" ? (o(), l("div",
|
|
2541
|
-
e("div",
|
|
2542
|
-
(o(!0), l(p, null,
|
|
2575
|
+
n.activeTab === "my-requisitions" ? (o(), l("div", qn, [
|
|
2576
|
+
e("div", Tn, [
|
|
2577
|
+
(o(!0), l(p, null, h(a.myRequisitions, (d) => (o(), l("div", {
|
|
2543
2578
|
key: d.id,
|
|
2544
2579
|
class: "requisition-card"
|
|
2545
2580
|
}, [
|
|
2546
|
-
e("div",
|
|
2547
|
-
e("div",
|
|
2581
|
+
e("div", In, [
|
|
2582
|
+
e("div", Rn, r(d.id), 1),
|
|
2548
2583
|
e("div", {
|
|
2549
2584
|
class: g(["status-badge", `status-${d.status}`])
|
|
2550
2585
|
}, r(d.status), 3)
|
|
2551
2586
|
]),
|
|
2552
|
-
e("div",
|
|
2553
|
-
(o(!0), l(p, null,
|
|
2587
|
+
e("div", Mn, [
|
|
2588
|
+
(o(!0), l(p, null, h(a.getRequisitionFields(d), (c) => (o(), l("div", {
|
|
2554
2589
|
class: "detail-item",
|
|
2555
2590
|
key: c.label
|
|
2556
2591
|
}, [
|
|
2557
|
-
e("div",
|
|
2558
|
-
e("div",
|
|
2592
|
+
e("div", Vn, r(c.label), 1),
|
|
2593
|
+
e("div", Fn, r(c.value(d)), 1)
|
|
2559
2594
|
]))), 128))
|
|
2560
2595
|
]),
|
|
2561
|
-
d.status === "info-requested" ? (o(), l("div",
|
|
2596
|
+
d.status === "info-requested" ? (o(), l("div", En, [
|
|
2562
2597
|
t[26] || (t[26] = e("label", { class: "detail-label" }, "Your Response", -1)),
|
|
2563
2598
|
v(e("textarea", {
|
|
2564
2599
|
"onUpdate:modelValue": t[6] || (t[6] = (c) => n.infoResponse = c),
|
|
2565
2600
|
class: "response-textarea",
|
|
2566
2601
|
placeholder: "Submit more info..."
|
|
2567
2602
|
}, null, 512), [
|
|
2568
|
-
[
|
|
2603
|
+
[k, n.infoResponse]
|
|
2569
2604
|
]),
|
|
2570
2605
|
e("button", {
|
|
2571
2606
|
onClick: (c) => a.handleSubmitInfoResponse(d),
|
|
2572
2607
|
class: "add-item-btn comments-section"
|
|
2573
|
-
}, " Submit Info ", 8,
|
|
2608
|
+
}, " Submit Info ", 8, Nn)
|
|
2574
2609
|
])) : m("", !0)
|
|
2575
2610
|
]))), 128))
|
|
2576
2611
|
])
|
|
2577
2612
|
])) : m("", !0),
|
|
2578
|
-
n.activeTab === "approvals" ? (o(), l("div",
|
|
2613
|
+
n.activeTab === "approvals" ? (o(), l("div", On, [
|
|
2579
2614
|
t[29] || (t[29] = e("div", { style: { "margin-bottom": "20px" } }, [
|
|
2580
2615
|
e("h3", { style: { color: "#1e40af", "margin-bottom": "15px" } }, "Department Supervisor Dashboard"),
|
|
2581
2616
|
e("div", { style: { background: "#fef3c7", padding: "15px", "border-radius": "10px", "border-left": "4px solid #f59e0b" } }, [
|
|
@@ -2583,52 +2618,52 @@ function ml(s, t, u, b, n, a) {
|
|
|
2583
2618
|
_(" Department Supervisor - Review requests for accuracy, necessity, and budget compliance ")
|
|
2584
2619
|
])
|
|
2585
2620
|
], -1)),
|
|
2586
|
-
e("div",
|
|
2587
|
-
(o(!0), l(p, null,
|
|
2621
|
+
e("div", Un, [
|
|
2622
|
+
(o(!0), l(p, null, h(a.reviewRequisitions, (d) => (o(), l("div", {
|
|
2588
2623
|
key: d.id,
|
|
2589
2624
|
class: "requisition-card"
|
|
2590
2625
|
}, [
|
|
2591
|
-
e("div",
|
|
2592
|
-
e("div",
|
|
2626
|
+
e("div", Ln, [
|
|
2627
|
+
e("div", $n, r(d.id), 1)
|
|
2593
2628
|
]),
|
|
2594
|
-
e("div",
|
|
2595
|
-
(o(!0), l(p, null,
|
|
2629
|
+
e("div", jn, [
|
|
2630
|
+
(o(!0), l(p, null, h(n.requisitionFields, (c) => (o(), l("div", {
|
|
2596
2631
|
class: "detail-item",
|
|
2597
2632
|
key: c.label
|
|
2598
2633
|
}, [
|
|
2599
|
-
e("div",
|
|
2600
|
-
e("div",
|
|
2634
|
+
e("div", Bn, r(c.label), 1),
|
|
2635
|
+
e("div", Hn, r(c.value(d)), 1)
|
|
2601
2636
|
]))), 128))
|
|
2602
2637
|
]),
|
|
2603
|
-
e("div",
|
|
2638
|
+
e("div", Qn, [
|
|
2604
2639
|
t[27] || (t[27] = e("div", { class: "detail-label" }, "Justification", -1)),
|
|
2605
|
-
e("div",
|
|
2640
|
+
e("div", Jn, r(d.justification || "N/A"), 1)
|
|
2606
2641
|
]),
|
|
2607
|
-
e("div",
|
|
2642
|
+
e("div", Wn, [
|
|
2608
2643
|
t[28] || (t[28] = e("div", { class: "detail-label" }, "Items", -1)),
|
|
2609
|
-
e("ul",
|
|
2610
|
-
(o(!0), l(p, null,
|
|
2644
|
+
e("ul", Gn, [
|
|
2645
|
+
(o(!0), l(p, null, h(d.items, (c, w) => (o(), l("li", { key: w }, r(c.desc) + " - " + r(c.qty) + " " + r(c.unit) + " @ ₦" + r(c.cost.toFixed(2)) + " each ", 1))), 128))
|
|
2611
2646
|
])
|
|
2612
2647
|
]),
|
|
2613
2648
|
e("button", {
|
|
2614
2649
|
type: "button",
|
|
2615
2650
|
class: "add-item-btn",
|
|
2616
2651
|
onClick: (c) => a.handleApproveRequisition(d.id)
|
|
2617
|
-
}, "Approve", 8,
|
|
2652
|
+
}, "Approve", 8, zn),
|
|
2618
2653
|
e("button", {
|
|
2619
2654
|
type: "button",
|
|
2620
2655
|
class: "marginbox btn-reject",
|
|
2621
2656
|
onClick: (c) => a.handleDeclineRequisition(d.id)
|
|
2622
|
-
}, "Decline", 8,
|
|
2657
|
+
}, "Decline", 8, Yn),
|
|
2623
2658
|
e("button", {
|
|
2624
2659
|
type: "button",
|
|
2625
2660
|
class: "marginbox btn-request",
|
|
2626
2661
|
onClick: (c) => a.handleInfoRequisition(d.id)
|
|
2627
|
-
}, "Request Info", 8,
|
|
2662
|
+
}, "Request Info", 8, Kn)
|
|
2628
2663
|
]))), 128))
|
|
2629
2664
|
])
|
|
2630
2665
|
])) : m("", !0),
|
|
2631
|
-
n.activeTab === "purchasing" ? (o(), l("div",
|
|
2666
|
+
n.activeTab === "purchasing" ? (o(), l("div", Xn, [
|
|
2632
2667
|
t[32] || (t[32] = e("div", { style: { "margin-bottom": "20px" } }, [
|
|
2633
2668
|
e("h3", { style: { color: "#1e40af", "margin-bottom": "15px" } }, "Purchasing Department Dashboard"),
|
|
2634
2669
|
e("div", { style: { background: "#dbeafe", padding: "15px", "border-radius": "10px", "border-left": "4px solid #3b82f6" } }, [
|
|
@@ -2636,42 +2671,42 @@ function ml(s, t, u, b, n, a) {
|
|
|
2636
2671
|
_(" Purchasing Team - Convert approved requisitions to Purchase Orders ")
|
|
2637
2672
|
])
|
|
2638
2673
|
], -1)),
|
|
2639
|
-
e("div",
|
|
2640
|
-
(o(!0), l(p, null,
|
|
2674
|
+
e("div", Zn, [
|
|
2675
|
+
(o(!0), l(p, null, h(a.poRequisitions, (d) => (o(), l("div", {
|
|
2641
2676
|
key: d.id,
|
|
2642
2677
|
class: "requisition-card"
|
|
2643
2678
|
}, [
|
|
2644
|
-
e("div",
|
|
2645
|
-
e("div",
|
|
2679
|
+
e("div", eo, [
|
|
2680
|
+
e("div", to, r(d.id), 1)
|
|
2646
2681
|
]),
|
|
2647
|
-
e("div",
|
|
2648
|
-
(o(!0), l(p, null,
|
|
2682
|
+
e("div", so, [
|
|
2683
|
+
(o(!0), l(p, null, h(n.requisitionFields, (c) => (o(), l("div", {
|
|
2649
2684
|
class: "detail-item",
|
|
2650
2685
|
key: c.label
|
|
2651
2686
|
}, [
|
|
2652
|
-
e("div",
|
|
2653
|
-
e("div",
|
|
2687
|
+
e("div", io, r(c.label), 1),
|
|
2688
|
+
e("div", no, r(c.value(d)), 1)
|
|
2654
2689
|
]))), 128))
|
|
2655
2690
|
]),
|
|
2656
|
-
e("div",
|
|
2691
|
+
e("div", oo, [
|
|
2657
2692
|
t[30] || (t[30] = e("div", { class: "detail-label" }, "Justification", -1)),
|
|
2658
|
-
e("div",
|
|
2693
|
+
e("div", lo, r(d.justification || "N/A"), 1)
|
|
2659
2694
|
]),
|
|
2660
|
-
e("div",
|
|
2695
|
+
e("div", ro, [
|
|
2661
2696
|
t[31] || (t[31] = e("div", { class: "detail-label" }, "Items", -1)),
|
|
2662
|
-
e("ul",
|
|
2663
|
-
(o(!0), l(p, null,
|
|
2697
|
+
e("ul", ao, [
|
|
2698
|
+
(o(!0), l(p, null, h(d.items, (c, w) => (o(), l("li", { key: w }, r(c.desc) + " - " + r(c.qty) + " " + r(c.unit) + " @ ₦" + r(c.cost.toFixed(2)) + " each ", 1))), 128))
|
|
2664
2699
|
])
|
|
2665
2700
|
]),
|
|
2666
2701
|
e("button", {
|
|
2667
2702
|
type: "button",
|
|
2668
2703
|
class: "add-item-btn",
|
|
2669
2704
|
onClick: (c) => a.handleCreatePO(d.id)
|
|
2670
|
-
}, "Create PO", 8,
|
|
2705
|
+
}, "Create PO", 8, uo)
|
|
2671
2706
|
]))), 128))
|
|
2672
2707
|
])
|
|
2673
2708
|
])) : m("", !0),
|
|
2674
|
-
n.activeTab === "receiving" ? (o(), l("div",
|
|
2709
|
+
n.activeTab === "receiving" ? (o(), l("div", co, [
|
|
2675
2710
|
t[35] || (t[35] = e("div", { style: { "margin-bottom": "20px" } }, [
|
|
2676
2711
|
e("h3", { style: { color: "#1e40af", "margin-bottom": "15px" } }, "Receiving & Inventory Dashboard"),
|
|
2677
2712
|
e("div", { style: { background: "#dcfce7", padding: "15px", "border-radius": "10px", "border-left": "4px solid #10b981" } }, [
|
|
@@ -2679,94 +2714,94 @@ function ml(s, t, u, b, n, a) {
|
|
|
2679
2714
|
_(" Warehouse Team - Process incoming deliveries and update inventory ")
|
|
2680
2715
|
])
|
|
2681
2716
|
], -1)),
|
|
2682
|
-
e("div",
|
|
2683
|
-
(o(!0), l(p, null,
|
|
2717
|
+
e("div", mo, [
|
|
2718
|
+
(o(!0), l(p, null, h(a.awaitingDelivery, (d) => (o(), l("div", {
|
|
2684
2719
|
key: d.id,
|
|
2685
2720
|
class: "requisition-card"
|
|
2686
2721
|
}, [
|
|
2687
|
-
e("div",
|
|
2688
|
-
e("div",
|
|
2722
|
+
e("div", vo, [
|
|
2723
|
+
e("div", po, r(d.id), 1)
|
|
2689
2724
|
]),
|
|
2690
|
-
e("div",
|
|
2691
|
-
(o(!0), l(p, null,
|
|
2725
|
+
e("div", fo, [
|
|
2726
|
+
(o(!0), l(p, null, h(n.requisitionFields, (c) => (o(), l("div", {
|
|
2692
2727
|
class: "detail-item",
|
|
2693
2728
|
key: c.label
|
|
2694
2729
|
}, [
|
|
2695
|
-
e("div",
|
|
2696
|
-
e("div",
|
|
2730
|
+
e("div", ho, r(c.label), 1),
|
|
2731
|
+
e("div", go, r(c.value(d)), 1)
|
|
2697
2732
|
]))), 128))
|
|
2698
2733
|
]),
|
|
2699
|
-
e("div",
|
|
2734
|
+
e("div", bo, [
|
|
2700
2735
|
t[33] || (t[33] = e("div", { class: "detail-label" }, "Justification", -1)),
|
|
2701
|
-
e("div",
|
|
2736
|
+
e("div", yo, r(d.justification || "N/A"), 1)
|
|
2702
2737
|
]),
|
|
2703
|
-
e("div",
|
|
2738
|
+
e("div", wo, [
|
|
2704
2739
|
t[34] || (t[34] = e("div", { class: "detail-label" }, "Items", -1)),
|
|
2705
|
-
e("ul",
|
|
2706
|
-
(o(!0), l(p, null,
|
|
2740
|
+
e("ul", ko, [
|
|
2741
|
+
(o(!0), l(p, null, h(d.items, (c, w) => (o(), l("li", { key: w }, r(c.desc) + " - " + r(c.qty) + " " + r(c.unit) + " @ ₦" + r(c.cost.toFixed(2)) + " each ", 1))), 128))
|
|
2707
2742
|
])
|
|
2708
2743
|
]),
|
|
2709
2744
|
e("button", {
|
|
2710
2745
|
type: "button",
|
|
2711
2746
|
class: "add-item-btn",
|
|
2712
2747
|
onClick: (c) => a.handleAcceptDelivery(d.id)
|
|
2713
|
-
}, "Accept Delivery", 8,
|
|
2748
|
+
}, "Accept Delivery", 8, _o)
|
|
2714
2749
|
]))), 128))
|
|
2715
2750
|
])
|
|
2716
2751
|
])) : m("", !0),
|
|
2717
|
-
n.activeTab === "po" ? (o(), l("div",
|
|
2718
|
-
e("div",
|
|
2719
|
-
e("div",
|
|
2720
|
-
e("div",
|
|
2752
|
+
n.activeTab === "po" ? (o(), l("div", Co, [
|
|
2753
|
+
e("div", Do, [
|
|
2754
|
+
e("div", xo, [
|
|
2755
|
+
e("div", So, [
|
|
2721
2756
|
t[41] || (t[41] = e("h3", null, "Vendor Information", -1)),
|
|
2722
|
-
e("div",
|
|
2757
|
+
e("div", Po, [
|
|
2723
2758
|
t[36] || (t[36] = e("span", { class: "info-label" }, "Company:", -1)),
|
|
2724
|
-
e("span",
|
|
2759
|
+
e("span", Ao, r(n.vendorInfo.company || ((i = n.poDetails.vendorInfo) == null ? void 0 : i.company)), 1)
|
|
2725
2760
|
]),
|
|
2726
|
-
e("div",
|
|
2761
|
+
e("div", qo, [
|
|
2727
2762
|
t[37] || (t[37] = e("span", { class: "info-label" }, "Contact:", -1)),
|
|
2728
|
-
e("span",
|
|
2763
|
+
e("span", To, r(n.vendorInfo.contact || ((f = n.poDetails.vendorInfo) == null ? void 0 : f.contact)), 1)
|
|
2729
2764
|
]),
|
|
2730
|
-
e("div",
|
|
2765
|
+
e("div", Io, [
|
|
2731
2766
|
t[38] || (t[38] = e("span", { class: "info-label" }, "Email:", -1)),
|
|
2732
|
-
e("span",
|
|
2767
|
+
e("span", Ro, r(n.vendorInfo.email || ((y = n.poDetails.vendorInfo) == null ? void 0 : y.email)), 1)
|
|
2733
2768
|
]),
|
|
2734
|
-
e("div",
|
|
2769
|
+
e("div", Mo, [
|
|
2735
2770
|
t[39] || (t[39] = e("span", { class: "info-label" }, "Phone:", -1)),
|
|
2736
|
-
e("span",
|
|
2771
|
+
e("span", Vo, r(n.vendorInfo.phone || ((A = n.poDetails.vendorInfo) == null ? void 0 : A.phone)), 1)
|
|
2737
2772
|
]),
|
|
2738
|
-
e("div",
|
|
2773
|
+
e("div", Fo, [
|
|
2739
2774
|
t[40] || (t[40] = e("span", { class: "info-label" }, "Address:", -1)),
|
|
2740
|
-
e("span",
|
|
2775
|
+
e("span", Eo, r(n.vendorInfo.address || ((q = n.poDetails.vendorInfo) == null ? void 0 : q.address)), 1)
|
|
2741
2776
|
])
|
|
2742
2777
|
]),
|
|
2743
|
-
e("div",
|
|
2778
|
+
e("div", No, [
|
|
2744
2779
|
t[47] || (t[47] = e("h3", null, "Purchase Order Details", -1)),
|
|
2745
|
-
e("div",
|
|
2780
|
+
e("div", Oo, [
|
|
2746
2781
|
t[42] || (t[42] = e("span", { class: "info-label" }, "PO Number:", -1)),
|
|
2747
|
-
e("span",
|
|
2782
|
+
e("span", Uo, r(n.poDetails.id), 1)
|
|
2748
2783
|
]),
|
|
2749
|
-
e("div",
|
|
2784
|
+
e("div", Lo, [
|
|
2750
2785
|
t[43] || (t[43] = e("span", { class: "info-label" }, "Date:", -1)),
|
|
2751
|
-
e("span",
|
|
2786
|
+
e("span", $o, r(n.vendorInfo.poDate || ((T = n.poDetails.vendorInfo) == null ? void 0 : T.poDate)), 1)
|
|
2752
2787
|
]),
|
|
2753
|
-
e("div",
|
|
2788
|
+
e("div", jo, [
|
|
2754
2789
|
t[44] || (t[44] = e("span", { class: "info-label" }, "Requested By:", -1)),
|
|
2755
|
-
e("span",
|
|
2790
|
+
e("span", Bo, r(n.vendorInfo.poApproved || ((I = n.poDetails.vendorInfo) == null ? void 0 : I.poApproved)), 1)
|
|
2756
2791
|
]),
|
|
2757
|
-
e("div",
|
|
2792
|
+
e("div", Ho, [
|
|
2758
2793
|
t[45] || (t[45] = e("span", { class: "info-label" }, "Department:", -1)),
|
|
2759
|
-
e("span",
|
|
2794
|
+
e("span", Qo, "PO-" + r(n.poDetails.department), 1)
|
|
2760
2795
|
]),
|
|
2761
|
-
e("div",
|
|
2796
|
+
e("div", Jo, [
|
|
2762
2797
|
t[46] || (t[46] = e("span", { class: "info-label" }, "Delivery Date:", -1)),
|
|
2763
|
-
e("span",
|
|
2798
|
+
e("span", Wo, r(n.poDetails.neededDate), 1)
|
|
2764
2799
|
])
|
|
2765
2800
|
])
|
|
2766
2801
|
]),
|
|
2767
|
-
e("div",
|
|
2802
|
+
e("div", Go, [
|
|
2768
2803
|
t[57] || (t[57] = e("h2", { class: "section-title" }, "Order Items", -1)),
|
|
2769
|
-
e("table",
|
|
2804
|
+
e("table", zo, [
|
|
2770
2805
|
e("thead", null, [
|
|
2771
2806
|
e("tr", null, [
|
|
2772
2807
|
t[48] || (t[48] = e("th", null, "Item #", -1)),
|
|
@@ -2774,75 +2809,75 @@ function ml(s, t, u, b, n, a) {
|
|
|
2774
2809
|
t[50] || (t[50] = e("th", null, "Quantity", -1)),
|
|
2775
2810
|
t[51] || (t[51] = e("th", null, "Unit Price", -1)),
|
|
2776
2811
|
t[52] || (t[52] = e("th", null, "Total", -1)),
|
|
2777
|
-
n.isPrinting ? m("", !0) : (o(), l("th",
|
|
2812
|
+
n.isPrinting ? m("", !0) : (o(), l("th", Yo, "Actions"))
|
|
2778
2813
|
])
|
|
2779
2814
|
]),
|
|
2780
2815
|
e("tbody", null, [
|
|
2781
|
-
(o(!0), l(p, null,
|
|
2816
|
+
(o(!0), l(p, null, h(n.poDetails.items || [], (d, c) => (o(), l("tr", { key: c }, [
|
|
2782
2817
|
e("td", null, r(d.itemNumber), 1),
|
|
2783
2818
|
e("td", null, r(d.desc), 1),
|
|
2784
2819
|
e("td", null, r(d.qty), 1),
|
|
2785
2820
|
e("td", null, [
|
|
2786
2821
|
d.editing ? v((o(), l("input", {
|
|
2787
2822
|
key: 1,
|
|
2788
|
-
"onUpdate:modelValue": (
|
|
2823
|
+
"onUpdate:modelValue": (w) => d.tempPrice = w,
|
|
2789
2824
|
type: "number",
|
|
2790
2825
|
step: "0.01",
|
|
2791
2826
|
class: g(["price-input", { "price-changed": d.cost !== d.tempPrice }])
|
|
2792
|
-
}, null, 10,
|
|
2827
|
+
}, null, 10, Zo)), [
|
|
2793
2828
|
[
|
|
2794
|
-
|
|
2829
|
+
k,
|
|
2795
2830
|
d.tempPrice,
|
|
2796
2831
|
void 0,
|
|
2797
2832
|
{ number: !0 }
|
|
2798
2833
|
]
|
|
2799
|
-
]) : (o(), l("span",
|
|
2834
|
+
]) : (o(), l("span", Ko, [
|
|
2800
2835
|
_(" $" + r(d.cost.toFixed(2)) + " ", 1),
|
|
2801
|
-
d.cost !== d.unitPrice ? (o(), l("span",
|
|
2836
|
+
d.cost !== d.unitPrice ? (o(), l("span", Xo, "!")) : m("", !0)
|
|
2802
2837
|
]))
|
|
2803
2838
|
]),
|
|
2804
2839
|
e("td", null, "$" + r((d.unitPrice * d.qty).toFixed(2)), 1),
|
|
2805
|
-
n.isPrinting ? m("", !0) : (o(), l("td",
|
|
2806
|
-
d.editing ? (o(), l("div",
|
|
2840
|
+
n.isPrinting ? m("", !0) : (o(), l("td", el, [
|
|
2841
|
+
d.editing ? (o(), l("div", sl, [
|
|
2807
2842
|
e("button", {
|
|
2808
|
-
onClick: (
|
|
2843
|
+
onClick: (w) => a.savePrice(c),
|
|
2809
2844
|
class: "save-btn"
|
|
2810
|
-
}, "Save", 8,
|
|
2845
|
+
}, "Save", 8, il),
|
|
2811
2846
|
e("button", {
|
|
2812
|
-
onClick: (
|
|
2847
|
+
onClick: (w) => a.cancelEdit(c),
|
|
2813
2848
|
class: "cancel-btn"
|
|
2814
|
-
}, "Cancel", 8,
|
|
2849
|
+
}, "Cancel", 8, nl)
|
|
2815
2850
|
])) : (o(), l("button", {
|
|
2816
2851
|
key: 0,
|
|
2817
|
-
onClick: (
|
|
2852
|
+
onClick: (w) => a.startEdit(c),
|
|
2818
2853
|
class: "edit-btn"
|
|
2819
|
-
}, " Edit Price ", 8,
|
|
2854
|
+
}, " Edit Price ", 8, tl))
|
|
2820
2855
|
]))
|
|
2821
2856
|
]))), 128))
|
|
2822
2857
|
])
|
|
2823
2858
|
]),
|
|
2824
|
-
(o(!0), l(p, null,
|
|
2859
|
+
(o(!0), l(p, null, h(n.poDetails.items || [], (d, c) => (o(), l("div", {
|
|
2825
2860
|
key: "note-" + c
|
|
2826
2861
|
}, [
|
|
2827
|
-
d.justification ? (o(), l("div",
|
|
2862
|
+
d.justification ? (o(), l("div", ol, [
|
|
2828
2863
|
e("strong", null, "Price Change Justification (Item " + r(d.itemNumber) + "):", 1),
|
|
2829
2864
|
_(" " + r(d.justification), 1)
|
|
2830
2865
|
])) : m("", !0)
|
|
2831
2866
|
]))), 128)),
|
|
2832
|
-
e("div",
|
|
2833
|
-
e("div",
|
|
2867
|
+
e("div", ll, [
|
|
2868
|
+
e("div", rl, [
|
|
2834
2869
|
t[53] || (t[53] = e("span", null, "Subtotal:", -1)),
|
|
2835
2870
|
e("span", null, "$" + r(a.subTotal.toFixed(2)), 1)
|
|
2836
2871
|
]),
|
|
2837
|
-
e("div",
|
|
2872
|
+
e("div", al, [
|
|
2838
2873
|
t[54] || (t[54] = e("span", null, "Tax (%):", -1)),
|
|
2839
2874
|
e("span", null, "$" + r(a.getOptional(n.vendorInfo.tax)), 1)
|
|
2840
2875
|
]),
|
|
2841
|
-
e("div",
|
|
2876
|
+
e("div", dl, [
|
|
2842
2877
|
t[55] || (t[55] = e("span", null, "Shipping:", -1)),
|
|
2843
2878
|
e("span", null, "$" + r(a.getOptional(n.vendorInfo.shipping)), 1)
|
|
2844
2879
|
]),
|
|
2845
|
-
e("div",
|
|
2880
|
+
e("div", ul, [
|
|
2846
2881
|
t[56] || (t[56] = e("span", null, "Grand Total:", -1)),
|
|
2847
2882
|
e("span", null, "$" + r((a.subTotal + a.getOptional(n.vendorInfo.tax) + a.getOptional(n.vendorInfo.shipping)).toFixed(2)), 1)
|
|
2848
2883
|
])
|
|
@@ -2854,11 +2889,11 @@ function ml(s, t, u, b, n, a) {
|
|
|
2854
2889
|
class: "justification-modal",
|
|
2855
2890
|
onClick: t[10] || (t[10] = D((...d) => a.closeJustificationModal && a.closeJustificationModal(...d), ["self"]))
|
|
2856
2891
|
}, [
|
|
2857
|
-
e("div",
|
|
2892
|
+
e("div", cl, [
|
|
2858
2893
|
t[60] || (t[60] = e("h3", null, "Price Change Justification Required", -1)),
|
|
2859
|
-
e("p",
|
|
2894
|
+
e("p", ml, [
|
|
2860
2895
|
t[58] || (t[58] = _(" Please provide a justification for changing the price from ", -1)),
|
|
2861
|
-
e("strong", null, "$" + r((M = (
|
|
2896
|
+
e("strong", null, "$" + r((M = (R = a.currentItem) == null ? void 0 : R.cost) == null ? void 0 : M.toFixed(2)), 1),
|
|
2862
2897
|
t[59] || (t[59] = _(" to ", -1)),
|
|
2863
2898
|
e("strong", null, "$" + r((F = (V = a.currentItem) == null ? void 0 : V.tempPrice) == null ? void 0 : F.toFixed(2)), 1)
|
|
2864
2899
|
]),
|
|
@@ -2868,9 +2903,9 @@ function ml(s, t, u, b, n, a) {
|
|
|
2868
2903
|
placeholder: "Enter justification for price change...",
|
|
2869
2904
|
required: ""
|
|
2870
2905
|
}, null, 512), [
|
|
2871
|
-
[
|
|
2906
|
+
[k, n.justificationText]
|
|
2872
2907
|
]),
|
|
2873
|
-
e("div",
|
|
2908
|
+
e("div", vl, [
|
|
2874
2909
|
e("button", {
|
|
2875
2910
|
onClick: t[8] || (t[8] = (...d) => a.closeJustificationModal && a.closeJustificationModal(...d)),
|
|
2876
2911
|
class: "cancel-btn"
|
|
@@ -2879,7 +2914,7 @@ function ml(s, t, u, b, n, a) {
|
|
|
2879
2914
|
onClick: t[9] || (t[9] = (...d) => a.confirmPriceChange && a.confirmPriceChange(...d)),
|
|
2880
2915
|
class: "save-btn",
|
|
2881
2916
|
disabled: !n.justificationText.trim()
|
|
2882
|
-
}, " Confirm Change ", 8,
|
|
2917
|
+
}, " Confirm Change ", 8, pl)
|
|
2883
2918
|
])
|
|
2884
2919
|
])
|
|
2885
2920
|
])) : m("", !0),
|
|
@@ -2890,18 +2925,18 @@ function ml(s, t, u, b, n, a) {
|
|
|
2890
2925
|
onClick: t[11] || (t[11] = (d) => a.handleFinishPO(n.poDetails.id))
|
|
2891
2926
|
}, "Approve PO"))
|
|
2892
2927
|
])) : m("", !0),
|
|
2893
|
-
n.activeTab === "workflow" ? (o(), l("div",
|
|
2928
|
+
n.activeTab === "workflow" ? (o(), l("div", fl, t[61] || (t[61] = [
|
|
2894
2929
|
x('<div class="workflow-steps"><div class="workflow-step"><div class="step-icon completed">1</div><div class="step-title">Request Submitted</div></div><div class="workflow-step"><div class="step-icon active">2</div><div class="step-title">Department Review</div></div><div class="workflow-step"><div class="step-icon">3</div><div class="step-title">Management Approval</div></div><div class="workflow-step"><div class="step-icon">4</div><div class="step-title">Purchase Order Created</div></div><div class="workflow-step"><div class="step-icon">5</div><div class="step-title">Order Fulfilled</div></div></div><div style="background:white;padding:30px;border-radius:15px;margin-top:20px;"><h3 style="color:#1e40af;margin-bottom:20px;">Requisition Workflow Process</h3><div style="line-height:1.8;color:#374151;"><p><strong>Step 1: Request Identification</strong><br> Department or individual identifies need for materials, equipment, or services.</p><p><strong>Step 2: Requisition Creation</strong><br> Complete requisition form with detailed specifications, quantities, and business justification.</p><p><strong>Step 3: Department Review</strong><br> Department supervisor reviews request for accuracy, necessity, and budget compliance.</p><p><strong>Step 4: Management Approval</strong><br> Based on cost thresholds, appropriate management level provides approval.</p><p><strong>Step 5: Purchase Order Generation</strong><br> Purchasing team converts approved requisition into formal Purchase Order (PO).</p><p><strong>Step 6: Vendor Processing</strong><br> PO sent to vendor, order processed, and delivery scheduled.</p><p><strong>Step 7: Receipt & Inventory</strong><br> Goods received, inspected, and entered into inventory system.</p></div></div>', 2)
|
|
2895
2930
|
]))) : m("", !0)
|
|
2896
2931
|
]);
|
|
2897
2932
|
}
|
|
2898
|
-
const
|
|
2933
|
+
const gl = /* @__PURE__ */ S(Qi, [["render", hl]]), yl = (s = {}) => ({
|
|
2899
2934
|
brandName: s.brandName || "OceanHelm",
|
|
2900
2935
|
logoIcon: s.logoIcon || "bi bi-water",
|
|
2901
2936
|
showLogo: s.showLogo !== !1,
|
|
2902
2937
|
responsive: s.responsive !== !1,
|
|
2903
2938
|
...s
|
|
2904
|
-
}),
|
|
2939
|
+
}), wl = [
|
|
2905
2940
|
{
|
|
2906
2941
|
type: "link",
|
|
2907
2942
|
label: "Dashboard",
|
|
@@ -2964,6 +2999,12 @@ const vl = /* @__PURE__ */ S(ji, [["render", ml]]), fl = (s = {}) => ({
|
|
|
2964
2999
|
icon: "fas fa-ship",
|
|
2965
3000
|
action: "coming-soon"
|
|
2966
3001
|
},
|
|
3002
|
+
{
|
|
3003
|
+
type: "button",
|
|
3004
|
+
label: "Vessel Log",
|
|
3005
|
+
icon: "bi bi-file-ruled",
|
|
3006
|
+
action: "vessel-log"
|
|
3007
|
+
},
|
|
2967
3008
|
{
|
|
2968
3009
|
type: "button",
|
|
2969
3010
|
label: "Settings",
|
|
@@ -2977,22 +3018,22 @@ const vl = /* @__PURE__ */ S(ji, [["render", ml]]), fl = (s = {}) => ({
|
|
|
2977
3018
|
icon: "bi bi-question-circle",
|
|
2978
3019
|
action: "help"
|
|
2979
3020
|
}
|
|
2980
|
-
],
|
|
3021
|
+
], kl = (s, t) => !s.roles || s.roles.length === 0 ? !0 : s.roles.includes(t == null ? void 0 : t.role), _l = {
|
|
2981
3022
|
install(s, t = {}) {
|
|
2982
|
-
s.component("ConfigurableSidebar", K), s.component("VesselLists",
|
|
3023
|
+
s.component("ConfigurableSidebar", K), s.component("VesselLists", Te), s.component("DashHead", Ee), s.component("ActivityLogs", ei), s.component("CrewManagement", Hi), s.component("RequisitionSystem", gl), s.component("OceanHelmMaintenance", As), s.provide("sidebarConfig", t);
|
|
2983
3024
|
}
|
|
2984
3025
|
};
|
|
2985
3026
|
export {
|
|
2986
|
-
|
|
3027
|
+
ei as ActivityLogs,
|
|
2987
3028
|
K as ConfigurableSidebar,
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
3029
|
+
Hi as CrewManagement,
|
|
3030
|
+
Ee as DashHead,
|
|
3031
|
+
As as OceanHelmMaintenance,
|
|
3032
|
+
gl as RequisitionSystem,
|
|
3033
|
+
Te as VesselList,
|
|
3034
|
+
yl as createSidebarConfig,
|
|
3035
|
+
_l as default,
|
|
3036
|
+
wl as defaultMenuItems,
|
|
3037
|
+
kl as defaultPermissionChecker
|
|
2997
3038
|
};
|
|
2998
3039
|
//# sourceMappingURL=oceanhelm.es.js.map
|