add feature to set user defined expiration on every user close #4

This commit is contained in:
Adrian Zürcher
2025-11-08 12:09:56 +01:00
parent db96732a62
commit 06afdf4349
13 changed files with 110 additions and 30 deletions

View File

@@ -5,7 +5,7 @@ export interface User {
user: string;
email: string;
role: string;
expires: string;
expiration?: string;
password?: string;
settings?: Settings;
}

View File

@@ -116,7 +116,7 @@
<q-td :props="props">
<q-select
v-if="responsibles.length > 0"
:disable="!user.isPermittedTo('members', 'write')"
:readonly="!user.isPermittedTo('members', 'write')"
:options="responsibles"
:option-label="(opt) => opt.firstName + ' ' + opt.lastName"
v-model="props.row.responsiblePerson"
@@ -164,12 +164,12 @@
ref="editOneDialog"
endpoint="members/edit"
query-id
v-on:update="updateMembers"
v-on:update="updateMember"
></EditOneDialog>
<EditAllDialog
ref="editAllDialog"
:responsibles="responsibles"
v-on:update="updateMembers"
v-on:update="updateMember"
></EditAllDialog>
<OkDialog
ref="okDialog"
@@ -326,11 +326,13 @@ function removeMember(...removeMembers: Members) {
});
}
function updateMember(member: Member) {
function updateMember(member: Member | null) {
if (!member) NotifyResponse(i18n.global.t('memberUpdated'));
appApi
.post('/members/edit', [member])
.then(() => NotifyResponse(i18n.global.t('memberUpdated')))
.catch((err) => NotifyResponse(err, 'error'));
updateMembers().catch((err) => NotifyResponse(err, 'error'));
}
function addToEvent() {

View File

@@ -37,6 +37,14 @@ export function useUserTable() {
sortable: true,
style: 'width: 120px; max-width: 120px;',
},
{
name: 'expiration',
align: 'left' as const,
label: i18n.global.t('expiration'),
field: 'expiration',
sortable: true,
style: 'width: 120px; max-width: 120px;',
},
{ name: 'option', align: 'center' as const, label: '', field: 'option', icon: 'option' },
]);

View File

@@ -67,17 +67,7 @@
</q-input>
</template>
<template v-slot:body-cell="props">
<q-td v-if="props.col.name === 'role'" :props="props">
<q-select
:readonly="!user.isPermittedTo('userSettings', 'write') || !autorized(props.row)"
dense
v-model="props.row.role"
:options="localRoles"
@update:model-value="updateUser(props.row)"
></q-select>
</q-td>
<q-td
v-else
:props="props"
:style="
autorized(props.row) && user.isPermittedTo('userSettings', 'write')
@@ -93,6 +83,34 @@
{{ props.value }}
</q-td>
</template>
<template v-slot:body-cell-role="props">
<q-td :props="props">
<q-select
:readonly="!user.isPermittedTo('userSettings', 'write') || !autorized(props.row)"
dense
v-model="props.row.role"
:options="localRoles"
@update:model-value="updateUser(props.row)"
></q-select>
</q-td>
</template>
<template v-slot:body-cell-expiration="props">
<q-td
:props="props"
:style="
autorized(props.row) && user.isPermittedTo('userSettings', 'write')
? 'cursor: pointer'
: ''
"
@click="
autorized(props.row) && user.isPermittedTo('userSettings', 'write')
? openSingleValueDialog(props.col.label, props.col.name, props.row)
: ''
"
>
{{ props.value === 'never' ? $t('never') : props.value }}
</q-td>
</template>
<template v-slot:body-cell-option="props">
<q-td :props="props">
<q-btn
@@ -112,9 +130,8 @@
</div>
<EditOneDialog
ref="editOneDialog"
endpoint="users/edit"
query-id
v-on:update="updateUsers"
v-on:update="(val) => updateUser(val)"
></EditOneDialog>
<EditAllDialog ref="editAllDialog" :roles="localRoles" v-on:update="updateUsers"></EditAllDialog>
<OkDialog