query("SELECT id, username, role, nama_lengkap, created_at FROM users ORDER BY id ASC")->fetchAll(); $pageTitle = 'Kelola Users'; $activeNav = 'users'; require_once __DIR__ . '/partials/header.php'; ?>
$r): ?>
#UsernameNama LengkapRoleDibuatAksi
👨‍💼 Admin 👤 Pengguna
const API = APP_BASE + '/api/users.php'; function editRow(r) { document.getElementById('editId').value = r.id; document.getElementById('editUsername').value = r.username; document.getElementById('editNama').value = r.nama_lengkap || ''; document.getElementById('editRole').value = r.role; document.getElementById('editPassword').value = ''; openModal('modalEdit'); } async function simpan() { const u = document.getElementById('tUsername').value.trim(); const p = document.getElementById('tPassword').value; if (!u) return showToast('Username wajib!', 'error'); if (p.length < 6) return showToast('Password minimal 6 karakter!', 'error'); const res = await fetch(API, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: u, nama_lengkap: document.getElementById('tNama').value, role: document.getElementById('tRole').value, password: p }) }); const d = await res.json(); if (d.status === 'success') { showToast('User berhasil ditambahkan!'); setTimeout(() => location.reload(), 900); } else showToast(d.message || 'Gagal', 'error'); } async function update() { const id = document.getElementById('editId').value; const u = document.getElementById('editUsername').value.trim(); const p = document.getElementById('editPassword').value; if (!u) return showToast('Username wajib!', 'error'); if (p && p.length < 6) return showToast('Password minimal 6 karakter!', 'error'); const body = { username: u, nama_lengkap: document.getElementById('editNama').value, role: document.getElementById('editRole').value }; if (p) body.password = p; const res = await fetch(API + '?id=' + id, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }); const d = await res.json(); if (d.status === 'success') { showToast('User diperbarui!'); setTimeout(() => location.reload(), 900); } else showToast(d.message || 'Gagal', 'error'); } async function hapus(id, username) { if (id == 1) return showToast('Admin utama (ID=1) tidak dapat dihapus!', 'error'); if (!confirm(`Hapus user "${username}"?`)) return; const res = await fetch(API + '?id=' + id, { method: 'DELETE' }); const d = await res.json(); if (d.status === 'success') { showToast('User dihapus!'); setTimeout(() => location.reload(), 900); } else showToast(d.message || 'Gagal', 'error'); } JS; ?>