@7365admin1/layer-common 3.2.7 → 3.2.8-staging.201
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 +251 -78
- 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
|
@@ -9,16 +9,16 @@
|
|
|
9
9
|
|
|
10
10
|
<!-- Assign to Person Dialog -->
|
|
11
11
|
<v-dialog :model-value="showAssignForm" width="420" persistent>
|
|
12
|
-
<v-card width="100%">
|
|
13
|
-
<v-toolbar density="compact"
|
|
12
|
+
<v-card width="100%" class="screen-modal">
|
|
13
|
+
<v-toolbar density="compact" class="screen-dialog-bar">
|
|
14
14
|
<v-row no-gutters class="fill-height px-4" align="center">
|
|
15
15
|
<span class="font-weight-bold">Assign Card to Person</span>
|
|
16
16
|
</v-row>
|
|
17
17
|
</v-toolbar>
|
|
18
18
|
|
|
19
19
|
<v-card-text class="pa-4">
|
|
20
|
-
<div class="text-caption text-
|
|
21
|
-
Card: <strong class="text-body-2
|
|
20
|
+
<div class="text-caption text-fontgray mb-4">
|
|
21
|
+
Card: <strong class="text-body-2">{{ selectedCardInUnit?.cardNo }}</strong>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
24
|
<!-- Person Type Filter -->
|
|
@@ -38,9 +38,7 @@
|
|
|
38
38
|
</v-btn-toggle> -->
|
|
39
39
|
|
|
40
40
|
<!-- Person Selector -->
|
|
41
|
-
<
|
|
42
|
-
Person <span class="text-error">*</span>
|
|
43
|
-
</div>
|
|
41
|
+
<InputLabel title="Person" required class="mb-1" />
|
|
44
42
|
<v-select
|
|
45
43
|
v-model="assignPerson"
|
|
46
44
|
:items="filteredPeopleItems"
|
|
@@ -59,7 +57,7 @@
|
|
|
59
57
|
</template>
|
|
60
58
|
<template #selection="{ item }">
|
|
61
59
|
<span>{{ item.raw.name }}</span>
|
|
62
|
-
<v-chip size="x-small" class="ml-2"
|
|
60
|
+
<v-chip size="x-small" class="ml-2" variant="tonal">
|
|
63
61
|
{{ personTypeLabel(item.raw) }}
|
|
64
62
|
</v-chip>
|
|
65
63
|
</template>
|
|
@@ -67,41 +65,30 @@
|
|
|
67
65
|
<p v-if="assignError" class="text-error text-caption mt-2">{{ assignError }}</p>
|
|
68
66
|
</v-card-text>
|
|
69
67
|
|
|
70
|
-
<v-
|
|
71
|
-
<v-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class="text-none"
|
|
89
|
-
height="48"
|
|
90
|
-
:disabled="!assignPerson || assignLoading"
|
|
91
|
-
:loading="assignLoading"
|
|
92
|
-
@click="confirmAssign"
|
|
93
|
-
>
|
|
94
|
-
Assign
|
|
95
|
-
</v-btn>
|
|
96
|
-
</v-col>
|
|
97
|
-
</v-row>
|
|
98
|
-
</v-toolbar>
|
|
68
|
+
<v-card-actions class="screen-modal__footer">
|
|
69
|
+
<v-btn
|
|
70
|
+
variant="flat"
|
|
71
|
+
class="text-none screen-btn-ghost"
|
|
72
|
+
@click="cancelAssign"
|
|
73
|
+
>
|
|
74
|
+
Cancel
|
|
75
|
+
</v-btn>
|
|
76
|
+
<v-btn
|
|
77
|
+
variant="flat"
|
|
78
|
+
class="text-none screen-btn-primary"
|
|
79
|
+
:disabled="!assignPerson || assignLoading"
|
|
80
|
+
:loading="assignLoading"
|
|
81
|
+
@click="confirmAssign"
|
|
82
|
+
>
|
|
83
|
+
Assign
|
|
84
|
+
</v-btn>
|
|
85
|
+
</v-card-actions>
|
|
99
86
|
</v-card>
|
|
100
87
|
</v-dialog>
|
|
101
88
|
|
|
102
89
|
<v-dialog :model-value="modelValue" width="450" persistent>
|
|
103
|
-
<v-card width="100%">
|
|
104
|
-
<v-card-text
|
|
90
|
+
<v-card width="100%" class="screen-modal">
|
|
91
|
+
<v-card-text class="screen-modal__body pb-0">
|
|
105
92
|
<v-row no-gutters class="mb-4">
|
|
106
93
|
<v-col cols="12">
|
|
107
94
|
<strong>Building:</strong> {{ unit?.block?.name ?? "N/A" }}
|
|
@@ -130,7 +117,7 @@
|
|
|
130
117
|
{{ card.cardNo }}
|
|
131
118
|
</v-chip>
|
|
132
119
|
</div>
|
|
133
|
-
<span v-else class="text-caption text-
|
|
120
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
134
121
|
</v-col>
|
|
135
122
|
|
|
136
123
|
<!-- Damage Physical -->
|
|
@@ -142,7 +129,7 @@
|
|
|
142
129
|
:key="card._id"
|
|
143
130
|
size="small"
|
|
144
131
|
class="mr-1 mb-1"
|
|
145
|
-
color="
|
|
132
|
+
color="warning"
|
|
146
133
|
:variant="selectedCardInUnit?._id === card._id ? 'flat' : 'tonal'"
|
|
147
134
|
style="cursor: pointer"
|
|
148
135
|
@click="toggleCard(card)"
|
|
@@ -150,7 +137,7 @@
|
|
|
150
137
|
{{ card.cardNo }}
|
|
151
138
|
</v-chip>
|
|
152
139
|
</div>
|
|
153
|
-
<span v-else class="text-caption text-
|
|
140
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
154
141
|
</v-col>
|
|
155
142
|
|
|
156
143
|
<!-- Available Non-Physical -->
|
|
@@ -170,7 +157,7 @@
|
|
|
170
157
|
{{ card.cardNo }}
|
|
171
158
|
</v-chip>
|
|
172
159
|
</div>
|
|
173
|
-
<span v-else class="text-caption text-
|
|
160
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
174
161
|
</v-col>
|
|
175
162
|
|
|
176
163
|
<!-- Assigned Physical -->
|
|
@@ -190,7 +177,7 @@
|
|
|
190
177
|
{{ card.cardNo }}
|
|
191
178
|
</v-chip>
|
|
192
179
|
</div>
|
|
193
|
-
<span v-else class="text-caption text-
|
|
180
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
194
181
|
</v-col>
|
|
195
182
|
|
|
196
183
|
<!-- Assigned Non-Physical -->
|
|
@@ -210,7 +197,7 @@
|
|
|
210
197
|
{{ card.cardNo }}
|
|
211
198
|
</v-chip>
|
|
212
199
|
</div>
|
|
213
|
-
<span v-else class="text-caption text-
|
|
200
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
214
201
|
</v-col>
|
|
215
202
|
|
|
216
203
|
<!-- Replaced Physical -->
|
|
@@ -222,7 +209,7 @@
|
|
|
222
209
|
:key="card._id"
|
|
223
210
|
size="small"
|
|
224
211
|
class="mr-1 mb-1"
|
|
225
|
-
|
|
212
|
+
color="warning"
|
|
226
213
|
:variant="selectedCardInUnit?._id === card._id ? 'flat' : 'tonal'"
|
|
227
214
|
style="cursor: pointer"
|
|
228
215
|
@click="toggleCard(card)"
|
|
@@ -230,7 +217,7 @@
|
|
|
230
217
|
{{ card.cardNo }}
|
|
231
218
|
</v-chip>
|
|
232
219
|
</div>
|
|
233
|
-
<span v-else class="text-caption text-
|
|
220
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
234
221
|
</v-col>
|
|
235
222
|
|
|
236
223
|
<!-- Replaced Non-Physical -->
|
|
@@ -242,7 +229,7 @@
|
|
|
242
229
|
:key="card._id"
|
|
243
230
|
size="small"
|
|
244
231
|
class="mr-1 mb-1"
|
|
245
|
-
|
|
232
|
+
color="warning"
|
|
246
233
|
:variant="selectedCardInUnit?._id === card._id ? 'flat' : 'tonal'"
|
|
247
234
|
style="cursor: pointer"
|
|
248
235
|
@click="toggleCard(card)"
|
|
@@ -250,7 +237,7 @@
|
|
|
250
237
|
{{ card.cardNo }}
|
|
251
238
|
</v-chip>
|
|
252
239
|
</div>
|
|
253
|
-
<span v-else class="text-caption text-
|
|
240
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
254
241
|
</v-col>
|
|
255
242
|
|
|
256
243
|
<!-- Deleted Physical -->
|
|
@@ -262,7 +249,7 @@
|
|
|
262
249
|
:key="card._id"
|
|
263
250
|
size="small"
|
|
264
251
|
class="mr-1 mb-1"
|
|
265
|
-
|
|
252
|
+
color="error"
|
|
266
253
|
:variant="selectedCardInUnit?._id === card._id ? 'flat' : 'tonal'"
|
|
267
254
|
style="cursor: pointer"
|
|
268
255
|
@click="toggleCard(card)"
|
|
@@ -270,7 +257,7 @@
|
|
|
270
257
|
{{ card.cardNo }}
|
|
271
258
|
</v-chip>
|
|
272
259
|
</div>
|
|
273
|
-
<span v-else class="text-caption text-
|
|
260
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
274
261
|
</v-col>
|
|
275
262
|
|
|
276
263
|
<!-- Deleted Non-Physical -->
|
|
@@ -282,7 +269,7 @@
|
|
|
282
269
|
:key="card._id"
|
|
283
270
|
size="small"
|
|
284
271
|
class="mr-1 mb-1"
|
|
285
|
-
|
|
272
|
+
color="error"
|
|
286
273
|
:variant="selectedCardInUnit?._id === card._id ? 'flat' : 'tonal'"
|
|
287
274
|
style="cursor: pointer"
|
|
288
275
|
@click="toggleCard(card)"
|
|
@@ -290,40 +277,29 @@
|
|
|
290
277
|
{{ card.cardNo }}
|
|
291
278
|
</v-chip>
|
|
292
279
|
</div>
|
|
293
|
-
<span v-else class="text-caption text-
|
|
280
|
+
<span v-else class="text-caption text-fontgray ml-1">None</span>
|
|
294
281
|
</v-col>
|
|
295
282
|
</v-row>
|
|
296
283
|
</v-card-text>
|
|
297
284
|
|
|
298
|
-
<v-
|
|
299
|
-
<v-
|
|
300
|
-
|
|
285
|
+
<v-card-actions class="screen-modal__footer">
|
|
286
|
+
<v-btn
|
|
287
|
+
variant="flat"
|
|
288
|
+
class="text-none screen-btn-ghost"
|
|
289
|
+
@click="emit('update:modelValue', false)"
|
|
290
|
+
>
|
|
291
|
+
Close
|
|
292
|
+
</v-btn>
|
|
293
|
+
<v-menu>
|
|
294
|
+
<template #activator="{ props }">
|
|
301
295
|
<v-btn
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
size="large"
|
|
306
|
-
height="48"
|
|
307
|
-
@click="emit('update:modelValue', false)"
|
|
296
|
+
variant="flat"
|
|
297
|
+
class="text-none screen-btn-primary"
|
|
298
|
+
v-bind="props"
|
|
308
299
|
>
|
|
309
|
-
|
|
300
|
+
More actions
|
|
310
301
|
</v-btn>
|
|
311
|
-
</
|
|
312
|
-
<v-col cols="6" class="pa-0">
|
|
313
|
-
<v-menu>
|
|
314
|
-
<template #activator="{ props }">
|
|
315
|
-
<v-btn
|
|
316
|
-
block
|
|
317
|
-
variant="flat"
|
|
318
|
-
color="black"
|
|
319
|
-
class="text-none"
|
|
320
|
-
height="48"
|
|
321
|
-
v-bind="props"
|
|
322
|
-
tile
|
|
323
|
-
>
|
|
324
|
-
More actions
|
|
325
|
-
</v-btn>
|
|
326
|
-
</template>
|
|
302
|
+
</template>
|
|
327
303
|
<v-list class="pa-0">
|
|
328
304
|
<v-list-item
|
|
329
305
|
v-if="canAssignToPerson && isSelectedCardAvailable"
|
|
@@ -349,7 +325,7 @@
|
|
|
349
325
|
</v-list-item>
|
|
350
326
|
<v-list-item
|
|
351
327
|
@click="emit('delete')"
|
|
352
|
-
class="text-
|
|
328
|
+
class="text-error"
|
|
353
329
|
:disabled="!isSelectedCardDeletable"
|
|
354
330
|
v-if="canDeleteAccessCard"
|
|
355
331
|
>
|
|
@@ -358,10 +334,8 @@
|
|
|
358
334
|
</v-list-item-title>
|
|
359
335
|
</v-list-item>
|
|
360
336
|
</v-list>
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
</v-row>
|
|
364
|
-
</v-toolbar>
|
|
337
|
+
</v-menu>
|
|
338
|
+
</v-card-actions>
|
|
365
339
|
</v-card>
|
|
366
340
|
</v-dialog>
|
|
367
341
|
</template>
|
|
@@ -1,84 +1,73 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-row no-gutters>
|
|
3
|
-
<v-col cols="12"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
<v-row no-gutters class="qr-tagging">
|
|
3
|
+
<v-col cols="12">
|
|
4
|
+
<!--
|
|
5
|
+
The design opens the screen with its name and the screen's actions on
|
|
6
|
+
that one row. The three buttons used to be `tonal` pills floating above
|
|
7
|
+
the card with no heading at all - and their labels measured 1.74:1
|
|
8
|
+
light / 2.18:1 dark on that fill. As `AppButton` they read from the
|
|
9
|
+
tokens. Same three clicks, same `disabled` rules; the primary action
|
|
10
|
+
sits rightmost, where the design puts it.
|
|
11
|
+
-->
|
|
12
|
+
<PageHeader title="QR Tagging">
|
|
13
|
+
<template #actions>
|
|
14
|
+
<AppButton
|
|
15
|
+
variant="ghost"
|
|
11
16
|
:disabled="!items.length"
|
|
12
17
|
@click="handlePrintAll"
|
|
13
18
|
>
|
|
14
19
|
Print All
|
|
15
|
-
</
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
rounded="pill"
|
|
19
|
-
variant="tonal"
|
|
20
|
-
size="large"
|
|
21
|
-
:disabled="!qrCodeAccessCards.length"
|
|
22
|
-
@click="generateQrCodes"
|
|
23
|
-
>
|
|
24
|
-
Generate QR Code
|
|
25
|
-
</v-btn>
|
|
26
|
-
<v-btn
|
|
27
|
-
class="text-none"
|
|
28
|
-
rounded="pill"
|
|
29
|
-
variant="tonal"
|
|
30
|
-
size="large"
|
|
20
|
+
</AppButton>
|
|
21
|
+
<AppButton
|
|
22
|
+
variant="ghost"
|
|
31
23
|
:disabled="!qrCodeAccessCardsToPrint.length"
|
|
32
24
|
@click="handlePrintQrCode"
|
|
33
25
|
>
|
|
34
26
|
Print QR Code
|
|
35
|
-
</
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
clearable
|
|
45
|
-
hide-details
|
|
46
|
-
style="max-width: 240px"
|
|
47
|
-
/>
|
|
48
|
-
</v-row>
|
|
49
|
-
</v-row>
|
|
27
|
+
</AppButton>
|
|
28
|
+
<AppButton
|
|
29
|
+
:disabled="!qrCodeAccessCards.length"
|
|
30
|
+
@click="generateQrCodes"
|
|
31
|
+
>
|
|
32
|
+
Generate QR Code
|
|
33
|
+
</AppButton>
|
|
34
|
+
</template>
|
|
35
|
+
</PageHeader>
|
|
50
36
|
</v-col>
|
|
51
37
|
|
|
52
38
|
<v-col cols="12" v-if="canViewAllQrTagging">
|
|
53
|
-
<
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
<
|
|
61
|
-
<template #
|
|
39
|
+
<AppCard class="table-card">
|
|
40
|
+
<!--
|
|
41
|
+
ONE toolbar. The refresh button and the search keep their own
|
|
42
|
+
behaviour; the page range is the toolbar's own count rather than a
|
|
43
|
+
`text-fontgray` caption, and the pager keeps its model and its
|
|
44
|
+
`@update:value`.
|
|
45
|
+
-->
|
|
46
|
+
<CardToolbar :count="pageRange">
|
|
47
|
+
<template #left>
|
|
62
48
|
<v-btn fab icon density="comfortable" @click="fetchItems">
|
|
63
49
|
<v-icon>mdi-refresh</v-icon>
|
|
64
50
|
</v-btn>
|
|
51
|
+
<AppField
|
|
52
|
+
v-model="searchText"
|
|
53
|
+
search
|
|
54
|
+
compact
|
|
55
|
+
placeholder="Search Card..."
|
|
56
|
+
klass="qr-tagging__search"
|
|
57
|
+
/>
|
|
65
58
|
</template>
|
|
66
59
|
|
|
67
|
-
<template #
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
v-model="page"
|
|
74
|
-
:length="pages"
|
|
75
|
-
@update:value="fetchItems"
|
|
76
|
-
/>
|
|
77
|
-
</v-row>
|
|
60
|
+
<template #right>
|
|
61
|
+
<local-pagination
|
|
62
|
+
v-model="page"
|
|
63
|
+
:length="pages"
|
|
64
|
+
@update:value="fetchItems"
|
|
65
|
+
/>
|
|
78
66
|
</template>
|
|
79
|
-
</
|
|
67
|
+
</CardToolbar>
|
|
80
68
|
|
|
81
69
|
<v-data-table
|
|
70
|
+
:loading="loading"
|
|
82
71
|
:headers="tableHeaders"
|
|
83
72
|
:items="items"
|
|
84
73
|
item-value="_id"
|
|
@@ -131,7 +120,7 @@
|
|
|
131
120
|
|
|
132
121
|
<template #item.qrTag="{ item }">
|
|
133
122
|
<v-icon
|
|
134
|
-
:color="item.qrTag ? 'success' : '
|
|
123
|
+
:color="item.qrTag ? 'success' : 'muted'"
|
|
135
124
|
size="22"
|
|
136
125
|
>
|
|
137
126
|
{{ item.qrTag ? "mdi-check-circle" : "mdi-circle-outline" }}
|
|
@@ -149,7 +138,7 @@
|
|
|
149
138
|
/>
|
|
150
139
|
</template>
|
|
151
140
|
</v-data-table>
|
|
152
|
-
</
|
|
141
|
+
</AppCard>
|
|
153
142
|
</v-col>
|
|
154
143
|
|
|
155
144
|
<!-- Hidden QR canvases for generation -->
|
|
@@ -468,3 +457,11 @@ function showMessage(msg: string, color: string) {
|
|
|
468
457
|
messageSnackbar.value = true;
|
|
469
458
|
}
|
|
470
459
|
</script>
|
|
460
|
+
|
|
461
|
+
<style scoped>
|
|
462
|
+
/* The search kept its old 240px ceiling; `.app-field--search` is `flex:1` so
|
|
463
|
+
it would otherwise fill the toolbar row. */
|
|
464
|
+
.qr-tagging__search {
|
|
465
|
+
max-width: 240px;
|
|
466
|
+
}
|
|
467
|
+
</style>
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-card width="100%">
|
|
3
|
-
<v-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
</v-row>
|
|
7
|
-
</v-toolbar>
|
|
8
|
-
<v-card-text style="max-height: 100vh; overflow-y: auto" class="pa-0">
|
|
2
|
+
<v-card width="100%" class="screen-modal">
|
|
3
|
+
<v-card-title>Replace Access Card</v-card-title>
|
|
4
|
+
|
|
5
|
+
<v-card-text class="screen-modal__body pa-0">
|
|
9
6
|
<v-form v-model="validForm" :disabled="loading">
|
|
10
7
|
<v-row no-gutters class="px-6 pt-4 pb-6">
|
|
11
8
|
<!-- Card being replaced -->
|
|
12
9
|
<v-col cols="12" class="px-1 mb-4">
|
|
13
|
-
|
|
10
|
+
<!-- `text-grey` is a fixed Vuetify grey - the SAME grey on the dark
|
|
11
|
+
page, where it is the hardest thing on the card to read.
|
|
12
|
+
`.screen-hint` is the design's `--muted`, which follows the theme. -->
|
|
13
|
+
<div class="text-caption screen-hint mb-1 font-weight-bold">
|
|
14
14
|
Card being replaced
|
|
15
15
|
</div>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
<!-- A card NUMBER, not a status word, so it takes the design's
|
|
17
|
+
dotless tag shape and is given its tone explicitly rather than
|
|
18
|
+
having one guessed from the text. -->
|
|
19
|
+
<StatusChip tone="warn" :dot="false" :label="card.cardNo" />
|
|
19
20
|
</v-col>
|
|
20
21
|
|
|
21
22
|
<!-- Replacement card -->
|
|
@@ -25,8 +26,12 @@
|
|
|
25
26
|
title="Replacement Card"
|
|
26
27
|
required
|
|
27
28
|
/>
|
|
29
|
+
<!-- Both inputs keep their `:rules`: Replace is gated on
|
|
30
|
+
`validForm`. `.filter-field` gives them the design's shape
|
|
31
|
+
without touching the validation. -->
|
|
28
32
|
<v-autocomplete
|
|
29
33
|
v-model="form.replacementCardId"
|
|
34
|
+
class="filter-field"
|
|
30
35
|
density="compact"
|
|
31
36
|
:items="replacementOptions"
|
|
32
37
|
hide-details="auto"
|
|
@@ -48,6 +53,7 @@
|
|
|
48
53
|
/>
|
|
49
54
|
<v-textarea
|
|
50
55
|
v-model="form.remarks"
|
|
56
|
+
class="filter-field"
|
|
51
57
|
density="compact"
|
|
52
58
|
hide-details="auto"
|
|
53
59
|
placeholder="Enter remarks..."
|
|
@@ -61,29 +67,27 @@
|
|
|
61
67
|
</v-form>
|
|
62
68
|
</v-card-text>
|
|
63
69
|
|
|
64
|
-
|
|
70
|
+
<!-- Was a second `v-toolbar` - a grey slab that stayed grey in dark theme,
|
|
71
|
+
with square (`tile`) 48px buttons and a hardcoded `color="black"`
|
|
72
|
+
primary. Same two buttons, same order, on the card's own surface. -->
|
|
73
|
+
<v-card-actions class="screen-modal__footer">
|
|
65
74
|
<v-row no-gutters>
|
|
66
|
-
<v-col cols="6">
|
|
75
|
+
<v-col cols="6" class="pr-2">
|
|
67
76
|
<v-btn
|
|
68
|
-
tile
|
|
69
77
|
block
|
|
70
|
-
variant="
|
|
71
|
-
class="text-none"
|
|
72
|
-
size="48"
|
|
78
|
+
variant="outlined"
|
|
79
|
+
class="text-none screen-btn-ghost"
|
|
73
80
|
@click="cancel"
|
|
74
81
|
:disabled="loading"
|
|
75
82
|
>
|
|
76
83
|
Cancel
|
|
77
84
|
</v-btn>
|
|
78
85
|
</v-col>
|
|
79
|
-
<v-col cols="6">
|
|
86
|
+
<v-col cols="6" class="pl-2">
|
|
80
87
|
<v-btn
|
|
81
|
-
tile
|
|
82
88
|
block
|
|
83
89
|
variant="flat"
|
|
84
|
-
|
|
85
|
-
class="text-none"
|
|
86
|
-
size="48"
|
|
90
|
+
class="text-none screen-btn-primary"
|
|
87
91
|
:disabled="!validForm || loading"
|
|
88
92
|
:loading="loading"
|
|
89
93
|
@click="submit"
|
|
@@ -92,7 +96,7 @@
|
|
|
92
96
|
</v-btn>
|
|
93
97
|
</v-col>
|
|
94
98
|
</v-row>
|
|
95
|
-
</v-
|
|
99
|
+
</v-card-actions>
|
|
96
100
|
</v-card>
|
|
97
101
|
</template>
|
|
98
102
|
<script setup lang="ts">
|