@7365admin1/layer-common 1.11.30 → 1.11.32
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/CHANGELOG.md
CHANGED
|
@@ -924,7 +924,14 @@ async function submit() {
|
|
|
924
924
|
}
|
|
925
925
|
|
|
926
926
|
try {
|
|
927
|
-
|
|
927
|
+
let res;
|
|
928
|
+
if (prop.mode === "add") {
|
|
929
|
+
res = await createVisitor(payload as TVisitorPayload);
|
|
930
|
+
} else if ((prop.mode === "edit" || prop.mode === "register") && prop.visitorData?._id) {
|
|
931
|
+
const { unitName, ...rest } = payload
|
|
932
|
+
res = await updateVisitor(prop.visitorData._id, rest as TVisitorPayload);
|
|
933
|
+
}
|
|
934
|
+
|
|
928
935
|
if (res) {
|
|
929
936
|
if (prop.type === "contractor" && passType.value) {
|
|
930
937
|
const visitorId = res as unknown as string;
|
|
@@ -209,34 +209,21 @@
|
|
|
209
209
|
<v-row no-gutters class="d-flex flex-column py-2">
|
|
210
210
|
<span class="d-flex align-center ga-2">
|
|
211
211
|
<v-icon
|
|
212
|
-
icon="mdi-clock-time-
|
|
213
|
-
color="
|
|
212
|
+
icon="mdi-clock-time-four-outline"
|
|
213
|
+
color="green"
|
|
214
214
|
size="20"
|
|
215
215
|
/>
|
|
216
|
-
<
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
216
|
+
<span class="text-capitalize">{{
|
|
217
|
+
UTCToLocalTIme(item.checkIn) || "-"
|
|
218
|
+
}}</span>
|
|
219
|
+
<span>
|
|
220
|
+
<v-icon
|
|
221
|
+
v-if="item?.snapshotEntryImage"
|
|
222
|
+
size="17"
|
|
223
|
+
icon="mdi-image"
|
|
224
|
+
@click.stop="handleViewImage(item.snapshotEntryImage)"
|
|
225
225
|
/>
|
|
226
|
-
</
|
|
227
|
-
<template v-else>
|
|
228
|
-
<span class="text-capitalize">{{
|
|
229
|
-
UTCToLocalTIme(item.checkIn)
|
|
230
|
-
}}</span>
|
|
231
|
-
<span>
|
|
232
|
-
<v-icon
|
|
233
|
-
v-if="item?.snapshotEntryImage"
|
|
234
|
-
size="17"
|
|
235
|
-
icon="mdi-image"
|
|
236
|
-
@click.stop="handleViewImage(item.snapshotEntryImage)"
|
|
237
|
-
/>
|
|
238
|
-
</span>
|
|
239
|
-
</template>
|
|
226
|
+
</span>
|
|
240
227
|
</span>
|
|
241
228
|
|
|
242
229
|
<span
|
|
@@ -379,6 +366,23 @@
|
|
|
379
366
|
<v-icon icon="mdi-clock-time-four-outline" size="20" />
|
|
380
367
|
{{ item.arrivalTime ?? "N/A" }}
|
|
381
368
|
</span>
|
|
369
|
+
|
|
370
|
+
<span v-if="!item.checkIn && canUpdateVisitor">
|
|
371
|
+
<span class="d-flex align-center ga-2 cursor-pointer">
|
|
372
|
+
<v-icon
|
|
373
|
+
icon="mdi-clock-time-eight-outline"
|
|
374
|
+
color="success"
|
|
375
|
+
size="20"
|
|
376
|
+
/>
|
|
377
|
+
<v-btn
|
|
378
|
+
size="x-small"
|
|
379
|
+
class="text-capitalize"
|
|
380
|
+
color="success"
|
|
381
|
+
text="Checkin"
|
|
382
|
+
@click.stop="handleCheckin(item)"
|
|
383
|
+
/>
|
|
384
|
+
</span>
|
|
385
|
+
</span>
|
|
382
386
|
</v-row>
|
|
383
387
|
</template>
|
|
384
388
|
|
|
@@ -1327,6 +1331,11 @@ const {
|
|
|
1327
1331
|
params.status = activeTab.value;
|
|
1328
1332
|
}
|
|
1329
1333
|
|
|
1334
|
+
if (activeTab.value !== "registered") {
|
|
1335
|
+
delete params.type;
|
|
1336
|
+
delete params.checkedOut;
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1330
1339
|
return await getVisitors(params);
|
|
1331
1340
|
},
|
|
1332
1341
|
{
|
|
@@ -1761,6 +1770,11 @@ function buildReportParams(): any {
|
|
|
1761
1770
|
params.status = activeTab.value;
|
|
1762
1771
|
}
|
|
1763
1772
|
|
|
1773
|
+
if (activeTab.value !== "registered") {
|
|
1774
|
+
delete params.type;
|
|
1775
|
+
delete params.checkedOut;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1764
1778
|
return params;
|
|
1765
1779
|
}
|
|
1766
1780
|
|
|
@@ -1798,6 +1812,7 @@ async function handleDownloadCSVReport() {
|
|
|
1798
1812
|
showMessage("Generating CSV report...", "info");
|
|
1799
1813
|
|
|
1800
1814
|
const params = buildReportParams();
|
|
1815
|
+
|
|
1801
1816
|
const reportData = await getVisitors(params);
|
|
1802
1817
|
const csvData = generateCSVData(reportData.items ?? []);
|
|
1803
1818
|
downloadCSVFile(csvData);
|
|
@@ -1951,11 +1966,14 @@ onMounted(() => {
|
|
|
1951
1966
|
if (route.query.dateTo) {
|
|
1952
1967
|
dateTo.value = normalizeDateOnly(route.query.dateTo as string);
|
|
1953
1968
|
}
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1969
|
+
if (activeTab.value === "registered") {
|
|
1970
|
+
filterTypes.value = ((route.query.type as string)?.split(",") || []).filter(
|
|
1971
|
+
Boolean
|
|
1972
|
+
) as TVisitorType[];
|
|
1973
|
+
|
|
1974
|
+
displayNotCheckedOut.value =
|
|
1975
|
+
(route.query.checkedOut as string) == "true" || false;
|
|
1976
|
+
}
|
|
1959
1977
|
});
|
|
1960
1978
|
</script>
|
|
1961
1979
|
|
|
@@ -5,68 +5,79 @@
|
|
|
5
5
|
<v-row no-gutters class="d-flex ga-2 justify-space-between align-start mb-3 mb-sm-5 flex-wrap">
|
|
6
6
|
|
|
7
7
|
<div class="d-flex flex-column" style="min-width: 0;">
|
|
8
|
-
<span class="text-subtitle-1 font-weight-bold" style="word-break: break-word;">Visitor
|
|
9
|
-
|
|
10
|
-
<span
|
|
8
|
+
<span class="text-subtitle-1 font-weight-bold" style="word-break: break-word;">Visitor
|
|
9
|
+
Management - Visitor ({{ items.length }} visitors)</span>
|
|
10
|
+
<span style="font-size: clamp(11px, 1.1vw, 13px); word-break: break-word;">Date Range: {{
|
|
11
|
+
formatDateDDMMYYYY(dateFrom) }} - {{ formatDateDDMMYYYY(dateTo) ?? "" }}</span>
|
|
12
|
+
<span class="text-subtitle-1" style="word-break: break-word;">Site Name: {{ activeSiteName
|
|
13
|
+
}}</span>
|
|
11
14
|
</div>
|
|
12
15
|
|
|
13
16
|
</v-row>
|
|
14
17
|
<div style="overflow-x: auto; max-width: 100%;">
|
|
15
|
-
<v-data-table :headers="headers" :items="items" show-header :items-per-page="100"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
<v-data-table :headers="headers" :items="items" show-header :items-per-page="100"
|
|
19
|
+
hide-default-footer class="text-black" no-data-text="No entries to display">
|
|
20
|
+
|
|
21
|
+
<template v-slot:item.typeCompany="{ item }">
|
|
22
|
+
<span class="d-flex align-center ga-2" style="flex-wrap: wrap;">
|
|
23
|
+
<v-icon icon="mdi-user" size="15" />
|
|
24
|
+
<span v-if="item.type === 'contractor'" class="text-capitalize"
|
|
25
|
+
style="word-break: break-word;">{{
|
|
26
|
+
formatCamelCaseToWords(item.contractorType)
|
|
27
|
+
}}</span>
|
|
28
|
+
<span v-else class="text-capitalize" style="word-break: break-word;">{{ formatType(item)
|
|
23
29
|
}}</span>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
<
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
<span class="
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
30
|
+
</span>
|
|
31
|
+
<span class="d-flex align-center ga-2" style="flex-wrap: wrap;">
|
|
32
|
+
<v-icon icon="mdi-domain" size="15" />
|
|
33
|
+
<span class="text-capitalize" style="word-break: break-word;">{{ item?.company || "N/A"
|
|
34
|
+
}}</span>
|
|
35
|
+
</span>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<template v-slot:item.location="{ item }">
|
|
39
|
+
<span class="d-flex align-center ga-2" style="flex-wrap: wrap;">
|
|
40
|
+
<v-icon icon="mdi-storefront-outline" size="15" />
|
|
41
|
+
<span class="text-capitalize" style="word-break: break-word;">{{
|
|
42
|
+
formatLocation({
|
|
43
|
+
block: item.block,
|
|
44
|
+
level: item.level,
|
|
45
|
+
unit: item.unitName,
|
|
46
|
+
})
|
|
47
|
+
}}</span>
|
|
48
|
+
</span>
|
|
49
|
+
</template>
|
|
50
|
+
|
|
51
|
+
<template v-slot:item.contact-vehicleNumber="{ item }">
|
|
52
|
+
<span class="d-flex align-center ga-2" style="flex-wrap: wrap;">
|
|
53
|
+
<v-icon icon="mdi-phone" size="15" />
|
|
54
|
+
<span class="text-capitalize" style="word-break: break-word;">{{ item?.contact || "N/A"
|
|
55
|
+
}}</span>
|
|
56
|
+
</span>
|
|
57
|
+
<span class="d-flex align-center ga-2" style="flex-wrap: wrap;">
|
|
58
|
+
<v-icon icon="mdi-car-back" size="15" />
|
|
59
|
+
<span class="text-capitalize" style="word-break: break-word;">{{ item?.plateNumber ||
|
|
60
|
+
"N/A" }}</span>
|
|
61
|
+
</span>
|
|
62
|
+
</template>
|
|
63
|
+
|
|
64
|
+
<template v-slot:item.checkInOut="{ item }">
|
|
65
|
+
<span class="d-flex align-center ga-2" style="flex-wrap: wrap;">
|
|
66
|
+
<v-icon icon="mdi-login" size="15" />
|
|
67
|
+
<span class="text-capitalize" style="word-break: break-word;">{{
|
|
68
|
+
formatDate(item.checkIn) }}</span>
|
|
69
|
+
</span>
|
|
70
|
+
<span class="d-flex align-center ga-2" style="flex-wrap: wrap;">
|
|
71
|
+
<v-icon icon="mdi-logout" size="15" />
|
|
72
|
+
<span class="text-capitalize" style="word-break: break-word;">{{
|
|
73
|
+
formatDate(item.checkOut) }}</span>
|
|
74
|
+
</span>
|
|
75
|
+
</template>
|
|
76
|
+
|
|
77
|
+
<template v-slot:item.checkInOutImage="{ item }">
|
|
78
|
+
<div class="d-flex flex-column ga-2">
|
|
79
|
+
<div v-if="item?.snapshotEntryImage" class="d-flex flex-column">
|
|
80
|
+
<span class="text-caption font-weight-bold text-blue-darken-1">Check-In</span>
|
|
70
81
|
<v-img :src="getFileUrlAnpr(`${siteId}/${item.snapshotEntryImage}`)"
|
|
71
82
|
style="max-width: clamp(60px, 10vw, 100px); max-height: clamp(60px, 10vw, 100px);"
|
|
72
83
|
class="border" />
|
|
@@ -76,16 +87,16 @@
|
|
|
76
87
|
<v-img :src="getFileUrlAnpr(`${siteId}/${item.snapshotExitImage}`)"
|
|
77
88
|
style="max-width: clamp(60px, 10vw, 100px); max-height: clamp(60px, 10vw, 100px);"
|
|
78
89
|
class="border" />
|
|
90
|
+
</div>
|
|
91
|
+
<span v-if="!item?.snapshotEntryImage && !item?.snapshotExitImage"
|
|
92
|
+
class="text-caption text-disabled">
|
|
93
|
+
No images
|
|
94
|
+
</span>
|
|
79
95
|
</div>
|
|
80
|
-
|
|
81
|
-
class="text-caption text-disabled">
|
|
82
|
-
No images
|
|
83
|
-
</span>
|
|
84
|
-
</div>
|
|
85
|
-
</template>
|
|
96
|
+
</template>
|
|
86
97
|
|
|
87
98
|
|
|
88
|
-
|
|
99
|
+
</v-data-table>
|
|
89
100
|
</div>
|
|
90
101
|
</v-col>
|
|
91
102
|
|
|
@@ -228,6 +239,11 @@ const {
|
|
|
228
239
|
params.status = activeTab.value;
|
|
229
240
|
}
|
|
230
241
|
|
|
242
|
+
if (activeTab.value !== 'registered') {
|
|
243
|
+
delete params.type
|
|
244
|
+
delete params.checkedOut
|
|
245
|
+
}
|
|
246
|
+
|
|
231
247
|
return await getVisitors(params);
|
|
232
248
|
},
|
|
233
249
|
{
|