'use client' import { useState, useEffect, useCallback } from 'react' import { api } from '@/lib/api' import { useAuth } from '@/hooks/useAuth' import type { User } from '@/types' const roleLabels: Record = { superadmin: 'Суперадмин', moderator: 'Модератор', landlord: 'Арендодатель', executor: 'Исполнитель', customer: 'Заказчик', } const statusLabels: Record = { active: 'Активен', banned: 'Заблокирован', pending_verification: 'Ожидает проверки', } /** * Страница управления пользователями. Позволяет фильтровать * пользователей по роли, изменять роль, блокировать/разблокировать. * Загружает до 100 пользователей через API /admin/users. */ export default function AdminUsersPage() { const { user: currentUser } = useAuth() const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) const [roleFilter, setRoleFilter] = useState('') const [msg, setMsg] = useState('') const fetchUsers = useCallback(async () => { const params = new URLSearchParams() if (roleFilter) params.set('role', roleFilter) params.set('limit', '100') try { const res = await api.get<{ data: User[] }>(`/admin/users?${params}`) setUsers(res.data) } catch { setMsg('Ошибка загрузки') } finally { setLoading(false) } }, [roleFilter]) useEffect(() => { fetchUsers() }, [fetchUsers]) const updateUser = async (id: string, data: Record) => { try { await api.patch(`/admin/users/${id}`, data) setMsg('Обновлено') fetchUsers() } catch (err: any) { setMsg(err.message || 'Ошибка') } } if (loading) return

Загрузка...

return (

Управление пользователями

{msg &&

{msg}

}
{['', 'customer', 'landlord', 'executor', 'moderator'].map((r) => ( ))}
{(() => { return (
{users.map((user) => { const isSelf = user.id === currentUser?.id return (
{user.name || user.email} {isSelf && это вы} {statusLabels[user.status]}

{user.email}

{!isSelf && (
)}
) })}
) })()}
) }