chore(tenants): conteudo de publico/ atualizado
This commit is contained in:
@@ -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ças, faturas e recibos ficam no e-mail que você recebeu do
|
||||
pagamento. Precisa de ajuda?
|
||||
As faturas de cada escolinha estão no cartão dela, e també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">© 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ão consegui buscar as faturas agora. Elas també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,
|
||||
|
||||
@@ -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ças, faturas e recibos ficam no e-mail que você recebeu do
|
||||
pagamento. Precisa de ajuda?
|
||||
As faturas de cada escolinha estão no cartão dela, e també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">© 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ão consegui buscar as faturas agora. Elas també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,
|
||||
|
||||
Reference in New Issue
Block a user