This commit is contained in:
Professional 2025-05-26 20:34:14 +07:00
parent 6bcd41d43b
commit 38aad59317
3 changed files with 19 additions and 28 deletions

View File

@ -268,6 +268,7 @@ const toggleUserActive = async (req, res) => {
res.json({ res.json({
message: user.blocked ? 'Пользователь заблокирован' : 'Пользователь разблокирован', message: user.blocked ? 'Пользователь заблокирован' : 'Пользователь разблокирован',
blocked: user.blocked, blocked: user.blocked,
isActive: !user.blocked, // Добавляем isActive для совместимости с клиентом
blockReason: user.blockReason blockReason: user.blockReason
}); });
} catch (error) { } catch (error) {

View File

@ -199,8 +199,6 @@ export default {
// Изменение статуса пользователя (блокировка/разблокировка) // Изменение статуса пользователя (блокировка/разблокировка)
const toggleUserStatus = async () => { const toggleUserStatus = async () => {
try { try {
const originalStatus = user.value.isActive;
const token = localStorage.getItem('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,20 +210,20 @@ export default {
} }
); );
// Принудительно обновляем статус пользователя для реактивности // Обновляем объект пользователя напрямую из ответа сервера
if (response.data && typeof response.data.isActive !== 'undefined') { if (response.data && typeof response.data.isActive !== 'undefined') {
user.value.isActive = response.data.isActive; user.value = {
user.value.blocked = !response.data.isActive; ...user.value,
isActive: response.data.isActive,
// Форсируем реактивное обновление blocked: response.data.blocked
user.value = { ...user.value }; };
} }
// Показываем уведомление об успехе // Показываем уведомление об успехе
const actionText = user.value.isActive ? 'разблокирован' : 'заблокирован'; const actionText = response.data.isActive ? 'разблокирован' : 'заблокирован';
toastService.add( toastService.add(
response.data.message || `Пользователь успешно ${actionText}`, response.data.message || `Пользователь успешно ${actionText}`,
user.value.isActive ? 'success' : 'warning', response.data.isActive ? 'success' : 'warning',
3000 3000
); );
} catch (err) { } catch (err) {

View File

@ -252,13 +252,9 @@ export default {
// Изменение статуса пользователя (блокировка/разблокировка) // Изменение статуса пользователя (блокировка/разблокировка)
const toggleUserStatus = async (userId, currentStatus) => { const toggleUserStatus = async (userId, currentStatus) => {
try { try {
// Показываем индикатор загрузки для конкретного пользователя
const userIndex = users.value.findIndex(user => user._id === userId); const userIndex = users.value.findIndex(user => user._id === userId);
if (userIndex === -1) return; if (userIndex === -1) return;
// Временно отключаем кнопку, чтобы предотвратить множественные клики
const originalStatus = users.value[userIndex].isActive;
const token = localStorage.getItem('userToken'); 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`,
@ -270,14 +266,17 @@ export default {
} }
); );
// Обновляем статус пользователя в списке с использованием реактивности Vue // Обновляем пользователя в списке напрямую из ответа сервера
if (userIndex !== -1 && response.data) { if (response.data && typeof response.data.isActive !== 'undefined') {
// Принудительно обновляем свойство для реактивности // Создаем новый объект пользователя с обновленными данными
users.value[userIndex].isActive = response.data.isActive; const updatedUser = {
users.value[userIndex].blocked = !response.data.isActive; ...users.value[userIndex],
isActive: response.data.isActive,
blocked: response.data.blocked
};
// Форсируем реактивное обновление Vue // Заменяем пользователя в массиве
users.value = [...users.value]; users.value.splice(userIndex, 1, updatedUser);
} }
// Показываем уведомление об успехе // Показываем уведомление об успехе
@ -290,13 +289,6 @@ export default {
} catch (err) { } catch (err) {
console.error('Ошибка при изменении статуса пользователя:', err); console.error('Ошибка при изменении статуса пользователя:', err);
// Восстанавливаем исходный статус в случае ошибки
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 || 'Ошибка при изменении статуса пользователя'; const errorMessage = err.response?.data?.message || 'Ошибка при изменении статуса пользователя';
toastService.add(errorMessage, 'error', 5000); toastService.add(errorMessage, 'error', 5000);