Änderung: Erweiterung der Benutzerkontoeinstellungen und Verbesserung der E-Mail-Verschlüsselung

Änderungen:
- Implementierung von neuen Methoden `getAccountSettings` und `setAccountSettings` im `SettingsService`, um Benutzerkontoeinstellungen zu verwalten.
- Anpassung der E-Mail-Verschlüsselung im `User`-Modell zur Verwendung von Buffer für die Speicherung und zur Verbesserung der Fehlerbehandlung bei der Entschlüsselung.
- Hinzufügung eines neuen `immutable`-Feldes im `UserParamType`-Modell, um unveränderliche Einstellungen zu kennzeichnen.
- Anpassungen in den Frontend-Komponenten zur Berücksichtigung von unveränderlichen Feldern und zur Verbesserung der Benutzeroberfläche.

Diese Anpassungen verbessern die Sicherheit der Benutzerdaten und erweitern die Funktionalität der Kontoeinstellungen.
This commit is contained in:
Torsten Schulz (local)
2025-09-15 11:48:00 +02:00
parent eedb1aa7d5
commit d6bfe50b4e
18 changed files with 355 additions and 28 deletions

View File

@@ -1,6 +1,6 @@
<template>
<label>
<input type="checkbox" :checked="value" @change="updateValue($event.target.checked)" :title="$t(tooltipTr)" />
<input type="checkbox" :checked="value" :disabled="disabled" @change="updateValue($event.target.checked)" :title="$t(tooltipTr)" />
<span :style="{ width: width + 'em' }">{{ $t(labelTr) }}</span>
</label>
</template>
@@ -26,6 +26,11 @@ export default {
type: Number,
required: false,
default: 10
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
methods: {

View File

@@ -2,7 +2,7 @@
<label>
<span :style="{ width: width + 'em' }">{{ $t(labelTr) }}</span>
<input type="date" v-model="internalValue" :placeholder="$t(labelTr)" :title="$t(tooltipTr)"
@change="updateValue($event.target.value)" />
:disabled="disabled" @change="updateValue($event.target.value)" />
</label>
</template>
@@ -28,6 +28,11 @@ export default {
type: Number,
required: false,
default: 10
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
data() {

View File

@@ -2,7 +2,7 @@
<label>
<span :style="{ width: width + 'em' }">{{ $t(labelTr) }}</span>
<input type="number" :value="formattedValue" :placeholder="$t(labelTr)" :title="$t(tooltipTr)"
@change="updateValue($event.target.value)" :step="step" />
:disabled="disabled" @change="updateValue($event.target.value)" :step="step" />
<span v-if="postfix">{{ postfix }}</span>
</label>
</template>
@@ -37,6 +37,11 @@ export default {
type: String,
required: false,
default: ''
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
computed: {

View File

@@ -1,6 +1,6 @@
<template>
<div class="dropdown-container">
<div class="dropdown-header" @click="toggleDropdown">
<div class="dropdown-header" @click="disabled ? null : toggleDropdown" :class="{ disabled: disabled }">
<table>
<tr>
<td v-for="(column, index) in columns" :key="column.field">
@@ -48,6 +48,11 @@ export default {
type: String,
default: "Select an option",
},
disabled: {
type: Boolean,
required: false,
default: false
},
},
emits: ['update:modelValue'],
data() {
@@ -63,6 +68,7 @@ export default {
},
methods: {
toggleDropdown() {
if (this.disabled) return;
this.isOpen = !this.isOpen;
},
selectOption(option) {
@@ -129,4 +135,10 @@ tr:hover {
background-color: #e0e0e0;
cursor: pointer;
}
.dropdown-header.disabled {
background-color: #f5f5f5;
color: #999;
cursor: not-allowed;
}
</style>

View File

@@ -2,7 +2,7 @@
<label>
<span :style="{ width: width + 'em' }">{{ $t(labelTr) }}</span>
<input type="number" :value="value" :title="$t(tooltipTr)" :min="min" :max="max"
@change="updateValue($event.target.value)" />
:disabled="disabled" @change="updateValue($event.target.value)" />
</label>
</template>
@@ -34,6 +34,11 @@ export default {
max: {
type: Number,
required: false
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
methods: {

View File

@@ -2,7 +2,7 @@
<label>
<span :style="{ width: width + 'em' }">{{ $t(labelTr) }}</span>
<input type="text" :value="value" :placeholder="$t(labelTr)" :title="$t(tooltipTr)"
@change="validateAndUpdate($event.target.value)" />
:disabled="disabled" @change="validateAndUpdate($event.target.value)" />
</label>
</template>
@@ -31,6 +31,11 @@ export default {
type: String,
required: false,
default: null
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
methods: {

View File

@@ -10,6 +10,7 @@
:preserve-search="true"
:placeholder="$t('select_option')"
:track-by="'value'"
:disabled="disabled"
>
<template #option="{ option }">
<span v-if="option && option.value">{{ getTranslation(option) }}</span>
@@ -42,6 +43,11 @@ export default {
required: true,
default: () => [] // Standardwert hinzufügen, um undefined zu vermeiden
},
disabled: {
type: Boolean,
required: false,
default: false
},
},
data() {
return {

View File

@@ -1,7 +1,7 @@
<template>
<label>
<span :style="{ width: width + 'em' }">{{ $t(labelTr) }}</span>
<select :title="$t(tooltipTr)" :value="value" @change="updateValue($event.target.value)">
<select :title="$t(tooltipTr)" :value="value" :disabled="disabled" @change="updateValue($event.target.value)">
<option v-if="allowNone" :value="noneValue">{{ $t('none') }}</option>
<option v-for="item in list" :key="item.value" :value="item.value">
{{ item.captionTr ? $t(item.captionTr) : item.caption }}
@@ -44,6 +44,11 @@ export default {
type: String,
required: false,
default: ''
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
methods: {