Refactor FalukantService and update UI components: Removed debug logging from FalukantService, added age requirement messages in i18n files, and improved age validation display in PoliticsView. This enhances user experience and code clarity regarding age eligibility for political applications.

This commit is contained in:
Torsten Schulz (local)
2026-02-06 00:14:16 +01:00
parent 56c38c04aa
commit 2f29f43409
5 changed files with 36 additions and 17 deletions

View File

@@ -18,14 +18,14 @@
<tbody>
<tr v-for="product in products" :key="product.id">
<td>{{ $t(`falukant.product.${product.labelTr}`) }}</td>
<td>{{ product.knowledges[0].knowledge }} %</td>
<td>{{ product.knowledges?.[0]?.knowledge ?? 0 }} %</td>
<td>
<button
v-if="ownRunningEducations.length === 0"
@click="learnItem(product.id, 'self')"
>
{{ $t('falukant.education.learn') }}
({{ formatCost(getSelfCost(product.knowledges[0].knowledge)) }})
({{ formatCost(getSelfCost(product.knowledges?.[0]?.knowledge ?? 0)) }})
</button>
</td>
</tr>
@@ -171,11 +171,23 @@ export default {
activeChild: null,
}
},
watch: {
activeTab: {
async handler(tab) {
if (tab === 'director' && this.directors.length === 0) {
await this.loadDirectors();
}
if (tab === 'children' && this.children.length === 0) {
await this.loadChildren();
}
}
}
},
async mounted() {
await this.loadProducts();
await this.loadEducations();
await this.loadDirectors();
await this.loadChildren();
if (this.activeTab === 'director') await this.loadDirectors();
},
methods: {
// Basis-Funktion: lineare Interpolation
@@ -193,7 +205,8 @@ export default {
return this.computeCost(knowledge, 'one');
},
getSelfAllCost() {
const avg = this.products.reduce((sum, p) => sum + (p.knowledges[0].knowledge||0), 0) / this.products.length;
if (!this.products?.length) return 0;
const avg = this.products.reduce((sum, p) => sum + (p.knowledges?.[0]?.knowledge || 0), 0) / this.products.length;
return this.computeCost(avg, 'all');
},
@@ -209,12 +222,14 @@ export default {
},
getChildrenAllCost(childId) {
const child = this.children.find(c => c.id === childId);
const avg = (child.knowledge || []).reduce((s,k) => s + k.knowledge, 0) / (child.knowledge?.length||1);
if (!child || !Array.isArray(child.knowledge)) return 0;
const avg = child.knowledge.reduce((s, k) => s + (k.knowledge || 0), 0) / (child.knowledge.length || 1);
return this.computeCost(avg, 'all');
},
childNotInLearning() {
const child = this.children.find(c => c.id === this.activeChild);
return !this.childrenRunningEducations.some(e => e.learningCharacter.id === child.id);
if (!child) return true;
return !this.childrenRunningEducations.some(e => e.learningCharacter?.id === child.id);
},
// DIRECTOR

View File

@@ -57,6 +57,7 @@
<!-- OPEN Tab: hier zeigen wir 'openPolitics' -->
<div v-else-if="activeTab === 'openPolitics'" class="tab-pane">
<p class="politics-age-requirement">{{ $t('falukant.politics.open.ageRequirement') }}</p>
<div v-if="loading.openPolitics" class="loading">{{ $t('loading') }}</div>
<div v-else class="table-scroll">
<table class="politics-table">
@@ -65,7 +66,7 @@
<th>{{ $t('falukant.politics.open.office') }}</th>
<th>{{ $t('falukant.politics.open.region') }}</th>
<th>{{ $t('falukant.politics.open.date') }}</th>
<th>{{ $t('falukant.politics.open.candidacy') }}</th>
<th>{{ $t('falukant.politics.open.candidacyWithAge') }}</th>
</tr>
</thead>
<tbody>
@@ -247,10 +248,6 @@ export default {
try {
const { data } = await apiClient.get('/api/falukant/politics/open');
this.openPolitics = Array.isArray(data) ? data : [];
// Debug: Alters-Flag prüfen
if (this.openPolitics.length > 0) {
console.log('[PoliticsView] loadOpenPolitics: count=', this.openPolitics.length, 'first.canApplyByAge=', this.openPolitics[0].canApplyByAge, 'first.id=', this.openPolitics[0].id);
}
// Bereits beworbene Positionen vorselektieren, damit die Checkbox
// sichtbar markiert bleibt.
this.selectedApplications = this.openPolitics
@@ -435,6 +432,13 @@ h2 {
overflow: hidden;
}
.politics-age-requirement {
flex: 0 0 auto;
margin: 0 0 10px 0;
font-size: 0.95em;
color: #555;
}
.table-scroll {
flex: 1;
overflow-y: auto;