@7365admin1/layer-common 3.2.7 → 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/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
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-dialog v-model="showDialog" max-width="450" persistent>
|
|
3
|
-
<v-card>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
</v-
|
|
11
|
-
|
|
12
|
-
<v-card-text class="
|
|
3
|
+
<v-card class="screen-modal">
|
|
4
|
+
<!-- Was a bare `v-toolbar` at each end of the card, which Vuetify paints
|
|
5
|
+
from its own `surface` - two grey slabs visibly lighter than the card
|
|
6
|
+
on the dark theme - carrying a `text-h6` (20px/500) heading. The
|
|
7
|
+
design's modal heading is the card's own `v-card-title` row. -->
|
|
8
|
+
<v-card-title>
|
|
9
|
+
{{ action === "checkIn" ? "Check In" : "Check Out" }}
|
|
10
|
+
</v-card-title>
|
|
11
|
+
|
|
12
|
+
<v-card-text class="screen-modal__body">
|
|
13
13
|
<v-form ref="formRef" v-model="valid">
|
|
14
14
|
<v-row no-gutters class="pa-0">
|
|
15
15
|
<v-col cols="12" class="pa-0">
|
|
16
|
-
<v-card
|
|
17
|
-
variant="outlined"
|
|
18
|
-
class="mb-2"
|
|
19
|
-
style="height: 400px; position: relative; overflow: hidden"
|
|
20
|
-
>
|
|
16
|
+
<v-card variant="outlined" class="mb-2 attendance-capture__stage">
|
|
21
17
|
<div
|
|
22
18
|
v-if="loadingCamera"
|
|
23
19
|
class="d-flex align-center justify-center"
|
|
@@ -56,17 +52,15 @@
|
|
|
56
52
|
"
|
|
57
53
|
/>
|
|
58
54
|
|
|
55
|
+
<!-- `background: #f5f5f5` was a literal light grey, so on the
|
|
56
|
+
dark theme this placeholder was a white slab inside a dark
|
|
57
|
+
card. It follows the theme now. -->
|
|
59
58
|
<div
|
|
60
59
|
v-else-if="!loadingCamera"
|
|
61
|
-
class="d-flex align-center justify-center flex-column"
|
|
62
|
-
style="height: 100%; background: #f5f5f5"
|
|
60
|
+
class="d-flex align-center justify-center flex-column attendance-capture__placeholder"
|
|
63
61
|
>
|
|
64
|
-
<v-icon size="64"
|
|
65
|
-
|
|
66
|
-
>
|
|
67
|
-
<span class="text-caption text-grey"
|
|
68
|
-
>Initializing camera...</span
|
|
69
|
-
>
|
|
62
|
+
<v-icon size="64" class="mb-2">mdi-camera-off</v-icon>
|
|
63
|
+
<span>Initializing camera...</span>
|
|
70
64
|
</div>
|
|
71
65
|
</v-card>
|
|
72
66
|
</v-col>
|
|
@@ -86,71 +80,47 @@
|
|
|
86
80
|
</v-form>
|
|
87
81
|
</v-card-text>
|
|
88
82
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
</v-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
>
|
|
131
|
-
<v-icon class="mr-2">mdi-camera-retake</v-icon>
|
|
132
|
-
Retake
|
|
133
|
-
</v-btn>
|
|
134
|
-
</v-col>
|
|
135
|
-
|
|
136
|
-
<v-col cols="6" class="pa-0">
|
|
137
|
-
<v-btn
|
|
138
|
-
block
|
|
139
|
-
variant="flat"
|
|
140
|
-
color="black"
|
|
141
|
-
class="text-none font-weight-bold rounded-0"
|
|
142
|
-
height="56"
|
|
143
|
-
size="large"
|
|
144
|
-
:loading="submitting"
|
|
145
|
-
@click="submit"
|
|
146
|
-
>
|
|
147
|
-
<v-icon class="mr-2">mdi-check</v-icon>
|
|
148
|
-
Submit
|
|
149
|
-
</v-btn>
|
|
150
|
-
</v-col>
|
|
151
|
-
</template>
|
|
152
|
-
</v-row>
|
|
153
|
-
</v-toolbar>
|
|
83
|
+
<!-- `color="black"` was a literal, not a token: a pure-black 56px slab
|
|
84
|
+
with `rounded-0`, on both themes. `.screen-btn-primary` is the fill
|
|
85
|
+
the design draws, and the footer gives the pair the design's 40px
|
|
86
|
+
height and 10px radius. -->
|
|
87
|
+
<div class="screen-modal__footer">
|
|
88
|
+
<template v-if="!capturedImage">
|
|
89
|
+
<v-btn class="text-none screen-btn-ghost" variant="flat" @click="close">
|
|
90
|
+
Cancel
|
|
91
|
+
</v-btn>
|
|
92
|
+
<v-btn
|
|
93
|
+
class="text-none screen-btn-primary"
|
|
94
|
+
variant="flat"
|
|
95
|
+
prepend-icon="mdi-camera"
|
|
96
|
+
:disabled="!showCamera"
|
|
97
|
+
@click="capturePhoto"
|
|
98
|
+
>
|
|
99
|
+
Capture Photo
|
|
100
|
+
</v-btn>
|
|
101
|
+
</template>
|
|
102
|
+
|
|
103
|
+
<template v-else>
|
|
104
|
+
<v-btn
|
|
105
|
+
class="text-none screen-btn-ghost"
|
|
106
|
+
variant="flat"
|
|
107
|
+
prepend-icon="mdi-camera-retake"
|
|
108
|
+
:disabled="submitting"
|
|
109
|
+
@click="retakePhoto"
|
|
110
|
+
>
|
|
111
|
+
Retake
|
|
112
|
+
</v-btn>
|
|
113
|
+
<v-btn
|
|
114
|
+
class="text-none screen-btn-primary"
|
|
115
|
+
variant="flat"
|
|
116
|
+
prepend-icon="mdi-check"
|
|
117
|
+
:loading="submitting"
|
|
118
|
+
@click="submit"
|
|
119
|
+
>
|
|
120
|
+
Submit
|
|
121
|
+
</v-btn>
|
|
122
|
+
</template>
|
|
123
|
+
</div>
|
|
154
124
|
</v-card>
|
|
155
125
|
</v-dialog>
|
|
156
126
|
</template>
|
|
@@ -418,3 +388,30 @@ watch(showDialog, async (newVal) => {
|
|
|
418
388
|
}
|
|
419
389
|
});
|
|
420
390
|
</script>
|
|
391
|
+
|
|
392
|
+
<style scoped>
|
|
393
|
+
/* The camera stage. `height: 400px` and the rest were inline styles; the box is
|
|
394
|
+
the design's inner radius on the card's own border. */
|
|
395
|
+
.attendance-capture__stage {
|
|
396
|
+
position: relative;
|
|
397
|
+
height: 400px;
|
|
398
|
+
overflow: hidden;
|
|
399
|
+
border-radius: var(--r-inner);
|
|
400
|
+
border-color: var(--border);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/* Was `background: #f5f5f5` with `text-grey` / `text-caption` on it - a literal
|
|
404
|
+
light slab that stayed light on the dark theme. Both ends follow the theme. */
|
|
405
|
+
.attendance-capture__placeholder {
|
|
406
|
+
height: 100%;
|
|
407
|
+
background: var(--thead);
|
|
408
|
+
font-family: var(--font-sans);
|
|
409
|
+
font-size: var(--fs-cell);
|
|
410
|
+
font-weight: 500;
|
|
411
|
+
color: var(--muted);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.attendance-capture__placeholder .v-icon {
|
|
415
|
+
color: var(--muted);
|
|
416
|
+
}
|
|
417
|
+
</style>
|
|
@@ -4,16 +4,14 @@
|
|
|
4
4
|
:max-width="attendance?.checkOut?.timestamp ? 900 : 500"
|
|
5
5
|
persistent
|
|
6
6
|
>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
</v-row>
|
|
14
|
-
</v-toolbar>
|
|
7
|
+
<!-- The card wears `.screen-modal` (16px corner, `--card`, the modal
|
|
8
|
+
shadow). The `v-toolbar` that stood in for the title row and the one
|
|
9
|
+
that stood in for the footer were both fixed grey slabs that stay grey
|
|
10
|
+
on the dark theme. -->
|
|
11
|
+
<v-card class="screen-modal">
|
|
12
|
+
<v-card-title class="text-capitalize">Attendance Details</v-card-title>
|
|
15
13
|
|
|
16
|
-
<v-card-text class="pa-6">
|
|
14
|
+
<v-card-text class="screen-modal__body pa-6">
|
|
17
15
|
<v-row v-if="attendance" dense>
|
|
18
16
|
<v-col :cols="attendance.checkOut?.timestamp ? 6 : 12">
|
|
19
17
|
<v-row dense>
|
|
@@ -21,14 +19,14 @@
|
|
|
21
19
|
<InputLabel title="Check In" />
|
|
22
20
|
</v-col>
|
|
23
21
|
<v-col cols="12" class="mb-1">
|
|
24
|
-
<span class="
|
|
22
|
+
<span class="att-dlg__time">{{
|
|
25
23
|
attendance.checkIn?.timestamp
|
|
26
24
|
? formatDate(attendance.checkIn.timestamp)
|
|
27
25
|
: "N/A"
|
|
28
26
|
}}</span>
|
|
29
27
|
</v-col>
|
|
30
28
|
<v-col cols="12" class="mb-2">
|
|
31
|
-
<span class="
|
|
29
|
+
<span class="screen-hint att-dlg__meta">
|
|
32
30
|
{{
|
|
33
31
|
attendance.checkIn?.location?.latitude &&
|
|
34
32
|
attendance.checkIn?.location?.longitude
|
|
@@ -38,29 +36,21 @@
|
|
|
38
36
|
</span>
|
|
39
37
|
</v-col>
|
|
40
38
|
<v-col cols="12">
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
>
|
|
39
|
+
<!-- Was an inline `border: 1px solid rgba(0,0,0,.12)` - a
|
|
40
|
+
literal black rule that is the same black on the dark
|
|
41
|
+
theme. `--border` is that rule in each theme, and the
|
|
42
|
+
frame takes the design's inner radius. -->
|
|
43
|
+
<div v-if="attendance.checkIn?.img" class="att-dlg__frame">
|
|
47
44
|
<v-img
|
|
48
45
|
:src="getFileUrl(attendance.checkIn.img)"
|
|
49
46
|
height="280"
|
|
50
47
|
width="100%"
|
|
51
48
|
cover
|
|
52
49
|
></v-img>
|
|
53
|
-
</
|
|
54
|
-
<v-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
class="pa-8 text-center"
|
|
58
|
-
style="border: 1px solid rgba(0, 0, 0, 0.12); height: 280px"
|
|
59
|
-
>
|
|
60
|
-
<span class="text-caption text-medium-emphasis"
|
|
61
|
-
>No image</span
|
|
62
|
-
>
|
|
63
|
-
</v-card>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="att-dlg__frame att-dlg__frame--empty pa-8 text-center" v-else>
|
|
52
|
+
<span class="screen-hint att-dlg__meta">No image</span>
|
|
53
|
+
</div>
|
|
64
54
|
</v-col>
|
|
65
55
|
</v-row>
|
|
66
56
|
</v-col>
|
|
@@ -71,12 +61,12 @@
|
|
|
71
61
|
<InputLabel title="Check Out" />
|
|
72
62
|
</v-col>
|
|
73
63
|
<v-col cols="12" class="mb-1">
|
|
74
|
-
<span class="
|
|
64
|
+
<span class="att-dlg__time">{{
|
|
75
65
|
formatDate(attendance.checkOut.timestamp)
|
|
76
66
|
}}</span>
|
|
77
67
|
</v-col>
|
|
78
68
|
<v-col cols="12" class="mb-2">
|
|
79
|
-
<span class="
|
|
69
|
+
<span class="screen-hint att-dlg__meta">
|
|
80
70
|
{{
|
|
81
71
|
attendance.checkOut?.location?.latitude &&
|
|
82
72
|
attendance.checkOut?.location?.longitude
|
|
@@ -86,29 +76,17 @@
|
|
|
86
76
|
</span>
|
|
87
77
|
</v-col>
|
|
88
78
|
<v-col cols="12">
|
|
89
|
-
<v-
|
|
90
|
-
v-if="attendance.checkOut?.img"
|
|
91
|
-
variant="outlined"
|
|
92
|
-
class="pa-0"
|
|
93
|
-
style="border: 1px solid rgba(0, 0, 0, 0.12)"
|
|
94
|
-
>
|
|
79
|
+
<div v-if="attendance.checkOut?.img" class="att-dlg__frame">
|
|
95
80
|
<v-img
|
|
96
81
|
:src="getFileUrl(attendance.checkOut.img)"
|
|
97
82
|
height="280"
|
|
98
83
|
width="100%"
|
|
99
84
|
cover
|
|
100
85
|
></v-img>
|
|
101
|
-
</
|
|
102
|
-
<v-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
class="pa-8 text-center"
|
|
106
|
-
style="border: 1px solid rgba(0, 0, 0, 0.12); height: 280px"
|
|
107
|
-
>
|
|
108
|
-
<span class="text-caption text-medium-emphasis"
|
|
109
|
-
>No image</span
|
|
110
|
-
>
|
|
111
|
-
</v-card>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="att-dlg__frame att-dlg__frame--empty pa-8 text-center" v-else>
|
|
88
|
+
<span class="screen-hint att-dlg__meta">No image</span>
|
|
89
|
+
</div>
|
|
112
90
|
</v-col>
|
|
113
91
|
</v-row>
|
|
114
92
|
</v-col>
|
|
@@ -121,22 +99,11 @@
|
|
|
121
99
|
</v-row>
|
|
122
100
|
</v-card-text>
|
|
123
101
|
|
|
124
|
-
<
|
|
125
|
-
<v-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
variant="text"
|
|
130
|
-
class="text-none"
|
|
131
|
-
size="large"
|
|
132
|
-
@click="close"
|
|
133
|
-
height="48"
|
|
134
|
-
>
|
|
135
|
-
Close
|
|
136
|
-
</v-btn>
|
|
137
|
-
</v-col>
|
|
138
|
-
</v-row>
|
|
139
|
-
</v-toolbar>
|
|
102
|
+
<div class="screen-modal__footer">
|
|
103
|
+
<v-btn variant="outlined" class="screen-btn-ghost" @click="close">
|
|
104
|
+
Close
|
|
105
|
+
</v-btn>
|
|
106
|
+
</div>
|
|
140
107
|
</v-card>
|
|
141
108
|
</v-dialog>
|
|
142
109
|
</template>
|
|
@@ -183,3 +150,30 @@ watch(showDialog, (newVal) => {
|
|
|
183
150
|
}
|
|
184
151
|
});
|
|
185
152
|
</script>
|
|
153
|
+
|
|
154
|
+
<style scoped>
|
|
155
|
+
/* `text-body-1` was 1rem/400 and `text-caption text-medium-emphasis` was
|
|
156
|
+
0.75rem on Vuetify's 60%-alpha ink. The handoff names no type for a
|
|
157
|
+
label/value detail row, so both take the established cell and hint. */
|
|
158
|
+
.att-dlg__time {
|
|
159
|
+
font-size: var(--fs-cell);
|
|
160
|
+
font-weight: var(--fw-cell);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.att-dlg__meta {
|
|
164
|
+
font-size: var(--fs-breadcrumb);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.att-dlg__frame {
|
|
168
|
+
border: 1px solid var(--border);
|
|
169
|
+
border-radius: var(--r-inner);
|
|
170
|
+
overflow: hidden;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.att-dlg__frame--empty {
|
|
174
|
+
height: 280px;
|
|
175
|
+
display: flex;
|
|
176
|
+
align-items: center;
|
|
177
|
+
justify-content: center;
|
|
178
|
+
}
|
|
179
|
+
</style>
|
|
@@ -15,11 +15,12 @@
|
|
|
15
15
|
@row-click="handleRowClick"
|
|
16
16
|
>
|
|
17
17
|
<template #actions>
|
|
18
|
+
<!-- Was `color="black"`: a black slab in both themes, and the only
|
|
19
|
+
black surface on the page. Same button, the design's ghost. -->
|
|
18
20
|
<v-btn
|
|
19
21
|
v-if="canManageAttendanceSettings"
|
|
20
|
-
variant="
|
|
21
|
-
|
|
22
|
-
class="text-none"
|
|
22
|
+
variant="outlined"
|
|
23
|
+
class="text-none screen-btn-ghost"
|
|
23
24
|
@click="dialogShowSettings = true"
|
|
24
25
|
>
|
|
25
26
|
<v-icon class="mr-2">mdi-cog</v-icon>
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-dialog v-model="showDialog" max-width="500" persistent>
|
|
3
|
-
<v-card>
|
|
4
|
-
<
|
|
5
|
-
<v-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<v-card-text class="pa-6">
|
|
3
|
+
<v-card class="screen-modal map-search">
|
|
4
|
+
<div class="map-search__head">
|
|
5
|
+
<v-card-title>Search Location</v-card-title>
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
<div class="screen-modal__body map-search__body filter-field">
|
|
11
9
|
<v-form ref="formRef" @submit.prevent="handleSearch">
|
|
12
10
|
<v-row dense>
|
|
13
11
|
<v-col cols="12" md="6">
|
|
@@ -64,47 +62,23 @@
|
|
|
64
62
|
</v-col>
|
|
65
63
|
</v-row>
|
|
66
64
|
</v-form>
|
|
67
|
-
</
|
|
68
|
-
|
|
69
|
-
<
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
@click="handleClose"
|
|
80
|
-
>
|
|
81
|
-
Cancel
|
|
82
|
-
</v-btn>
|
|
83
|
-
</v-col>
|
|
84
|
-
<v-col cols="6" class="pa-0">
|
|
85
|
-
<v-btn
|
|
86
|
-
block
|
|
87
|
-
variant="flat"
|
|
88
|
-
color="black"
|
|
89
|
-
class="text-none font-weight-bold rounded-0"
|
|
90
|
-
height="56"
|
|
91
|
-
size="large"
|
|
92
|
-
:loading="searching"
|
|
93
|
-
:disabled="!formData.postalCode"
|
|
94
|
-
@click="handleSearch"
|
|
95
|
-
>
|
|
96
|
-
<v-icon class="mr-2">mdi-magnify</v-icon>
|
|
97
|
-
Search
|
|
98
|
-
</v-btn>
|
|
99
|
-
</v-col>
|
|
100
|
-
</v-row>
|
|
101
|
-
</v-toolbar>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="map-search__footer">
|
|
68
|
+
<AppButton variant="ghost" :disabled="searching" @click="handleClose">Cancel</AppButton>
|
|
69
|
+
<AppButton
|
|
70
|
+
icon="mdi-magnify"
|
|
71
|
+
:disabled="searching || !formData.postalCode"
|
|
72
|
+
@click="handleSearch"
|
|
73
|
+
>
|
|
74
|
+
Search
|
|
75
|
+
</AppButton>
|
|
76
|
+
</div>
|
|
102
77
|
</v-card>
|
|
103
78
|
</v-dialog>
|
|
104
79
|
|
|
105
80
|
<Snackbar v-model="messageSnackbar" :text="message" :color="messageColor" />
|
|
106
81
|
</template>
|
|
107
|
-
That is
|
|
108
82
|
|
|
109
83
|
<script setup lang="ts">
|
|
110
84
|
const showDialog = defineModel({ type: Boolean, default: false });
|
|
@@ -391,3 +365,27 @@ watch(showDialog, (newVal) => {
|
|
|
391
365
|
}
|
|
392
366
|
});
|
|
393
367
|
</script>
|
|
368
|
+
|
|
369
|
+
<style scoped>
|
|
370
|
+
.map-search__head {
|
|
371
|
+
display: flex;
|
|
372
|
+
align-items: center;
|
|
373
|
+
justify-content: space-between;
|
|
374
|
+
padding-right: 12px;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.map-search__body {
|
|
378
|
+
padding: 0 20px;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/* The design's dialog footer - ghost secondary, then one primary, right
|
|
382
|
+
aligned. Deliberately not the shared `.screen-modal__footer`: that class is
|
|
383
|
+
on the batch-D branch (#1150), not on this base, and adding a second copy of
|
|
384
|
+
it to `screens.css` here would collide with that PR. */
|
|
385
|
+
.map-search__footer {
|
|
386
|
+
display: flex;
|
|
387
|
+
justify-content: flex-end;
|
|
388
|
+
gap: 8px;
|
|
389
|
+
padding: 16px 20px 20px;
|
|
390
|
+
}
|
|
391
|
+
</style>
|