From 19cc64729fe6e8f7d11288450a60e4d534fe15f1 Mon Sep 17 00:00:00 2001 From: deploy Date: Wed, 30 Sep 2026 00:11:48 +0000 Subject: [PATCH] feat(tenants): publico/ passa a vir de ConfigMap, nao mais so da imagem --- moldes/consolidado/96-publico-configmap.yaml | 138 +++++++++++++++---- tenants/plataforma/96-publico-configmap.yaml | 138 +++++++++++++++---- 2 files changed, 230 insertions(+), 46 deletions(-) diff --git a/moldes/consolidado/96-publico-configmap.yaml b/moldes/consolidado/96-publico-configmap.yaml index 8456063..61c3052 100644 --- a/moldes/consolidado/96-publico-configmap.yaml +++ b/moldes/consolidado/96-publico-configmap.yaml @@ -1698,6 +1698,20 @@ data: .termos-uso-caixa input { margin-right: 6px; } .termos-uso-aceite { margin: 10px 0; } + /* ── Abas (2026-09-29) — mesmo desenho do painel do dono ───────────────────── */ + .abas { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin: 4px 0 18px; overflow-x: auto; } + .aba { + background: none; border: 0; border-bottom: 3px solid transparent; padding: 10px 16px; + font: inherit; font-weight: 600; color: var(--muted); cursor: pointer; white-space: nowrap; + } + .aba:hover { color: var(--navy); } + .aba.ativa { color: var(--navy); border-bottom-color: var(--orange); } + .aba .badge { + display: inline-block; min-width: 8px; height: 8px; margin-left: 6px; border-radius: 999px; + background: var(--orange); vertical-align: middle; + } + .aba .badge.num { min-width: 18px; height: auto; padding: 0 6px; font-size: 12px; color: #fff; line-height: 18px; } + minha-conta.html: | @@ -1722,7 +1736,7 @@ data: numero a cada publicacao que mexa nesses arquivos. --> - + @@ -1765,23 +1779,56 @@ data:
- -
-

Visão geral

-

-
-
+ + -
+
+
-
-

Nenhum produto ainda

-

- Se você acabou de pagar, a conta pode estar sendo criada — isso leva - alguns minutos. Se já faz mais tempo, fale com a gente. -

+
+

Nenhum produto ainda

+

+ Se você acabou de pagar, a conta pode estar sendo criada — isso leva + alguns minutos. Se já faz mais tempo, fale com a gente. +

+
+
+ +
+ +
+

Visão geral

+

+
+
+
+

Visão geral

+

Os números aparecem aqui quando as suas escolinhas enviarem o primeiro resumo + (uma vez por dia, de madrugada).

+
+
+ +
+
+
+

Termos de Uso

+

Nada pendente: a versão vigente já foi aceita para todas as suas escolinhas. + Ler os Termos de Uso.

+
+
+ +
+

Assinaturas canceladas. Regularize o pagamento para voltar a entrar; os dados ficam + guardados por 30 dias depois do cancelamento.

+

@@ -1801,7 +1848,7 @@ data:

© 2026 Athletic Map. Todos os direitos reservados.
- + @@ -1870,6 +1917,36 @@ data: var erroTexto = document.getElementById("erroTexto"); var botaoSair = document.getElementById("sair"); + /* ── ABAS (2026-09-29) ──────────────────────────────────────────────────────── + * Minhas escolas | Visao geral | Termos de Uso | Canceladas. A ultima aba aberta + * fica no localStorage (conveniencia deste navegador; sem ela, "escolas"). */ + var ABA_CHAVE = "atm.conta.aba"; + function abrirAba(nome) { + var botao = document.querySelector('.aba[data-aba="' + nome + '"]'); + if (!botao || botao.classList.contains("oculto")) { nome = "escolas"; botao = document.querySelector('.aba[data-aba="escolas"]'); } + if (!botao) return; + document.querySelectorAll(".aba").forEach(function (b) { b.classList.toggle("ativa", b === botao); }); + document.querySelectorAll(".painel-aba").forEach(function (painel) { + painel.classList.toggle("oculto", painel.id !== "aba-" + nome); + }); + try { localStorage.setItem(ABA_CHAVE, nome); } catch (e) { /* aba privada */ } + } + function abaLembrada() { try { return localStorage.getItem(ABA_CHAVE) || "escolas"; } catch (e) { return "escolas"; } } + /* Marca a aba: `pendente` acende a bolinha; `quantos` escreve o numero. */ + function marcarAba(nome, pendente, quantos) { + var botao = document.querySelector('.aba[data-aba="' + nome + '"]'); + if (!botao) return; + var badge = botao.querySelector(".badge"); + if (badge) { + badge.classList.toggle("oculto", !pendente && !quantos); + badge.classList.toggle("num", !!quantos); + badge.textContent = quantos ? String(quantos) : ""; + } + } + document.querySelectorAll(".aba").forEach(function (b) { + b.addEventListener("click", function () { abrirAba(b.getAttribute("data-aba")); }); + }); + function mostrar(qual) { [porta, carregando, conteudo, caixaErro].forEach(function (s) { if (s) s.classList.add("oculto"); @@ -2018,9 +2095,19 @@ data: .then(function (lista) { enderecos = {}; (lista || []).forEach(function (p) { if (p.tenant) enderecos[p.tenant] = p.endereco; }); - produtos.innerHTML = (lista || []).map(cartao).join(""); - nenhum.classList.toggle("oculto", (lista || []).length > 0); + var ativas = (lista || []).filter(function (p) { return p.situacao !== "CANCELADA"; }); + var canceladas = (lista || []).filter(function (p) { return p.situacao === "CANCELADA"; }); + produtos.innerHTML = ativas.map(cartao).join(""); + var caixaCanceladas = document.getElementById("produtosCancelados"); + if (caixaCanceladas) caixaCanceladas.innerHTML = canceladas.map(cartao).join(""); + var abaCanceladas = document.getElementById("abaCanceladas"); + if (abaCanceladas) { + abaCanceladas.classList.toggle("oculto", canceladas.length === 0); + abaCanceladas.textContent = "Canceladas" + (canceladas.length ? " (" + canceladas.length + ")" : ""); + } + nenhum.classList.toggle("oculto", ativas.length > 0); mostrar(conteudo); + abrirAba(abaLembrada()); (lista || []).forEach(function (p) { if (p.tenant && p.situacao === "ATIVA" && !p.demonstracao) acrescentarBotaoDePlano(p.tenant); }); @@ -2329,8 +2416,10 @@ data: .then(function (d) { var velho = document.getElementById("avisoTermos"); if (velho) velho.parentNode.removeChild(velho); - if (!d || !d.versao || !d.escolinhas) return; - var faltam = d.escolinhas.filter(function (e) { return !e.aceito; }); + var emDia = document.getElementById("termosEmDia"); + var faltam = (d && d.versao && d.escolinhas) ? d.escolinhas.filter(function (e) { return !e.aceito; }) : []; + if (emDia) emDia.classList.toggle("oculto", faltam.length > 0); + marcarAba("termos", faltam.length > 0); if (!faltam.length) return; var aviso = document.createElement("section"); aviso.id = "avisoTermos"; @@ -2341,7 +2430,8 @@ data: + ". Você continua usando o sistema, vendo faturas e dados normalmente; só trocar de plano" + " e comprar módulos pedem o aceite.

" + caixaDeAceite(d.versao, "Aceitar"); - produtos.parentNode.insertBefore(aviso, produtos); + var caixaTermos = document.getElementById("termosDeUso"); + if (caixaTermos) caixaTermos.appendChild(aviso); else produtos.parentNode.insertBefore(aviso, produtos); aviso.querySelector("button").addEventListener("click", function () { aceitarTermosDeUso(aviso, d.versao); }); @@ -2594,7 +2684,9 @@ data: .then(function (r) { return r.ok ? r.json() : null; }) .then(function (d) { var tabela = d ? blocoDaVisao(d) : null; - if (!tabela) { caixa.classList.add("oculto"); return; } + var vazia = document.getElementById("visaoVazia"); + if (!tabela) { caixa.classList.add("oculto"); if (vazia) vazia.classList.remove("oculto"); return; } + if (vazia) vazia.classList.add("oculto"); var semDados = (d.escolas || []).filter(function (e) { return !e.temDados; }).length; document.getElementById("visaoSub").innerHTML = "Números de " + nomeDoMes(d.competencia) + ". Só totais — nenhum dado de aluno sai da escolinha. Atualizados uma vez por dia."; diff --git a/tenants/plataforma/96-publico-configmap.yaml b/tenants/plataforma/96-publico-configmap.yaml index 311a08c..933e5b0 100644 --- a/tenants/plataforma/96-publico-configmap.yaml +++ b/tenants/plataforma/96-publico-configmap.yaml @@ -1698,6 +1698,20 @@ data: .termos-uso-caixa input { margin-right: 6px; } .termos-uso-aceite { margin: 10px 0; } + /* ── Abas (2026-09-29) — mesmo desenho do painel do dono ───────────────────── */ + .abas { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin: 4px 0 18px; overflow-x: auto; } + .aba { + background: none; border: 0; border-bottom: 3px solid transparent; padding: 10px 16px; + font: inherit; font-weight: 600; color: var(--muted); cursor: pointer; white-space: nowrap; + } + .aba:hover { color: var(--navy); } + .aba.ativa { color: var(--navy); border-bottom-color: var(--orange); } + .aba .badge { + display: inline-block; min-width: 8px; height: 8px; margin-left: 6px; border-radius: 999px; + background: var(--orange); vertical-align: middle; + } + .aba .badge.num { min-width: 18px; height: auto; padding: 0 6px; font-size: 12px; color: #fff; line-height: 18px; } + minha-conta.html: | @@ -1722,7 +1736,7 @@ data: numero a cada publicacao que mexa nesses arquivos. --> - + @@ -1765,23 +1779,56 @@ data:
- -
-

Visão geral

-

-
-
+ + -
+
+
-
-

Nenhum produto ainda

-

- Se você acabou de pagar, a conta pode estar sendo criada — isso leva - alguns minutos. Se já faz mais tempo, fale com a gente. -

+
+

Nenhum produto ainda

+

+ Se você acabou de pagar, a conta pode estar sendo criada — isso leva + alguns minutos. Se já faz mais tempo, fale com a gente. +

+
+
+ +
+ +
+

Visão geral

+

+
+
+
+

Visão geral

+

Os números aparecem aqui quando as suas escolinhas enviarem o primeiro resumo + (uma vez por dia, de madrugada).

+
+
+ +
+
+
+

Termos de Uso

+

Nada pendente: a versão vigente já foi aceita para todas as suas escolinhas. + Ler os Termos de Uso.

+
+
+ +
+

Assinaturas canceladas. Regularize o pagamento para voltar a entrar; os dados ficam + guardados por 30 dias depois do cancelamento.

+

@@ -1801,7 +1848,7 @@ data:

© 2026 Athletic Map. Todos os direitos reservados.
- + @@ -1870,6 +1917,36 @@ data: var erroTexto = document.getElementById("erroTexto"); var botaoSair = document.getElementById("sair"); + /* ── ABAS (2026-09-29) ──────────────────────────────────────────────────────── + * Minhas escolas | Visao geral | Termos de Uso | Canceladas. A ultima aba aberta + * fica no localStorage (conveniencia deste navegador; sem ela, "escolas"). */ + var ABA_CHAVE = "atm.conta.aba"; + function abrirAba(nome) { + var botao = document.querySelector('.aba[data-aba="' + nome + '"]'); + if (!botao || botao.classList.contains("oculto")) { nome = "escolas"; botao = document.querySelector('.aba[data-aba="escolas"]'); } + if (!botao) return; + document.querySelectorAll(".aba").forEach(function (b) { b.classList.toggle("ativa", b === botao); }); + document.querySelectorAll(".painel-aba").forEach(function (painel) { + painel.classList.toggle("oculto", painel.id !== "aba-" + nome); + }); + try { localStorage.setItem(ABA_CHAVE, nome); } catch (e) { /* aba privada */ } + } + function abaLembrada() { try { return localStorage.getItem(ABA_CHAVE) || "escolas"; } catch (e) { return "escolas"; } } + /* Marca a aba: `pendente` acende a bolinha; `quantos` escreve o numero. */ + function marcarAba(nome, pendente, quantos) { + var botao = document.querySelector('.aba[data-aba="' + nome + '"]'); + if (!botao) return; + var badge = botao.querySelector(".badge"); + if (badge) { + badge.classList.toggle("oculto", !pendente && !quantos); + badge.classList.toggle("num", !!quantos); + badge.textContent = quantos ? String(quantos) : ""; + } + } + document.querySelectorAll(".aba").forEach(function (b) { + b.addEventListener("click", function () { abrirAba(b.getAttribute("data-aba")); }); + }); + function mostrar(qual) { [porta, carregando, conteudo, caixaErro].forEach(function (s) { if (s) s.classList.add("oculto"); @@ -2018,9 +2095,19 @@ data: .then(function (lista) { enderecos = {}; (lista || []).forEach(function (p) { if (p.tenant) enderecos[p.tenant] = p.endereco; }); - produtos.innerHTML = (lista || []).map(cartao).join(""); - nenhum.classList.toggle("oculto", (lista || []).length > 0); + var ativas = (lista || []).filter(function (p) { return p.situacao !== "CANCELADA"; }); + var canceladas = (lista || []).filter(function (p) { return p.situacao === "CANCELADA"; }); + produtos.innerHTML = ativas.map(cartao).join(""); + var caixaCanceladas = document.getElementById("produtosCancelados"); + if (caixaCanceladas) caixaCanceladas.innerHTML = canceladas.map(cartao).join(""); + var abaCanceladas = document.getElementById("abaCanceladas"); + if (abaCanceladas) { + abaCanceladas.classList.toggle("oculto", canceladas.length === 0); + abaCanceladas.textContent = "Canceladas" + (canceladas.length ? " (" + canceladas.length + ")" : ""); + } + nenhum.classList.toggle("oculto", ativas.length > 0); mostrar(conteudo); + abrirAba(abaLembrada()); (lista || []).forEach(function (p) { if (p.tenant && p.situacao === "ATIVA" && !p.demonstracao) acrescentarBotaoDePlano(p.tenant); }); @@ -2329,8 +2416,10 @@ data: .then(function (d) { var velho = document.getElementById("avisoTermos"); if (velho) velho.parentNode.removeChild(velho); - if (!d || !d.versao || !d.escolinhas) return; - var faltam = d.escolinhas.filter(function (e) { return !e.aceito; }); + var emDia = document.getElementById("termosEmDia"); + var faltam = (d && d.versao && d.escolinhas) ? d.escolinhas.filter(function (e) { return !e.aceito; }) : []; + if (emDia) emDia.classList.toggle("oculto", faltam.length > 0); + marcarAba("termos", faltam.length > 0); if (!faltam.length) return; var aviso = document.createElement("section"); aviso.id = "avisoTermos"; @@ -2341,7 +2430,8 @@ data: + ". Você continua usando o sistema, vendo faturas e dados normalmente; só trocar de plano" + " e comprar módulos pedem o aceite.

" + caixaDeAceite(d.versao, "Aceitar"); - produtos.parentNode.insertBefore(aviso, produtos); + var caixaTermos = document.getElementById("termosDeUso"); + if (caixaTermos) caixaTermos.appendChild(aviso); else produtos.parentNode.insertBefore(aviso, produtos); aviso.querySelector("button").addEventListener("click", function () { aceitarTermosDeUso(aviso, d.versao); }); @@ -2594,7 +2684,9 @@ data: .then(function (r) { return r.ok ? r.json() : null; }) .then(function (d) { var tabela = d ? blocoDaVisao(d) : null; - if (!tabela) { caixa.classList.add("oculto"); return; } + var vazia = document.getElementById("visaoVazia"); + if (!tabela) { caixa.classList.add("oculto"); if (vazia) vazia.classList.remove("oculto"); return; } + if (vazia) vazia.classList.add("oculto"); var semDados = (d.escolas || []).filter(function (e) { return !e.temDados; }).length; document.getElementById("visaoSub").innerHTML = "Números de " + nomeDoMes(d.competencia) + ". Só totais — nenhum dado de aluno sai da escolinha. Atualizados uma vez por dia.";