chore(tenants): conteudo de publico/ atualizado

This commit is contained in:
deploy
2026-10-06 19:47:24 +00:00
parent b557b30ce1
commit 3ce7254dc7
10 changed files with 4286 additions and 378 deletions
+27 -13
View File
@@ -3756,7 +3756,7 @@ data:
</main>
<script src="/publico/painel.js?v=2.88"></script>
<script src="/publico/painel.js?v=2.89"></script>
</body>
</html>
@@ -4238,7 +4238,8 @@ data:
+ (whatsapp(c.whatsapp) ? '<a class="btn claro" href="' + esc(whatsapp(c.whatsapp)) + '" target="_blank" rel="noopener noreferrer">WhatsApp</a>' : "")
+ (c.email ? '<a class="btn claro" href="mailto:' + esc(c.email) + '">E-mail</a>' : "")
+ (f.faturaVencida ? '<a class="btn claro" href="' + esc(linkSeguro(f.faturaVencida) || "#") + '" target="_blank" rel="noopener noreferrer">Fatura vencida</a>' : "")
+ (c.tenant ? '<button type="button" class="btn claro" data-licenca="' + esc(c.tenant) + '">Reenviar licença</button>' : "")
+ (c.tenant ? '<button type="button" class="btn claro" data-licenca="' + esc(c.tenant) + '" data-acao="reenviar">Reenviar licença</button>'
+ '<button type="button" class="btn claro" data-licenca="' + esc(c.tenant) + '" data-acao="trocar">Trocar chave</button>' : "")
+ '</div><p id="licencaAviso" class="ajuda" aria-live="polite"></p></header>'
+ (alertas ? '<ul class="lista-alertas">' + alertas + "</ul>" : "")
@@ -4760,20 +4761,31 @@ data:
corpo.addEventListener("keydown", function (ev) { if (ev.key === "Enter") aoEscolher(ev); });
$("alertas").addEventListener("click", aoEscolher);
/* ── licenca do app do treinador ──────────────────────────────────────────
* Reenviar = gerar uma chave NOVA e mandar ao dono da compra. A anterior
* deixa de valer para ATIVAR (quem ja ativou o app continua entrando: o app
* guarda a escolinha, nao a chave). Por isso pede confirmacao. */
/* ── licenca dos apps (dono, treinador, pais) ─────────────────────────────
* Reenviar = mandar a MESMA chave da escola ao dono da compra (captacao 4.32+;
* so a chave antiga, guardada so com hash, e trocada uma vez). Nada muda para
* ninguem: sem confirmacao.
* Trocar = revogar a chave e gerar outra. Desde os apps 1.0.4 (captacao 4.33)
* o app pergunta a situacao da chave ao abrir: trocar DERRUBA os apps de todos
* da escola (dono, treinadores, pais) em ate 15 min de uso, e cada um precisa
* da chave nova. Por isso pede o nome do tenant digitado. */
var API_LICENCA = "/api/plataforma/painel/licencas/";
function reenviarLicenca(tenant, aviso) {
function acaoDaLicenca(tenant, acao, aviso) {
if (!tokenAtual) return Promise.resolve();
if (!window.confirm("Gerar uma chave NOVA para " + tenant + " e mandar por e-mail ao dono da compra?\n\n"
+ "A chave atual deixa de valer para ativar o app (quem já ativou continua entrando).")) {
return Promise.resolve();
if (acao === "trocar") {
var digitado = window.prompt("TROCAR a chave de " + tenant + "?\n\n"
+ "A chave atual para de valer e os apps de TODOS da escola (dono, treinadores e pais) saem da conta "
+ "em até 15 minutos de uso; cada um vai precisar da chave nova, que vai por e-mail ao dono da compra.\n"
+ "Use só se a chave vazou.\n\nPara confirmar, digite o nome do tenant (" + tenant + "):");
if (digitado === null) return Promise.resolve();
if (digitado.trim() !== tenant) {
aviso.textContent = "Nada foi trocado: o nome digitado não confere.";
return Promise.resolve();
}
}
aviso.textContent = "Enviando…";
return fetch(API_LICENCA + encodeURIComponent(tenant) + "/reenviar", {
return fetch(API_LICENCA + encodeURIComponent(tenant) + "/" + acao, {
method: "POST", headers: { "x-atm-admin-token": tokenAtual, "Content-Type": "application/json" }, body: "{}"
}).then(function (r) {
if (r.status === 401) throw new Error("O token expirou. Saia e entre de novo no painel.");
@@ -4782,7 +4794,8 @@ data:
return d;
});
}).then(function (d) {
aviso.textContent = (d.emailEnviado ? "Chave nova enviada para " : "Chave nova criada; o e-mail vai em instantes para ")
var oQue = acao === "trocar" ? "Chave NOVA" : "Chave da escola";
aviso.textContent = oQue + (d.emailEnviado ? " enviada para " : " pronta; o e-mail vai em instantes para ")
+ (d.destino || "o dono da compra") + " (termina em " + d.finalDaChave + ").";
}).catch(function (e) {
aviso.textContent = e && e.message && e.message !== "Failed to fetch" ? e.message : "Sem conexão com o servidor.";
@@ -4793,7 +4806,8 @@ data:
var b = ev.target.closest ? ev.target.closest("[data-licenca]") : null;
if (!b) return;
b.disabled = true;
reenviarLicenca(b.getAttribute("data-licenca"), $("licencaAviso")).then(function () { b.disabled = false; });
acaoDaLicenca(b.getAttribute("data-licenca"), b.getAttribute("data-acao") || "reenviar", $("licencaAviso"))
.then(function () { b.disabled = false; });
});
$("fecharFicha").addEventListener("click", fecharFicha);