feat(controller): valida cambi giocatori già in formazione lato client

This commit is contained in:
2026-02-12 00:30:36 +01:00
parent 581a567c17
commit 94a0b0735f

View File

@@ -165,6 +165,7 @@
<input type="text" v-model="c.out" placeholder="OUT" class="input-num cambi-out-field" />
</div>
</div>
<div v-if="cambiError" class="cambi-error">{{ cambiError }}</div>
<div class="dialog-buttons">
<button class="btn btn-cancel" @click="closeCambi()">Annulla</button>
<button class="btn btn-confirm" :disabled="!cambiValid" @click="confermaCambi()">CONFERMA</button>
@@ -194,6 +195,7 @@ export default {
{ in: "", out: "" },
{ in: "", out: "" },
],
cambiError: "",
configData: {
nomeHome: "",
nomeGuest: "",
@@ -463,19 +465,49 @@ export default {
this.showCambiTeam = false
this.cambiTeam = team
this.cambiData = [{ in: "", out: "" }, { in: "", out: "" }]
this.cambiError = ""
this.showCambi = true
},
closeCambi() {
this.showCambi = false
this.cambiData = [{ in: "", out: "" }, { in: "", out: "" }]
this.cambiError = ""
},
confermaCambi() {
if (!this.cambiValid) return
this.cambiError = ""
const cambi = this.cambiData
.filter(c => (c.in || "").trim() && (c.out || "").trim())
.map(c => ({ in: c.in.trim(), out: c.out.trim() }))
// Simula i cambi in sequenza per validare
const formCorrente = this.state.sp.form[this.cambiTeam].map(v => String(v).trim())
const formSimulata = [...formCorrente]
for (const cambio of cambi) {
if (!/^\d+$/.test(cambio.in) || !/^\d+$/.test(cambio.out)) {
this.cambiError = "I numeri dei giocatori devono essere cifre"
return
}
if (cambio.in === cambio.out) {
this.cambiError = `Il giocatore ${cambio.in} non può sostituire sé stesso`
return
}
if (formSimulata.includes(cambio.in)) {
this.cambiError = `Il giocatore ${cambio.in} è già in formazione`
return
}
if (!formSimulata.includes(cambio.out)) {
this.cambiError = `Il giocatore ${cambio.out} non è in formazione`
return
}
const idx = formSimulata.indexOf(cambio.out)
formSimulata.splice(idx, 1, cambio.in)
}
this.sendAction({ type: 'confermaCambi', team: this.cambiTeam, cambi })
this.closeCambi()
},
@@ -866,4 +898,11 @@ export default {
background: rgba(200, 120, 120, 0.2) !important;
border-color: rgba(200, 120, 120, 0.4) !important;
}
.cambi-error {
color: #ff6b6b;
font-size: 14px;
text-align: center;
padding: 8px 0;
font-weight: 600;
}
</style>