@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
|
@@ -1,73 +1,63 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-row no-gutters>
|
|
3
|
-
<v-col cols="12"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
3
|
+
<v-col cols="12">
|
|
4
|
+
<!--
|
|
5
|
+
The screen's name and its one primary action on the same line, which is
|
|
6
|
+
how the design opens every screen. "Configuration" is the app's own nav
|
|
7
|
+
label (Online Forms > Configuration), not invented copy. The page that
|
|
8
|
+
mounts this is a bare mount with no heading of its own.
|
|
9
|
+
-->
|
|
10
|
+
<PageHeader title="Configuration">
|
|
11
|
+
<template #actions>
|
|
12
|
+
<AppButton
|
|
13
|
+
v-if="canCreate && canCreateOnlineFormConfiguration"
|
|
14
|
+
@click="setOnlineForm()"
|
|
15
|
+
>
|
|
16
|
+
Add Online Form
|
|
17
|
+
</AppButton>
|
|
18
|
+
</template>
|
|
19
|
+
</PageHeader>
|
|
16
20
|
</v-col>
|
|
17
21
|
<v-col cols="12">
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
fab
|
|
29
|
-
icon
|
|
30
|
-
density="comfortable"
|
|
22
|
+
<AppCard class="table-card">
|
|
23
|
+
<CardToolbar :count="pageRange">
|
|
24
|
+
<template #left>
|
|
25
|
+
<!-- The design's 32px icon button, the same one every other
|
|
26
|
+
converted table toolbar uses, instead of Vuetify's tinted
|
|
27
|
+
fab. -->
|
|
28
|
+
<AppButton
|
|
29
|
+
variant="icon"
|
|
30
|
+
icon="mdi-refresh"
|
|
31
|
+
aria-label="Refresh"
|
|
31
32
|
@click="getOnlineFormConfigurations"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
density="comfortable"
|
|
39
|
-
:color="sortAlpha ? 'primary' : undefined"
|
|
33
|
+
/>
|
|
34
|
+
<AppButton
|
|
35
|
+
variant="icon"
|
|
36
|
+
icon="mdi-sort-alphabetical-ascending"
|
|
37
|
+
class="online-forms-config__sort"
|
|
38
|
+
:class="{ 'online-forms-config__sort--on': sortAlpha }"
|
|
40
39
|
:title="sortAlpha ? 'Sorted A–Z' : 'Sort A–Z'"
|
|
41
40
|
@click="sortAlpha = !sortAlpha"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
</v-btn>
|
|
45
|
-
<v-text-field
|
|
41
|
+
/>
|
|
42
|
+
<AppField
|
|
46
43
|
v-model="search"
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
search
|
|
45
|
+
compact
|
|
49
46
|
placeholder="Search..."
|
|
50
|
-
|
|
51
|
-
clearable
|
|
52
|
-
hide-details
|
|
53
|
-
style="width: 220px; margin-left: 12px;"
|
|
47
|
+
klass="online-forms-config__search"
|
|
54
48
|
/>
|
|
55
49
|
</template>
|
|
56
50
|
|
|
57
|
-
<template #
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
v-model="page"
|
|
64
|
-
:length="pages"
|
|
65
|
-
@update:value="getOnlineFormConfigurations"
|
|
66
|
-
/>
|
|
67
|
-
</v-row>
|
|
51
|
+
<template #right>
|
|
52
|
+
<local-pagination
|
|
53
|
+
v-model="page"
|
|
54
|
+
:length="pages"
|
|
55
|
+
@update:value="getOnlineFormConfigurations"
|
|
56
|
+
/>
|
|
68
57
|
</template>
|
|
69
|
-
</
|
|
58
|
+
</CardToolbar>
|
|
70
59
|
<v-data-table
|
|
60
|
+
:loading="loading"
|
|
71
61
|
:headers="headers"
|
|
72
62
|
:items="sortedItems"
|
|
73
63
|
item-value="_id"
|
|
@@ -84,11 +74,11 @@
|
|
|
84
74
|
{{ item.status ? item.status.charAt(0).toUpperCase() + item.status.slice(1) : "N/A" }}
|
|
85
75
|
</template></v-data-table
|
|
86
76
|
>
|
|
87
|
-
</
|
|
77
|
+
</AppCard></v-col
|
|
88
78
|
>
|
|
89
79
|
|
|
90
80
|
<!-- Create Dialog -->
|
|
91
|
-
<v-dialog v-model="createDialog" width="
|
|
81
|
+
<v-dialog v-model="createDialog" width="720" persistent>
|
|
92
82
|
<OnlineFormConfigurationForm
|
|
93
83
|
mode="add"
|
|
94
84
|
@cancel="createDialog = false"
|
|
@@ -97,7 +87,7 @@
|
|
|
97
87
|
</v-dialog>
|
|
98
88
|
|
|
99
89
|
<!-- Edit Dialog -->
|
|
100
|
-
<v-dialog v-model="editDialog" width="
|
|
90
|
+
<v-dialog v-model="editDialog" width="720" persistent>
|
|
101
91
|
<OnlineFormConfigurationForm
|
|
102
92
|
mode="edit"
|
|
103
93
|
@cancel="editDialog = false"
|
|
@@ -113,16 +103,20 @@
|
|
|
113
103
|
:definition="selectedFormDefinition"
|
|
114
104
|
:site-id="siteId"
|
|
115
105
|
:org-id="orgId"
|
|
106
|
+
:payment-amount="selectedPaymentAmount"
|
|
116
107
|
readonly
|
|
117
108
|
@cancel="previewDialog = false"
|
|
118
109
|
>
|
|
119
110
|
<template #title-actions>
|
|
111
|
+
<!-- `color="white"` was correct only while the fill's title bar was a
|
|
112
|
+
hardcoded dark slab. The bar now paints from `--card`, so the
|
|
113
|
+
pencil takes the card's own ink; `error` is a theme colour and
|
|
114
|
+
follows both themes. -->
|
|
120
115
|
<v-btn
|
|
121
116
|
v-if="canUpdate && canUpdateOnlineFormConfiguration"
|
|
122
117
|
icon
|
|
123
118
|
size="small"
|
|
124
119
|
variant="text"
|
|
125
|
-
color="white"
|
|
126
120
|
@click="openEditDialog()"
|
|
127
121
|
>
|
|
128
122
|
<v-icon>mdi-pencil</v-icon>
|
|
@@ -141,34 +135,38 @@
|
|
|
141
135
|
</OnlineFormFill>
|
|
142
136
|
|
|
143
137
|
<!-- Fallback: no block definition found for this form type -->
|
|
144
|
-
<v-card v-else width="100%">
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
</
|
|
151
|
-
<
|
|
152
|
-
<v-btn
|
|
138
|
+
<v-card v-else class="screen-modal" width="100%">
|
|
139
|
+
<!-- The design's empty block, the same one every other "nothing to
|
|
140
|
+
show here" surface in the layer draws. -->
|
|
141
|
+
<div class="screen-empty">
|
|
142
|
+
<v-icon size="48">mdi-file-question-outline</v-icon>
|
|
143
|
+
<div>No preview available for "{{ selectedFormType }}".</div>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="screen-modal__footer">
|
|
146
|
+
<v-btn variant="outlined" class="screen-btn-ghost" @click="previewDialog = false">
|
|
153
147
|
Close
|
|
154
148
|
</v-btn>
|
|
155
|
-
</
|
|
149
|
+
</div>
|
|
156
150
|
</v-card>
|
|
157
151
|
</v-dialog>
|
|
158
152
|
|
|
159
153
|
<!-- Delete Dialog -->
|
|
154
|
+
<!-- 520px is the handoff's `--modal-w`. The two `v-toolbar`s this drew for
|
|
155
|
+
its title row and its footer were Vuetify `surface` slabs - a visible
|
|
156
|
+
grey bar on the dark card; a `v-card-title` and the shared
|
|
157
|
+
`.screen-modal__footer` are the same rows on the card's own surface.
|
|
158
|
+
The confirming button was a hardcoded `color="black"` fill, the same
|
|
159
|
+
black on both themes. -->
|
|
160
160
|
<v-dialog
|
|
161
161
|
v-model="confirmDialog"
|
|
162
162
|
:loading="deleteLoading"
|
|
163
|
-
width="
|
|
163
|
+
width="520"
|
|
164
164
|
persistent
|
|
165
165
|
>
|
|
166
|
-
<v-card width="100%">
|
|
167
|
-
<v-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
<v-card-text>
|
|
171
|
-
<p class="text-subtitle-2 text-center">
|
|
166
|
+
<v-card class="screen-modal" width="100%">
|
|
167
|
+
<v-card-title>Delete Online Form</v-card-title>
|
|
168
|
+
<v-card-text class="screen-modal__body">
|
|
169
|
+
<p class="text-center">
|
|
172
170
|
Are you sure you want to delete this online form? This action cannot
|
|
173
171
|
be undone.
|
|
174
172
|
</p>
|
|
@@ -179,38 +177,25 @@
|
|
|
179
177
|
</span>
|
|
180
178
|
</v-row>
|
|
181
179
|
</v-card-text>
|
|
182
|
-
<
|
|
183
|
-
<v-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
size="48"
|
|
202
|
-
color="black"
|
|
203
|
-
variant="flat"
|
|
204
|
-
class="text-none"
|
|
205
|
-
:loading="deleteLoading"
|
|
206
|
-
:disabled="deleteLoading"
|
|
207
|
-
@click="handleDeleteOnlineFormConfiguration()"
|
|
208
|
-
>
|
|
209
|
-
Delete Online Form
|
|
210
|
-
</v-btn>
|
|
211
|
-
</v-col>
|
|
212
|
-
</v-row>
|
|
213
|
-
</v-toolbar>
|
|
180
|
+
<div class="screen-modal__footer">
|
|
181
|
+
<v-btn
|
|
182
|
+
variant="outlined"
|
|
183
|
+
class="screen-btn-ghost"
|
|
184
|
+
:disabled="deleteLoading"
|
|
185
|
+
@click="confirmDialog = false"
|
|
186
|
+
>
|
|
187
|
+
Close
|
|
188
|
+
</v-btn>
|
|
189
|
+
<v-btn
|
|
190
|
+
variant="flat"
|
|
191
|
+
class="screen-btn-primary"
|
|
192
|
+
:loading="deleteLoading"
|
|
193
|
+
:disabled="deleteLoading"
|
|
194
|
+
@click="handleDeleteOnlineFormConfiguration()"
|
|
195
|
+
>
|
|
196
|
+
Delete Online Form
|
|
197
|
+
</v-btn>
|
|
198
|
+
</div>
|
|
214
199
|
</v-card>
|
|
215
200
|
</v-dialog>
|
|
216
201
|
|
|
@@ -336,6 +321,9 @@ const selectedFormDefinition = ref<any>(null);
|
|
|
336
321
|
const deleteLoading = ref(false);
|
|
337
322
|
const confirmDialog = ref(false);
|
|
338
323
|
const selectedOnlineFormId = ref<string | null>(null);
|
|
324
|
+
const selectedPaymentAmount = computed(() =>
|
|
325
|
+
Number(selectedOnlineForm.value?.fields?.paymentAmount ?? 0)
|
|
326
|
+
);
|
|
339
327
|
|
|
340
328
|
function parseFieldsToInputs(fields: Record<string, string>): any[] {
|
|
341
329
|
return Object.keys(fields)
|
|
@@ -431,3 +419,19 @@ function successUpdate() {
|
|
|
431
419
|
}
|
|
432
420
|
|
|
433
421
|
</script>
|
|
422
|
+
|
|
423
|
+
<style scoped>
|
|
424
|
+
/* Same 240px cap the other in-toolbar search fields use, so the field does not
|
|
425
|
+
eat the toolbar's whole left side. */
|
|
426
|
+
.online-forms-config__search {
|
|
427
|
+
max-width: 240px;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/* The sort toggle is the only control on this toolbar with an on/off state.
|
|
431
|
+
`--accent-strong` is the design's own accent; the icon button has no
|
|
432
|
+
"selected" variant, so the state is one declaration rather than a variant
|
|
433
|
+
nothing else would use. */
|
|
434
|
+
.online-forms-config__sort--on {
|
|
435
|
+
color: var(--accent-strong);
|
|
436
|
+
}
|
|
437
|
+
</style>
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
<template>
|
|
2
|
+
<!-- 760px is kept: the handoff draws exactly one modal and it is the 520px
|
|
3
|
+
Create Role form, so a multi-section detail dialog is a case it is
|
|
4
|
+
silent on, and narrowing this one would wrap fifteen label/value rows
|
|
5
|
+
rather than follow anything. What changes is the chrome. -->
|
|
2
6
|
<v-dialog v-model="model" max-width="760" scrollable>
|
|
3
|
-
<v-card
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
</v-
|
|
7
|
+
<v-card class="screen-modal">
|
|
8
|
+
<!-- Was a `v-toolbar color="grey-lighten-4"` - a literal light grey that
|
|
9
|
+
stays light grey on the dark theme, i.e. a white bar across the top
|
|
10
|
+
of a dark card. A `v-card-title` is the same row on the card's own
|
|
11
|
+
surface. -->
|
|
12
|
+
<v-card-title>View Organization Information</v-card-title>
|
|
9
13
|
|
|
10
|
-
<v-card-text class="py-4">
|
|
14
|
+
<v-card-text class="screen-modal__body py-4">
|
|
11
15
|
<template v-for="section in sections" :key="section.title">
|
|
12
|
-
<div class="
|
|
16
|
+
<div class="screen-card-title mb-2">
|
|
13
17
|
{{ section.title }}
|
|
14
18
|
</div>
|
|
15
19
|
<div
|
|
16
20
|
v-for="row in section.rows"
|
|
17
21
|
:key="row.label"
|
|
18
|
-
class="d-flex justify-space-between py-1"
|
|
22
|
+
class="d-flex justify-space-between py-1 org-view__row"
|
|
19
23
|
>
|
|
20
|
-
<span class="
|
|
21
|
-
<span class="text-
|
|
24
|
+
<span class="screen-hint">{{ row.label }}</span>
|
|
25
|
+
<span class="text-right org-view__value">
|
|
22
26
|
{{ row.value || "--" }}
|
|
23
27
|
</span>
|
|
24
28
|
</div>
|
|
@@ -26,13 +30,13 @@
|
|
|
26
30
|
</template>
|
|
27
31
|
</v-card-text>
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
<
|
|
32
|
-
<v-btn variant="
|
|
33
|
+
<!-- The design's bordered footer strip. `v-divider` plus a padded
|
|
34
|
+
actions row was the same thing drawn by hand. -->
|
|
35
|
+
<div class="screen-modal__footer">
|
|
36
|
+
<v-btn variant="outlined" class="screen-btn-ghost" @click="model = false">
|
|
33
37
|
Close
|
|
34
38
|
</v-btn>
|
|
35
|
-
</
|
|
39
|
+
</div>
|
|
36
40
|
</v-card>
|
|
37
41
|
</v-dialog>
|
|
38
42
|
</template>
|
|
@@ -116,3 +120,17 @@ const sections = computed(() => {
|
|
|
116
120
|
];
|
|
117
121
|
});
|
|
118
122
|
</script>
|
|
123
|
+
|
|
124
|
+
<style scoped>
|
|
125
|
+
/* The handoff names no type for a label/value detail row, so both take the
|
|
126
|
+
established cell type: the label on `--muted` (it was `text-medium-emphasis`,
|
|
127
|
+
Vuetify's own 60%-alpha ink) and the value on the cell weight. */
|
|
128
|
+
.org-view__row {
|
|
129
|
+
font-size: var(--fs-cell);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.org-view__value {
|
|
133
|
+
font-weight: var(--fw-cell);
|
|
134
|
+
color: var(--text);
|
|
135
|
+
}
|
|
136
|
+
</style>
|
|
@@ -35,8 +35,7 @@
|
|
|
35
35
|
/>
|
|
36
36
|
</span>
|
|
37
37
|
</v-row>
|
|
38
|
-
<
|
|
39
|
-
<v-card-text>
|
|
38
|
+
<AppCard class="mt-2 pa-4">
|
|
40
39
|
<template
|
|
41
40
|
v-for="(slot, index) in overnightParkingSlotsArray"
|
|
42
41
|
:key="slot.day"
|
|
@@ -44,9 +43,12 @@
|
|
|
44
43
|
<v-row no-gutters class="mb-4">
|
|
45
44
|
<v-col
|
|
46
45
|
cols="12"
|
|
47
|
-
class="text-capitalize mb-2
|
|
46
|
+
class="text-capitalize mb-2 d-flex align-center justify-space-between"
|
|
48
47
|
>
|
|
49
|
-
<span class="
|
|
48
|
+
<span class="screen-card-title">{{ slot.day }}</span>
|
|
49
|
+
<!-- `black-lighten-1` is a literal black: on the dark theme
|
|
50
|
+
the off state was a black tick on a #1c1e24 card. Both
|
|
51
|
+
states take a token now. -->
|
|
50
52
|
<v-icon
|
|
51
53
|
:icon="
|
|
52
54
|
slot?.isEnabled
|
|
@@ -54,10 +56,10 @@
|
|
|
54
56
|
: 'mdi-check-circle-outline'
|
|
55
57
|
"
|
|
56
58
|
size="20"
|
|
57
|
-
:class="
|
|
58
|
-
|
|
59
|
-
slot.isEnabled ? '
|
|
60
|
-
"
|
|
59
|
+
:class="[
|
|
60
|
+
{ 'cursor-pointer': !viewMode },
|
|
61
|
+
slot.isEnabled ? 'day-tick--on' : 'day-tick--off',
|
|
62
|
+
]"
|
|
61
63
|
@click="!viewMode && toggleEnabled(slot.day)"
|
|
62
64
|
/>
|
|
63
65
|
</v-col>
|
|
@@ -91,7 +93,7 @@
|
|
|
91
93
|
|
|
92
94
|
<v-col v-if="!viewMode" cols="12" class="mt-1">
|
|
93
95
|
<div
|
|
94
|
-
class="d-flex align-center ga-1 cursor-pointer
|
|
96
|
+
class="d-flex align-center ga-1 cursor-pointer screen-hint apply-link"
|
|
95
97
|
@click="applyToOtherDays(slot.day)"
|
|
96
98
|
>
|
|
97
99
|
<v-icon icon="mdi-content-copy" size="14" />
|
|
@@ -107,10 +109,10 @@
|
|
|
107
109
|
</template>
|
|
108
110
|
|
|
109
111
|
<v-col cols="12" align="end">
|
|
112
|
+
<!-- Stays a `v-btn`: `:loading` is the only in-flight signal on
|
|
113
|
+
this form and AppButton has none. Tokenised instead. -->
|
|
110
114
|
<v-btn
|
|
111
|
-
|
|
112
|
-
class="text-none mt-2"
|
|
113
|
-
size="large"
|
|
115
|
+
class="screen-btn-primary mt-2"
|
|
114
116
|
:loading="loading.updating"
|
|
115
117
|
variant="flat"
|
|
116
118
|
text="Save"
|
|
@@ -118,8 +120,7 @@
|
|
|
118
120
|
@click="handleSave('save')"
|
|
119
121
|
/>
|
|
120
122
|
</v-col>
|
|
121
|
-
|
|
122
|
-
</v-card>
|
|
123
|
+
</AppCard>
|
|
123
124
|
</v-col>
|
|
124
125
|
</v-row>
|
|
125
126
|
</v-form>
|
|
@@ -132,12 +133,10 @@
|
|
|
132
133
|
/>
|
|
133
134
|
|
|
134
135
|
<v-dialog v-model="applyDialog.open" max-width="360" persistent>
|
|
135
|
-
<v-card>
|
|
136
|
-
<v-card-title class="
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
<v-card-text class="px-4 pb-2">
|
|
140
|
-
<p class="text-caption text-medium-emphasis mb-3">
|
|
136
|
+
<v-card class="screen-modal">
|
|
137
|
+
<v-card-title class="pt-4 px-4">Apply to days</v-card-title>
|
|
138
|
+
<v-card-text class="screen-modal__body px-4 pb-2">
|
|
139
|
+
<p class="screen-hint apply-link mb-3">
|
|
141
140
|
Select the days to apply
|
|
142
141
|
<span class="font-weight-bold text-capitalize">{{
|
|
143
142
|
applyDialog.sourceDay
|
|
@@ -154,21 +153,45 @@
|
|
|
154
153
|
class="text-capitalize"
|
|
155
154
|
/>
|
|
156
155
|
</v-card-text>
|
|
157
|
-
|
|
156
|
+
<!-- `ga-2`: v-card-actions only spaces `.v-btn` children, and these are
|
|
157
|
+
the design's own buttons - without it Cancel and Apply touch. -->
|
|
158
|
+
<v-card-actions class="px-4 pb-4 ga-2">
|
|
158
159
|
<v-spacer />
|
|
159
|
-
<
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
160
|
+
<AppButton variant="ghost" @click="applyDialog.open = false">
|
|
161
|
+
Cancel
|
|
162
|
+
</AppButton>
|
|
163
|
+
<AppButton
|
|
163
164
|
:disabled="!applyDialog.targetDays.some((d) => d.selected)"
|
|
164
165
|
@click="confirmApply"
|
|
165
|
-
>Apply</v-btn
|
|
166
166
|
>
|
|
167
|
+
Apply
|
|
168
|
+
</AppButton>
|
|
167
169
|
</v-card-actions>
|
|
168
170
|
</v-card>
|
|
169
171
|
</v-dialog>
|
|
170
172
|
</template>
|
|
171
173
|
|
|
174
|
+
<style scoped>
|
|
175
|
+
/* The prototype names no colour for a per-day enable tick, so it takes the
|
|
176
|
+
design's own success / muted semantics rather than two literal Vuetify
|
|
177
|
+
greys - the off state was `black-lighten-1`, which stayed black on the dark
|
|
178
|
+
theme's card. */
|
|
179
|
+
.day-tick--on {
|
|
180
|
+
/* `--ok`, not `--success`: the token is named for the design's tone, and an
|
|
181
|
+
undefined custom property makes the whole declaration invalid, so the tick
|
|
182
|
+
silently inherited `--text` instead. */
|
|
183
|
+
color: var(--ok);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.day-tick--off {
|
|
187
|
+
color: var(--muted);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.apply-link {
|
|
191
|
+
font-size: var(--fs-breadcrumb);
|
|
192
|
+
}
|
|
193
|
+
</style>
|
|
194
|
+
|
|
172
195
|
<script setup lang="ts">
|
|
173
196
|
const props = defineProps({
|
|
174
197
|
viewMode: {
|