@7365admin1/layer-common 4.136.0 → 4.138.0
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 +16 -4
- package/assets/css/primitives.css +54 -11
- package/assets/css/screens.css +3 -3
- package/assets/css/tokens.css +17 -12
- package/components/AnprCameraBadge.vue +1 -1
- package/components/AreaMain.vue +11 -5
- package/components/BillingMain.vue +12 -53
- package/components/BulletinBoardManagement.vue +9 -13
- package/components/CameraWall.vue +7 -7
- package/components/CameraWallTile.vue +8 -8
- package/components/Chat/ListCard.vue +1 -1
- package/components/CleaningScheduleMain.vue +56 -20
- package/components/ClientMain.vue +1 -1
- package/components/ClientSubscriptionForm.vue +1 -1
- package/components/DashboardMain.vue +13 -13
- package/components/HidAccessLogDashboard.vue +3 -3
- package/components/HidIntercomManagement.vue +14 -14
- package/components/HidQrCodeConfiguration.vue +3 -3
- package/components/HidReaderManagement.vue +1 -1
- package/components/InventoryPhotoThumbs.vue +1 -1
- package/components/InvitationMain.vue +8 -0
- package/components/Layout/Header.vue +2 -2
- package/components/Layout/NavigationDrawer.vue +1 -1
- package/components/MemberMain.vue +8 -0
- package/components/Nfc/NFCRouteScheduleTimes.vue +1 -1
- package/components/PlateNumberDisplay.vue +1 -1
- package/components/RolePermissionMain.vue +13 -0
- package/components/ScheduleAreaMain.vue +6 -9
- package/components/ScheduleGuide.vue +101 -0
- package/components/ScheduleTaskForm.vue +88 -7
- package/components/ScheduleTaskMain.vue +163 -56
- package/components/SiteSettings.vue +5 -5
- package/components/StatusChip.vue +1 -1
- package/components/VisitorsReportPreview.vue +2 -2
- package/composables/useKey.ts +20 -16
- package/package.json +1 -1
- package/pages/unauthorized.vue +4 -3
- package/utils/breadcrumb.ts +7 -0
- package/utils/nav-sections.ts +2 -0
- package/utils/schedule-task.ts +106 -23
|
@@ -7,8 +7,42 @@
|
|
|
7
7
|
:site="site"
|
|
8
8
|
:service-type="serviceType"
|
|
9
9
|
:schedule-route="scheduleRoute"
|
|
10
|
-
text="
|
|
11
|
-
|
|
10
|
+
text="The app makes a new checklist for every area automatically each midnight. Staff tick off each unit on their mobile app; you follow progress here."
|
|
11
|
+
how-title="How the Daily Checklist works"
|
|
12
|
+
how-key="daily-checklist"
|
|
13
|
+
>
|
|
14
|
+
<ol class="sg-steps">
|
|
15
|
+
<li>
|
|
16
|
+
Every midnight a new row appears here for the day. It holds every
|
|
17
|
+
area, with as many visits as the area's "visits per day", plus
|
|
18
|
+
any <strong>Extra Visits</strong> set for that day.
|
|
19
|
+
</li>
|
|
20
|
+
<li>
|
|
21
|
+
Staff open the same list in their mobile app and tick each unit
|
|
22
|
+
when it is done (a photo is needed to finish a visit).
|
|
23
|
+
</li>
|
|
24
|
+
<li>
|
|
25
|
+
<strong>Closes in</strong> counts down to midnight. When it
|
|
26
|
+
reaches zero the day's list closes: it becomes view-only, and any
|
|
27
|
+
unit not ticked counts as <strong>Missed</strong>.
|
|
28
|
+
</li>
|
|
29
|
+
<li>
|
|
30
|
+
Click a row to see its areas, then an area to see each unit,
|
|
31
|
+
send a unit back (<strong>Needs redo</strong>) or add a remark.
|
|
32
|
+
</li>
|
|
33
|
+
<li>
|
|
34
|
+
<strong>Download PDF</strong> saves that day's report - every
|
|
35
|
+
area, unit, who ticked it and when - to send to your client.
|
|
36
|
+
</li>
|
|
37
|
+
</ol>
|
|
38
|
+
<div class="sg-h">What the status words mean</div>
|
|
39
|
+
<dl class="sg-legend">
|
|
40
|
+
<template v-for="h in DAILY_STATUS_HELP" :key="h.word">
|
|
41
|
+
<dt><StatusChip :status="h.word" :label="h.word" /></dt>
|
|
42
|
+
<dd>{{ h.meaning }}</dd>
|
|
43
|
+
</template>
|
|
44
|
+
</dl>
|
|
45
|
+
</ScheduleGuide>
|
|
12
46
|
<TableMain
|
|
13
47
|
v-if="canViewSchedules"
|
|
14
48
|
:title="pageTitle"
|
|
@@ -24,10 +58,11 @@
|
|
|
24
58
|
>
|
|
25
59
|
<template #no-data>
|
|
26
60
|
<div class="cs-empty">
|
|
27
|
-
<strong>No daily
|
|
61
|
+
<strong>No daily checklists here yet.</strong>
|
|
28
62
|
<span>
|
|
29
|
-
A
|
|
30
|
-
and Units are set up.
|
|
63
|
+
A checklist is made automatically every midnight once your Areas
|
|
64
|
+
and Units are set up. If you filtered by date or status, clear
|
|
65
|
+
the filter to see every day.
|
|
31
66
|
</span>
|
|
32
67
|
</div>
|
|
33
68
|
</template>
|
|
@@ -122,7 +157,7 @@
|
|
|
122
157
|
@click.stop="downloadItem(item)"
|
|
123
158
|
>
|
|
124
159
|
<v-icon left>mdi-download</v-icon>
|
|
125
|
-
Download
|
|
160
|
+
Download PDF
|
|
126
161
|
</v-btn>
|
|
127
162
|
</template>
|
|
128
163
|
</TableMain>
|
|
@@ -133,7 +168,8 @@
|
|
|
133
168
|
-->
|
|
134
169
|
<AppCard class="pa-4">
|
|
135
170
|
<div class="cs-no-permission">
|
|
136
|
-
You do not have permission to view
|
|
171
|
+
You do not have permission to view the Daily Checklist. Ask your
|
|
172
|
+
administrator to give your role access to it.
|
|
137
173
|
</div>
|
|
138
174
|
</AppCard>
|
|
139
175
|
</div>
|
|
@@ -149,9 +185,10 @@
|
|
|
149
185
|
<script lang="ts" setup>
|
|
150
186
|
import useCleaningSchedules from "../composables/useCleaningSchedules";
|
|
151
187
|
import {
|
|
188
|
+
DAILY_STATUS_HELP,
|
|
189
|
+
dailyChecklistTitle,
|
|
152
190
|
dailyStatusLabel,
|
|
153
191
|
hasListForToday,
|
|
154
|
-
scheduleNameFor,
|
|
155
192
|
} from "../utils/schedule-task";
|
|
156
193
|
import useUtils from "../composables/useUtils";
|
|
157
194
|
|
|
@@ -168,20 +205,19 @@ const props = defineProps({
|
|
|
168
205
|
canGenerateChecklist: { type: Boolean, default: false },
|
|
169
206
|
});
|
|
170
207
|
|
|
171
|
-
// "Daily
|
|
172
|
-
const pageTitle =
|
|
173
|
-
/ Schedule$/,
|
|
174
|
-
"",
|
|
175
|
-
)}`;
|
|
208
|
+
// "Daily Checklist – Cleaning" / "– Landscape" / "– Pest" / "– Pool" / "– Technician"
|
|
209
|
+
const pageTitle = dailyChecklistTitle(props.serviceType);
|
|
176
210
|
|
|
177
|
-
|
|
178
|
-
const
|
|
211
|
+
// `?date=YYYY-MM-DD` (from an Extra Visit's "See that day's checklist") opens on that one day.
|
|
212
|
+
const linkedDay = String(useRoute().query.date ?? "");
|
|
213
|
+
const startDate = ref(/^\d{4}-\d{2}-\d{2}$/.test(linkedDay) ? linkedDay : "");
|
|
214
|
+
const endDate = ref(startDate.value);
|
|
179
215
|
const status = ref<TScheduleAreaStatus>("all");
|
|
180
216
|
const statusOptions = [
|
|
181
217
|
{ title: "All", value: "all" },
|
|
182
|
-
{ title: "
|
|
218
|
+
{ title: "Not started", value: "open" },
|
|
183
219
|
{ title: "In progress", value: "ongoing" },
|
|
184
|
-
{ title: "
|
|
220
|
+
{ title: "Done", value: "completed" },
|
|
185
221
|
{ title: "Closed", value: "closed" },
|
|
186
222
|
] as const;
|
|
187
223
|
|
|
@@ -191,10 +227,10 @@ const pages = ref(0);
|
|
|
191
227
|
const pageRange = ref("-- - -- of --");
|
|
192
228
|
|
|
193
229
|
const headers = [
|
|
194
|
-
{ title: "
|
|
195
|
-
{ title: "
|
|
230
|
+
{ title: "Day", value: "createdAt" },
|
|
231
|
+
{ title: "Closes in", value: "closeIn" },
|
|
196
232
|
{ title: "Status", value: "status" },
|
|
197
|
-
{ title: "
|
|
233
|
+
{ title: "Finished on", value: "completedAt" },
|
|
198
234
|
{ title: "", value: "download" },
|
|
199
235
|
];
|
|
200
236
|
const remainingTime = ref({} as Record<string, string>);
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
:y="label.y"
|
|
70
70
|
text-anchor="end"
|
|
71
71
|
alignment-baseline="middle"
|
|
72
|
-
style="fill: #64748b; font-size:
|
|
72
|
+
style="fill: #64748b; font-size: 12px; font-weight: 500"
|
|
73
73
|
>
|
|
74
74
|
{{ label.text }}
|
|
75
75
|
</text>
|
|
@@ -471,7 +471,7 @@
|
|
|
471
471
|
:y="label.y"
|
|
472
472
|
text-anchor="end"
|
|
473
473
|
alignment-baseline="middle"
|
|
474
|
-
style="fill: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); font-size:
|
|
474
|
+
style="fill: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); font-size: 12px; font-weight: 500"
|
|
475
475
|
>
|
|
476
476
|
{{ label.text }}
|
|
477
477
|
</text>
|
|
@@ -4283,7 +4283,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4283
4283
|
|
|
4284
4284
|
.print-kpi-title {
|
|
4285
4285
|
color: #64748b;
|
|
4286
|
-
font-size:
|
|
4286
|
+
font-size: 12px;
|
|
4287
4287
|
font-weight: 700;
|
|
4288
4288
|
text-transform: uppercase;
|
|
4289
4289
|
margin-bottom: 8px;
|
|
@@ -4299,7 +4299,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4299
4299
|
|
|
4300
4300
|
.print-kpi-meta {
|
|
4301
4301
|
color: #64748b;
|
|
4302
|
-
font-size:
|
|
4302
|
+
font-size: 12px;
|
|
4303
4303
|
margin-top: 6px;
|
|
4304
4304
|
}
|
|
4305
4305
|
|
|
@@ -4349,7 +4349,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4349
4349
|
|
|
4350
4350
|
.print-status-badge {
|
|
4351
4351
|
display: inline-block;
|
|
4352
|
-
font-size:
|
|
4352
|
+
font-size: 12px;
|
|
4353
4353
|
font-weight: 600;
|
|
4354
4354
|
padding: 2px 8px;
|
|
4355
4355
|
border-radius: 4px;
|
|
@@ -4636,7 +4636,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4636
4636
|
|
|
4637
4637
|
.figma-list-main p {
|
|
4638
4638
|
color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));
|
|
4639
|
-
font-size:
|
|
4639
|
+
font-size: 12px;
|
|
4640
4640
|
font-weight: 700;
|
|
4641
4641
|
line-height: 1.3;
|
|
4642
4642
|
margin: 3px 0 0;
|
|
@@ -4662,7 +4662,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4662
4662
|
color: var(--muted);
|
|
4663
4663
|
display: flex;
|
|
4664
4664
|
font-family: var(--font-sans);
|
|
4665
|
-
font-size:
|
|
4665
|
+
font-size: 12px;
|
|
4666
4666
|
font-weight: 700;
|
|
4667
4667
|
gap: 8px;
|
|
4668
4668
|
min-width: 0;
|
|
@@ -4766,7 +4766,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4766
4766
|
.active-patrol-main span {
|
|
4767
4767
|
color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));
|
|
4768
4768
|
display: block;
|
|
4769
|
-
font-size:
|
|
4769
|
+
font-size: 12px;
|
|
4770
4770
|
line-height: 1.25;
|
|
4771
4771
|
overflow-wrap: anywhere;
|
|
4772
4772
|
}
|
|
@@ -4811,7 +4811,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4811
4811
|
|
|
4812
4812
|
.active-patrol-assignee span {
|
|
4813
4813
|
color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));
|
|
4814
|
-
font-size:
|
|
4814
|
+
font-size: 12px;
|
|
4815
4815
|
font-weight: 600;
|
|
4816
4816
|
line-height: 1.2;
|
|
4817
4817
|
min-width: 0;
|
|
@@ -4830,7 +4830,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4830
4830
|
|
|
4831
4831
|
.active-patrol-status-pill {
|
|
4832
4832
|
border-radius: 20px;
|
|
4833
|
-
font-size:
|
|
4833
|
+
font-size: 12px;
|
|
4834
4834
|
font-weight: 600;
|
|
4835
4835
|
line-height: 1.2;
|
|
4836
4836
|
padding: 5px 10px;
|
|
@@ -4846,7 +4846,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4846
4846
|
color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));
|
|
4847
4847
|
display: inline-flex;
|
|
4848
4848
|
flex: 0 0 auto;
|
|
4849
|
-
font-size:
|
|
4849
|
+
font-size: 12px;
|
|
4850
4850
|
font-weight: 800;
|
|
4851
4851
|
height: 24px;
|
|
4852
4852
|
justify-content: center;
|
|
@@ -4869,7 +4869,7 @@ function formatDashboardTime(value?: string) {
|
|
|
4869
4869
|
box-shadow: var(--shadow-menu);
|
|
4870
4870
|
color: var(--card);
|
|
4871
4871
|
content: attr(data-tooltip);
|
|
4872
|
-
font-size:
|
|
4872
|
+
font-size: 12px;
|
|
4873
4873
|
font-weight: 600;
|
|
4874
4874
|
left: 50%;
|
|
4875
4875
|
line-height: 1.35;
|
|
@@ -5099,7 +5099,7 @@ function formatDashboardTime(value?: string) {
|
|
|
5099
5099
|
color: var(--accent-text);
|
|
5100
5100
|
display: inline-flex;
|
|
5101
5101
|
flex-shrink: 0;
|
|
5102
|
-
font-size:
|
|
5102
|
+
font-size: 12px;
|
|
5103
5103
|
font-weight: 800;
|
|
5104
5104
|
height: 30px;
|
|
5105
5105
|
justify-content: center;
|
|
@@ -1447,7 +1447,7 @@ function buildPdfHtml() {
|
|
|
1447
1447
|
background: #ffffff;
|
|
1448
1448
|
color: #0a2638;
|
|
1449
1449
|
font-family: Arial, Helvetica, sans-serif;
|
|
1450
|
-
font-size:
|
|
1450
|
+
font-size: 12px;
|
|
1451
1451
|
}
|
|
1452
1452
|
|
|
1453
1453
|
.pdf-summary {
|
|
@@ -1482,7 +1482,7 @@ function buildPdfHtml() {
|
|
|
1482
1482
|
}
|
|
1483
1483
|
|
|
1484
1484
|
.pdf-value {
|
|
1485
|
-
font-size:
|
|
1485
|
+
font-size: 12px;
|
|
1486
1486
|
line-height: 1.35;
|
|
1487
1487
|
}
|
|
1488
1488
|
|
|
@@ -1693,7 +1693,7 @@ watch(selectedReaderId, (value) => {
|
|
|
1693
1693
|
.history-table-card :deep(th) {
|
|
1694
1694
|
background: var(--thead);
|
|
1695
1695
|
color: var(--muted);
|
|
1696
|
-
font-size:
|
|
1696
|
+
font-size: 12px;
|
|
1697
1697
|
font-weight: 800;
|
|
1698
1698
|
text-transform: uppercase;
|
|
1699
1699
|
letter-spacing: 0.04em;
|
|
@@ -2246,7 +2246,7 @@ export default {
|
|
|
2246
2246
|
.field-label {
|
|
2247
2247
|
margin: 12px 0 7px;
|
|
2248
2248
|
color: var(--text2);
|
|
2249
|
-
font-size:
|
|
2249
|
+
font-size: 12px;
|
|
2250
2250
|
font-weight: 500;
|
|
2251
2251
|
}
|
|
2252
2252
|
|
|
@@ -2257,7 +2257,7 @@ export default {
|
|
|
2257
2257
|
.field-hint {
|
|
2258
2258
|
margin: 6px 0 0;
|
|
2259
2259
|
color: var(--text2);
|
|
2260
|
-
font-size:
|
|
2260
|
+
font-size: 12px;
|
|
2261
2261
|
line-height: 1.4;
|
|
2262
2262
|
}
|
|
2263
2263
|
|
|
@@ -2282,7 +2282,7 @@ export default {
|
|
|
2282
2282
|
.sip-label {
|
|
2283
2283
|
margin: 12px 0 6px;
|
|
2284
2284
|
color: var(--text);
|
|
2285
|
-
font-size:
|
|
2285
|
+
font-size: 12px;
|
|
2286
2286
|
font-weight: 500;
|
|
2287
2287
|
line-height: 1.2;
|
|
2288
2288
|
}
|
|
@@ -2320,7 +2320,7 @@ export default {
|
|
|
2320
2320
|
|
|
2321
2321
|
.sip-section-switch small {
|
|
2322
2322
|
color: var(--muted);
|
|
2323
|
-
font-size:
|
|
2323
|
+
font-size: 12px;
|
|
2324
2324
|
line-height: 1.4;
|
|
2325
2325
|
}
|
|
2326
2326
|
|
|
@@ -2462,7 +2462,7 @@ export default {
|
|
|
2462
2462
|
.call-label {
|
|
2463
2463
|
margin: 8px 0 6px;
|
|
2464
2464
|
color: var(--text);
|
|
2465
|
-
font-size:
|
|
2465
|
+
font-size: 12px;
|
|
2466
2466
|
font-weight: 500;
|
|
2467
2467
|
letter-spacing: 0;
|
|
2468
2468
|
}
|
|
@@ -2485,7 +2485,7 @@ export default {
|
|
|
2485
2485
|
|
|
2486
2486
|
.call-radio-list :deep(.v-label) {
|
|
2487
2487
|
color: var(--text2);
|
|
2488
|
-
font-size:
|
|
2488
|
+
font-size: 12px;
|
|
2489
2489
|
letter-spacing: 0;
|
|
2490
2490
|
opacity: 1;
|
|
2491
2491
|
}
|
|
@@ -2501,7 +2501,7 @@ export default {
|
|
|
2501
2501
|
border-radius: 3px;
|
|
2502
2502
|
background: var(--card);
|
|
2503
2503
|
color: var(--text);
|
|
2504
|
-
font-size:
|
|
2504
|
+
font-size: 12px;
|
|
2505
2505
|
letter-spacing: 0;
|
|
2506
2506
|
}
|
|
2507
2507
|
|
|
@@ -2657,7 +2657,7 @@ export default {
|
|
|
2657
2657
|
.web-phone-status {
|
|
2658
2658
|
min-width: 92px;
|
|
2659
2659
|
justify-content: center;
|
|
2660
|
-
font-size:
|
|
2660
|
+
font-size: 12px;
|
|
2661
2661
|
}
|
|
2662
2662
|
|
|
2663
2663
|
.web-phone-status.ready {
|
|
@@ -2749,7 +2749,7 @@ export default {
|
|
|
2749
2749
|
|
|
2750
2750
|
.sip-account-label {
|
|
2751
2751
|
color: var(--muted);
|
|
2752
|
-
font-size:
|
|
2752
|
+
font-size: 12px;
|
|
2753
2753
|
}
|
|
2754
2754
|
|
|
2755
2755
|
.sip-account-extension {
|
|
@@ -2762,7 +2762,7 @@ export default {
|
|
|
2762
2762
|
max-width: 170px;
|
|
2763
2763
|
overflow: hidden;
|
|
2764
2764
|
color: var(--text2);
|
|
2765
|
-
font-size:
|
|
2765
|
+
font-size: 12px;
|
|
2766
2766
|
text-align: right;
|
|
2767
2767
|
text-overflow: ellipsis;
|
|
2768
2768
|
white-space: nowrap;
|
|
@@ -2838,7 +2838,7 @@ export default {
|
|
|
2838
2838
|
max-width: 100%;
|
|
2839
2839
|
overflow: hidden;
|
|
2840
2840
|
color: var(--border);
|
|
2841
|
-
font-size:
|
|
2841
|
+
font-size: 12px;
|
|
2842
2842
|
text-overflow: ellipsis;
|
|
2843
2843
|
white-space: nowrap;
|
|
2844
2844
|
}
|
|
@@ -2895,7 +2895,7 @@ export default {
|
|
|
2895
2895
|
|
|
2896
2896
|
.web-phone-error {
|
|
2897
2897
|
margin-top: 14px;
|
|
2898
|
-
font-size:
|
|
2898
|
+
font-size: 12px;
|
|
2899
2899
|
}
|
|
2900
2900
|
|
|
2901
2901
|
.call-two-col {
|
|
@@ -2922,7 +2922,7 @@ export default {
|
|
|
2922
2922
|
min-height: 38px;
|
|
2923
2923
|
border: 1px dashed var(--border);
|
|
2924
2924
|
color: var(--text2);
|
|
2925
|
-
font-size:
|
|
2925
|
+
font-size: 12px;
|
|
2926
2926
|
letter-spacing: 0;
|
|
2927
2927
|
}
|
|
2928
2928
|
|
|
@@ -2952,7 +2952,7 @@ export default {
|
|
|
2952
2952
|
min-height: 32px;
|
|
2953
2953
|
margin: 0 0 10px;
|
|
2954
2954
|
color: var(--text2);
|
|
2955
|
-
font-size:
|
|
2955
|
+
font-size: 12px;
|
|
2956
2956
|
}
|
|
2957
2957
|
|
|
2958
2958
|
.call-file-name {
|
|
@@ -644,7 +644,7 @@ function showMessage(text: string, color: string) {
|
|
|
644
644
|
.pass-subtext {
|
|
645
645
|
min-height: 18px;
|
|
646
646
|
color: #6b7280;
|
|
647
|
-
font-size:
|
|
647
|
+
font-size: 12px;
|
|
648
648
|
}
|
|
649
649
|
|
|
650
650
|
.qr-grid {
|
|
@@ -667,7 +667,7 @@ function showMessage(text: string, color: string) {
|
|
|
667
667
|
background-size: 10px 10px;
|
|
668
668
|
background-position: 0 0, 0 5px, 5px -5px, -5px 0;
|
|
669
669
|
color: #6b7280;
|
|
670
|
-
font-size:
|
|
670
|
+
font-size: 12px;
|
|
671
671
|
}
|
|
672
672
|
|
|
673
673
|
.qr-placeholder.small {
|
|
@@ -685,7 +685,7 @@ function showMessage(text: string, color: string) {
|
|
|
685
685
|
display: grid;
|
|
686
686
|
gap: 4px;
|
|
687
687
|
color: #4b5563;
|
|
688
|
-
font-size:
|
|
688
|
+
font-size: 12px;
|
|
689
689
|
}
|
|
690
690
|
|
|
691
691
|
.pass-footer strong {
|
|
@@ -307,7 +307,7 @@ const { getNameInitials } = useUtils();
|
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
.app-profile-menu__name {
|
|
310
|
-
font-size:
|
|
310
|
+
font-size: 14.5px;
|
|
311
311
|
font-weight: 800;
|
|
312
312
|
line-height: 1.3;
|
|
313
313
|
color: var(--text);
|
|
@@ -317,7 +317,7 @@ const { getNameInitials } = useUtils();
|
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
.app-profile-menu__site {
|
|
320
|
-
font-size:
|
|
320
|
+
font-size: 13px;
|
|
321
321
|
font-weight: 600;
|
|
322
322
|
line-height: 1.3;
|
|
323
323
|
color: var(--muted);
|
|
@@ -32,6 +32,14 @@
|
|
|
32
32
|
</template>
|
|
33
33
|
|
|
34
34
|
<template #right>
|
|
35
|
+
<AppField
|
|
36
|
+
v-model="headerSearch"
|
|
37
|
+
search
|
|
38
|
+
compact
|
|
39
|
+
placeholder="Search"
|
|
40
|
+
aria-label="Search"
|
|
41
|
+
klass="app-toolbar__search"
|
|
42
|
+
/>
|
|
35
43
|
<local-pagination
|
|
36
44
|
v-model="page"
|
|
37
45
|
:length="pages"
|
|
@@ -446,6 +454,11 @@ const {
|
|
|
446
454
|
}
|
|
447
455
|
);
|
|
448
456
|
|
|
457
|
+
// A new search starts from the first page.
|
|
458
|
+
watch(headerSearch, () => {
|
|
459
|
+
page.value = 1;
|
|
460
|
+
});
|
|
461
|
+
|
|
449
462
|
const loading = computed(() => getRoleReqStatus.value === "pending");
|
|
450
463
|
|
|
451
464
|
watchEffect(() => {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
:site="site"
|
|
7
7
|
:service-type="serviceType"
|
|
8
8
|
:schedule-route="scheduleRoute"
|
|
9
|
-
text="These are the areas on this day's checklist.
|
|
9
|
+
text="These are the areas on this day's checklist. Click an area to see each unit, tick it as done, or send it back to be redone."
|
|
10
10
|
/>
|
|
11
11
|
<TableMain
|
|
12
12
|
:title="pageTitle"
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
|
|
143
143
|
<script setup lang="ts">
|
|
144
144
|
import useCleaningSchedules from "../composables/useCleaningSchedules";
|
|
145
|
-
import {
|
|
145
|
+
import { dailyChecklistTitle, dailyStatusLabel } from "../utils/schedule-task";
|
|
146
146
|
import useUtils from "../composables/useUtils";
|
|
147
147
|
|
|
148
148
|
const props = defineProps({
|
|
@@ -157,11 +157,8 @@ const props = defineProps({
|
|
|
157
157
|
canManageScheduleTasks: { type: Boolean, default: false },
|
|
158
158
|
});
|
|
159
159
|
|
|
160
|
-
// "Daily
|
|
161
|
-
const pageTitle =
|
|
162
|
-
/ Schedule$/,
|
|
163
|
-
"",
|
|
164
|
-
)}`;
|
|
160
|
+
// "Daily Checklist – Cleaning" / "– Landscape" / ... (same title as the day list)
|
|
161
|
+
const pageTitle = dailyChecklistTitle(props.serviceType);
|
|
165
162
|
|
|
166
163
|
const submitting = ref(false);
|
|
167
164
|
const message = ref("");
|
|
@@ -198,9 +195,9 @@ const items = ref<Array<Record<string, any>>>([]);
|
|
|
198
195
|
const statusFilter = ref<TScheduleAreaStatus>("all");
|
|
199
196
|
const statusOptions = [
|
|
200
197
|
{ title: "All", value: "all" },
|
|
201
|
-
{ title: "
|
|
198
|
+
{ title: "Not started", value: "open" },
|
|
202
199
|
{ title: "In progress", value: "ongoing" },
|
|
203
|
-
{ title: "
|
|
200
|
+
{ title: "Done", value: "completed" },
|
|
204
201
|
];
|
|
205
202
|
const areaTypeFilter = ref<TAreaType>("all");
|
|
206
203
|
const typeOptions = [
|