File manager - Edit - /var/www/html/transparencia/public/js/satisfactionSurvey.js
Back
// public/js/satisfaction-survey.js // Variáveis globais let satisfactionChart = null; // Inicialização quando o documento estiver pronto $(document).ready(function() { initializeSatisfactionSurvey(); }); function initializeSatisfactionSurvey() { // Carregar dados do gráfico carregarDadosGrafico(); // Configurar evento de submit do formulário $('#form-satisfacao').on('submit', function(e) { e.preventDefault(); enviarFormulario(); }); // Configurar evento do botão cancelar $('#cancel-satisfacao').on('click', function() { cancelarFormulario(); }); } // Função para carregar opções baseadas na avaliação selecionada function verOPC(opcao) { const icons = document.querySelectorAll(".radio-satisfacao i"); const dinamicoForm = document.getElementById("form-dinamico-satisfacao"); const tituloForm = document.getElementById("form-titulo"); const qOPC = "opc" + opcao; const aOPC = document.getElementById(qOPC).innerHTML; document.getElementById("satisfacao").value = aOPC; // Exibir formulário dinamicoForm.style.display = "block"; tituloForm.textContent = `Avaliação como ${aOPC}`; // Limpar e destacar ícone selecionado icons.forEach((icon) => { icon.classList.remove("icon-muito-ruim", "icon-ruim", "icon-regular", "icon-bom", "icon-muito-bom"); }); const classeCorrespondente = getClassByIndex(opcao); document.getElementById(opcao).classList.add(classeCorrespondente); // Carregar opções dinâmicas $.ajax({ type: 'GET', url: `/pesquisa-satisfacao/opcoes/${opcao}`, success: function(retorno) { if (retorno) { const partes = retorno.split('#'); const selectElement = document.getElementById("resposta"); selectElement.innerHTML = ""; selectElement.appendChild(new Option("--- Selecione sua Resposta ---", "")); for (let i = 0; i < partes.length; i++) { if (partes[i]) { selectElement.appendChild(new Option(partes[i], partes[i])); } } } }, error: function() { console.error('Erro ao carregar opções'); } }); } // Função para obter classe CSS baseada no índice function getClassByIndex(index) { switch (index) { case "1": return "icon-muito-ruim"; case "2": return "icon-ruim"; case "3": return "icon-regular"; case "4": return "icon-bom"; case "5": return "icon-muito-bom"; default: return ""; } } // Função para remover classes de cor dos ícones function removerClass() { const icons = document.querySelectorAll(".radio-satisfacao i"); icons.forEach((icon) => { icon.classList.remove("icon-muito-ruim", "icon-ruim", "icon-regular", "icon-bom", "icon-muito-bom"); }); } // Função para enviar formulário function enviarFormulario() { const formData = $('#form-satisfacao').serialize(); $.ajax({ type: 'POST', url: '/pesquisa-satisfacao', data: formData, success: function(response) { alert(response.message); // Limpar formulário document.getElementById("nome").value = ""; document.getElementById("email").value = ""; document.getElementById("resposta").selectedIndex = 0; removerClass(); document.getElementById("form-dinamico-satisfacao").style.display = "none"; // Atualizar gráfico carregarDadosGrafico(); }, error: function(xhr) { // Mostrar erros específicos if (xhr.status === 422) { const errors = xhr.responseJSON.errors; let errorMessage = 'Erros de validação:\n'; for (const field in errors) { errorMessage += `- ${errors[field][0]}\n`; } alert(errorMessage); } else { alert('Ocorreu um erro ao salvar as informações.'); } } }); } // Função para cancelar formulário function cancelarFormulario() { document.getElementById("nome").value = ""; document.getElementById("email").value = ""; document.getElementById("resposta").selectedIndex = 0; removerClass(); document.getElementById("form-dinamico-satisfacao").style.display = "none"; } // Função para carregar dados do gráfico function carregarDadosGrafico() { $.ajax({ type: 'GET', url: '/pesquisa-satisfacao/dados-grafico', success: function(response) { atualizarGrafico(response.labels, response.data, response.counts); atualizarTextoResultados(response.counts, response.data); }, error: function() { console.error('Erro ao carregar dados do gráfico'); } }); } // Função para atualizar o gráfico function atualizarGrafico(labels, data, counts) { const ctx = document.getElementById('satisfactionChart').getContext('2d'); // Destruir gráfico anterior se existir if (satisfactionChart) { satisfactionChart.destroy(); } satisfactionChart = new Chart(ctx, { type: 'bar', data: { labels: labels, datasets: [{ label: "Satisfação (%)", data: data, backgroundColor: [ '#28a745', // Muito Bom '#007bff', // Bom '#ffc107', // Regular '#dc3545', // Ruim '#343a40' // Muito Ruim ], borderColor: [ '#218838', '#0069d9', '#e0a800', '#c82333', '#212529' ], borderWidth: 1 }] }, options: { indexAxis: 'y', responsive: true, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function(context) { return context.parsed.x.toFixed(1) + '%'; } } } }, scales: { x: { beginAtZero: true, max: 100, ticks: { callback: function(value) { return value + '%'; } } } } } }); } // Função para atualizar texto dos resultados function atualizarTextoResultados(counts, percentages) { const texto = `Muito Bom: ${percentages[0]}% (${counts['Muito Bom']} votos) | Bom: ${percentages[1]}% (${counts['Bom']} votos) | Regular: ${percentages[2]}% (${counts['Regular']} votos) | Ruim: ${percentages[3]}% (${counts['Ruim']} votos) | Muito Ruim: ${percentages[4]}% (${counts['Muito Ruim']} votos)`; const elementoTexto = document.getElementById('resultados-texto'); if (elementoTexto) { elementoTexto.textContent = texto; } } // Função para mostrar/ocultar resultados function divResultado() { const div = document.getElementById("minhaDiv"); const link = document.querySelector(".toggle-resultado"); if (div && link) { div.classList.toggle("ativo"); if (div.classList.contains("ativo")) { link.textContent = "Ocultar resultado da Pesquisa de satisfação"; } else { link.textContent = "Exibir resultado da Pesquisa de satisfação"; } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings