From 50ef370c2bc5acfa7eba178da3b0bad24df29b0a Mon Sep 17 00:00:00 2001 From: andersonid Date: Fri, 4 Apr 2025 16:01:41 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20comportamento=20dos=20campos?= =?UTF-8?q?=20de=20data=20para=20manter=20calend=C3=A1rio=20e=20formato=20?= =?UTF-8?q?brasileiro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/militantes.js | 109 +++++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/static/js/militantes.js b/static/js/militantes.js index c583691..c962f70 100644 --- a/static/js/militantes.js +++ b/static/js/militantes.js @@ -18,6 +18,7 @@ function formatarData(data) { // Função para converter data de DD/MM/YYYY para YYYY-MM-DD function converterDataParaISO(data) { if (!data) return ''; + if (data.includes('-')) return data; // Já está no formato ISO const [dia, mes, ano] = data.split('/'); return `${ano}-${mes}-${dia}`; } @@ -168,6 +169,41 @@ function filtrarMilitantes() { updatePagination(); } +// Função para configurar um campo de data +function configurarCampoData(campo) { + if (!campo) return; + + // Criar um campo de texto para exibição + const campoTexto = document.createElement('input'); + campoTexto.type = 'text'; + campoTexto.className = campo.className; + campoTexto.placeholder = 'dd/mm/aaaa'; + campoTexto.readOnly = true; // Evita edição manual + + // Esconder o campo original mas manter ao lado + campo.type = 'date'; + campo.style.position = 'absolute'; + campo.style.left = '-9999px'; + + // Inserir o campo de texto antes do campo de data + campo.parentNode.insertBefore(campoTexto, campo); + + // Se já tiver valor, formatar + if (campo.value) { + campoTexto.value = formatarData(campo.value); + } + + // Quando o campo original mudar, atualizar o texto + campo.addEventListener('change', function() { + campoTexto.value = this.value ? formatarData(this.value) : ''; + }); + + // Quando clicar no campo de texto, abrir o calendário + campoTexto.addEventListener('click', function() { + campo.showPicker(); + }); +} + // Configurar eventos quando o DOM estiver carregado document.addEventListener('DOMContentLoaded', function() { console.log('DOM carregado, configurando eventos...'); @@ -229,7 +265,10 @@ document.addEventListener('DOMContentLoaded', function() { console.log('Configurando modal de edição...'); - // Configuração do modal de edição + // Configurar campos de data + document.querySelectorAll('input[type="date"]').forEach(configurarCampoData); + + // Configurar modal de edição const modalEditarMilitante = document.getElementById('modalEditarMilitante'); if (modalEditarMilitante) { @@ -290,9 +329,9 @@ document.addEventListener('DOMContentLoaded', function() { 'edit_nome': dados.nome, 'edit_cpf': dados.cpf, 'edit_titulo_eleitoral': dados.titulo_eleitoral, - 'edit_data_nascimento': dados.data_nascimento ? formatarData(dados.data_nascimento) : '', - 'edit_data_entrada': dados.data_entrada_oci ? formatarData(dados.data_entrada_oci) : '', - 'edit_data_efetivacao': dados.data_efetivacao_oci ? formatarData(dados.data_efetivacao_oci) : '', + 'edit_data_nascimento': dados.data_nascimento, + 'edit_data_entrada': dados.data_entrada_oci, + 'edit_data_efetivacao': dados.data_efetivacao_oci, 'edit_telefone1': dados.telefone1, 'edit_telefone2': dados.telefone2, 'edit_email': dados.email, @@ -319,11 +358,16 @@ document.addEventListener('DOMContentLoaded', function() { // Preencher cada campo se ele existir Object.entries(campos).forEach(([id, valor]) => { const campo = document.getElementById(id); - if (campo && valor !== undefined && valor !== null) { - campo.value = valor; - // Se for campo de data, ajustar o tipo para text + if (campo) { if (campo.type === 'date') { - campo.type = 'text'; + // Para campos de data, atualizar também o campo de texto + campo.value = valor || ''; + const campoTexto = campo.previousElementSibling; + if (campoTexto && campoTexto.type === 'text') { + campoTexto.value = valor ? formatarData(valor) : ''; + } + } else { + campo.value = valor || ''; } } }); @@ -384,14 +428,8 @@ document.addEventListener('DOMContentLoaded', function() { e.preventDefault(); console.log('Enviando formulário de edição...'); - // Converter datas para formato ISO antes do envio - const camposData = this.querySelectorAll('input[type="text"][name*="data"]'); - camposData.forEach(campo => { - if (campo.value) { - campo.value = converterDataParaISO(campo.value); - } - }); - + // Os campos de data já estarão no formato ISO, não precisa converter + // Coletar responsabilidades selecionadas const responsabilidades = []; if (document.getElementById('edit_resp_1').checked) responsabilidades.push('Finanças'); @@ -479,14 +517,8 @@ document.addEventListener('DOMContentLoaded', function() { formNovoMilitante.addEventListener('submit', function(e) { e.preventDefault(); - // Converter datas para formato ISO antes do envio - const camposData = this.querySelectorAll('input[type="text"][name*="data"]'); - camposData.forEach(campo => { - if (campo.value) { - campo.value = converterDataParaISO(campo.value); - } - }); - + // Os campos de data já estarão no formato ISO, não precisa converter + const formData = new FormData(this); fetch(this.action, { @@ -746,35 +778,6 @@ document.addEventListener('DOMContentLoaded', function() { }); }); - // Configurar campos de data para formato brasileiro - const camposData = document.querySelectorAll('input[type="date"]'); - camposData.forEach(campo => { - // Quando o campo receber foco, usar o formato ISO para o input type="date" - campo.addEventListener('focus', function() { - if (this.value) { - const dataISO = converterDataParaISO(this.value); - this.type = 'date'; - this.value = dataISO; - } - }); - - // Quando o campo perder foco, mostrar no formato brasileiro - campo.addEventListener('blur', function() { - if (this.value) { - const dataBR = formatarData(this.value); - this.type = 'text'; - this.value = dataBR; - } - }); - - // Inicializar com o formato brasileiro se já tiver valor - if (campo.value) { - const dataBR = formatarData(campo.value); - campo.type = 'text'; - campo.value = dataBR; - } - }); - // Inicializar paginação updateVisibleRows(); updatePagination();