Skip to content

Commit 32d3e03

Browse files
committed
update: UsersManagement
- add missing start/end dates for passwords - show said dates in list as well
1 parent 1876340 commit 32d3e03

5 files changed

Lines changed: 39 additions & 3 deletions

File tree

src/i18n/en-US/messages.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4137,6 +4137,8 @@
41374137
"flgPwdBlocked": "Blocked",
41384138
"form": {
41394139
"defaultRole": "Default role",
4140+
"dtPwdBegin": "Password valid from",
4141+
"dtPwdEnd": "Password expires on",
41404142
"password": "Password",
41414143
"passwordConfirm": "Confirm Password",
41424144
"userId": "User ID"
@@ -4163,6 +4165,7 @@
41634165
"lockUser": "Lock user",
41644166
"multifactor": "This user has multifactor authentication enabled. Click the button to reset it",
41654167
"newUser": "New user",
4168+
"noAttributesInfo": "There are no attributes for this user.",
41664169
"roles": "Roles",
41674170
"title": "Users Management",
41684171
"unlockUser": "Unlock user",

src/modules/managers/usersManagement/UserAttributesTab/UserAttributesForm.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
</q-list>
3232
</q-card-section>
3333
</q-card>
34+
<q-banner v-if="!attributes || attributes.length === 0" rounded dense class="bg-info">
35+
<template v-slot:avatar><q-icon name="info" /></template>
36+
{{ $t('managers.usersManagement.noAttributesInfo') }}
37+
</q-banner>
3438
</div>
3539
</q-scroll-area>
3640
<UserAttributesLovValueDialog :attribute="selectedAttribute" :selection="initialSelection" :dialog-visible="lovDialogVisible" @saveLovValues="onSaveLovValues" @closeDialog=";((lovDialogVisible = false), (selectedAttribute = null))" />

src/modules/managers/usersManagement/UserDetailTab/DetailFormTab.vue

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@
2929
<div class="col-6">
3030
<q-input outlined dense hide-bottom-space v-model="vobj.userDetailsForm.fullName.$model" :label="$t('managers.usersManagement.fullName') + ' *'" autocomplete="off" :maxLength="250" :error="vobj.userDetailsForm.fullName.$invalid && vobj.userDetailsForm.fullName.$dirty" :error-message="vobj.userDetailsForm.fullName.$errors[0]?.$message" @update:model-value="onDataChange(vobj.userDetailsForm.fullName)" />
3131
</div>
32+
<div class="col-6">
33+
<q-input outlined dense hide-bottom-space readonly :model-value="formatPwdDate(userDetailsForm.dtPwdBegin)" :label="$t('managers.usersManagement.form.dtPwdBegin')" />
34+
</div>
35+
<div class="col-6">
36+
<q-input outlined dense hide-bottom-space readonly :model-value="formatPwdDate(userDetailsForm.dtPwdEnd)" :label="$t('managers.usersManagement.form.dtPwdEnd')" />
37+
</div>
3238
</div>
3339
</q-card-section>
3440
</q-card>
@@ -92,6 +98,7 @@ import { mapActions } from 'pinia'
9298
import { defineComponent } from 'vue'
9399
import mainStore from '@/App.store'
94100
import { AxiosResponse } from 'axios'
101+
import { DateTime } from 'luxon'
95102
96103
export default defineComponent({
97104
name: 'roles-tab',
@@ -142,6 +149,13 @@ export default defineComponent({
142149
},
143150
methods: {
144151
...mapActions(mainStore, ['setLoading', 'setInfo']),
152+
// date + time for now; revert to date-only later if too long
153+
formatPwdDate(value: string): string {
154+
if (!value) return '-'
155+
let dt = DateTime.fromISO(value)
156+
if (!dt.isValid) dt = DateTime.fromSQL(value)
157+
return dt.isValid ? dt.toFormat('dd/MM/yyyy HH:mm') : value
158+
},
145159
unlockUser() {
146160
this.$emit('unlock')
147161
},

src/modules/managers/usersManagement/UserRolesTab/RolesTab.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
<div class="um-tab-layout">
33
<q-scroll-area class="um-tab-scroll">
44
<div class="um-tab-container">
5-
<q-card>
5+
<q-card v-if="selectedRoles.length > 1">
66
<q-card-section class="q-py-sm">
77
<div class="um-section-label">{{ $t('managers.usersManagement.form.defaultRole') }}</div>
88
</q-card-section>
99
<q-separator />
1010
<q-card-section>
11-
<q-select v-if="selectedRoles.length > 1" outlined dense v-model="defaultRole" :options="selectedRolesWithEmpty()" option-label="name" :label="$t('managers.usersManagement.form.defaultRole')" @update:model-value="onSelectDefaultRole">
11+
<q-select outlined dense v-model="defaultRole" :options="selectedRolesWithEmpty()" option-label="name" :label="$t('managers.usersManagement.form.defaultRole')" @update:model-value="onSelectDefaultRole">
1212
<template #append>
1313
<q-icon name="info" color="grey" size="xs">
1414
<q-tooltip>{{ $t('managers.usersManagement.defaultRoleInfo') }}</q-tooltip>

src/modules/managers/usersManagement/UsersManagementList.vue

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<div class="kn-list-item-text">
1010
<span v-tooltip.top="slotProps.option.fullName" class="kn-list-item-label">{{ slotProps.option.fullName }}</span>
11-
<span class="kn-list-item-text-secondary kn-truncated">{{ slotProps.option.userId }}</span>
11+
<span class="kn-list-item-text-secondary kn-truncated">{{ pwdDatesLabel(slotProps.option) }}</span>
1212
</div>
1313

1414
<Button v-tooltip.bottom="slotProps.option.flgPwdBlocked ? $t('managers.usersManagement.unlockUser') : $t('managers.usersManagement.lockUser')" :icon="slotProps.option.flgPwdBlocked ? 'fas fa-lock-open' : 'fas fa-lock'" class="p-button-text p-button-rounded p-button-plain" @click.stop="$emit('lockToggle', slotProps.option)" />
@@ -24,6 +24,7 @@ import Avatar from 'primevue/avatar'
2424
import Button from 'primevue/button'
2525
import Listbox from 'primevue/listbox'
2626
import { iUser } from './UsersManagement'
27+
import { DateTime } from 'luxon'
2728
2829
export default defineComponent({
2930
name: 'users-management-list',
@@ -48,6 +49,20 @@ export default defineComponent({
4849
},
4950
emits: ['select', 'selectionChange', 'delete', 'lockToggle'],
5051
methods: {
52+
// date + time for now; revert to date-only later if too long
53+
formatPwdDate(value: string): string {
54+
if (!value) return ''
55+
let dt = DateTime.fromISO(value)
56+
if (!dt.isValid) dt = DateTime.fromSQL(value)
57+
return dt.isValid ? dt.toFormat('dd/MM/yyyy HH:mm') : value
58+
},
59+
pwdDatesLabel(user: iUser): string {
60+
const begin = this.formatPwdDate(user.dtPwdBegin)
61+
const end = this.formatPwdDate(user.dtPwdEnd)
62+
// no password dates set: fall back to the userId so the row still shows something
63+
if (!begin && !end) return user.userId
64+
return `${begin || ''} → ${end || ''}`
65+
},
5166
avatarIcon(user: iUser): string {
5267
return user.flgPwdBlocked === true ? 'fas fa-lock' : 'fas fa-lock-open'
5368
},

0 commit comments

Comments
 (0)