diff --git a/src/views/admin/AdminUserDetail.vue b/src/views/admin/AdminUserDetail.vue index 45d8679..50174f4 100644 --- a/src/views/admin/AdminUserDetail.vue +++ b/src/views/admin/AdminUserDetail.vue @@ -199,9 +199,9 @@ export default { // Изменение статуса пользователя (блокировка/разблокировка) const toggleUserStatus = async () => { try { - loading.value = true; + const originalStatus = user.value.isActive; - const token = localStorage.getItem('userToken'); // Исправлено с 'token' на 'userToken' + const token = localStorage.getItem('userToken'); const response = await axios.put( `/api/admin/users/${props.id}/toggle-active`, {}, @@ -212,17 +212,28 @@ export default { } ); - // Обновляем статус пользователя - user.value.isActive = response.data.isActive; + // Принудительно обновляем статус пользователя для реактивности + if (response.data && typeof response.data.isActive !== 'undefined') { + user.value.isActive = response.data.isActive; + user.value.blocked = !response.data.isActive; + + // Форсируем реактивное обновление + user.value = { ...user.value }; + } - // Заменяем alert на уведомление через сервис - const actionType = user.value.isActive ? 'success' : 'warning'; - toastService.add(response.data.message, actionType, 3000); + // Показываем уведомление об успехе + const actionText = user.value.isActive ? 'разблокирован' : 'заблокирован'; + toastService.add( + response.data.message || `Пользователь успешно ${actionText}`, + user.value.isActive ? 'success' : 'warning', + 3000 + ); } catch (err) { console.error('Ошибка при изменении статуса пользователя:', err); - toastService.error('Ошибка при изменении статуса пользователя'); - } finally { - loading.value = false; + + // Показываем ошибку + const errorMessage = err.response?.data?.message || 'Ошибка при изменении статуса пользователя'; + toastService.add(errorMessage, 'error', 5000); } }; diff --git a/src/views/admin/AdminUsers.vue b/src/views/admin/AdminUsers.vue index 26c5389..80f3747 100644 --- a/src/views/admin/AdminUsers.vue +++ b/src/views/admin/AdminUsers.vue @@ -252,9 +252,14 @@ export default { // Изменение статуса пользователя (блокировка/разблокировка) const toggleUserStatus = async (userId, currentStatus) => { try { - loading.value = true; + // Показываем индикатор загрузки для конкретного пользователя + const userIndex = users.value.findIndex(user => user._id === userId); + if (userIndex === -1) return; - const token = localStorage.getItem('userToken'); // Исправлено с 'token' на 'userToken' + // Временно отключаем кнопку, чтобы предотвратить множественные клики + const originalStatus = users.value[userIndex].isActive; + + const token = localStorage.getItem('userToken'); const response = await axios.put( `/api/admin/users/${userId}/toggle-active`, {}, @@ -265,20 +270,36 @@ export default { } ); - // Обновляем статус пользователя в списке - const userIndex = users.value.findIndex(user => user._id === userId); - if (userIndex !== -1) { + // Обновляем статус пользователя в списке с использованием реактивности Vue + if (userIndex !== -1 && response.data) { + // Принудительно обновляем свойство для реактивности users.value[userIndex].isActive = response.data.isActive; + users.value[userIndex].blocked = !response.data.isActive; + + // Форсируем реактивное обновление Vue + users.value = [...users.value]; } - // Заменяем стандартный alert на наш сервис уведомлений - const type = response.data.isActive ? 'success' : 'warning'; - toastService.add(response.data.message, type, 3000); + // Показываем уведомление об успехе + const actionText = response.data.isActive ? 'разблокирован' : 'заблокирован'; + toastService.add( + response.data.message || `Пользователь успешно ${actionText}`, + response.data.isActive ? 'success' : 'warning', + 3000 + ); } catch (err) { console.error('Ошибка при изменении статуса пользователя:', err); - toastService.error('Ошибка при изменении статуса пользователя'); - } finally { - loading.value = false; + + // Восстанавливаем исходный статус в случае ошибки + const userIndex = users.value.findIndex(user => user._id === userId); + if (userIndex !== -1) { + users.value[userIndex].isActive = currentStatus; + users.value = [...users.value]; + } + + // Показываем ошибку + const errorMessage = err.response?.data?.message || 'Ошибка при изменении статуса пользователя'; + toastService.add(errorMessage, 'error', 5000); } };