chore(tenants): conteudo de publico/ atualizado

This commit is contained in:
deploy
2026-09-26 23:08:22 +00:00
parent aca839abf6
commit 13e2f4339a
2 changed files with 146 additions and 12 deletions
+73 -6
View File
@@ -1439,6 +1439,17 @@ data:
.cobranca.pendente { margin: 20px -20px -20px; padding: 16px 20px 20px; }
}
/* ── as faturas, dentro do cartao ─────────────────────────────────────────── */
.faturas { align-self: stretch; margin-top: 16px; font-size: 14px; }
.faturas summary { cursor: pointer; font-weight: 600; color: var(--navy); }
.lista-faturas { list-style: none; margin: 10px 0 0; padding: 0; }
.lista-faturas li {
display: grid; grid-template-columns: 1fr 1fr auto auto; gap: 10px; align-items: center;
padding: 7px 0; border-top: 1px solid var(--line);
}
.lista-faturas .selo { margin: 0; }
.lista-faturas a { color: var(--orange-600, #c2410c); font-weight: 600; }
minha-conta.html: |
<!DOCTYPE html>
<html lang="pt-BR">
@@ -1463,7 +1474,7 @@ data:
numero a cada publicacao que mexa nesses arquivos.
-->
<link rel="stylesheet" href="/publico/fontes/fontes.css">
<link rel="stylesheet" href="/publico/minha-conta.css?v=2.83">
<link rel="stylesheet" href="/publico/minha-conta.css?v=2.84">
</head>
<body>
@@ -1517,8 +1528,8 @@ data:
</div>
<p class="rodape">
Cobran&ccedil;as, faturas e recibos ficam no e-mail que voc&ecirc; recebeu do
pagamento. Precisa de ajuda?
As faturas de cada escolinha est&atilde;o no cart&atilde;o dela, e tamb&eacute;m chegam
ao e-mail do pagamento. Precisa de ajuda?
<a href="mailto:contato@athleticmap.com">contato@athleticmap.com</a>
</p>
</section>
@@ -1533,7 +1544,7 @@ data:
<footer class="direitos">&copy; 2026 Athletic Map. Todos os direitos reservados.</footer>
<script src="/publico/minha-conta.js?v=2.83"></script>
<script src="/publico/minha-conta.js?v=2.84"></script>
</body>
</html>
@@ -1572,7 +1583,8 @@ data:
RETORNO: location.origin + "/minha-conta",
API: "/api/cliente/meus-produtos",
COBRANCA: "/api/cliente/cobranca",
TERMO: "/api/cliente/termo-de-dados"
TERMO: "/api/cliente/termo-de-dados",
FATURAS: "/api/cliente/faturas"
};
var CHAVE_VERIFIER = "atm.conta.verifier";
@@ -1744,7 +1756,7 @@ data:
produtos.innerHTML = (lista || []).map(cartao).join("");
nenhum.classList.toggle("oculto", (lista || []).length > 0);
mostrar(conteudo);
return Promise.all([carregarCobranca(), carregarTermo()]);
return Promise.all([carregarCobranca(), carregarTermo(), carregarFaturas()]);
});
}
@@ -1894,6 +1906,61 @@ data:
});
}
/* ── AS FATURAS DA ASSINATURA ────────────────────────────────────────────────
*
* As cobranças da Athletic Map para o cliente (não as dos alunos), com o link
* da fatura do Asaas — que vira recibo quando paga. Fechadas por padrão: são
* consulta, e não pendência. Falhar aqui não derruba a tela. */
var SITUACAO_DA_FATURA = {
PAGA: ["ok", "paga"], VENCIDA: ["alerta", "vencida"],
A_VENCER: ["neutro", "a vencer"], OUTRA: ["neutro", "—"]
};
function reais(v) {
var n = Number(v);
return isNaN(n) ? "—" : "R$ " + n.toFixed(2).replace(".", ",");
}
function blocoDeFaturas(e) {
var lista = e.faturas || [];
var corpo;
if (!e.disponivel) {
corpo = '<p class="ajuda">N&atilde;o consegui buscar as faturas agora. Elas tamb&eacute;m chegam ao seu e-mail.</p>';
} else if (!lista.length) {
corpo = '<p class="ajuda">Nenhuma fatura ainda.</p>';
} else {
corpo = '<ul class="lista-faturas">' + lista.map(function (f) {
var s = SITUACAO_DA_FATURA[f.situacao] || SITUACAO_DA_FATURA.OUTRA;
var link = linkSeguro(f.fatura);
return "<li><span>" + escapar(dataCurta(f.vencimento)) + "</span>"
+ "<span>" + escapar(reais(f.valor)) + "</span>"
+ '<span class="selo ' + s[0] + '">' + s[1] + "</span>"
+ (link ? '<a href="' + escapar(link) + '" target="_blank" rel="noopener noreferrer">'
+ (f.situacao === "PAGA" ? "recibo" : "pagar") + "</a>" : "<span></span>")
+ "</li>";
}).join("") + "</ul>";
}
return '<details class="faturas"><summary>Faturas' + (lista.length ? " (" + lista.length + ")" : "")
+ "</summary>" + corpo + "</details>";
}
function carregarFaturas() {
return fetch(CONFIG.FATURAS, { headers: { Authorization: "Bearer " + token } })
.then(function (r) { return r.ok ? r.json() : []; })
.then(function (lista) {
produtos.querySelectorAll(".faturas").forEach(function (el) { el.remove(); });
(lista || []).forEach(function (e) {
var alvo = null;
produtos.querySelectorAll("article[data-tenant]").forEach(function (el) {
if (el.getAttribute("data-tenant") === e.tenant) alvo = el;
});
if (alvo) alvo.insertAdjacentHTML("beforeend", blocoDeFaturas(e));
});
})
.catch(function (e) { if (window.console) console.warn("faturas:", e); });
}
/* ── O TERMO DE DADOS ────────────────────────────────────────────────────────
*
* A autorizacao para a Athletic Map ver o USO do sistema (ultimo acesso,
+73 -6
View File
@@ -1439,6 +1439,17 @@ data:
.cobranca.pendente { margin: 20px -20px -20px; padding: 16px 20px 20px; }
}
/* ── as faturas, dentro do cartao ─────────────────────────────────────────── */
.faturas { align-self: stretch; margin-top: 16px; font-size: 14px; }
.faturas summary { cursor: pointer; font-weight: 600; color: var(--navy); }
.lista-faturas { list-style: none; margin: 10px 0 0; padding: 0; }
.lista-faturas li {
display: grid; grid-template-columns: 1fr 1fr auto auto; gap: 10px; align-items: center;
padding: 7px 0; border-top: 1px solid var(--line);
}
.lista-faturas .selo { margin: 0; }
.lista-faturas a { color: var(--orange-600, #c2410c); font-weight: 600; }
minha-conta.html: |
<!DOCTYPE html>
<html lang="pt-BR">
@@ -1463,7 +1474,7 @@ data:
numero a cada publicacao que mexa nesses arquivos.
-->
<link rel="stylesheet" href="/publico/fontes/fontes.css">
<link rel="stylesheet" href="/publico/minha-conta.css?v=2.83">
<link rel="stylesheet" href="/publico/minha-conta.css?v=2.84">
</head>
<body>
@@ -1517,8 +1528,8 @@ data:
</div>
<p class="rodape">
Cobran&ccedil;as, faturas e recibos ficam no e-mail que voc&ecirc; recebeu do
pagamento. Precisa de ajuda?
As faturas de cada escolinha est&atilde;o no cart&atilde;o dela, e tamb&eacute;m chegam
ao e-mail do pagamento. Precisa de ajuda?
<a href="mailto:contato@athleticmap.com">contato@athleticmap.com</a>
</p>
</section>
@@ -1533,7 +1544,7 @@ data:
<footer class="direitos">&copy; 2026 Athletic Map. Todos os direitos reservados.</footer>
<script src="/publico/minha-conta.js?v=2.83"></script>
<script src="/publico/minha-conta.js?v=2.84"></script>
</body>
</html>
@@ -1572,7 +1583,8 @@ data:
RETORNO: location.origin + "/minha-conta",
API: "/api/cliente/meus-produtos",
COBRANCA: "/api/cliente/cobranca",
TERMO: "/api/cliente/termo-de-dados"
TERMO: "/api/cliente/termo-de-dados",
FATURAS: "/api/cliente/faturas"
};
var CHAVE_VERIFIER = "atm.conta.verifier";
@@ -1744,7 +1756,7 @@ data:
produtos.innerHTML = (lista || []).map(cartao).join("");
nenhum.classList.toggle("oculto", (lista || []).length > 0);
mostrar(conteudo);
return Promise.all([carregarCobranca(), carregarTermo()]);
return Promise.all([carregarCobranca(), carregarTermo(), carregarFaturas()]);
});
}
@@ -1894,6 +1906,61 @@ data:
});
}
/* ── AS FATURAS DA ASSINATURA ────────────────────────────────────────────────
*
* As cobranças da Athletic Map para o cliente (não as dos alunos), com o link
* da fatura do Asaas — que vira recibo quando paga. Fechadas por padrão: são
* consulta, e não pendência. Falhar aqui não derruba a tela. */
var SITUACAO_DA_FATURA = {
PAGA: ["ok", "paga"], VENCIDA: ["alerta", "vencida"],
A_VENCER: ["neutro", "a vencer"], OUTRA: ["neutro", "—"]
};
function reais(v) {
var n = Number(v);
return isNaN(n) ? "—" : "R$ " + n.toFixed(2).replace(".", ",");
}
function blocoDeFaturas(e) {
var lista = e.faturas || [];
var corpo;
if (!e.disponivel) {
corpo = '<p class="ajuda">N&atilde;o consegui buscar as faturas agora. Elas tamb&eacute;m chegam ao seu e-mail.</p>';
} else if (!lista.length) {
corpo = '<p class="ajuda">Nenhuma fatura ainda.</p>';
} else {
corpo = '<ul class="lista-faturas">' + lista.map(function (f) {
var s = SITUACAO_DA_FATURA[f.situacao] || SITUACAO_DA_FATURA.OUTRA;
var link = linkSeguro(f.fatura);
return "<li><span>" + escapar(dataCurta(f.vencimento)) + "</span>"
+ "<span>" + escapar(reais(f.valor)) + "</span>"
+ '<span class="selo ' + s[0] + '">' + s[1] + "</span>"
+ (link ? '<a href="' + escapar(link) + '" target="_blank" rel="noopener noreferrer">'
+ (f.situacao === "PAGA" ? "recibo" : "pagar") + "</a>" : "<span></span>")
+ "</li>";
}).join("") + "</ul>";
}
return '<details class="faturas"><summary>Faturas' + (lista.length ? " (" + lista.length + ")" : "")
+ "</summary>" + corpo + "</details>";
}
function carregarFaturas() {
return fetch(CONFIG.FATURAS, { headers: { Authorization: "Bearer " + token } })
.then(function (r) { return r.ok ? r.json() : []; })
.then(function (lista) {
produtos.querySelectorAll(".faturas").forEach(function (el) { el.remove(); });
(lista || []).forEach(function (e) {
var alvo = null;
produtos.querySelectorAll("article[data-tenant]").forEach(function (el) {
if (el.getAttribute("data-tenant") === e.tenant) alvo = el;
});
if (alvo) alvo.insertAdjacentHTML("beforeend", blocoDeFaturas(e));
});
})
.catch(function (e) { if (window.console) console.warn("faturas:", e); });
}
/* ── O TERMO DE DADOS ────────────────────────────────────────────────────────
*
* A autorizacao para a Athletic Map ver o USO do sistema (ultimo acesso,