feat(match-report): enhance test mode with validation results display and improve original report comparison layout
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 55s

This commit is contained in:
Torsten Schulz (local)
2026-09-02 15:41:05 +02:00
parent c26b540fed
commit 472c769573

View File

@@ -40,8 +40,8 @@
</div>
<div v-if="isTestMode" class="test-data-inspector">
<details v-if="originalTestReport" class="original-report-comparison">
<summary>Originalbericht zum Vergleich</summary>
<section v-if="originalTestReport" class="original-report-comparison">
<h3>Originalbericht zum Vergleich</h3>
<div class="comparison-summary">
<span><strong>Status:</strong> {{ getOriginalReportStatus() }}</span>
<span><strong>Spielstand:</strong> {{ getOriginalReportScore() }}</span>
@@ -75,7 +75,7 @@
</tbody>
</table>
</div>
</details>
</section>
<details>
<summary>Originaldaten anzeigen (technisch)</summary>
<pre>{{ formatTestData(originalTestReport || originalTestInput) }}</pre>
@@ -86,6 +86,15 @@
</details>
</div>
<div v-if="isTestMode && testSubmissionResult" class="test-submit-result"
:class="testSubmissionResult.valid ? 'test-success' : 'test-error'">
<strong>{{ testSubmissionResult.valid ? '✓ Testprüfung erfolgreich' : '⚠ Testprüfung fehlgeschlagen' }}</strong>
<p>{{ testSubmissionResult.summary }}</p>
<ul v-if="testSubmissionResult.messages.length">
<li v-for="message in testSubmissionResult.messages" :key="message">{{ message }}</li>
</ul>
</div>
<div v-if="isTestMode && (meetingDetails?.isCompleted || meetingData?.isCompleted)" class="test-verification">
<button type="button" class="btn-secondary" @click="verifyCompletedMatchProjection">
🧪 Gespeicherte Paarungen prüfen
@@ -852,6 +861,7 @@ export default {
error: null,
isTestMode: this.standaloneTest,
testVerification: null,
testSubmissionResult: null,
originalTestInput: null,
// Unveränderliche Referenz auf den offiziellen Bericht, bevor der
// Testmodus seinen vollständig leeren lokalen Zustand erzeugt.
@@ -1185,6 +1195,7 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
handler() {
// Ein früherer Prüfhinweis gilt nach einer lokalen Änderung nicht mehr.
this.testVerification = null;
this.testSubmissionResult = null;
this.persistLocalDraftDebounced();
},
deep: true
@@ -1194,6 +1205,7 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
// Änderungen an Aufstellung, Doppelbesetzung oder Spieldaten
// machen einen bereits angezeigten Abgleich hinfällig.
this.testVerification = null;
this.testSubmissionResult = null;
this.persistLocalDraftDebounced();
},
deep: true
@@ -1909,17 +1921,40 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
return true;
},
runTestValidation() {
const messages = [];
const teamNotAppeared = this.teamNotAppeared !== null;
if (!teamNotAppeared) {
if (!this.areAllMatchResultsValid()) {
messages.push('Die Ergebniserfassung enthält unvollständige oder ungültige Spiele.');
}
if (!this.areStartAndEndTimesValid()) {
messages.push('Start- und Endzeit müssen beide gesetzt sein.');
}
if (!this.isHomeLineupCertified) {
messages.push('Die Heimaufstellung wurde noch nicht bestätigt.');
}
if (!this.isGuestLineupCertified) {
messages.push('Die Gastaufstellung wurde noch nicht bestätigt.');
}
}
this.testSubmissionResult = {
valid: messages.length === 0,
summary: messages.length === 0
? 'Der lokale Testbericht erfüllt alle Prüfregeln. Es wurden keine Daten an NuScore übermittelt.'
: 'Der lokale Testbericht kann in diesem Zustand nicht abgeschlossen werden. Es wurden keine Daten an NuScore übermittelt.',
messages
};
},
async submitMatchReport() {
try {
console.log('🚀 Starte Spielbericht-Absendung...');
if (this.isTestMode) {
if (this.standaloneTest) {
this.submitSucceeded = true;
this.meetingData.isCompleted = true;
this.meetingDetails.isCompleted = true;
}
alert('🧪 Testmodus: Der Spielbericht wurde nur lokal geprüft und nicht an nuScore übermittelt.');
this.runTestValidation();
return;
}
@@ -3375,6 +3410,7 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
this.submitSucceeded = false;
this.initialCompletionState = false;
this.testVerification = null;
this.testSubmissionResult = null;
this.activeSection = 'general';
await this.$nextTick();
@@ -5212,6 +5248,12 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
background: #f7fbf8 !important;
}
.original-report-comparison h3 {
margin: 0 0 10px;
color: #216e39;
font-size: 14px;
}
.comparison-summary {
display: flex;
flex-wrap: wrap;
@@ -5293,6 +5335,23 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
background: #fffaf0;
}
.test-submit-result {
margin: 0 0 16px;
padding: 12px 14px;
border: 1px solid currentColor;
border-radius: 8px;
background: #fff;
}
.test-submit-result p {
margin: 6px 0 0;
}
.test-submit-result ul {
margin: 8px 0 0;
padding-left: 20px;
}
.test-verification p {
margin: 10px 0 0;
font-size: 13px;