Implementa múltipla seleção de tags via pills e suporte a Relatório Global com a opção todas as crianças
This commit is contained in:
+30
-7
@@ -2680,8 +2680,9 @@ const initApp = () => {
|
||||
const emitirFilterCrianca = document.getElementById('emitirFilterCrianca');
|
||||
const emitirFilterDataInicio = document.getElementById('emitirFilterDataInicio');
|
||||
const emitirFilterDataFim = document.getElementById('emitirFilterDataFim');
|
||||
const emitirFilterTag = document.getElementById('emitirFilterTag');
|
||||
const emitirTagsContainer = document.getElementById('emitirTagsContainer');
|
||||
const emitirFilterTemplate = document.getElementById('emitirFilterTemplate');
|
||||
let emitirSelectedTags = [];
|
||||
|
||||
const emitirObsCountInfo = document.getElementById('emitirObsCountInfo');
|
||||
const btnGenerateCompiledReport = document.getElementById('btnGenerateCompiledReport');
|
||||
@@ -2714,7 +2715,11 @@ const initApp = () => {
|
||||
|
||||
emitirFilterDataInicio.value = '';
|
||||
emitirFilterDataFim.value = '';
|
||||
emitirFilterTag.value = '';
|
||||
|
||||
emitirSelectedTags = [];
|
||||
if (emitirTagsContainer) {
|
||||
emitirTagsContainer.querySelectorAll('.tag-pill').forEach(p => p.classList.remove('active'));
|
||||
}
|
||||
|
||||
await loadFiltersData();
|
||||
});
|
||||
@@ -2748,6 +2753,7 @@ const initApp = () => {
|
||||
const res = await fetch(url);
|
||||
const criancas = await res.json();
|
||||
emitirFilterCrianca.innerHTML = '<option value="">Selecione a criança</option>' +
|
||||
`<option value="todas" ${activeCrianca === 'todas' ? 'selected' : ''}>Todas as crianças (Relatório Global)</option>` +
|
||||
(Array.isArray(criancas) ? criancas : []).map(c => `<option value="${c}" ${c === activeCrianca ? 'selected' : ''}>${c}</option>`).join('');
|
||||
} catch (err) {
|
||||
console.error('Erro ao carregar lista de crianças:', err);
|
||||
@@ -2804,25 +2810,42 @@ const initApp = () => {
|
||||
});
|
||||
}
|
||||
|
||||
[emitirFilterCrianca, emitirFilterDataInicio, emitirFilterDataFim, emitirFilterTag, emitirFilterTemplate].forEach(el => {
|
||||
[emitirFilterCrianca, emitirFilterDataInicio, emitirFilterDataFim, emitirFilterTemplate].forEach(el => {
|
||||
if (el) el.addEventListener('change', updateObservationsCount);
|
||||
});
|
||||
if (emitirFilterCrianca) {
|
||||
emitirFilterCrianca.addEventListener('input', updateObservationsCount);
|
||||
}
|
||||
|
||||
// Adicionar ouvintes para as pills de tags
|
||||
if (emitirTagsContainer) {
|
||||
emitirTagsContainer.querySelectorAll('.tag-pill').forEach(pill => {
|
||||
pill.addEventListener('click', () => {
|
||||
const tag = pill.getAttribute('data-tag');
|
||||
if (pill.classList.contains('active')) {
|
||||
pill.classList.remove('active');
|
||||
emitirSelectedTags = emitirSelectedTags.filter(t => t !== tag);
|
||||
} else {
|
||||
pill.classList.add('active');
|
||||
emitirSelectedTags.push(tag);
|
||||
}
|
||||
updateObservationsCount();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Recalcular quantidade de observações elegíveis
|
||||
async function updateObservationsCount() {
|
||||
const crianca = emitirFilterCrianca ? emitirFilterCrianca.value : '';
|
||||
const dataInicio = emitirFilterDataInicio ? emitirFilterDataInicio.value : '';
|
||||
const dataFim = emitirFilterDataFim ? emitirFilterDataFim.value : '';
|
||||
const tag = emitirFilterTag ? emitirFilterTag.value : '';
|
||||
const tag = emitirSelectedTags.join(',');
|
||||
const modeloId = emitirFilterTemplate ? emitirFilterTemplate.value : '';
|
||||
const ano = emitirFilterAno ? emitirFilterAno.value : '';
|
||||
const turma = emitirFilterTurma ? emitirFilterTurma.value : '';
|
||||
|
||||
if (!crianca || !modeloId) {
|
||||
emitirObsCountInfo.textContent = 'Escolha uma criança e um modelo para prosseguir.';
|
||||
emitirObsCountInfo.textContent = 'Escolha uma criança (ou "Todas") e um modelo para prosseguir.';
|
||||
btnGenerateCompiledReport.disabled = true;
|
||||
btnGenerateCompiledReport.style.opacity = '0.6';
|
||||
btnGenerateCompiledReport.style.cursor = 'not-allowed';
|
||||
@@ -2863,7 +2886,7 @@ const initApp = () => {
|
||||
const crianca = emitirFilterCrianca.value;
|
||||
const dataInicio = emitirFilterDataInicio.value;
|
||||
const dataFim = emitirFilterDataFim.value;
|
||||
const tag = emitirFilterTag.value;
|
||||
const tags = emitirSelectedTags;
|
||||
const modeloId = emitirFilterTemplate.value;
|
||||
const ano = emitirFilterAno ? emitirFilterAno.value : '';
|
||||
const turma = emitirFilterTurma ? emitirFilterTurma.value : '';
|
||||
@@ -2887,7 +2910,7 @@ const initApp = () => {
|
||||
crianca,
|
||||
dataInicio,
|
||||
dataFim,
|
||||
tags: tag || undefined,
|
||||
tags: tags.length > 0 ? tags : undefined,
|
||||
modeloId,
|
||||
ano,
|
||||
turma
|
||||
|
||||
Reference in New Issue
Block a user