@7365admin1/layer-common 3.2.2-staging.114 → 3.2.2-staging.118
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/screens.css +19 -0
- package/components/BuildingUnitFormEdit.vue +3 -3
- package/components/BulletinBoardView.vue +9 -6
- package/components/BulletinExpirationChip.vue +13 -4
- package/components/CameraMain.vue +35 -47
- package/components/DeliveryCompany.vue +34 -20
- package/components/DocumentManagement.vue +9 -9
- package/components/MemberInformation.vue +23 -16
- package/components/Nfc/NFCPatrolReportMain.vue +47 -33
- package/components/Nfc/NFCPatrolRouteForm.vue +18 -20
- package/components/Nfc/NFCPatrolSettings.vue +14 -4
- package/components/Nfc/NFCTagForm.vue +4 -4
- package/components/Nfc/NFCTagMain.vue +41 -43
- package/components/Nfc/PatrolReport/ReportFilters.vue +0 -3
- package/components/NotificationSettings.vue +66 -54
- package/components/OnlineFormsConfiguration.vue +41 -42
- package/components/OvernightParkingAvailability.vue +49 -26
- package/components/SiteSettings.vue +4 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-card width="100%" max-width="800">
|
|
3
|
-
<v-toolbar
|
|
3
|
+
<v-toolbar class="screen-dialog-bar" elevation="0">
|
|
4
4
|
<v-row no-gutters class="fill-height px-6" align="center">
|
|
5
5
|
<span class="font-weight-bold text-h5">
|
|
6
6
|
{{ title }}
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
<v-row no-gutters>
|
|
16
16
|
<!-- Route Name -->
|
|
17
17
|
<v-col cols="12" class="mb-4">
|
|
18
|
-
<label class="text-caption
|
|
19
|
-
Route Name <span class="text-
|
|
18
|
+
<label class="text-caption screen-hint mb-1 d-block">
|
|
19
|
+
Route Name <span class="text-error">*</span>
|
|
20
20
|
</label>
|
|
21
21
|
<v-text-field
|
|
22
22
|
v-model="form.name"
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
|
|
31
31
|
<!-- Checkpoints, Tolerance, Repeat Every -->
|
|
32
32
|
<v-col cols="12" md="4" class="mb-4 pr-md-2">
|
|
33
|
-
<label class="text-caption
|
|
34
|
-
Checkpoints <span class="text-
|
|
33
|
+
<label class="text-caption screen-hint mb-1 d-block">
|
|
34
|
+
Checkpoints <span class="text-error">*</span>
|
|
35
35
|
</label>
|
|
36
36
|
<v-select
|
|
37
37
|
v-model="form.checkPointNumber"
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
</v-col>
|
|
45
45
|
|
|
46
46
|
<v-col cols="12" md="4" class="mb-4 px-md-1">
|
|
47
|
-
<label class="text-caption
|
|
48
|
-
Tolerance (mins) <span class="text-
|
|
47
|
+
<label class="text-caption screen-hint mb-1 d-block">
|
|
48
|
+
Tolerance (mins) <span class="text-error">*</span>
|
|
49
49
|
</label>
|
|
50
50
|
<v-text-field
|
|
51
51
|
v-model="form.tolerance"
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
</v-col>
|
|
58
58
|
|
|
59
59
|
<v-col cols="12" md="4" class="mb-4 pl-md-2">
|
|
60
|
-
<label class="text-caption
|
|
61
|
-
Days <span class="text-
|
|
60
|
+
<label class="text-caption screen-hint mb-1 d-block">
|
|
61
|
+
Days <span class="text-error">*</span>
|
|
62
62
|
</label>
|
|
63
63
|
<v-select
|
|
64
64
|
v-model="form.days"
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
<v-card variant="outlined" class="pa-4" rounded="lg">
|
|
77
77
|
<div class="d-flex align-center justify-space-between mb-3">
|
|
78
78
|
<span class="text-h6 font-weight-medium">Start Times</span>
|
|
79
|
-
<span class="text-body-2
|
|
79
|
+
<span class="text-body-2 screen-hint">Schedule</span>
|
|
80
80
|
</div>
|
|
81
81
|
|
|
82
82
|
<!-- Start Time Slots -->
|
|
@@ -96,7 +96,6 @@
|
|
|
96
96
|
prepend-inner-icon="mdi-clock-outline"
|
|
97
97
|
hide-details
|
|
98
98
|
type="time"
|
|
99
|
-
bg-color="grey-lighten-4"
|
|
100
99
|
rounded="lg"
|
|
101
100
|
@update:model-value="syncEndTimeAt(index)"
|
|
102
101
|
/>
|
|
@@ -116,7 +115,6 @@
|
|
|
116
115
|
prepend-inner-icon="mdi-clock-outline"
|
|
117
116
|
hide-details
|
|
118
117
|
type="time"
|
|
119
|
-
bg-color="grey-lighten-2"
|
|
120
118
|
rounded="lg"
|
|
121
119
|
readonly
|
|
122
120
|
/>
|
|
@@ -160,19 +158,19 @@
|
|
|
160
158
|
<v-row no-gutters class="mb-2">
|
|
161
159
|
<v-col
|
|
162
160
|
cols="2"
|
|
163
|
-
class="text-caption
|
|
161
|
+
class="text-caption screen-hint font-weight-medium"
|
|
164
162
|
>
|
|
165
163
|
Checkpoints
|
|
166
164
|
</v-col>
|
|
167
165
|
<v-col
|
|
168
166
|
cols="6"
|
|
169
|
-
class="text-caption
|
|
167
|
+
class="text-caption screen-hint font-weight-medium pl-4"
|
|
170
168
|
>
|
|
171
169
|
NFC Tag
|
|
172
170
|
</v-col>
|
|
173
171
|
<v-col
|
|
174
172
|
cols="4"
|
|
175
|
-
class="text-caption
|
|
173
|
+
class="text-caption screen-hint font-weight-medium text-right"
|
|
176
174
|
>
|
|
177
175
|
Travel time
|
|
178
176
|
</v-col>
|
|
@@ -218,15 +216,15 @@
|
|
|
218
216
|
<!-- Summary -->
|
|
219
217
|
<v-col cols="12">
|
|
220
218
|
<v-row no-gutters class="mb-2">
|
|
221
|
-
<v-col cols="6" class="text-body-2
|
|
219
|
+
<v-col cols="6" class="text-body-2 screen-hint">
|
|
222
220
|
Tolerance Balance:
|
|
223
|
-
<span class="font-weight-bold
|
|
221
|
+
<span class="font-weight-bold"
|
|
224
222
|
>{{ toleranceBalance }} min</span
|
|
225
223
|
>
|
|
226
224
|
</v-col>
|
|
227
|
-
<v-col cols="6" class="text-body-2
|
|
225
|
+
<v-col cols="6" class="text-body-2 screen-hint text-right">
|
|
228
226
|
Total Travel Time:
|
|
229
|
-
<span class="font-weight-bold
|
|
227
|
+
<span class="font-weight-bold"
|
|
230
228
|
>{{ totalTravelTime }} min</span
|
|
231
229
|
>
|
|
232
230
|
</v-col>
|
|
@@ -238,7 +236,7 @@
|
|
|
238
236
|
|
|
239
237
|
<v-divider />
|
|
240
238
|
|
|
241
|
-
<v-toolbar class="pa-0" density="compact"
|
|
239
|
+
<v-toolbar class="pa-0 screen-dialog-bar" density="compact" elevation="0">
|
|
242
240
|
<v-row no-gutters>
|
|
243
241
|
<v-col cols="6" class="pa-0">
|
|
244
242
|
<v-btn
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-row no-gutters>
|
|
3
3
|
<v-col cols="12">
|
|
4
|
-
|
|
4
|
+
<!--
|
|
5
|
+
`AppCard` for the outlined card. This mounts inside PM `settings.vue`'s
|
|
6
|
+
"NFC Patrol Settings" expansion panel, which already draws that
|
|
7
|
+
heading - so NO `PageHeader`, or the panel would name itself twice.
|
|
8
|
+
-->
|
|
9
|
+
<AppCard>
|
|
5
10
|
<v-row no-gutters class="pa-6" align="center">
|
|
6
11
|
<v-col cols="12" md="7" class="pr-md-8">
|
|
7
12
|
<div class="text-subtitle-1 font-weight-medium">
|
|
@@ -36,10 +41,15 @@
|
|
|
36
41
|
|
|
37
42
|
<v-row no-gutters class="pa-6 pt-0">
|
|
38
43
|
<v-col cols="12" class="d-flex justify-end">
|
|
44
|
+
<!--
|
|
45
|
+
Stays a `v-btn`: `AppButton` has no `loading`, and dropping the
|
|
46
|
+
spinner would lose the only signal this save is in flight. The
|
|
47
|
+
design's fill comes from `.screen-btn-primary` instead of
|
|
48
|
+
Vuetify's `color="primary"` - same click, same `loading` gate.
|
|
49
|
+
-->
|
|
39
50
|
<v-btn
|
|
40
51
|
text="Save"
|
|
41
|
-
|
|
42
|
-
class="text-none"
|
|
52
|
+
class="screen-btn-primary"
|
|
43
53
|
size="large"
|
|
44
54
|
variant="flat"
|
|
45
55
|
@click="submit"
|
|
@@ -47,7 +57,7 @@
|
|
|
47
57
|
/>
|
|
48
58
|
</v-col>
|
|
49
59
|
</v-row>
|
|
50
|
-
</
|
|
60
|
+
</AppCard>
|
|
51
61
|
</v-col>
|
|
52
62
|
<Snackbar v-model="messageSnackbar" :text="message" :color="messageColor" />
|
|
53
63
|
</v-row>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-card width="100%">
|
|
3
|
-
<v-toolbar>
|
|
3
|
+
<v-toolbar class="screen-dialog-bar">
|
|
4
4
|
<v-row no-gutters class="fill-height px-6" align="center">
|
|
5
5
|
<span class="font-weight-bold text-h5 text-capitalize">
|
|
6
6
|
{{ title }}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<v-row no-gutters>
|
|
17
17
|
<v-col cols="12" class="mb-4">
|
|
18
18
|
<label class="text-subtitle-2 font-weight-medium mb-2">
|
|
19
|
-
Name <span class="text-
|
|
19
|
+
Name <span class="text-error">*</span>
|
|
20
20
|
</label>
|
|
21
21
|
<v-text-field
|
|
22
22
|
v-model="form.name"
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
<v-col cols="12" class="mb-4">
|
|
32
32
|
<label class="text-subtitle-2 font-weight-medium mb-2">
|
|
33
|
-
Tag ID <span class="text-
|
|
33
|
+
Tag ID <span class="text-error">*</span>
|
|
34
34
|
</label>
|
|
35
35
|
<v-text-field
|
|
36
36
|
v-model="form.tagID"
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
</v-form>
|
|
48
48
|
</v-card-text>
|
|
49
49
|
|
|
50
|
-
<v-toolbar class="pa-0" density="compact">
|
|
50
|
+
<v-toolbar class="pa-0 screen-dialog-bar" density="compact">
|
|
51
51
|
<v-row no-gutters>
|
|
52
52
|
<v-col cols="6" class="pa-0">
|
|
53
53
|
<v-btn
|
|
@@ -1,53 +1,51 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-row no-gutters>
|
|
3
3
|
<v-col cols="12">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
<!--
|
|
5
|
+
Two `grey-lighten-4` `v-toolbar`s - one above the table for refresh and
|
|
6
|
+
Add, one below it for the page range and the pager - become the ONE
|
|
7
|
+
`CardToolbar` the design draws. The range is the toolbar's own count
|
|
8
|
+
rather than a `text-font gray` caption; the pager keeps its model and
|
|
9
|
+
its `@update:value` emit, and Add keeps opening the same dialog.
|
|
10
|
+
|
|
11
|
+
This component mounts inside PM `settings.vue`'s "NFC Management"
|
|
12
|
+
expansion panel, which already draws that heading - so NO `PageHeader`
|
|
13
|
+
here, or the panel would read its name twice.
|
|
14
|
+
-->
|
|
15
|
+
<AppCard class="table-card">
|
|
16
|
+
<CardToolbar :count="pageRange">
|
|
17
|
+
<template #left>
|
|
7
18
|
<v-btn fab icon density="comfortable" @click="getNFCTagRefresh()">
|
|
8
19
|
<v-icon>mdi-refresh</v-icon>
|
|
9
20
|
</v-btn>
|
|
10
21
|
</template>
|
|
11
22
|
|
|
12
|
-
<template #
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
>
|
|
19
|
-
Add
|
|
20
|
-
</v-btn>
|
|
23
|
+
<template #right>
|
|
24
|
+
<local-pagination
|
|
25
|
+
v-model="page"
|
|
26
|
+
:length="pages"
|
|
27
|
+
@update:value="$emit('update:value', $event)"
|
|
28
|
+
/>
|
|
29
|
+
<AppButton @click="dialogAdd = true">Add</AppButton>
|
|
21
30
|
</template>
|
|
22
|
-
</
|
|
23
|
-
|
|
24
|
-
<v-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<template #append>
|
|
38
|
-
<v-row no-gutters justify="end" align="center">
|
|
39
|
-
<span class="mr-2 text-caption text-font gray">
|
|
40
|
-
{{ pageRange }}
|
|
41
|
-
</span>
|
|
42
|
-
<local-pagination
|
|
43
|
-
v-model="page"
|
|
44
|
-
:length="pages"
|
|
45
|
-
@update:value="$emit('update:value', $event)"
|
|
46
|
-
/>
|
|
47
|
-
</v-row>
|
|
31
|
+
</CardToolbar>
|
|
32
|
+
|
|
33
|
+
<v-data-table
|
|
34
|
+
:headers="headers"
|
|
35
|
+
:items="items"
|
|
36
|
+
fixed-header
|
|
37
|
+
hide-default-footer
|
|
38
|
+
@click:row="handleRowClick"
|
|
39
|
+
style="max-height: 300px"
|
|
40
|
+
>
|
|
41
|
+
<!-- The status column printed the raw word as plain text. `StatusChip`
|
|
42
|
+
prints the SAME word - it is given the item's own value - and
|
|
43
|
+
only adds the design's tone from the shared map. -->
|
|
44
|
+
<template #item.status="{ item }">
|
|
45
|
+
<StatusChip :status="(item as any).status" />
|
|
48
46
|
</template>
|
|
49
|
-
</v-
|
|
50
|
-
</
|
|
47
|
+
</v-data-table>
|
|
48
|
+
</AppCard>
|
|
51
49
|
</v-col>
|
|
52
50
|
|
|
53
51
|
<!-- Add Dialog -->
|
|
@@ -79,7 +77,7 @@
|
|
|
79
77
|
<!-- Preview Dialog -->
|
|
80
78
|
<v-dialog v-model="dialogPreview" persistent width="540">
|
|
81
79
|
<v-card width="100%">
|
|
82
|
-
<v-toolbar>
|
|
80
|
+
<v-toolbar class="screen-dialog-bar">
|
|
83
81
|
<v-row no-gutters class="fill-height px-6" align="center">
|
|
84
82
|
<span class="font-weight-bold text-h5 text-capitalize">
|
|
85
83
|
NFC Tag Details
|
|
@@ -110,7 +108,7 @@
|
|
|
110
108
|
</v-row>
|
|
111
109
|
</v-card-text>
|
|
112
110
|
|
|
113
|
-
<v-toolbar class="pa-0" density="compact">
|
|
111
|
+
<v-toolbar class="pa-0 screen-dialog-bar" density="compact">
|
|
114
112
|
<v-row no-gutters>
|
|
115
113
|
<v-col cols="6" class="pa-0">
|
|
116
114
|
<v-btn
|
|
@@ -171,7 +169,7 @@
|
|
|
171
169
|
Are you sure you want to delete this NFC Tag?
|
|
172
170
|
</v-card-text>
|
|
173
171
|
|
|
174
|
-
<v-toolbar class="pa-0" density="compact">
|
|
172
|
+
<v-toolbar class="pa-0 screen-dialog-bar" density="compact">
|
|
175
173
|
<v-row no-gutters>
|
|
176
174
|
<v-col cols="6" class="pa-0">
|
|
177
175
|
<v-btn
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
density="comfortable"
|
|
12
12
|
rounded="lg"
|
|
13
13
|
hide-details
|
|
14
|
-
bg-color="white"
|
|
15
14
|
@update:model-value="updateFilter('route', $event)"
|
|
16
15
|
/>
|
|
17
16
|
</v-col>
|
|
@@ -30,7 +29,6 @@
|
|
|
30
29
|
density="comfortable"
|
|
31
30
|
rounded="lg"
|
|
32
31
|
hide-details
|
|
33
|
-
bg-color="white"
|
|
34
32
|
@update:model-value="updateFilter('timeRange', $event)"
|
|
35
33
|
/>
|
|
36
34
|
</v-col>
|
|
@@ -47,7 +45,6 @@
|
|
|
47
45
|
density="comfortable"
|
|
48
46
|
rounded="lg"
|
|
49
47
|
hide-details
|
|
50
|
-
bg-color="white"
|
|
51
48
|
@update:model-value="updateFilter('date', $event)"
|
|
52
49
|
/>
|
|
53
50
|
</v-col>
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
<v-row no-gutters class="pa-8" justify="center">
|
|
3
3
|
<v-col cols="12" md="10">
|
|
4
4
|
<v-row no-gutters>
|
|
5
|
-
<v-col cols="12"
|
|
5
|
+
<v-col cols="12">
|
|
6
|
+
<PageHeader title="Notifications" />
|
|
7
|
+
</v-col>
|
|
6
8
|
|
|
7
|
-
<v-col cols="12" md="8" class="
|
|
9
|
+
<v-col cols="12" md="8" class="screen-hint intro-copy">
|
|
8
10
|
Choose what you want to hear about, and how. These settings are yours
|
|
9
11
|
alone and apply everywhere you use iService — on this site and on your
|
|
10
12
|
phone.
|
|
@@ -33,81 +35,69 @@
|
|
|
33
35
|
<template v-else>
|
|
34
36
|
<!-- everything, at once -->
|
|
35
37
|
<v-col cols="12" class="mt-8">
|
|
36
|
-
<
|
|
37
|
-
width="100%"
|
|
38
|
-
border="grey-darken-3 sm"
|
|
39
|
-
variant="outlined"
|
|
40
|
-
rounded="lg"
|
|
41
|
-
>
|
|
38
|
+
<AppCard>
|
|
42
39
|
<v-row no-gutters align="center" class="pa-6">
|
|
43
40
|
<v-col cols="12" sm="8">
|
|
44
|
-
<div class="
|
|
45
|
-
<div class="
|
|
41
|
+
<div class="screen-card-title">Everything</div>
|
|
42
|
+
<div class="screen-hint summary-line mt-1">
|
|
46
43
|
{{ everythingSummary }}
|
|
47
44
|
</div>
|
|
48
45
|
</v-col>
|
|
49
46
|
<v-col cols="12" sm="4" class="d-flex justify-sm-end mt-3 mt-sm-0">
|
|
50
|
-
<
|
|
51
|
-
variant="
|
|
52
|
-
rounded="xl"
|
|
53
|
-
class="text-none"
|
|
47
|
+
<AppButton
|
|
48
|
+
variant="ghost"
|
|
54
49
|
:disabled="saving"
|
|
55
50
|
@click="setAll(!allOn)"
|
|
56
51
|
>
|
|
57
52
|
{{ allOn ? "Turn everything off" : "Turn everything on" }}
|
|
58
|
-
</
|
|
53
|
+
</AppButton>
|
|
59
54
|
</v-col>
|
|
60
55
|
</v-row>
|
|
61
|
-
</
|
|
56
|
+
</AppCard>
|
|
62
57
|
</v-col>
|
|
63
58
|
|
|
64
59
|
<!-- one panel per module, collapsed by default so a person with many
|
|
65
60
|
modules gets a short list rather than a wall of switches -->
|
|
66
61
|
<v-col cols="12" class="mt-4">
|
|
67
|
-
<v-expansion-panels variant="accordion" multiple>
|
|
62
|
+
<v-expansion-panels variant="accordion" multiple class="screen-accordion">
|
|
68
63
|
<v-expansion-panel
|
|
69
64
|
v-for="category in categories"
|
|
70
65
|
:key="category.key"
|
|
71
66
|
:value="category.key"
|
|
72
67
|
elevation="0"
|
|
73
|
-
class="border-sm rounded-lg mb-2"
|
|
74
68
|
>
|
|
75
69
|
<v-expansion-panel-title>
|
|
76
70
|
<v-row no-gutters align="center">
|
|
77
71
|
<v-col cols="12" sm="6">
|
|
78
|
-
<span
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
<span>{{ category.label }}</span>
|
|
73
|
+
<!-- "Safety" is a TAG, not a status word, so it takes
|
|
74
|
+
the handoff's tag chip - "small 7px-radius label" -
|
|
75
|
+
which is the dotless shape, on the `info` tone the
|
|
76
|
+
handoff assigns to "Role & info tags". A leading dot
|
|
77
|
+
here would draw it as a status the screen does not
|
|
78
|
+
have. -->
|
|
79
|
+
<StatusChip
|
|
82
80
|
v-if="category.safety"
|
|
83
|
-
|
|
81
|
+
tone="info"
|
|
82
|
+
label="Safety"
|
|
83
|
+
:dot="false"
|
|
84
84
|
class="ml-2"
|
|
85
|
-
|
|
86
|
-
color="info"
|
|
87
|
-
>
|
|
88
|
-
Safety
|
|
89
|
-
</v-chip>
|
|
85
|
+
/>
|
|
90
86
|
</v-col>
|
|
91
|
-
<v-col
|
|
92
|
-
cols="12"
|
|
93
|
-
sm="6"
|
|
94
|
-
class="text-body-2 text-medium-emphasis"
|
|
95
|
-
>
|
|
87
|
+
<v-col cols="12" sm="6" class="screen-hint summary-line">
|
|
96
88
|
{{ summaryFor(category) }}
|
|
97
89
|
</v-col>
|
|
98
90
|
</v-row>
|
|
99
91
|
</v-expansion-panel-title>
|
|
100
92
|
|
|
101
93
|
<v-expansion-panel-text>
|
|
102
|
-
<div class="
|
|
94
|
+
<div class="screen-hint summary-line mb-4">
|
|
103
95
|
{{ category.description }}
|
|
104
96
|
</div>
|
|
105
97
|
|
|
106
|
-
<
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
rounded="xl"
|
|
110
|
-
class="text-none mb-4"
|
|
98
|
+
<AppButton
|
|
99
|
+
variant="ghost"
|
|
100
|
+
class="mb-4"
|
|
111
101
|
:disabled="saving || !switchableIn(category).length"
|
|
112
102
|
@click="setCategory(category, !categoryAllOn(category))"
|
|
113
103
|
>
|
|
@@ -116,7 +106,7 @@
|
|
|
116
106
|
? "Turn all off for " + category.label
|
|
117
107
|
: "Turn all on for " + category.label
|
|
118
108
|
}}
|
|
119
|
-
</
|
|
109
|
+
</AppButton>
|
|
120
110
|
|
|
121
111
|
<!-- one channel per row: a switch must never sit beside the
|
|
122
112
|
NEXT channel's label, which is what a three-up grid does -->
|
|
@@ -132,8 +122,8 @@
|
|
|
132
122
|
:class="{ 'channel-unavailable': !channel.supported }"
|
|
133
123
|
>
|
|
134
124
|
<div class="pr-4">
|
|
135
|
-
<div class="
|
|
136
|
-
<div v-if="!channel.supported" class="
|
|
125
|
+
<div class="channel-label">{{ channel.label }}</div>
|
|
126
|
+
<div v-if="!channel.supported" class="channel-note mt-1">
|
|
137
127
|
{{ channel.note }}
|
|
138
128
|
</div>
|
|
139
129
|
</div>
|
|
@@ -162,21 +152,18 @@
|
|
|
162
152
|
|
|
163
153
|
<!-- switching a safety alert off: say plainly what stops arriving -->
|
|
164
154
|
<v-dialog v-model="confirmOpen" max-width="460" persistent>
|
|
165
|
-
<v-card
|
|
166
|
-
<v-card-title
|
|
167
|
-
<v-card-text class="
|
|
155
|
+
<v-card class="screen-modal pa-2">
|
|
156
|
+
<v-card-title>{{ confirmText.title }}</v-card-title>
|
|
157
|
+
<v-card-text class="screen-modal__body">
|
|
158
|
+
{{ confirmText.body }}
|
|
159
|
+
</v-card-text>
|
|
168
160
|
<v-card-actions class="justify-end">
|
|
169
|
-
<
|
|
161
|
+
<AppButton variant="ghost" @click="cancelConfirm">
|
|
170
162
|
{{ confirmText.cancel }}
|
|
171
|
-
</
|
|
172
|
-
<
|
|
173
|
-
color="primary"
|
|
174
|
-
variant="tonal"
|
|
175
|
-
class="text-none"
|
|
176
|
-
@click="acceptConfirm"
|
|
177
|
-
>
|
|
163
|
+
</AppButton>
|
|
164
|
+
<AppButton @click="acceptConfirm">
|
|
178
165
|
{{ confirmText.confirm }}
|
|
179
|
-
</
|
|
166
|
+
</AppButton>
|
|
180
167
|
</v-card-actions>
|
|
181
168
|
</v-card>
|
|
182
169
|
</v-dialog>
|
|
@@ -346,6 +333,31 @@ onMounted(load);
|
|
|
346
333
|
</script>
|
|
347
334
|
|
|
348
335
|
<style scoped>
|
|
336
|
+
/* The handoff names no type for long-form intro copy or a summary line, so
|
|
337
|
+
both take the design's own secondary sizes rather than Vuetify's `text-h6`
|
|
338
|
+
/ `text-body-2` scale. */
|
|
339
|
+
.intro-copy {
|
|
340
|
+
font-size: var(--fs-cell);
|
|
341
|
+
margin-top: 6px;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.summary-line {
|
|
345
|
+
font-size: var(--fs-breadcrumb);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.channel-label {
|
|
349
|
+
font-family: var(--font-sans);
|
|
350
|
+
font-size: var(--fs-cell);
|
|
351
|
+
font-weight: var(--fw-cell);
|
|
352
|
+
color: var(--text);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.channel-note {
|
|
356
|
+
font-family: var(--font-sans);
|
|
357
|
+
font-size: var(--fs-breadcrumb);
|
|
358
|
+
color: var(--text2);
|
|
359
|
+
}
|
|
360
|
+
|
|
349
361
|
/* Unavailable channels are shown and explained, never hidden.
|
|
350
362
|
*
|
|
351
363
|
* They are NOT faded. The disabled switch already says the control cannot be
|
|
@@ -1,29 +1,27 @@
|
|
|
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
|
-
border="thin"
|
|
22
|
-
rounded="lg"
|
|
23
|
-
:loading="loading"
|
|
24
|
-
>
|
|
25
|
-
<v-toolbar density="compact" class="px-3 border-b-sm" color="transparent">
|
|
26
|
-
<template #prepend>
|
|
22
|
+
<AppCard class="table-card">
|
|
23
|
+
<CardToolbar :count="pageRange">
|
|
24
|
+
<template #left>
|
|
27
25
|
<v-btn
|
|
28
26
|
fab
|
|
29
27
|
icon
|
|
@@ -42,32 +40,25 @@
|
|
|
42
40
|
>
|
|
43
41
|
<v-icon>mdi-sort-alphabetical-ascending</v-icon>
|
|
44
42
|
</v-btn>
|
|
45
|
-
<
|
|
43
|
+
<AppField
|
|
46
44
|
v-model="search"
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
search
|
|
46
|
+
compact
|
|
49
47
|
placeholder="Search..."
|
|
50
|
-
|
|
51
|
-
clearable
|
|
52
|
-
hide-details
|
|
53
|
-
style="width: 220px; margin-left: 12px;"
|
|
48
|
+
klass="online-forms-config__search"
|
|
54
49
|
/>
|
|
55
50
|
</template>
|
|
56
51
|
|
|
57
|
-
<template #
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
v-model="page"
|
|
64
|
-
:length="pages"
|
|
65
|
-
@update:value="getOnlineFormConfigurations"
|
|
66
|
-
/>
|
|
67
|
-
</v-row>
|
|
52
|
+
<template #right>
|
|
53
|
+
<local-pagination
|
|
54
|
+
v-model="page"
|
|
55
|
+
:length="pages"
|
|
56
|
+
@update:value="getOnlineFormConfigurations"
|
|
57
|
+
/>
|
|
68
58
|
</template>
|
|
69
|
-
</
|
|
59
|
+
</CardToolbar>
|
|
70
60
|
<v-data-table
|
|
61
|
+
:loading="loading"
|
|
71
62
|
:headers="headers"
|
|
72
63
|
:items="sortedItems"
|
|
73
64
|
item-value="_id"
|
|
@@ -84,7 +75,7 @@
|
|
|
84
75
|
{{ item.status ? item.status.charAt(0).toUpperCase() + item.status.slice(1) : "N/A" }}
|
|
85
76
|
</template></v-data-table
|
|
86
77
|
>
|
|
87
|
-
</
|
|
78
|
+
</AppCard></v-col
|
|
88
79
|
>
|
|
89
80
|
|
|
90
81
|
<!-- Create Dialog -->
|
|
@@ -435,3 +426,11 @@ function successUpdate() {
|
|
|
435
426
|
}
|
|
436
427
|
|
|
437
428
|
</script>
|
|
429
|
+
|
|
430
|
+
<style scoped>
|
|
431
|
+
/* Same 240px cap the other in-toolbar search fields use, so the field does not
|
|
432
|
+
eat the toolbar's whole left side. */
|
|
433
|
+
.online-forms-config__search {
|
|
434
|
+
max-width: 240px;
|
|
435
|
+
}
|
|
436
|
+
</style>
|