import { api } from '../api'; import { renderNavbar, toast, roleBadge } from '../utils'; const ROLE_OPTIONS = ['ADMIN', 'CAIXA', 'GARCOM', 'COZINHA', 'BARMAN']; export async function renderUsers(container: HTMLElement) { container.innerHTML = ` ${renderNavbar('/users')}
Carregando...
| Nome | Cargo | Status | Desde | AƧƵes | |
|---|---|---|---|---|---|
| ${u.nome} | ${u.email} | ${roleBadge(u.role)} | ${u.ativo ? 'Ativo' : 'Inativo'} | ${new Date(u.criadoEm).toLocaleDateString('pt-BR')} |
Erro: ${err.message}
`; } } function bindUserEvents() { document.getElementById('btn-novo-usuario')?.addEventListener('click', () => { clearUserForm(); (document.getElementById('modal-usuario') as HTMLElement).style.display = 'flex'; (document.getElementById('u-senha') as HTMLInputElement).required = true; (document.getElementById('senha-group') as HTMLElement).style.display = 'block'; }); document.getElementById('form-usuario')?.addEventListener('submit', async (e) => { e.preventDefault(); const id = (document.getElementById('user-id') as HTMLInputElement).value; const senha = (document.getElementById('u-senha') as HTMLInputElement).value; const payload: any = { nome: (document.getElementById('u-nome') as HTMLInputElement).value, email: (document.getElementById('u-email') as HTMLInputElement).value, role: (document.getElementById('u-role') as HTMLSelectElement).value, ativo: (document.getElementById('u-ativo') as HTMLInputElement).checked, }; if (!id) payload.senha = senha; try { if (id) await api.patch(`/usuarios/${id}`, payload); else await api.post('/usuarios', { ...payload, senha }); toast(id ? 'UsuƔrio atualizado!' : 'UsuƔrio cadastrado!', 'success'); (document.getElementById('modal-usuario') as HTMLElement).style.display = 'none'; await loadUsers(); } catch (err: any) { toast(err.message, 'error'); } }); (window as any).editUser = (u: any) => { (document.getElementById('user-id') as HTMLInputElement).value = u.id; (document.getElementById('u-nome') as HTMLInputElement).value = u.nome; (document.getElementById('u-email') as HTMLInputElement).value = u.email; (document.getElementById('u-role') as HTMLSelectElement).value = u.role; (document.getElementById('u-ativo') as HTMLInputElement).checked = u.ativo; (document.getElementById('u-senha') as HTMLInputElement).required = false; (document.getElementById('u-senha') as HTMLInputElement).value = ''; (document.getElementById('senha-group') as HTMLElement).style.display = 'none'; (document.getElementById('modal-user-title') as HTMLElement).textContent = 'Editar UsuƔrio'; (document.getElementById('modal-usuario') as HTMLElement).style.display = 'flex'; }; (window as any).toggleUser = async (id: string, nome: string, ativo: boolean) => { const action = ativo ? 'desativar' : 'ativar'; if (!confirm(`Deseja ${action} o usuƔrio "${nome}"?`)) return; try { await api.patch(`/usuarios/${id}`, { ativo: !ativo }); toast(`UsuƔrio ${ativo ? 'desativado' : 'ativado'}!`, 'success'); await loadUsers(); } catch (err: any) { toast(err.message, 'error'); } }; } function clearUserForm() { (document.getElementById('user-id') as HTMLInputElement).value = ''; (document.getElementById('u-nome') as HTMLInputElement).value = ''; (document.getElementById('u-email') as HTMLInputElement).value = ''; (document.getElementById('u-senha') as HTMLInputElement).value = ''; (document.getElementById('u-role') as HTMLSelectElement).value = 'GARCOM'; (document.getElementById('u-ativo') as HTMLInputElement).checked = true; (document.getElementById('modal-user-title') as HTMLElement).textContent = 'Novo UsuƔrio'; }