Substitui botoes de texto por icones na tela de Lembretes

This commit is contained in:
Tiago
2026-10-09 16:16:07 -03:00
parent b4ab4642de
commit 215583489b
2 changed files with 19 additions and 5 deletions
+1 -1
View File
@@ -1 +1 @@
<!doctype html><html lang="pt-BR"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Lembrete</title><link rel="stylesheet" href="/css/app.css"><script src="/js/auth.js"></script><script src="/js/util.js"></script><script src="/js/api.js"></script><script src="/js/layout.js"></script></head><body><main><div class="topbar"><h1>Lembrete</h1></div><section class="panel"><div class="section-head"><h2>Lembretes</h2><div class="section-actions"><button class="search-icon-btn" type="button" onclick="alternarBuscaLembretes()" aria-label="Buscar lembretes" title="Buscar"><svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m16.5 16.5 4 4"></path></svg></button><button class="btn" type="button" onclick="abrirNovoLembrete()">Novo</button></div></div><div id="lembrete-search" class="search-strip hidden"><input id="lembrete-search-input" placeholder="Buscar por titulo, mensagem, status ou destinatario"></div><div class="table-wrap"><table><thead><tr><th>Titulo</th><th>Data/hora</th><th>Status</th><th>Destinatarios</th><th>Acoes</th></tr></thead><tbody id="rows"></tbody></table></div></section><div id="lembrete-modal" class="modal hidden"><div class="modal-backdrop" onclick="fecharLembreteModal()"></div><section class="modal-panel"><div class="modal-head"><h2 id="lembrete-modal-title">Novo lembrete</h2><button class="btn secondary" type="button" onclick="fecharLembreteModal()">Fechar</button></div><div id="lembrete-modal-body"></div></section></div></main><script>Layout.mount('empresa','lembretes');</script><script src="/cliente/lembretes.js"></script></body></html>
<!doctype html><html lang="pt-BR"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Lembrete</title><link rel="stylesheet" href="/css/app.css"><script src="/js/auth.js"></script><script src="/js/util.js"></script><script src="/js/api.js"></script><script src="/js/layout.js"></script></head><body><main><div class="topbar"><h1>Lembrete</h1></div><section class="panel"><div class="section-head"><h2>Lembretes</h2><div class="section-actions"><button class="search-icon-btn" type="button" onclick="alternarBuscaLembretes()" aria-label="Buscar lembretes" title="Buscar"><svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m16.5 16.5 4 4"></path></svg></button><button class="header-add-btn" type="button" onclick="abrirNovoLembrete()" title="Novo lembrete" aria-label="Novo lembrete"><svg viewBox="0 0 24 24" aria-hidden="true"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg></button></div></div><div id="lembrete-search" class="search-strip hidden"><input id="lembrete-search-input" placeholder="Buscar por titulo, mensagem, status ou destinatario"></div><div class="table-wrap"><table><thead><tr><th>Título</th><th>Data/Hora</th><th>Status</th><th>Destinatários</th><th style="text-align:right">Ações</th></tr></thead><tbody id="rows"></tbody></table></div></section><div id="lembrete-modal" class="modal hidden"><div class="modal-backdrop" onclick="fecharLembreteModal()"></div><section class="modal-panel"><div class="modal-head"><h2 id="lembrete-modal-title">Novo lembrete</h2><button class="btn secondary" type="button" onclick="fecharLembreteModal()">Fechar</button></div><div id="lembrete-modal-body"></div></section></div></main><script>Layout.mount('empresa','lembretes');</script><script src="/cliente/lembretes.js"></script></body></html>
+18 -4
View File
@@ -41,6 +41,12 @@ function renderPessoasForm(){
updateNotifSummary();
}
const Icons = {
send: '<svg viewBox="0 0 24 24" aria-hidden="true"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg>',
edit: '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>',
trash: '<svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg>'
};
function renderLembretes(){
const q=termo();
const lista=lembretes.filter(l=>{
@@ -49,8 +55,16 @@ function renderLembretes(){
});
rows.innerHTML=lista.map(l=>{
const dest=(l.destinatarios||[]).map(x=>x.nome).join(', ')||'-';
const acoes=l.pode_alterar?`<button class="btn" onclick="enviar(${l.id})">Enviar</button> ${l.pode_editar?`<button class="btn secondary" onclick="editar(${l.id})">Editar</button>`:''} <button class="btn danger" onclick="excluir(${l.id})">Excluir</button>`:'-';
return `<tr><td><strong>${esc(l.titulo)}</strong><br><span class="muted">${esc(l.mensagem)}</span></td><td>${Util.date(l.data_hora)}<br><span class="muted">${recLabel(l.recorrencia_meses)}</span></td><td>${Util.badge(l.status)}</td><td>${esc(dest)}</td><td>${acoes}</td></tr>`;
let btns = '';
if(l.pode_alterar){
btns += `<button class="table-icon-btn send" type="button" onclick="enviar(${l.id})" title="Enviar lembrete" aria-label="Enviar lembrete">${Icons.send}</button>`;
if(l.pode_editar){
btns += ` <button class="table-icon-btn" type="button" onclick="editar(${l.id})" title="Editar lembrete" aria-label="Editar lembrete">${Icons.edit}</button>`;
}
btns += ` <button class="table-icon-btn danger" type="button" onclick="excluir(${l.id})" title="Excluir lembrete" aria-label="Excluir lembrete">${Icons.trash}</button>`;
}
const acoes=btns?`<div class="table-actions">${btns}</div>`:'-';
return `<tr><td><strong>${esc(l.titulo)}</strong><br><span class="muted">${esc(l.mensagem)}</span></td><td>${Util.date(l.data_hora)}<br><span class="muted">${recLabel(l.recorrencia_meses)}</span></td><td>${Util.badge(l.status)}</td><td>${esc(dest)}</td><td style="text-align:right">${acoes}</td></tr>`;
}).join('')||'<tr><td colspan="5">Nenhum lembrete encontrado.</td></tr>';
}
@@ -101,8 +115,8 @@ window.editar=id=>{
updateNotifSummary();
};
window.enviar=async id=>{try{const r=await Api.post(`/api/lembretes/${id}/enviar`,{});const en=r.envio||{};Util.toast(en.falhas?("Enviados: "+(en.enviados||0)+". Falhas: "+en.falhas):("Lembrete enviado para "+(en.enviados||0)));await load()}catch(e){Util.toast(e.message,true)}};
window.excluir=async id=>{try{await Api.request(`/api/lembretes/${id}`,{method:'DELETE'});Util.toast('Lembrete excluido');await load();fecharLembreteModal()}catch(e){Util.toast(e.message,true)}};
window.enviar=async id=>{if(!await Util.confirm('Deseja disparar o envio deste lembrete agora?','Enviar lembrete'))return;try{const r=await Api.post(`/api/lembretes/${id}/enviar`,{});const en=r.envio||{};Util.toast(en.falhas?("Enviados: "+(en.enviados||0)+". Falhas: "+en.falhas):("Lembrete enviado para "+(en.enviados||0)));await load()}catch(e){Util.toast(e.message,true)}};
window.excluir=async id=>{if(!await Util.confirm('Tem certeza que deseja excluir este lembrete? Esta ação não pode ser desfeita.','Excluir lembrete'))return;try{await Api.request(`/api/lembretes/${id}`,{method:'DELETE'});Util.toast('Lembrete excluido');await load();fecharLembreteModal()}catch(e){Util.toast(e.message,true)}};
document.querySelector('#lembrete-search-input')?.addEventListener('input',renderLembretes);
(async()=>{try{await loadPessoas();await load();refreshTimer=setInterval(load,5000)}catch(e){Util.toast(e.message,true)}})();