diff --git a/public/admin.js b/public/admin.js new file mode 100644 index 0000000..5fbfb14 --- /dev/null +++ b/public/admin.js @@ -0,0 +1,99 @@ +// admin.js — Admin paneli günlük liste mantığı +(function () { + const filterDate = document.getElementById('filterDate'); + const refreshBtn = document.getElementById('refreshBtn'); + const listEl = document.getElementById('appointmentList'); + const summaryEl = document.getElementById('summary'); + + function todayISO() { + return new Date().toISOString().split('T')[0]; + } + + // Günün randevularını yükle + async function loadAppointments(date) { + listEl.innerHTML = '

Yükleniyor...

'; + try { + const res = await fetch(`/api/appointments?date=${encodeURIComponent(date)}`); + const list = await res.json(); + renderList(list, date); + } catch (err) { + listEl.innerHTML = '

Liste yüklenemedi.

'; + summaryEl.textContent = ''; + } + } + + function renderList(list, date) { + if (!Array.isArray(list) || list.length === 0) { + listEl.innerHTML = '

Bu gün için randevu bulunmuyor. 🎉

'; + summaryEl.textContent = `${date} — toplam 0 randevu`; + return; + } + + summaryEl.textContent = `${date} — toplam ${list.length} randevu`; + + listEl.innerHTML = ''; + list.forEach(a => { + const item = document.createElement('div'); + item.className = 'appointment-item'; + + const timeBadge = document.createElement('span'); + timeBadge.className = 'time-badge'; + timeBadge.textContent = a.time; + + const info = document.createElement('div'); + info.className = 'info'; + info.innerHTML = ` +
${escapeHtml(a.name)}
+
${escapeHtml(a.service || 'Genel')} • Tel: ${escapeHtml(a.phone)}
+ ${a.notes ? `
📝 ${escapeHtml(a.notes)}
` : ''} + `; + + const actions = document.createElement('div'); + actions.className = 'actions'; + const delBtn = document.createElement('button'); + delBtn.className = 'btn btn-danger'; + delBtn.textContent = 'Sil'; + delBtn.addEventListener('click', () => deleteAppointment(a.id)); + actions.appendChild(delBtn); + + item.appendChild(timeBadge); + item.appendChild(info); + item.appendChild(actions); + listEl.appendChild(item); + }); + } + + async function deleteAppointment(id) { + if (!confirm('Bu randevuyu silmek istediğinize emin misiniz?')) return; + try { + const res = await fetch(`/api/appointments/${id}`, { method: 'DELETE' }); + if (res.ok) { + loadAppointments(filterDate.value || todayISO()); + } else { + alert('Silme sırasında hata oluştu.'); + } + } catch (err) { + alert('Bağlantı hatası.'); + } + } + + function escapeHtml(str) { + const div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; + } + + // Varsayılan: bugün + filterDate.value = todayISO(); + + refreshBtn.addEventListener('click', () => { + loadAppointments(filterDate.value || todayISO()); + }); + + filterDate.addEventListener('change', () => { + loadAppointments(filterDate.value || todayISO()); + }); + + // İlk yükleme + loadAppointments(todayISO()); +})();