This commit is contained in:
Professional 2025-05-26 20:28:29 +07:00
parent 60c524caf6
commit 6bcd41d43b
2 changed files with 53 additions and 21 deletions

View File

@ -199,9 +199,9 @@ export default {
// Изменение статуса пользователя (блокировка/разблокировка) // Изменение статуса пользователя (блокировка/разблокировка)
const toggleUserStatus = async () => { const toggleUserStatus = async () => {
try { 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( const response = await axios.put(
`/api/admin/users/${props.id}/toggle-active`, `/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'; const actionText = user.value.isActive ? 'разблокирован' : 'заблокирован';
toastService.add(response.data.message, actionType, 3000); toastService.add(
response.data.message || `Пользователь успешно ${actionText}`,
user.value.isActive ? 'success' : 'warning',
3000
);
} catch (err) { } catch (err) {
console.error('Ошибка при изменении статуса пользователя:', err); console.error('Ошибка при изменении статуса пользователя:', err);
toastService.error('Ошибка при изменении статуса пользователя');
} finally { // Показываем ошибку
loading.value = false; const errorMessage = err.response?.data?.message || 'Ошибка при изменении статуса пользователя';
toastService.add(errorMessage, 'error', 5000);
} }
}; };

View File

@ -252,9 +252,14 @@ export default {
// Изменение статуса пользователя (блокировка/разблокировка) // Изменение статуса пользователя (блокировка/разблокировка)
const toggleUserStatus = async (userId, currentStatus) => { const toggleUserStatus = async (userId, currentStatus) => {
try { 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( const response = await axios.put(
`/api/admin/users/${userId}/toggle-active`, `/api/admin/users/${userId}/toggle-active`,
{}, {},
@ -265,20 +270,36 @@ export default {
} }
); );
// Обновляем статус пользователя в списке // Обновляем статус пользователя в списке с использованием реактивности Vue
const userIndex = users.value.findIndex(user => user._id === userId); if (userIndex !== -1 && response.data) {
if (userIndex !== -1) { // Принудительно обновляем свойство для реактивности
users.value[userIndex].isActive = response.data.isActive; 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'; const actionText = response.data.isActive ? 'разблокирован' : 'заблокирован';
toastService.add(response.data.message, type, 3000); toastService.add(
response.data.message || `Пользователь успешно ${actionText}`,
response.data.isActive ? 'success' : 'warning',
3000
);
} catch (err) { } catch (err) {
console.error('Ошибка при изменении статуса пользователя:', 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);
} }
}; };