@7365admin1/layer-common 4.147.0 → 4.147.2
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/CHANGELOG.md +16 -4
- package/components/Input/NRICNumber.vue +15 -3
- package/components/ScheduleTaskForm.vue +5 -3
- package/components/ScheduleTaskMain.vue +5 -3
- package/components/VisitorManagement.vue +3 -2
- package/components/VisitorSocketPopUp.vue +2 -2
- package/package.json +1 -1
- package/utils/schedule-task.ts +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @iservice365/layer-common
|
|
2
2
|
|
|
3
|
+
## 4.147.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3a1e7ba: Stop the browser filling the saved sign-in password into the masked NRIC field on Add Visitor / Add Delivery. The field is now masked with CSS instead of being a password box.
|
|
8
|
+
|
|
9
|
+
## 4.147.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 3ce57c6: Extra Checks: the form, page help and summary now say plainly that one extra check adds exactly one round per picked area each time it runs, however many normal visits the area has.
|
|
14
|
+
|
|
3
15
|
## 4.147.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -3481,11 +3493,11 @@ Monthly report: a month that had patrols opens the list of that month's patrol r
|
|
|
3481
3493
|
`utils/console-tier.ts` + `composables/useConsoleTier.ts` mirror the server's
|
|
3482
3494
|
own rule from two endpoints the console already calls, unprojected:
|
|
3483
3495
|
|
|
3484
|
-
|
|
3485
|
-
|
|
3496
|
+
GET /api/members/user/:user/app/admin the Seven365 staff membership
|
|
3497
|
+
GET /api/roles/id/:role that membership's role document
|
|
3486
3498
|
|
|
3487
|
-
|
|
3488
|
-
|
|
3499
|
+
owner = member.type === "admin" && role.type === "admin" && role.default === true
|
|
3500
|
+
staff = member.type === "admin" && role.type === "admin"
|
|
3489
3501
|
|
|
3490
3502
|
`role.default` is the marker because it is the only property of a platform
|
|
3491
3503
|
staff role no API caller can set - `role.controller.ts` validates create and
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-text-field
|
|
3
3
|
v-model.trim="model"
|
|
4
|
-
class="filter-field"
|
|
4
|
+
:class="['filter-field', { 'nric-field--masked': masked && !shown }]"
|
|
5
5
|
:rules="rules"
|
|
6
6
|
:maxlength="maxlength"
|
|
7
7
|
:placeholder="placeholder"
|
|
8
8
|
:counter="maxlength"
|
|
9
9
|
@input="onInput"
|
|
10
10
|
:loading="loading"
|
|
11
|
-
|
|
11
|
+
type="text"
|
|
12
12
|
:append-inner-icon="masked ? (shown ? 'mdi-eye-off' : 'mdi-eye') : undefined"
|
|
13
13
|
autocomplete="off"
|
|
14
|
+
data-lpignore="true"
|
|
15
|
+
data-1p-ignore
|
|
14
16
|
outlined
|
|
15
17
|
clearable
|
|
16
18
|
@click:append-inner="shown = !shown"
|
|
@@ -63,4 +65,14 @@ function onInput(event) {
|
|
|
63
65
|
watch(model, (newVal) => {
|
|
64
66
|
emit('update:modelValue', newVal)
|
|
65
67
|
})
|
|
66
|
-
</script>
|
|
68
|
+
</script>
|
|
69
|
+
|
|
70
|
+
<style scoped>
|
|
71
|
+
/* Masked by CSS, never type="password": a password box makes Chrome treat the
|
|
72
|
+
form as a login and fill the saved sign-in password into the NRIC field
|
|
73
|
+
(it ignores autocomplete="off" on password boxes). */
|
|
74
|
+
.nric-field--masked :deep(input) {
|
|
75
|
+
-webkit-text-security: disc;
|
|
76
|
+
text-security: disc;
|
|
77
|
+
}
|
|
78
|
+
</style>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
ADD / EDIT AN EXTRA CHECK - four short steps: What, Where, When, Who is told.
|
|
3
3
|
|
|
4
4
|
The last step shows one sentence saying exactly what will be created
|
|
5
|
-
("Adds 1 extra check to 3 areas (24 units) at 08:00 every weekday ... next:
|
|
5
|
+
("Adds 1 extra check to each of 3 areas (24 units) at 08:00 every weekday ... next:
|
|
6
6
|
Wed 21 Oct"). The form checks what the server checks (utils/schedule-task.ts)
|
|
7
7
|
so a schedule that would never run is caught before saving; whatever the
|
|
8
8
|
server still refuses is shown in its own words.
|
|
@@ -85,8 +85,10 @@
|
|
|
85
85
|
<v-stepper-window-item :value="2">
|
|
86
86
|
<div class="st-step">
|
|
87
87
|
<p class="st-step__help">
|
|
88
|
-
Pick the areas to check.
|
|
89
|
-
one
|
|
88
|
+
Pick the areas to check. Each time this check is due, every
|
|
89
|
+
picked area gets exactly one extra round on the Daily
|
|
90
|
+
Checklist (one more tick box per unit) - one round, however
|
|
91
|
+
many normal visits the area has each day.
|
|
90
92
|
</p>
|
|
91
93
|
<InputLabel for="selected-areas" title="Areas" required />
|
|
92
94
|
<v-select
|
|
@@ -16,9 +16,11 @@
|
|
|
16
16
|
that.
|
|
17
17
|
</li>
|
|
18
18
|
<li>
|
|
19
|
-
An <strong>extra check</strong> adds one more round of
|
|
20
|
-
that checklist
|
|
21
|
-
or repeating (every day, weekdays,
|
|
19
|
+
An <strong>extra check</strong> adds exactly one more round of
|
|
20
|
+
ticks to that checklist each time it is due, in the areas you pick,
|
|
21
|
+
at the time you set - once, or repeating (every day, weekdays,
|
|
22
|
+
chosen days, or monthly). One extra check is one round per area,
|
|
23
|
+
however many normal visits that area has each day.
|
|
22
24
|
</li>
|
|
23
25
|
<li>
|
|
24
26
|
At that time, staff get a phone notification and see the extra
|
|
@@ -1912,7 +1912,8 @@ ensureANPRSettings(true).catch(() => {
|
|
|
1912
1912
|
|
|
1913
1913
|
/*
|
|
1914
1914
|
* iSecure `useUnregisteredTab`: the Unregistered tab needs BOTH the site's
|
|
1915
|
-
* Unregistered switch AND an ANPR camera facing an entrance (entry / both
|
|
1915
|
+
* Unregistered switch AND an ANPR camera facing an entrance (entry / both /
|
|
1916
|
+
* visitors) -
|
|
1916
1917
|
* the same rule the plate notice (VisitorSocketPopUp) already applies.
|
|
1917
1918
|
*/
|
|
1918
1919
|
const { getAllSiteCameras } = useSiteSettings();
|
|
@@ -1928,7 +1929,7 @@ async function loadEntryFacingAnprCamera() {
|
|
|
1928
1929
|
? res.data.items
|
|
1929
1930
|
: [];
|
|
1930
1931
|
hasEntryFacingAnprCamera.value = cameras.some(
|
|
1931
|
-
(camera: any) =>
|
|
1932
|
+
(camera: any) => ["entry", "both", "visitors"].includes(camera?.direction)
|
|
1932
1933
|
);
|
|
1933
1934
|
} catch {
|
|
1934
1935
|
hasEntryFacingAnprCamera.value = false;
|
|
@@ -150,7 +150,7 @@ const { enableUnregistered, ensureANPRSettings } = useANPRSettings(
|
|
|
150
150
|
);
|
|
151
151
|
// The security mobile app's rule (isecure365 `useUnregisteredTab`): the
|
|
152
152
|
// site's Unregistered switch AND an ANPR camera facing an entrance (entry /
|
|
153
|
-
// both). With the switch alone the notice could appear for a site whose
|
|
153
|
+
// both / visitors). With the switch alone the notice could appear for a site whose
|
|
154
154
|
// cameras never register anyone arriving.
|
|
155
155
|
const { getAllSiteCameras } = useSiteSettings();
|
|
156
156
|
const hasEntryFacingAnprCamera = ref(false);
|
|
@@ -167,7 +167,7 @@ async function loadEntryFacingAnprCamera(siteId: string) {
|
|
|
167
167
|
? res.data.items
|
|
168
168
|
: [];
|
|
169
169
|
hasEntryFacingAnprCamera.value = items.some(
|
|
170
|
-
(camera: any) =>
|
|
170
|
+
(camera: any) => ["entry", "both", "visitors"].includes(camera?.direction)
|
|
171
171
|
);
|
|
172
172
|
} catch {
|
|
173
173
|
hasEntryFacingAnprCamera.value = false;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@7365admin1/layer-common",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "4.147.
|
|
5
|
+
"version": "4.147.2",
|
|
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.",
|
package/utils/schedule-task.ts
CHANGED
|
@@ -268,7 +268,8 @@ export function buildSummary(
|
|
|
268
268
|
now: Date = new Date(),
|
|
269
269
|
): string {
|
|
270
270
|
const year = sgtParts(now).date.slice(0, 4);
|
|
271
|
-
|
|
271
|
+
// One extra check = exactly one more round per picked area each time it runs (not one per normal visit).
|
|
272
|
+
const areas = f.areaCount === 1 ? "1 area" : `each of ${f.areaCount} areas`;
|
|
272
273
|
const units = `${unitCount} unit${unitCount === 1 ? "" : "s"}`;
|
|
273
274
|
const next = nextRunDate(f, now);
|
|
274
275
|
const nextText = next ? `${DAYS[weekdayOf(next)]} ${fmtDate(next, year)}` : "never";
|