Background

Preencha todos os campos abaixo para criar o seu cadastro.

Todos os campos são obrigatórios. Nenhuma dessas informações serão exibidas publicamente.

 

 

 

 
Precisa de ajuda?
// Funções globais para os Modais de Termos function abrirModalTermos() { document.getElementById('modal-termos-overlay').classList.add('active'); } function fecharModalTermos() { document.getElementById('modal-termos-overlay').classList.remove('active'); } // Variável global para o SignaturePad let signaturePad = null; function fecharModalResumo() { document.getElementById('modal-resumo-overlay').classList.remove('active'); } function limparAssinatura() { if(signaturePad) signaturePad.clear(); } document.addEventListener('DOMContentLoaded', function() { const form = document.querySelector('.form-pre-cadastro'); const inputNome = document.getElementById('nome'); const inputCpf = document.getElementById('cpf'); const inputNascimento = document.getElementById('nascimento'); const inputWhatsapp = document.getElementById('whatsapp'); const inputEmail = document.getElementById('emailL'); const senhaX = document.getElementById('senhaX'); const senhaY = document.getElementById('senhaY'); const checkboxTermos = document.getElementById('aceite-termos'); // Inicializar SignaturePad const canvas = document.getElementById('signature-pad'); // Ajuste de DPI para o Canvas não ficar borrado function resizeCanvas() { const ratio = Math.max(window.devicePixelRatio || 1, 1); canvas.width = canvas.offsetWidth * ratio; canvas.height = canvas.offsetHeight * ratio; canvas.getContext("2d").scale(ratio, ratio); if(signaturePad) signaturePad.clear(); } // Inicializa signaturePad = new SignaturePad(canvas, { backgroundColor: 'rgb(255, 255, 255)', penColor: 'rgb(0, 0, 0)' }); window.addEventListener("resize", resizeCanvas); // URL do Ajax do WordPress const wpAjaxUrl = 'https://gatasgyn.com/wp-admin/admin-ajax.php'; // --- MÁSCARAS --- inputCpf.addEventListener('input', function(e) { let v = e.target.value.replace(/\D/g, ""); if (v.length > 11) v = v.slice(0, 11); v = v.replace(/(\d{3})(\d)/, "$1.$2"); v = v.replace(/(\d{3})(\d)/, "$1.$2"); v = v.replace(/(\d{3})(\d{1,2})$/, "$1-$2"); e.target.value = v; }); inputNascimento.addEventListener('input', function(e) { let v = e.target.value.replace(/\D/g, ""); if (v.length > 8) v = v.slice(0, 8); v = v.replace(/(\d{2})(\d)/, "$1/$2"); v = v.replace(/(\d{2})(\d)/, "$1/$2"); e.target.value = v; }); inputWhatsapp.addEventListener('input', function(e) { let v = e.target.value.replace(/\D/g, ""); if (v.length > 11) v = v.slice(0, 11); v = v.replace(/^(\d{2})(\d)/g, "($1) $2"); v = v.replace(/(\d)(\d{4})$/, "$1-$2"); e.target.value = v; }); // --- VALIDAÇÃO INICIAL --- form.addEventListener('submit', async function(e) { e.preventDefault(); const btnSubmit = document.getElementById('btn-pre-cadastro'); const textoOriginal = btnSubmit.innerText; btnSubmit.innerText = "Verificando dados..."; btnSubmit.disabled = true; let erros = []; // 1. Validação de Idade if (!validarIdade(inputNascimento.value)) { erros.push("É necessário ter pelo menos 18 anos para se cadastrar."); } // 2. Validação de Senhas if (senhaX.value !== senhaY.value) { erros.push("As senhas digitadas não coincidem."); } if (senhaX.value.length < 6) { erros.push("A senha deve ter pelo menos 6 caracteres."); } // 3. Validação Captcha const captchaResponse = form.querySelector('[name="cf-turnstile-response"]'); if (!captchaResponse || captchaResponse.value === "") { erros.push("Por favor, confirme que você não é um robô (Captcha)."); } // 4. Validação Whatsapp if(inputWhatsapp.value.length < 15) { erros.push("Por favor, preencha um número de WhatsApp válido."); } // 5. Validação Termos (NOVO) if(!checkboxTermos.checked) { erros.push("Você precisa aceitar os termos de uso para continuar."); } // 6. Verificação de E-mail via AJAX if (inputEmail.value.includes('@') && erros.length === 0) { try { const emailDisponivel = await verificarEmailServidor(inputEmail.value); if (!emailDisponivel) { erros.push("Este e-mail já está cadastrado em nosso sistema."); } } catch (error) { console.error("Erro na verificação de e-mail", error); } } // Restaura botão btnSubmit.innerText = textoOriginal; btnSubmit.disabled = false; // --- DECISÃO --- if (erros.length > 0) { exibirModal("Atenção", erros.join("
")); } else { // SUCESSO NA VALIDAÇÃO PRELIMINAR -> ABRIR MODAL DE RESUMO abrirModalResumo(); } }); // Função para Preencher e Abrir o Modal de Resumo function abrirModalResumo() { // Preencher dados document.getElementById('resumo-nome').innerText = inputNome.value; document.getElementById('resumo-cpf').innerText = inputCpf.value; document.getElementById('resumo-nasc').innerText = inputNascimento.value; document.getElementById('resumo-email').innerText = inputEmail.value; document.getElementById('resumo-zap').innerText = inputWhatsapp.value; // Abrir Modal document.getElementById('modal-resumo-overlay').classList.add('active'); // Importante: Redimensionar o canvas após o modal ficar visível setTimeout(resizeCanvas, 100); } // --- SUBMISSÃO FINAL (BOTÃO DO MODAL DE RESUMO) --- document.getElementById('btn-finalizar-cadastro').addEventListener('click', function() { // Verifica se assinou if (signaturePad.isEmpty()) { alert("Por favor, faça sua assinatura no quadro branco."); return; } // Se quiser pegar a imagem da assinatura no futuro: // const signatureData = signaturePad.toDataURL(); const btnFinalizar = this; btnFinalizar.innerText = "Processando..."; btnFinalizar.disabled = true; // Prepara envio Ajax const formData = new FormData(); formData.append('action', 'harmonics_processar_cadastro'); formData.append('nome', inputNome.value); formData.append('cpf', inputCpf.value); formData.append('nascimento', inputNascimento.value); formData.append('email', inputEmail.value); formData.append('whatsapp', inputWhatsapp.value); formData.append('senha', senhaX.value); // formData.append('assinatura', signaturePad.toDataURL()); // Se decidir salvar depois fetch(wpAjaxUrl, { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { // Fecha modal de resumo fecharModalResumo(); if(data.success) { exibirModal("Sucesso!", "O pré-cadastro foi feito com sucesso.

