// AdminOrders — admin view of all orders with status edit. const { useState: useAdmOState, useEffect: useAdmOEffect } = React; const ADMIN_STATUSES = ['Posted', 'Pending', 'Completed', 'Cancelled']; function AdminOrders({ onNavigate }) { const [statusFilter, setStatusFilter] = useAdmOState('all'); const [page, setPage] = useAdmOState(1); const [items, setItems] = useAdmOState([]); const [total, setTotal] = useAdmOState(0); const [loading, setLoading] = useAdmOState(true); const [busyId, setBusyId] = useAdmOState(null); const [guestFilter, setGuestFilter] = useAdmOState(false); // false = regular, true = guest const load = async (p, sf, gf) => { setLoading(true); let url = `/api/admin/orders?page=${p}&page_size=20`; if (gf) { url += '&is_guest=true'; } else { if (sf && sf !== 'all') url += `&status=${sf}`; } try { const data = await api.get(url); if (!data.__unauthorized) { setItems(data.items || []); setTotal(data.total || 0); } } catch (_) {} finally { setLoading(false); } }; useAdmOEffect(() => { load(page, statusFilter, guestFilter); }, [page, statusFilter, guestFilter]); const setStatus = async (orderId, nextStatus) => { setBusyId(orderId); try { await api.post(`/api/admin/orders/${orderId}/status`, { status: nextStatus }); await load(page, statusFilter); } catch (e) { alert(e.message || 'Не удалось изменить статус'); } finally { setBusyId(null); } }; const totalPages = Math.max(1, Math.ceil(total / 20)); return (
| # | Юзер | Услуга | Сумма | Статус | Дата | Действия |
|---|---|---|---|---|---|---|
| #{o.order_id} | {o.is_guest ? 📞 {o.guest_phone} : (o.user_name ? '@' + o.user_name : '#' + o.user_id) } | {o.position_name} | {o.price.toLocaleString('ru-RU')} ₽ | {formatDisplay(o.date) || '—'} |
{o.is_guest ? (
|
|
| Заказов нет | ||||||