Grande correção do filtro de veiculos na area de consolidação

This commit is contained in:
2026-07-03 09:58:59 -03:00
parent 83310e9e66
commit eca6df39eb
17 changed files with 681 additions and 41 deletions

View File

@@ -9,6 +9,7 @@ export default class extends Controller {
"linha", "checkbox", "selecionarTodos", "busca", "buscaVazia",
"resumo", "listaCol", "btnResumoLabel",
"toggles", "barra", "barraManuais", "percentual", "chipVeiculo",
"consolidarBtn", "consolidarHint",
"contadorClassificadas", "contadorTotal", "contadorManuais", "manuaisInfo",
"qtdNormal", "qtdRetirada", "qtdBonus", "qtdDesconto", "qtdExtraordinaria",
"qtdTermo", "qtdManuais", "valorTotal"
@@ -217,6 +218,23 @@ export default class extends Controller {
this.barraTarget.classList.toggle("bg-green-500", pct >= 100)
this.barraTarget.classList.toggle("bg-orange-500", pct < 100)
// Botão "Consolidar este veículo" (só existe quando UM veículo está
// selecionado e ainda não fechado): habilita quando o escopo chega a 100%.
if (this.hasConsolidarBtnTarget) {
const pronto = pct >= 100
this.consolidarBtnTarget.disabled = !pronto
this.consolidarBtnTarget.classList.toggle("bg-green-600", pronto)
this.consolidarBtnTarget.classList.toggle("hover:bg-green-500", pronto)
this.consolidarBtnTarget.classList.toggle("text-white", pronto)
this.consolidarBtnTarget.classList.toggle("cursor-pointer", pronto)
this.consolidarBtnTarget.classList.toggle("bg-[#2a2a2a]", !pronto)
this.consolidarBtnTarget.classList.toggle("text-gray-600", !pronto)
this.consolidarBtnTarget.classList.toggle("cursor-not-allowed", !pronto)
if (this.hasConsolidarHintTarget)
this.consolidarHintTarget.textContent =
pronto ? "Pronto para consolidar." : "Classifique 100% deste veículo para consolidar."
}
if (dados.veiculos_status) this.atualizarChips(dados.veiculos_status)
}
@@ -227,9 +245,12 @@ export default class extends Controller {
const porVeiculo = {}
status.forEach(v => { porVeiculo[v.vehicle] = v })
const VERDE = ["border-green-500", "text-green-400", "bg-green-500/10"]
const LARANJA = ["border-orange-500", "text-orange-400", "bg-orange-500/10"]
const NEUTRO = ["border-[#2a2a2a]", "text-gray-300"]
const LARANJA = ["border-orange-500", "text-orange-400", "bg-orange-500/10"]
const VERDE_FECHADO = ["border-green-500", "text-green-400", "bg-green-500/10"]
const VERDE_PRONTO = ["border-green-600/50", "text-green-400"]
const ARQUIVADO = ["border-dashed", "border-[#3a3a3a]", "text-gray-500"]
const NEUTRO = ["border-[#2a2a2a]", "text-gray-300"]
const TODAS = [...LARANJA, ...VERDE_FECHADO, ...VERDE_PRONTO, ...ARQUIVADO, ...NEUTRO]
this.chipVeiculoTargets.forEach(chip => {
const dados = porVeiculo[chip.dataset.vehicle]
@@ -237,17 +258,23 @@ export default class extends Controller {
const feito = chip.querySelector("[data-chip-feito]")
const total = chip.querySelector("[data-chip-total]")
const check = chip.querySelector("[data-chip-check]")
const lock = chip.querySelector("[data-chip-lock]")
if (feito) feito.textContent = dados.classificadas
if (total) total.textContent = dados.eligible
if (check) check.textContent = dados.fechado ? "✓" : ""
if (check) check.textContent = dados.completo ? "✓" : ""
if (lock) lock.classList.toggle("hidden", !dados.fechado)
// Estado de cor determinístico: laranja (selecionado) > verde (fechado) > neutro.
// Seleção tem prioridade para o usuário sempre enxergar quais carros somam.
chip.classList.remove(...VERDE, ...LARANJA, ...NEUTRO)
// Cor determinística: selecionado(laranja) > consolidado(verde+🔒) >
// pronto(verde) > arquivado(cinza) > neutro.
chip.classList.remove(...TODAS)
if (this.veiculosValue.includes(chip.dataset.vehicle)) {
chip.classList.add(...LARANJA)
} else if (dados.fechado) {
chip.classList.add(...VERDE)
chip.classList.add(...VERDE_FECHADO)
} else if (dados.completo) {
chip.classList.add(...VERDE_PRONTO)
} else if (dados.arquivado) {
chip.classList.add(...ARQUIVADO)
} else {
chip.classList.add(...NEUTRO)
}