@7365admin1/layer-common 3.2.2-staging.127 → 3.2.2-staging.128
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/components/ServiceProviderMain.vue +261 -317
- package/package.json +1 -1
|
@@ -99,22 +99,22 @@
|
|
|
99
99
|
style="max-height: calc(100vh - 280px)"
|
|
100
100
|
>
|
|
101
101
|
<template #item.companyName="{ item }">
|
|
102
|
-
<span class="
|
|
102
|
+
<span class="d-block text-truncate sp-col-company">{{
|
|
103
103
|
item.companyName
|
|
104
104
|
}}</span>
|
|
105
105
|
</template>
|
|
106
106
|
<template #item.email="{ item }">
|
|
107
|
-
<span class="
|
|
107
|
+
<span class="d-block text-truncate sp-col-email">{{
|
|
108
108
|
item.email
|
|
109
109
|
}}</span>
|
|
110
110
|
</template>
|
|
111
111
|
<template #item.type="{ item }">
|
|
112
|
-
<span class="
|
|
112
|
+
<span class="d-block text-truncate sp-col-type">{{
|
|
113
113
|
item.type
|
|
114
114
|
}}</span>
|
|
115
115
|
</template>
|
|
116
116
|
<template #item.members="{ item }">
|
|
117
|
-
<span
|
|
117
|
+
<span>{{ item.members }}</span>
|
|
118
118
|
</template>
|
|
119
119
|
<template #item.status="{ item }">
|
|
120
120
|
<!--
|
|
@@ -129,10 +129,9 @@
|
|
|
129
129
|
:status="item.statusRaw || item.status"
|
|
130
130
|
:label="item.status"
|
|
131
131
|
/>
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
>
|
|
132
|
+
<!-- Was `text-caption text-medium-emphasis` - Roboto 12px at
|
|
133
|
+
Vuetify's 60% opacity. The design's sub-line is `--muted`. -->
|
|
134
|
+
<div v-if="item.rejectionReason" class="mt-1 sp-reject-reason">
|
|
136
135
|
Seven365 said: {{ item.rejectionReason }}
|
|
137
136
|
</div>
|
|
138
137
|
</template>
|
|
@@ -168,9 +167,11 @@
|
|
|
168
167
|
:subtitle="resendHint(item)"
|
|
169
168
|
@click="openInviteAction(item, 'resend')"
|
|
170
169
|
/>
|
|
170
|
+
<!-- `base-color="error"` is Vuetify's own red (#B00020 light,
|
|
171
|
+
#CF6679 dark), not the design's `--err`. -->
|
|
171
172
|
<v-list-item
|
|
172
173
|
title="Delete invitation"
|
|
173
|
-
|
|
174
|
+
class="sp-menu-danger"
|
|
174
175
|
@click="openInviteAction(item, 'delete')"
|
|
175
176
|
/>
|
|
176
177
|
</v-list>
|
|
@@ -195,11 +196,11 @@
|
|
|
195
196
|
/>
|
|
196
197
|
<v-list-item
|
|
197
198
|
:title="rowActionLabel(item)"
|
|
198
|
-
:
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
"
|
|
199
|
+
:class="{
|
|
200
|
+
'sp-menu-danger': !(
|
|
201
|
+
item.source === 'provider' && listTab === 'inactive'
|
|
202
|
+
),
|
|
203
|
+
}"
|
|
203
204
|
@click="onDeleteRow(item)"
|
|
204
205
|
/>
|
|
205
206
|
</v-list>
|
|
@@ -208,73 +209,86 @@
|
|
|
208
209
|
</v-data-table>
|
|
209
210
|
</div>
|
|
210
211
|
|
|
211
|
-
<div
|
|
212
|
-
v-if="!canViewServiceProviders"
|
|
213
|
-
class="pa-4 text-body-2 text-medium-emphasis"
|
|
214
|
-
>
|
|
212
|
+
<div v-if="!canViewServiceProviders" class="pa-4 sp-no-permission">
|
|
215
213
|
You do not have permission to view service providers.
|
|
216
214
|
</div>
|
|
217
215
|
</AppCard>
|
|
218
216
|
</div>
|
|
219
217
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
<v-card-title class="sp-members-title">
|
|
223
|
-
Members ({{ memberDialogCount }})
|
|
224
|
-
</v-card-title>
|
|
218
|
+
<!--
|
|
219
|
+
THE MEMBERS DIALOG ON THE DESIGN'S MODAL.
|
|
225
220
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
<th class="text-right">Role</th>
|
|
233
|
-
</tr>
|
|
234
|
-
</thead>
|
|
235
|
-
<tbody>
|
|
236
|
-
<tr v-if="loadingMembers">
|
|
237
|
-
<td colspan="2" class="text-center text-medium-emphasis">
|
|
238
|
-
Loading...
|
|
239
|
-
</td>
|
|
240
|
-
</tr>
|
|
241
|
-
<tr v-else-if="!serviceProviderMembers.length">
|
|
242
|
-
<td colspan="2" class="text-center text-medium-emphasis">
|
|
243
|
-
No members found.
|
|
244
|
-
</td>
|
|
245
|
-
</tr>
|
|
246
|
-
<template v-else>
|
|
247
|
-
<tr v-for="member in serviceProviderMembers" :key="member._id">
|
|
248
|
-
<td>{{ member.name }}</td>
|
|
249
|
-
<td class="text-right">{{ member.role }}</td>
|
|
250
|
-
</tr>
|
|
251
|
-
</template>
|
|
252
|
-
</tbody>
|
|
253
|
-
</v-table>
|
|
221
|
+
Was a `rounded="lg"` v-card whose title was a hand-drawn 20px/700 bar and
|
|
222
|
+
whose table painted its own 64px rows in `#667085` - a literal grey that is
|
|
223
|
+
the same grey on the dark theme, where the card behind it is nearly black.
|
|
224
|
+
It is `.screen-modal` now: the design's radius, shadow and card surface, the
|
|
225
|
+
shared `v-card-title` size/weight, the body as the thing that scrolls, and
|
|
226
|
+
the shared ghost footer instead of a block text button pretending to be one.
|
|
254
227
|
|
|
255
|
-
|
|
228
|
+
Same members, same two columns, same loading and empty copy, same close.
|
|
229
|
+
-->
|
|
230
|
+
<v-dialog v-model="viewDialog" max-width="514">
|
|
231
|
+
<v-card class="screen-modal">
|
|
232
|
+
<v-card-title>Members ({{ memberDialogCount }})</v-card-title>
|
|
233
|
+
|
|
234
|
+
<div class="screen-modal__body sp-members-scroll">
|
|
235
|
+
<v-table class="sp-members-table">
|
|
236
|
+
<thead>
|
|
237
|
+
<tr>
|
|
238
|
+
<th>Name</th>
|
|
239
|
+
<th class="text-right">Role</th>
|
|
240
|
+
</tr>
|
|
241
|
+
</thead>
|
|
242
|
+
<tbody>
|
|
243
|
+
<tr v-if="loadingMembers">
|
|
244
|
+
<td colspan="2" class="text-center sp-members-note">
|
|
245
|
+
Loading...
|
|
246
|
+
</td>
|
|
247
|
+
</tr>
|
|
248
|
+
<tr v-else-if="!serviceProviderMembers.length">
|
|
249
|
+
<td colspan="2" class="text-center sp-members-note">
|
|
250
|
+
No members found.
|
|
251
|
+
</td>
|
|
252
|
+
</tr>
|
|
253
|
+
<template v-else>
|
|
254
|
+
<tr v-for="member in serviceProviderMembers" :key="member._id">
|
|
255
|
+
<td>{{ member.name }}</td>
|
|
256
|
+
<td class="text-right">{{ member.role }}</td>
|
|
257
|
+
</tr>
|
|
258
|
+
</template>
|
|
259
|
+
</tbody>
|
|
260
|
+
</v-table>
|
|
261
|
+
</div>
|
|
256
262
|
|
|
257
|
-
<
|
|
263
|
+
<div class="screen-modal__footer">
|
|
258
264
|
<v-btn
|
|
259
|
-
|
|
260
|
-
variant="
|
|
261
|
-
height="56"
|
|
262
|
-
class="text-none font-weight-bold"
|
|
265
|
+
class="screen-btn-ghost"
|
|
266
|
+
variant="outlined"
|
|
263
267
|
@click="viewDialog = false"
|
|
264
268
|
>
|
|
265
269
|
Close
|
|
266
270
|
</v-btn>
|
|
267
|
-
</
|
|
271
|
+
</div>
|
|
268
272
|
</v-card>
|
|
269
273
|
</v-dialog>
|
|
270
274
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
275
|
+
<!--
|
|
276
|
+
THE TWO CONFIRMATIONS ON THE DESIGN'S MODAL.
|
|
277
|
+
|
|
278
|
+
Both were a 728px card with an 82px `#f5f5f5` title bar in 28px/700, a
|
|
279
|
+
44px/46px body in 24px type, and two 82px-tall half-width buttons on
|
|
280
|
+
hardcoded `#ffffff` / `#00263a` - none of which is a token, so the whole
|
|
281
|
+
thing drew light-theme colours on the dark theme. They are the shared
|
|
282
|
+
confirmation shape now: `.screen-modal`, the design's title, the body at
|
|
283
|
+
`--fs-cell`, and the ghost-then-primary footer stated once in `screens.css`.
|
|
276
284
|
|
|
277
|
-
|
|
285
|
+
Same question, same copy, same labels, same handlers, same busy states.
|
|
286
|
+
-->
|
|
287
|
+
<v-dialog v-model="statusDialog" max-width="520" persistent>
|
|
288
|
+
<v-card class="screen-modal">
|
|
289
|
+
<v-card-title>{{ statusDialogTitle }}</v-card-title>
|
|
290
|
+
|
|
291
|
+
<v-card-text class="screen-modal__body">
|
|
278
292
|
<div class="sp-status-question">
|
|
279
293
|
{{ statusDialogQuestion }}
|
|
280
294
|
</div>
|
|
@@ -283,48 +297,34 @@
|
|
|
283
297
|
</div>
|
|
284
298
|
</v-card-text>
|
|
285
299
|
|
|
286
|
-
<
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
block
|
|
305
|
-
variant="flat"
|
|
306
|
-
height="82"
|
|
307
|
-
class="text-none sp-status-confirm"
|
|
308
|
-
:loading="statusUpdating"
|
|
309
|
-
@click="confirmStatusChange"
|
|
310
|
-
>
|
|
311
|
-
{{ statusConfirmLabel }}
|
|
312
|
-
</v-btn>
|
|
313
|
-
</v-col>
|
|
314
|
-
</v-row>
|
|
315
|
-
</v-card-actions>
|
|
300
|
+
<div class="screen-modal__footer">
|
|
301
|
+
<v-btn
|
|
302
|
+
class="screen-btn-ghost"
|
|
303
|
+
variant="outlined"
|
|
304
|
+
:disabled="statusUpdating"
|
|
305
|
+
@click="closeStatusDialog"
|
|
306
|
+
>
|
|
307
|
+
Cancel
|
|
308
|
+
</v-btn>
|
|
309
|
+
<v-btn
|
|
310
|
+
class="screen-btn-primary"
|
|
311
|
+
variant="flat"
|
|
312
|
+
:loading="statusUpdating"
|
|
313
|
+
@click="confirmStatusChange"
|
|
314
|
+
>
|
|
315
|
+
{{ statusConfirmLabel }}
|
|
316
|
+
</v-btn>
|
|
317
|
+
</div>
|
|
316
318
|
</v-card>
|
|
317
319
|
</v-dialog>
|
|
318
320
|
|
|
319
321
|
<!-- Cancel / Resend / Delete an invitation. Same shape as the provider
|
|
320
322
|
dialog above so the two read as one product. -->
|
|
321
|
-
<v-dialog v-model="inviteDialog" max-width="
|
|
322
|
-
<v-card
|
|
323
|
-
<v-card-title
|
|
324
|
-
{{ inviteDialogTitle }}
|
|
325
|
-
</v-card-title>
|
|
323
|
+
<v-dialog v-model="inviteDialog" max-width="520" persistent>
|
|
324
|
+
<v-card class="screen-modal">
|
|
325
|
+
<v-card-title>{{ inviteDialogTitle }}</v-card-title>
|
|
326
326
|
|
|
327
|
-
<v-card-text class="
|
|
327
|
+
<v-card-text class="screen-modal__body">
|
|
328
328
|
<div class="sp-status-question">
|
|
329
329
|
{{ inviteDialogQuestion }}
|
|
330
330
|
</div>
|
|
@@ -333,47 +333,51 @@
|
|
|
333
333
|
</div>
|
|
334
334
|
</v-card-text>
|
|
335
335
|
|
|
336
|
-
<
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
block
|
|
355
|
-
variant="flat"
|
|
356
|
-
height="82"
|
|
357
|
-
class="text-none sp-status-confirm"
|
|
358
|
-
:loading="inviteWorking"
|
|
359
|
-
@click="confirmInviteAction"
|
|
360
|
-
>
|
|
361
|
-
{{ inviteConfirmLabel }}
|
|
362
|
-
</v-btn>
|
|
363
|
-
</v-col>
|
|
364
|
-
</v-row>
|
|
365
|
-
</v-card-actions>
|
|
336
|
+
<div class="screen-modal__footer">
|
|
337
|
+
<v-btn
|
|
338
|
+
class="screen-btn-ghost"
|
|
339
|
+
variant="outlined"
|
|
340
|
+
:disabled="inviteWorking"
|
|
341
|
+
@click="closeInviteDialog"
|
|
342
|
+
>
|
|
343
|
+
Keep it
|
|
344
|
+
</v-btn>
|
|
345
|
+
<v-btn
|
|
346
|
+
class="screen-btn-primary"
|
|
347
|
+
variant="flat"
|
|
348
|
+
:loading="inviteWorking"
|
|
349
|
+
@click="confirmInviteAction"
|
|
350
|
+
>
|
|
351
|
+
{{ inviteConfirmLabel }}
|
|
352
|
+
</v-btn>
|
|
353
|
+
</div>
|
|
366
354
|
</v-card>
|
|
367
355
|
</v-dialog>
|
|
368
356
|
|
|
357
|
+
<!--
|
|
358
|
+
ADD SERVICE PROVIDER, on the design's modal.
|
|
359
|
+
|
|
360
|
+
The heading was a bare `v-toolbar` - Vuetify paints that from its own
|
|
361
|
+
`surface`, a grey slab across the top of the card and visibly lighter than
|
|
362
|
+
the card on the dark theme - carrying a `text-h5` (24px/500 Roboto). The
|
|
363
|
+
footer was a SECOND toolbar holding a text Cancel and a `color="black"`
|
|
364
|
+
Submit: a literal black fill in both themes. Both are the shared shapes now,
|
|
365
|
+
and the four untokenised fields take `.filter-field`.
|
|
366
|
+
-->
|
|
369
367
|
<v-dialog v-model="createDialog" width="500" persistent>
|
|
370
|
-
<v-card
|
|
371
|
-
<v-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
368
|
+
<v-card class="screen-modal">
|
|
369
|
+
<v-card-title class="d-flex align-center">
|
|
370
|
+
Add Service Provider
|
|
371
|
+
<v-spacer />
|
|
372
|
+
<v-btn
|
|
373
|
+
variant="text"
|
|
374
|
+
icon="mdi-close"
|
|
375
|
+
class="screen-modal__close"
|
|
376
|
+
aria-label="Close"
|
|
377
|
+
@click="setServiceProvider({ mode: 'add', dialog: false })"
|
|
378
|
+
/>
|
|
379
|
+
</v-card-title>
|
|
380
|
+
<v-card-text class="screen-modal__body">
|
|
377
381
|
<v-form
|
|
378
382
|
v-model="validServiceProvider"
|
|
379
383
|
:disabled="disableServiceProvider"
|
|
@@ -387,6 +391,7 @@
|
|
|
387
391
|
v-model="serviceProvider.name"
|
|
388
392
|
density="comfortable"
|
|
389
393
|
:rules="[requiredRule]"
|
|
394
|
+
class="filter-field"
|
|
390
395
|
></v-text-field>
|
|
391
396
|
</v-col>
|
|
392
397
|
</v-row>
|
|
@@ -403,6 +408,7 @@
|
|
|
403
408
|
:items="natureOfBusinessV3"
|
|
404
409
|
density="comfortable"
|
|
405
410
|
:rules="[requiredRule]"
|
|
411
|
+
class="filter-field"
|
|
406
412
|
></v-select>
|
|
407
413
|
</v-col>
|
|
408
414
|
</v-row>
|
|
@@ -416,6 +422,7 @@
|
|
|
416
422
|
v-model="serviceProvider.email"
|
|
417
423
|
density="comfortable"
|
|
418
424
|
:rules="[emailRule, requiredRule]"
|
|
425
|
+
class="filter-field"
|
|
419
426
|
></v-text-field>
|
|
420
427
|
</v-col>
|
|
421
428
|
</v-row>
|
|
@@ -430,6 +437,7 @@
|
|
|
430
437
|
density="comfortable"
|
|
431
438
|
no-resize
|
|
432
439
|
rows="2"
|
|
440
|
+
class="filter-field"
|
|
433
441
|
></v-textarea>
|
|
434
442
|
</v-col>
|
|
435
443
|
</v-row>
|
|
@@ -452,9 +460,10 @@
|
|
|
452
460
|
<v-col cols="12" class="my-2">
|
|
453
461
|
<v-row no-gutters>
|
|
454
462
|
<v-col cols="12" class="text-center">
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
463
|
+
<!-- `text-error` is Vuetify's error colour, not the design's
|
|
464
|
+
`--err`; the two disagree, and only one of them moves
|
|
465
|
+
with the theme. -->
|
|
466
|
+
<span class="sp-form-error">
|
|
458
467
|
{{ messageServiceProvider }}
|
|
459
468
|
</span>
|
|
460
469
|
</v-col>
|
|
@@ -463,50 +472,52 @@
|
|
|
463
472
|
</v-row>
|
|
464
473
|
</v-form>
|
|
465
474
|
</v-card-text>
|
|
466
|
-
<
|
|
467
|
-
<v-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
color="black"
|
|
485
|
-
class="text-none"
|
|
486
|
-
size="small"
|
|
487
|
-
:disabled="!validServiceProvider"
|
|
488
|
-
:loading="disableServiceProvider"
|
|
489
|
-
@click="submitServiceProviderAdd"
|
|
490
|
-
>
|
|
491
|
-
Submit
|
|
492
|
-
</v-btn>
|
|
493
|
-
</v-col>
|
|
494
|
-
</v-row>
|
|
495
|
-
</v-toolbar>
|
|
475
|
+
<div class="screen-modal__footer">
|
|
476
|
+
<v-btn
|
|
477
|
+
class="screen-btn-ghost"
|
|
478
|
+
variant="outlined"
|
|
479
|
+
@click="setServiceProvider({ mode: 'add', dialog: false })"
|
|
480
|
+
>
|
|
481
|
+
Cancel
|
|
482
|
+
</v-btn>
|
|
483
|
+
<v-btn
|
|
484
|
+
class="screen-btn-primary"
|
|
485
|
+
variant="flat"
|
|
486
|
+
:disabled="!validServiceProvider"
|
|
487
|
+
:loading="disableServiceProvider"
|
|
488
|
+
@click="submitServiceProviderAdd"
|
|
489
|
+
>
|
|
490
|
+
Submit
|
|
491
|
+
</v-btn>
|
|
492
|
+
</div>
|
|
496
493
|
</v-card>
|
|
497
494
|
</v-dialog>
|
|
498
495
|
|
|
496
|
+
<!--
|
|
497
|
+
INVITE SERVICE PROVIDER, on the design's modal.
|
|
498
|
+
|
|
499
|
+
Was a `rounded="lg"` card with a 76px toolbar heading in `text-h5`, a body
|
|
500
|
+
padded 48/44/34 whose fields were forced to 64px tall and 20px type, and a
|
|
501
|
+
footer of two 76px square-cornered buttons on hardcoded `#ffffff` /
|
|
502
|
+
`#0b253b` at 20px/700. None of those figures is in the handoff and none of
|
|
503
|
+
those colours is a token. It is the shared modal now, with the same fields
|
|
504
|
+
and the same two actions in the same order.
|
|
505
|
+
-->
|
|
499
506
|
<v-dialog v-model="createInviteDialog" width="580" persistent>
|
|
500
|
-
<v-card
|
|
501
|
-
<v-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
507
|
+
<v-card class="screen-modal">
|
|
508
|
+
<v-card-title class="d-flex align-center">
|
|
509
|
+
Invite Service Provider
|
|
510
|
+
<v-spacer />
|
|
511
|
+
<v-btn
|
|
512
|
+
variant="text"
|
|
513
|
+
icon="mdi-close"
|
|
514
|
+
class="screen-modal__close"
|
|
515
|
+
aria-label="Close"
|
|
516
|
+
@click="setServiceProvider({ mode: 'invite', dialog: false })"
|
|
517
|
+
/>
|
|
518
|
+
</v-card-title>
|
|
519
|
+
|
|
520
|
+
<v-card-text class="screen-modal__body">
|
|
510
521
|
<v-form
|
|
511
522
|
v-model="validServiceProvider"
|
|
512
523
|
:disabled="disableServiceProvider"
|
|
@@ -522,6 +533,7 @@
|
|
|
522
533
|
variant="outlined"
|
|
523
534
|
density="comfortable"
|
|
524
535
|
:rules="[requiredRule, emailRule]"
|
|
536
|
+
class="filter-field"
|
|
525
537
|
></v-text-field>
|
|
526
538
|
</v-col>
|
|
527
539
|
</v-row>
|
|
@@ -547,6 +559,7 @@
|
|
|
547
559
|
readonly
|
|
548
560
|
variant="outlined"
|
|
549
561
|
density="comfortable"
|
|
562
|
+
class="filter-field"
|
|
550
563
|
/>
|
|
551
564
|
</v-col>
|
|
552
565
|
</v-row>
|
|
@@ -570,6 +583,7 @@
|
|
|
570
583
|
variant="outlined"
|
|
571
584
|
density="comfortable"
|
|
572
585
|
:rules="[requiredRule]"
|
|
586
|
+
class="filter-field"
|
|
573
587
|
></v-select>
|
|
574
588
|
</v-col>
|
|
575
589
|
</v-row>
|
|
@@ -587,6 +601,7 @@
|
|
|
587
601
|
variant="outlined"
|
|
588
602
|
density="comfortable"
|
|
589
603
|
:rules="[requiredRule]"
|
|
604
|
+
class="filter-field"
|
|
590
605
|
@update:model-value="setInviteSiteName"
|
|
591
606
|
></v-select>
|
|
592
607
|
</v-col>
|
|
@@ -598,9 +613,10 @@
|
|
|
598
613
|
<v-col cols="12" class="my-2">
|
|
599
614
|
<v-row no-gutters>
|
|
600
615
|
<v-col cols="12" class="text-center">
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
616
|
+
<!-- `text-error` is Vuetify's error colour, not the design's
|
|
617
|
+
`--err`; the two disagree, and only one of them moves
|
|
618
|
+
with the theme. -->
|
|
619
|
+
<span class="sp-form-error">
|
|
604
620
|
{{ messageServiceProvider }}
|
|
605
621
|
</span>
|
|
606
622
|
</v-col>
|
|
@@ -610,35 +626,24 @@
|
|
|
610
626
|
</v-form>
|
|
611
627
|
</v-card-text>
|
|
612
628
|
|
|
613
|
-
<
|
|
614
|
-
<v-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
class="text-none sp-invite-submit-btn"
|
|
632
|
-
height="76"
|
|
633
|
-
:disabled="!canSubmitInvite"
|
|
634
|
-
:loading="disableServiceProvider"
|
|
635
|
-
@click="submitServiceProviderInvite()"
|
|
636
|
-
>
|
|
637
|
-
Submit
|
|
638
|
-
</v-btn>
|
|
639
|
-
</v-col>
|
|
640
|
-
</v-row>
|
|
641
|
-
</v-toolbar>
|
|
629
|
+
<div class="screen-modal__footer">
|
|
630
|
+
<v-btn
|
|
631
|
+
class="screen-btn-ghost"
|
|
632
|
+
variant="outlined"
|
|
633
|
+
@click="setServiceProvider({ mode: 'invite', dialog: false })"
|
|
634
|
+
>
|
|
635
|
+
Back
|
|
636
|
+
</v-btn>
|
|
637
|
+
<v-btn
|
|
638
|
+
class="screen-btn-primary"
|
|
639
|
+
variant="flat"
|
|
640
|
+
:disabled="!canSubmitInvite"
|
|
641
|
+
:loading="disableServiceProvider"
|
|
642
|
+
@click="submitServiceProviderInvite()"
|
|
643
|
+
>
|
|
644
|
+
Submit
|
|
645
|
+
</v-btn>
|
|
646
|
+
</div>
|
|
642
647
|
</v-card>
|
|
643
648
|
</v-dialog>
|
|
644
649
|
|
|
@@ -1498,142 +1503,81 @@ async function submitServiceProviderInvite() {
|
|
|
1498
1503
|
max-width: 180px;
|
|
1499
1504
|
}
|
|
1500
1505
|
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
}
|
|
1506
|
-
|
|
1506
|
+
/* The header/cell type is `.table-card`'s, stated once in `screens.css`; what
|
|
1507
|
+
was here was a `rgba(0,0,0,0.7)` header that never reached the glass anyway
|
|
1508
|
+
(the shared rule carries `!important`) and would have been a black-on-black
|
|
1509
|
+
header on the dark theme if it had. Only the alignment is kept. */
|
|
1507
1510
|
.sp-table :deep(tbody td) {
|
|
1508
1511
|
vertical-align: middle;
|
|
1509
1512
|
}
|
|
1510
1513
|
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
.sp-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
}
|
|
1520
|
-
|
|
1521
|
-
.sp-invite-body :deep(.v-field) {
|
|
1522
|
-
border-radius: 6px;
|
|
1514
|
+
/* The design's sub-line: `--muted` at 12px, the same figure batch I's
|
|
1515
|
+
`AttachmentsViewer` settled on. There is no `--fs-sub` token. */
|
|
1516
|
+
.sp-reject-reason,
|
|
1517
|
+
.sp-no-permission,
|
|
1518
|
+
.sp-members-note {
|
|
1519
|
+
font-family: var(--font-sans);
|
|
1520
|
+
font-size: 12px;
|
|
1521
|
+
color: var(--muted);
|
|
1523
1522
|
}
|
|
1524
1523
|
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1524
|
+
/* A row menu is teleported out of this component's subtree by `v-menu`, so the
|
|
1525
|
+
scoped attribute lands on the item and the title needs `:deep`. */
|
|
1526
|
+
.sp-menu-danger :deep(.v-list-item-title) {
|
|
1527
|
+
color: var(--err);
|
|
1528
1528
|
}
|
|
1529
1529
|
|
|
1530
|
-
.sp-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
border-radius: 0;
|
|
1536
|
-
background: #ffffff !important;
|
|
1537
|
-
color: #111827 !important;
|
|
1538
|
-
font-size: 1.25rem;
|
|
1539
|
-
font-weight: 700;
|
|
1540
|
-
}
|
|
1541
|
-
|
|
1542
|
-
.sp-invite-submit-btn {
|
|
1543
|
-
border-radius: 0;
|
|
1544
|
-
background: #0b253b !important;
|
|
1545
|
-
color: #ffffff !important;
|
|
1546
|
-
font-size: 1.25rem;
|
|
1547
|
-
font-weight: 700;
|
|
1548
|
-
}
|
|
1549
|
-
|
|
1550
|
-
.sp-members-card {
|
|
1551
|
-
overflow: hidden;
|
|
1552
|
-
}
|
|
1553
|
-
|
|
1554
|
-
.sp-members-title {
|
|
1555
|
-
min-height: 56px;
|
|
1556
|
-
display: flex;
|
|
1557
|
-
align-items: center;
|
|
1558
|
-
padding: 0 16px;
|
|
1559
|
-
font-size: 1.25rem;
|
|
1560
|
-
font-weight: 700;
|
|
1530
|
+
.sp-form-error {
|
|
1531
|
+
font-family: var(--font-sans);
|
|
1532
|
+
font-size: 12px;
|
|
1533
|
+
font-weight: 500;
|
|
1534
|
+
color: var(--err);
|
|
1561
1535
|
}
|
|
1562
1536
|
|
|
1563
|
-
|
|
1537
|
+
/* The modal body scrolls, not the card - the shared rule; this only bounds it
|
|
1538
|
+
so a long member list does not push the footer off the screen. */
|
|
1539
|
+
.sp-members-scroll {
|
|
1564
1540
|
max-height: 444px;
|
|
1565
|
-
overflow-y: auto;
|
|
1566
1541
|
}
|
|
1567
1542
|
|
|
1568
1543
|
.sp-members-table :deep(th) {
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
font-
|
|
1572
|
-
|
|
1544
|
+
color: var(--muted);
|
|
1545
|
+
font-size: var(--fs-table-head);
|
|
1546
|
+
font-weight: var(--fw-table-head);
|
|
1547
|
+
letter-spacing: var(--ls-table-head);
|
|
1548
|
+
text-transform: uppercase;
|
|
1549
|
+
background: var(--thead);
|
|
1573
1550
|
}
|
|
1574
1551
|
|
|
1575
1552
|
.sp-members-table :deep(td) {
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
font-size: 1rem;
|
|
1579
|
-
}
|
|
1580
|
-
|
|
1581
|
-
.sp-status-card {
|
|
1582
|
-
overflow: hidden;
|
|
1583
|
-
}
|
|
1584
|
-
|
|
1585
|
-
.sp-status-title {
|
|
1586
|
-
min-height: 82px;
|
|
1587
|
-
display: flex;
|
|
1588
|
-
align-items: center;
|
|
1589
|
-
padding: 0 24px;
|
|
1590
|
-
background: #f5f5f5;
|
|
1591
|
-
color: #101828;
|
|
1592
|
-
font-size: 1.75rem;
|
|
1593
|
-
font-weight: 700;
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1596
|
-
.sp-status-body {
|
|
1597
|
-
padding: 44px 46px 42px;
|
|
1553
|
+
color: var(--text);
|
|
1554
|
+
font-size: var(--fs-cell);
|
|
1598
1555
|
}
|
|
1599
1556
|
|
|
1600
1557
|
.sp-status-question {
|
|
1601
|
-
color:
|
|
1602
|
-
font-size:
|
|
1603
|
-
font-weight:
|
|
1558
|
+
color: var(--text);
|
|
1559
|
+
font-size: var(--fs-card-title);
|
|
1560
|
+
font-weight: var(--fw-card-title);
|
|
1604
1561
|
line-height: 1.35;
|
|
1605
1562
|
}
|
|
1606
1563
|
|
|
1607
1564
|
.sp-status-copy {
|
|
1608
|
-
margin-top:
|
|
1609
|
-
color:
|
|
1610
|
-
font-size:
|
|
1611
|
-
line-height: 1.
|
|
1612
|
-
}
|
|
1613
|
-
|
|
1614
|
-
.sp-status-cancel {
|
|
1615
|
-
color: #101828;
|
|
1616
|
-
background: #ffffff;
|
|
1617
|
-
font-size: 1.5rem;
|
|
1618
|
-
font-weight: 700;
|
|
1565
|
+
margin-top: 12px;
|
|
1566
|
+
color: var(--muted);
|
|
1567
|
+
font-size: var(--fs-cell);
|
|
1568
|
+
line-height: 1.5;
|
|
1619
1569
|
}
|
|
1620
1570
|
|
|
1621
|
-
.sp-status-confirm {
|
|
1622
|
-
color: #ffffff;
|
|
1623
|
-
background: #00263a;
|
|
1624
|
-
font-size: 1.5rem;
|
|
1625
|
-
font-weight: 700;
|
|
1626
|
-
}
|
|
1627
1571
|
.sp-existing-title {
|
|
1628
|
-
font-size:
|
|
1629
|
-
font-weight:
|
|
1630
|
-
color:
|
|
1572
|
+
font-size: var(--fs-card-title);
|
|
1573
|
+
font-weight: var(--fw-card-title);
|
|
1574
|
+
color: var(--text);
|
|
1631
1575
|
margin-bottom: 16px;
|
|
1632
1576
|
}
|
|
1633
1577
|
|
|
1634
1578
|
.sp-existing-copy {
|
|
1635
|
-
font-size:
|
|
1636
|
-
color:
|
|
1579
|
+
font-size: var(--fs-cell);
|
|
1580
|
+
color: var(--muted);
|
|
1637
1581
|
line-height: 1.5;
|
|
1638
1582
|
margin-bottom: 24px;
|
|
1639
1583
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@7365admin1/layer-common",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "3.2.2-staging.
|
|
5
|
+
"version": "3.2.2-staging.128",
|
|
6
6
|
"author": "7365admin1",
|
|
7
7
|
"main": "./nuxt.config.ts",
|
|
8
8
|
"//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",
|