Após uma avaliação criteriosa da nossa equipe, retornaremos o contato em até 48 horas úteis."); form.reset(); limparAssinatura(); checkboxTermos.checked = false; } else { exibirModal("Erro", data.data.message || "Erro ao processar cadastro."); } btnFinalizar.innerText = "Salvar e concluir pré cadastro"; btnFinalizar.disabled = false; }) .catch(err => { console.error(err); fecharModalResumo(); exibirModal("Erro", "Ocorreu um erro de conexão. Tente novamente."); btnFinalizar.innerText = "Salvar e concluir pré cadastro"; btnFinalizar.disabled = false; }); }); // --- FUNÇÕES AUXILIARES --- async function verificarEmailServidor(email) { const formData = new FormData(); formData.append('action', 'verificar_email_existente'); formData.append('email', email); const response = await fetch(wpAjaxUrl, { method: 'POST', body: formData }); const data = await response.json(); return data.success; } function validarIdade(dataString) { if(dataString.length !== 10) return false; const partes = dataString.split('/'); const dia = parseInt(partes[0], 10); const mes = parseInt(partes[1], 10) - 1; const ano = parseInt(partes[2], 10); const dataNasc = new Date(ano, mes, dia); const dataAtual = new Date(); let idade = dataAtual.getFullYear() - dataNasc.getFullYear(); const mesAtual = dataAtual.getMonth(); if (mesAtual < mes || (mesAtual === mes && dataAtual.getDate() < dia)) idade--; return idade >= 18; } function exibirModal(titulo, mensagem) { // Remove modal anterior se existir (apenas o de alerta, não os estruturais) // Nota: Mudei a classe para evitar conflito com os novos modais fixos const modalsAlert = document.querySelectorAll('.custom-modal-overlay.alert-modal'); modalsAlert.forEach(m => m.remove()); const htmlModal = `
${titulo}
${mensagem}
`; document.body.insertAdjacentHTML('beforeend', htmlModal); } });