@7365admin1/layer-common 3.2.6 → 3.2.8-staging.200
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 +6 -0
- package/assets/css/primitives.css +1113 -0
- package/assets/css/screens.css +1097 -0
- package/assets/css/shell.css +258 -0
- package/assets/css/tokens.css +236 -0
- package/components/AcceptDialog.vue +17 -18
- package/components/AccessCard/AvailableStats.vue +24 -16
- package/components/AccessCardAddForm.vue +42 -42
- package/components/AccessCardAssignToUnitForm.vue +13 -21
- package/components/AccessCardDeleteDialog.vue +41 -39
- package/components/AccessCardDetailsDialog.vue +125 -79
- package/components/AccessCardPreviewDialog.vue +58 -84
- package/components/AccessCardQrTagging.vue +60 -63
- package/components/AccessCardReplaceForm.vue +27 -23
- package/components/AccessManagement.vue +86 -85
- package/components/AddEqupmentForm.vue +18 -22
- package/components/AddPassKeyToVisitor.vue +95 -73
- package/components/AppButton.vue +62 -0
- package/components/AppCard.vue +20 -0
- package/components/AppDateField.vue +49 -0
- package/components/AppField.vue +76 -0
- package/components/AppKpiTile.vue +65 -0
- package/components/AppSegmented.vue +38 -0
- package/components/AppSelect.vue +247 -0
- package/components/AreaChecklistHistoryLogs.vue +51 -44
- package/components/AreaChecklistHistoryMain.vue +14 -7
- package/components/AreaFormDialog.vue +71 -59
- package/components/AreaMain.vue +73 -107
- package/components/AttachmentsViewer.vue +84 -22
- package/components/AttendanceCheckInOutDialog.vue +85 -88
- package/components/AttendanceDetailsDialog.vue +57 -63
- package/components/AttendanceMain.vue +4 -3
- package/components/AttendanceMapSearchDialog.vue +42 -44
- package/components/AttendanceSettingsDialog.vue +79 -63
- package/components/Avatar/Main.vue +54 -2
- package/components/BillingMain.vue +26 -30
- package/components/BtnUploadFile.vue +53 -11
- package/components/BuildingForm.vue +34 -27
- package/components/BuildingManagement/buildings.vue +39 -39
- package/components/BuildingManagement/units.vue +26 -42
- package/components/BuildingUnitFormAdd.vue +20 -23
- package/components/BuildingUnitFormEdit.vue +8 -4
- package/components/BulletinBoardForm.vue +19 -24
- package/components/BulletinBoardManagement.vue +49 -57
- package/components/BulletinBoardView.vue +9 -6
- package/components/BulletinExpirationChip.vue +13 -4
- package/components/Button/Close.vue +2 -2
- package/components/CameraForm.vue +21 -22
- package/components/CameraMain.vue +50 -49
- package/components/Card/DeleteConfirmation.vue +24 -22
- package/components/Card/MemberInfoSummary.vue +28 -3
- package/components/Card/Toggle.vue +15 -3
- package/components/CardToolbar.vue +37 -0
- package/components/Carousel.vue +56 -36
- package/components/Chat/Bubbles.vue +43 -14
- package/components/Chat/Information.vue +49 -32
- package/components/Chat/ListCard.vue +38 -9
- package/components/Chat/Message.vue +41 -15
- package/components/Chat/Navigation.vue +27 -15
- package/components/Chat/SkeletonLoader.vue +9 -2
- package/components/ChecklistItemRow.vue +25 -1
- package/components/CleaningScheduleMain.vue +44 -49
- package/components/ClientDetailForm.vue +81 -56
- package/components/ClientMain.vue +92 -82
- package/components/ConfirmDialog.vue +14 -8
- package/components/Container/Standard.vue +9 -7
- package/components/CreateSubsciptionPlan.vue +148 -89
- package/components/DashboardEmptyState.vue +48 -3
- package/components/DashboardMain.vue +924 -676
- package/components/DashboardPanel.vue +84 -21
- package/components/DeliveryCompany.vue +34 -20
- package/components/Dialog/DeleteConfirmation.vue +20 -21
- package/components/Dialog/ReplaceAutofillPrompt.vue +19 -26
- package/components/Dialog/ReusablePrompt.vue +30 -29
- package/components/Dialog/UpdateMoreAction.vue +62 -59
- package/components/DocumentForm.vue +14 -21
- package/components/DocumentManagement.vue +162 -108
- package/components/DocumentViewer.vue +29 -12
- package/components/DrawImage.vue +29 -21
- package/components/EntryPass/QrTemplatePreview.vue +27 -16
- package/components/EntryPassInformation.vue +40 -10
- package/components/EntryPassMain.vue +49 -27
- package/components/EquipmentItemMain.vue +84 -97
- package/components/EquipmentManagementMain.vue +81 -103
- package/components/Facility/BookingSetup.vue +43 -52
- package/components/Feedback/Form.vue +26 -12
- package/components/FeedbackMain.vue +35 -49
- package/components/FileInput.vue +75 -58
- package/components/FileInputWithList.vue +59 -12
- package/components/FormDialog.vue +60 -21
- package/components/HidAccessLogDashboard.vue +512 -490
- package/components/HidCameraCaptureDialog.vue +216 -0
- package/components/HidEnabledGate.vue +67 -9
- package/components/HidIntercomManagement.vue +1322 -653
- package/components/HidQrCodeConfiguration.vue +1030 -258
- package/components/HidReaderForm.vue +142 -59
- package/components/HidReaderManagement.vue +211 -323
- package/components/HidServiceSettingsPanel.vue +44 -13
- package/components/HidUserEnrollment.vue +1185 -412
- package/components/HygieneUpdateMoreAction.vue +44 -44
- package/components/IncidentReport/Authorities.vue +30 -18
- package/components/IncidentReport/IncidentInformation.vue +10 -10
- package/components/IncidentReport/IncidentInformationDownload.vue +3 -4
- package/components/IncidentReport/affectedEntities.vue +41 -20
- package/components/Input/Date.vue +3 -0
- package/components/Input/DatePicker.vue +1 -2
- package/components/Input/DateTimePicker.vue +1 -1
- package/components/Input/File.vue +55 -10
- package/components/Input/FileV2.vue +39 -6
- package/components/Input/InputPhoneNumberV2.vue +2 -1
- package/components/Input/ListGroupSelection.vue +56 -8
- package/components/Input/NRICNumber.vue +1 -0
- package/components/Input/NewDate.vue +1 -0
- package/components/Input/Number.vue +1 -0
- package/components/Input/Password.vue +1 -0
- package/components/Input/PhoneNumber.vue +21 -1
- package/components/Input/VehicleNumber.vue +1 -0
- package/components/InputLabel.vue +2 -2
- package/components/InvitationClientForm.vue +21 -19
- package/components/InvitationForm.vue +15 -21
- package/components/InvitationMain.vue +46 -61
- package/components/Layout/Header.vue +263 -36
- package/components/Layout/NavigationDrawer.vue +300 -30
- package/components/ListItem.vue +33 -3
- package/components/LocalPagination.vue +27 -3
- package/components/ManageChecklistMain.vue +136 -86
- package/components/MemberInformation.vue +32 -16
- package/components/MemberMain.vue +113 -93
- package/components/MyAttendanceMain.vue +3 -5
- package/components/NavigationItem.vue +83 -3
- package/components/Nfc/NFCPatrolReportMain.vue +47 -33
- package/components/Nfc/NFCPatrolRouteForm.vue +18 -20
- package/components/Nfc/NFCPatrolRouteMain.vue +116 -103
- package/components/Nfc/NFCPatrolSettings.vue +14 -4
- package/components/Nfc/NFCTagForm.vue +22 -8
- package/components/Nfc/NFCTagMain.vue +41 -43
- package/components/Nfc/PatrolReport/DailyReportTab.vue +8 -1
- package/components/Nfc/PatrolReport/MonthlyReportTab.vue +8 -1
- package/components/Nfc/PatrolReport/MonthlyReportTable.vue +5 -3
- package/components/Nfc/PatrolReport/PatrolActivityTable.vue +26 -6
- package/components/Nfc/PatrolReport/PatrolReportTab.vue +8 -0
- package/components/Nfc/PatrolReport/PatrolRouteSummary.vue +41 -9
- package/components/Nfc/PatrolReport/RemarksDialog.vue +39 -9
- package/components/Nfc/PatrolReport/ReportEmptyState.vue +29 -9
- package/components/Nfc/PatrolReport/ReportFilters.vue +19 -10
- package/components/Nfc/PatrolReport/ReportLocationHeader.vue +32 -6
- package/components/Nfc/PatrolReport/SummaryReportTable.vue +28 -6
- package/components/NotificationSettings.vue +373 -0
- package/components/NumberSettingField.vue +9 -2
- package/components/OnlineFormConfigurationForm.vue +725 -237
- package/components/OnlineFormFill.vue +213 -106
- package/components/OnlineFormRenderPreview.vue +25 -30
- package/components/OnlineFormsConfiguration.vue +113 -109
- package/components/OrgViewDialog.vue +34 -16
- package/components/OvernightParkingAvailability.vue +49 -26
- package/components/OvernightParkingManagement.vue +78 -18
- package/components/PageHeader.vue +43 -0
- package/components/PassInformation.vue +109 -53
- package/components/PasswordConfirmation.vue +44 -26
- package/components/PeopleForm.vue +41 -20
- package/components/PhotoUpload.vue +110 -48
- package/components/PlaceholderComponent.vue +35 -19
- package/components/PlanActionsMenu.vue +12 -2
- package/components/PlanStatusBadge.vue +7 -8
- package/components/PlateNumberDisplay.vue +9 -6
- package/components/QrTemplate/PrintDialog.vue +66 -43
- package/components/RolePermissionFormCreate.vue +104 -79
- package/components/RolePermissionFormPreviewUpdate.vue +111 -109
- package/components/RolePermissionMain.vue +183 -81
- package/components/ScanVisitorQRCode.vue +99 -35
- package/components/ScheduleAreaMain.vue +34 -59
- package/components/ScheduleTaskForm.vue +61 -42
- package/components/ScheduleTaskMain.vue +56 -69
- package/components/SearchVehicleNumberUser.vue +39 -37
- package/components/ServiceProviderFormCreate.vue +29 -20
- package/components/ServiceProviderInvitationPrompt.vue +155 -0
- package/components/ServiceProviderMain.vue +601 -432
- package/components/Signature.vue +40 -34
- package/components/SignaturePad.vue +5 -29
- package/components/SiteSettings.vue +41 -11
- package/components/SiteSettingsWorkOrder.vue +61 -30
- package/components/SlideCardGroup.vue +35 -11
- package/components/Snackbar.vue +36 -3
- package/components/SpecificAttr.vue +18 -8
- package/components/StatusChip.vue +156 -0
- package/components/StockCard.vue +17 -12
- package/components/SubscriptionPlanTable.vue +207 -140
- package/components/SwitchContext.vue +201 -9
- package/components/TableHygiene.vue +36 -46
- package/components/TableList.vue +10 -10
- package/components/TableListSecondary.vue +105 -54
- package/components/TableMain.vue +241 -79
- package/components/TableV3.vue +61 -70
- package/components/TiptapEditor.vue +33 -40
- package/components/TiptapEditorQr.vue +5 -2
- package/components/Tooltip/Info.vue +69 -24
- package/components/UnitMain.vue +40 -60
- package/components/UnitPersonCard.vue +42 -13
- package/components/VehicleAddSelection.vue +48 -32
- package/components/VehicleForm.vue +112 -129
- package/components/VehicleManagement.vue +26 -12
- package/components/VehicleUpdateMoreAction.vue +59 -46
- package/components/VisitorDataFromScannedQRCodeForm.vue +90 -65
- package/components/VisitorForm.vue +774 -210
- package/components/VisitorFormSelection.vue +40 -37
- package/components/VisitorManagement.vue +239 -82
- package/components/VisitorPassKeyQRScanner.vue +65 -18
- package/components/VisitorSearchResultSummary.vue +60 -16
- package/components/VisitorSocketPopUp.vue +22 -14
- package/components/VisitorsReportPreview.vue +44 -29
- package/components/WorkOrder/Create.vue +26 -17
- package/components/WorkOrder/ListView.vue +38 -7
- package/components/WorkOrder/Main.vue +62 -59
- package/composables/useFeedback.ts +3 -3
- package/composables/useHidAmico.ts +269 -0
- package/composables/useHidNavigation.ts +2 -9
- package/composables/useMember.ts +3 -3
- package/composables/useNFCPatrolDailyReport.ts +13 -0
- package/composables/useNFCPatrolMonthlyReport.ts +22 -56
- package/composables/useNFCPatrolReport.ts +13 -0
- package/composables/useNotificationPreference.ts +87 -0
- package/composables/useOnlineFormPages.ts +2 -0
- package/composables/useRole.ts +22 -0
- package/composables/useServiceProvider.ts +3 -3
- package/composables/useServiceProviderInvitation.ts +145 -0
- package/composables/useSipWebPhone.ts +336 -0
- package/composables/useSubscriptionPlan.ts +62 -0
- package/composables/useThemePreference.ts +63 -0
- package/composables/useVisitor.ts +6 -1
- package/composables/useWebUsb.ts +127 -37
- package/composables/useWorkOrder.ts +17 -3
- package/error.vue +30 -6
- package/nuxt.config.ts +36 -0
- package/package.json +25 -4
- package/pages/[org]/[site]/access-mgmt/administrator/index.vue +2 -2
- package/pages/[org]/[site]/access-mgmt/{identity-mapping → hid-cards}/index.vue +2 -2
- package/pages/[org]/[site]/access-mgmt/intercom/index.vue +1 -1
- package/pages/notification-settings.vue +19 -0
- package/pages/payment-method-linked.vue +34 -10
- package/pages/require-customer.vue +48 -10
- package/pages/require-organization-membership.vue +32 -8
- package/pages/unauthorized.vue +29 -4
- package/plugins/secure-member.client.ts +21 -56
- package/plugins/vuetify.ts +69 -2
- package/types/nfc-patrol-report.ts +3 -2
- package/types/site.d.ts +71 -0
- package/types/subscription.ts +18 -11
- package/utils/breadcrumb.test.ts +108 -0
- package/utils/breadcrumb.ts +82 -0
- package/utils/dashboard.test.ts +118 -0
- package/utils/dashboard.ts +53 -0
- package/utils/data.test.ts +95 -0
- package/utils/data.ts +40 -2
- package/utils/hid-discover.test.ts +102 -0
- package/utils/list-page.test.ts +60 -0
- package/utils/list-page.ts +38 -0
- package/utils/materialSymbols.ts +363 -0
- package/utils/nav-sections.test.ts +190 -0
- package/utils/nav-sections.ts +151 -0
- package/utils/nfc-patrol-report.test.ts +130 -0
- package/utils/nfc-patrol-report.ts +101 -0
- package/utils/role.test.ts +69 -0
- package/utils/role.ts +10 -0
- package/utils/route-name.test.ts +85 -0
- package/utils/route-name.ts +24 -0
- package/utils/status.test.ts +110 -0
- package/utils/status.ts +135 -0
- package/utils/table-card.test.ts +84 -0
- package/utils/theme-aa-ledger.ts +148 -0
- package/utils/theme.test.ts +485 -7
- package/utils/theme.ts +295 -110
- package/.changeset/README.md +0 -8
- package/.changeset/config.json +0 -11
- package/.editorconfig +0 -12
- package/.github/workflows/main.yml +0 -17
- package/.github/workflows/publish-staging.yml +0 -47
- package/.github/workflows/publish.yml +0 -39
- package/PUBLISHING.md +0 -269
- package/components/HidIdentityMapping.vue +0 -975
- package/components/ScheduleTaskAreaFormDialog.vue +0 -144
- package/components/ScheduleTaskAreaUpdateMoreAction.vue +0 -109
- package/components/ScheduleTastTicketMain.vue +0 -182
- package/components/TableWithButton.vue +0 -94
- package/test/visitor-socket.test.mjs +0 -36
|
@@ -22,6 +22,13 @@
|
|
|
22
22
|
/>
|
|
23
23
|
</template>
|
|
24
24
|
|
|
25
|
+
<!-- A failed request is not an empty result. Saying "no patrol log found"
|
|
26
|
+
for a 500 states something about the data the server never said. -->
|
|
27
|
+
<ReportEmptyState
|
|
28
|
+
v-else-if="!loading && failed"
|
|
29
|
+
title="Report unavailable"
|
|
30
|
+
message="The patrol logs could not be loaded. Please try again."
|
|
31
|
+
/>
|
|
25
32
|
<ReportEmptyState
|
|
26
33
|
v-else-if="!loading && notFound"
|
|
27
34
|
title="No Patrol Log"
|
|
@@ -63,6 +70,7 @@ const {
|
|
|
63
70
|
report,
|
|
64
71
|
loading,
|
|
65
72
|
notFound,
|
|
73
|
+
failed,
|
|
66
74
|
selectedActivityRemarks,
|
|
67
75
|
dialogRemarks,
|
|
68
76
|
fetchReport,
|
|
@@ -1,14 +1,28 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The schedule-vs-actual pair at the top of a patrol report.
|
|
3
|
+
|
|
4
|
+
Was `variant="flat"` - a Vuetify surface with no border on either theme - and
|
|
5
|
+
the table inside it was `border-thin`, i.e. a hairline the theme does not
|
|
6
|
+
own. `.table-card` is the design's table surface: `--card` on `--border` at
|
|
7
|
+
`--r-card`, and it styles the `thead`/`tbody` of a raw `v-table` for us, so
|
|
8
|
+
the header row picks up the design's uppercase 11px/800 and the rows the
|
|
9
|
+
49px line box.
|
|
10
|
+
|
|
11
|
+
`text-body-2 text-medium-emphasis` on the tolerance was Vuetify's Roboto
|
|
12
|
+
scale plus an opacity; `--text2` is the design's secondary ink and measures
|
|
13
|
+
9.62:1 on a card.
|
|
14
|
+
-->
|
|
1
15
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
<span>Patrol Route Summary: {{ summary.routeName }}</span>
|
|
5
|
-
<span class="
|
|
16
|
+
<div class="table-card table-card__shrink mb-6">
|
|
17
|
+
<div class="route-summary__head">
|
|
18
|
+
<span class="screen-card-title">Patrol Route Summary: {{ summary.routeName }}</span>
|
|
19
|
+
<span class="route-summary__tolerance">
|
|
6
20
|
Tolerance: {{ summary.tolerance }} mins
|
|
7
21
|
</span>
|
|
8
|
-
</
|
|
22
|
+
</div>
|
|
9
23
|
|
|
10
|
-
<
|
|
11
|
-
<v-table
|
|
24
|
+
<div>
|
|
25
|
+
<v-table>
|
|
12
26
|
<thead>
|
|
13
27
|
<tr>
|
|
14
28
|
<th>Time</th>
|
|
@@ -50,8 +64,8 @@
|
|
|
50
64
|
</tr>
|
|
51
65
|
</tbody>
|
|
52
66
|
</v-table>
|
|
53
|
-
</
|
|
54
|
-
</
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
55
69
|
</template>
|
|
56
70
|
|
|
57
71
|
<script setup lang="ts">
|
|
@@ -61,3 +75,21 @@ defineProps<{
|
|
|
61
75
|
summary: NFCPatrolRouteSummary;
|
|
62
76
|
}>();
|
|
63
77
|
</script>
|
|
78
|
+
|
|
79
|
+
<style scoped>
|
|
80
|
+
.route-summary__head {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
justify-content: space-between;
|
|
84
|
+
gap: 12px;
|
|
85
|
+
padding: 14px var(--cellpad-x);
|
|
86
|
+
border-bottom: 1px solid var(--border);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.route-summary__tolerance {
|
|
90
|
+
font-family: var(--font-sans);
|
|
91
|
+
font-size: var(--fs-cell);
|
|
92
|
+
color: var(--text2);
|
|
93
|
+
white-space: nowrap;
|
|
94
|
+
}
|
|
95
|
+
</style>
|
|
@@ -1,22 +1,39 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The remarks a guard left when skipping a checkpoint.
|
|
3
|
+
|
|
4
|
+
Was a bare `v-card rounded="xl"` - a 24px corner where the design's modal is
|
|
5
|
+
16px (`--r-modal`) - with a `text-h6` heading and Vuetify's default elevation
|
|
6
|
+
rather than `--shadow-modal`. `.screen-modal` is all three, and it styles its
|
|
7
|
+
own `.v-card-title`, so the `text-h6` span becomes the title element the
|
|
8
|
+
design already draws.
|
|
9
|
+
|
|
10
|
+
The close control was a tinted `variant="text"` icon button; `.screen-icon-btn`
|
|
11
|
+
is the design's bordered square, the same one every other dialog uses.
|
|
12
|
+
-->
|
|
1
13
|
<template>
|
|
2
14
|
<v-dialog :model-value="modelValue" max-width="600" persistent>
|
|
3
|
-
<v-card
|
|
4
|
-
<
|
|
5
|
-
<
|
|
6
|
-
<v-
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
<v-card class="screen-modal">
|
|
16
|
+
<div class="remarks-dialog__head">
|
|
17
|
+
<v-card-title class="pa-0">Skip Checkpoint Remarks</v-card-title>
|
|
18
|
+
<v-btn
|
|
19
|
+
class="screen-icon-btn"
|
|
20
|
+
icon="mdi-close"
|
|
21
|
+
variant="flat"
|
|
22
|
+
aria-label="Close"
|
|
23
|
+
@click="close"
|
|
24
|
+
/>
|
|
25
|
+
</div>
|
|
9
26
|
|
|
10
|
-
<
|
|
27
|
+
<div class="screen-modal__body px-6 pb-6">
|
|
11
28
|
<v-textarea
|
|
29
|
+
class="filter-field"
|
|
12
30
|
:model-value="remarks"
|
|
13
31
|
variant="outlined"
|
|
14
|
-
rounded="lg"
|
|
15
32
|
readonly
|
|
16
33
|
rows="4"
|
|
17
34
|
hide-details
|
|
18
35
|
/>
|
|
19
|
-
</
|
|
36
|
+
</div>
|
|
20
37
|
</v-card>
|
|
21
38
|
</v-dialog>
|
|
22
39
|
</template>
|
|
@@ -35,3 +52,16 @@ function close() {
|
|
|
35
52
|
emit("update:modelValue", false);
|
|
36
53
|
}
|
|
37
54
|
</script>
|
|
55
|
+
|
|
56
|
+
<style scoped>
|
|
57
|
+
/* The title row was a `v-card-title` with a `v-spacer` inside it. A flex row
|
|
58
|
+
with the title and the close button as its two children says the same thing
|
|
59
|
+
and lets `.screen-modal .v-card-title` reach the heading. */
|
|
60
|
+
.remarks-dialog__head {
|
|
61
|
+
display: flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
justify-content: space-between;
|
|
64
|
+
gap: 12px;
|
|
65
|
+
padding: 20px 24px;
|
|
66
|
+
}
|
|
67
|
+
</style>
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The patrol report's "nothing selected yet" state.
|
|
3
|
+
|
|
4
|
+
It was a bordered `v-card` with a `text-h6` heading, a `text-body-2
|
|
5
|
+
text-medium-emphasis` line and `color="grey-lighten-1"` on the icon - a fixed
|
|
6
|
+
Vuetify grey, i.e. the same light grey on the dark page.
|
|
7
|
+
|
|
8
|
+
The design already has this exact object: `.screen-empty` is the centred
|
|
9
|
+
column with the muted icon and the muted sentence, and it colours its own
|
|
10
|
+
`.v-icon`. So the card and the three type classes go and the design's one
|
|
11
|
+
class replaces them.
|
|
12
|
+
-->
|
|
1
13
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<v-icon size="64"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<p class="text-body-2 text-medium-emphasis">
|
|
8
|
-
{{ message }}
|
|
9
|
-
</p>
|
|
10
|
-
</v-card>
|
|
14
|
+
<div class="screen-empty">
|
|
15
|
+
<v-icon size="64">mdi-clipboard-text-outline</v-icon>
|
|
16
|
+
<p class="screen-empty__title">{{ title }}</p>
|
|
17
|
+
<p class="mb-0">{{ message }}</p>
|
|
18
|
+
</div>
|
|
11
19
|
</template>
|
|
12
20
|
|
|
13
21
|
<script setup lang="ts">
|
|
@@ -22,3 +30,15 @@ withDefaults(
|
|
|
22
30
|
},
|
|
23
31
|
);
|
|
24
32
|
</script>
|
|
33
|
+
|
|
34
|
+
<style scoped>
|
|
35
|
+
/* The heading keeps its emphasis over the sentence under it, but at the
|
|
36
|
+
design's card-title size rather than Vuetify's `text-h6` (20px/500 Roboto
|
|
37
|
+
metrics). `.screen-empty` already supplies the family and the muted ink. */
|
|
38
|
+
.screen-empty__title {
|
|
39
|
+
font-size: var(--fs-card-title);
|
|
40
|
+
font-weight: var(--fw-card-title);
|
|
41
|
+
color: var(--text2);
|
|
42
|
+
margin-bottom: 0;
|
|
43
|
+
}
|
|
44
|
+
</style>
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The route / time / date filters above a patrol report, and its Export menu.
|
|
3
|
+
|
|
4
|
+
The three fields were raw Vuetify: `rounded="lg"` is an 8px corner where the
|
|
5
|
+
design's input is `--r-inner`, and the label and placeholder sat at Vuetify's
|
|
6
|
+
own scale rather than `--fs-cell`. `.filter-field` is the design's input, and
|
|
7
|
+
it is the same class the rest of the estate's filter rows already use, so
|
|
8
|
+
these three now match every other filter on the product.
|
|
9
|
+
|
|
10
|
+
The Export button was `variant="outlined" size="large"` - 44px against the
|
|
11
|
+
design's 40 - with `rounded="lg"` again. `.screen-btn-ghost` is the design's
|
|
12
|
+
secondary button; `block` still reaches it, because the layer names
|
|
13
|
+
`.v-btn--block.screen-btn-ghost` for exactly that.
|
|
14
|
+
-->
|
|
1
15
|
<template>
|
|
2
16
|
<v-row no-gutters class="mb-6">
|
|
3
17
|
<v-col cols="12" md="3" class="pr-md-2 mb-2 mb-md-0">
|
|
@@ -7,11 +21,10 @@
|
|
|
7
21
|
item-title="title"
|
|
8
22
|
item-value="value"
|
|
9
23
|
label="Select Route"
|
|
24
|
+
class="filter-field"
|
|
10
25
|
variant="outlined"
|
|
11
26
|
density="comfortable"
|
|
12
|
-
rounded="lg"
|
|
13
27
|
hide-details
|
|
14
|
-
bg-color="white"
|
|
15
28
|
@update:model-value="updateFilter('route', $event)"
|
|
16
29
|
/>
|
|
17
30
|
</v-col>
|
|
@@ -26,11 +39,10 @@
|
|
|
26
39
|
:model-value="modelValue.timeRange"
|
|
27
40
|
:items="options.timeRanges"
|
|
28
41
|
label="Start Time"
|
|
42
|
+
class="filter-field"
|
|
29
43
|
variant="outlined"
|
|
30
44
|
density="comfortable"
|
|
31
|
-
rounded="lg"
|
|
32
45
|
hide-details
|
|
33
|
-
bg-color="white"
|
|
34
46
|
@update:model-value="updateFilter('timeRange', $event)"
|
|
35
47
|
/>
|
|
36
48
|
</v-col>
|
|
@@ -43,11 +55,10 @@
|
|
|
43
55
|
>
|
|
44
56
|
<ReportDatePicker
|
|
45
57
|
:model-value="modelValue.date"
|
|
58
|
+
class="filter-field"
|
|
46
59
|
variant="outlined"
|
|
47
60
|
density="comfortable"
|
|
48
|
-
rounded="lg"
|
|
49
61
|
hide-details
|
|
50
|
-
bg-color="white"
|
|
51
62
|
@update:model-value="updateFilter('date', $event)"
|
|
52
63
|
/>
|
|
53
64
|
</v-col>
|
|
@@ -59,11 +70,9 @@
|
|
|
59
70
|
<template #activator="{ props: menuProps }">
|
|
60
71
|
<v-btn
|
|
61
72
|
v-bind="menuProps"
|
|
62
|
-
|
|
73
|
+
class="screen-btn-ghost"
|
|
74
|
+
variant="flat"
|
|
63
75
|
block
|
|
64
|
-
size="large"
|
|
65
|
-
rounded="lg"
|
|
66
|
-
class="text-none"
|
|
67
76
|
prepend-icon="mdi-export"
|
|
68
77
|
>
|
|
69
78
|
Export
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The site header at the top of a patrol report.
|
|
3
|
+
|
|
4
|
+
Was a `variant="flat" rounded="lg"` card with `text-h5` and `text-body-2
|
|
5
|
+
text-medium-emphasis`. `variant="flat"` is a Vuetify surface with no border,
|
|
6
|
+
so the block had no edge on either theme; the design's card is
|
|
7
|
+
`--card` + `--border` + `--r-card` + `--shadow`, which is `.app-card`.
|
|
8
|
+
|
|
9
|
+
The two type classes are Vuetify's Roboto scale. `--fs-card-title` and
|
|
10
|
+
`--text2` are the design's, and `--text2` measures 9.62:1 on a card where
|
|
11
|
+
`--medium-emphasis` is an opacity applied to the theme ink.
|
|
12
|
+
-->
|
|
1
13
|
<template>
|
|
2
|
-
<
|
|
14
|
+
<div class="app-card text-center pa-8 mt-2">
|
|
3
15
|
<v-icon size="64" class="mb-4">mdi-office-building</v-icon>
|
|
4
|
-
<
|
|
5
|
-
<p class="
|
|
6
|
-
|
|
7
|
-
</p>
|
|
8
|
-
</v-card>
|
|
16
|
+
<p class="location-header__name">{{ location.name }}</p>
|
|
17
|
+
<p class="location-header__address mb-0">{{ location.address }}</p>
|
|
18
|
+
</div>
|
|
9
19
|
</template>
|
|
10
20
|
|
|
11
21
|
<script setup lang="ts">
|
|
@@ -15,3 +25,19 @@ defineProps<{
|
|
|
15
25
|
location: NFCPatrolReportLocation;
|
|
16
26
|
}>();
|
|
17
27
|
</script>
|
|
28
|
+
|
|
29
|
+
<style scoped>
|
|
30
|
+
.location-header__name {
|
|
31
|
+
font-family: var(--font-sans);
|
|
32
|
+
font-size: var(--fs-card-title);
|
|
33
|
+
font-weight: var(--fw-card-title);
|
|
34
|
+
color: var(--text);
|
|
35
|
+
margin-bottom: 8px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.location-header__address {
|
|
39
|
+
font-family: var(--font-sans);
|
|
40
|
+
font-size: var(--fs-cell);
|
|
41
|
+
color: var(--text2);
|
|
42
|
+
}
|
|
43
|
+
</style>
|
|
@@ -1,9 +1,26 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The per-route summary rows of a patrol report.
|
|
3
|
+
|
|
4
|
+
Same change as `PatrolRouteSummary`: `variant="flat"` drew no border on
|
|
5
|
+
either theme and `border-thin` was a hairline outside the theme.
|
|
6
|
+
`.table-card` is the design's table surface and styles the raw `v-table`'s
|
|
7
|
+
header row and cells, so the uppercase 11px/800 header and the 49px rows
|
|
8
|
+
arrive without restating either here.
|
|
9
|
+
|
|
10
|
+
The status stays `text-success` / `text-error`. Those ARE the design tokens -
|
|
11
|
+
`utils/theme.ts` maps Vuetify's `success`/`error` onto `--ok`/`--err` - and
|
|
12
|
+
swapping them to `StatusChip` would be a meaning change, not a restyle:
|
|
13
|
+
`utils/status.ts` does not name "Missed", so the shared map would render it
|
|
14
|
+
NEUTRAL and a missed patrol would stop being red. Raised, not decided here.
|
|
15
|
+
-->
|
|
1
16
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<
|
|
17
|
+
<div class="table-card table-card__shrink mb-6">
|
|
18
|
+
<div class="summary-table__head">
|
|
19
|
+
<span class="screen-card-title">{{ title }}</span>
|
|
20
|
+
</div>
|
|
4
21
|
|
|
5
|
-
<
|
|
6
|
-
<v-table
|
|
22
|
+
<div>
|
|
23
|
+
<v-table>
|
|
7
24
|
<thead>
|
|
8
25
|
<tr>
|
|
9
26
|
<th>Patrol Route Name</th>
|
|
@@ -43,8 +60,8 @@
|
|
|
43
60
|
</tr>
|
|
44
61
|
</tbody>
|
|
45
62
|
</v-table>
|
|
46
|
-
</
|
|
47
|
-
</
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
48
65
|
</template>
|
|
49
66
|
|
|
50
67
|
<script setup lang="ts">
|
|
@@ -66,6 +83,11 @@ function statusClass(status: NFCPatrolReportSummaryStatus) {
|
|
|
66
83
|
</script>
|
|
67
84
|
|
|
68
85
|
<style scoped>
|
|
86
|
+
.summary-table__head {
|
|
87
|
+
padding: 14px var(--cellpad-x);
|
|
88
|
+
border-bottom: 1px solid var(--border);
|
|
89
|
+
}
|
|
90
|
+
|
|
69
91
|
.guard-signature {
|
|
70
92
|
width: 80px;
|
|
71
93
|
height: 40px;
|