фикс бесконечной загрузки

This commit is contained in:
Professional 2025-05-23 23:28:06 +07:00
parent e9aaad9d7c
commit c761bc4b9c

View File

@ -417,24 +417,67 @@ const mainPhoto = computed(() => {
// Methods // Methods
const toggleEditMode = async () => { const toggleEditMode = async () => {
// Если выходим из режима редактирования // Если сейчас в режиме редактирования и пользователь хочет вернуться в режим просмотра
if (isEditMode.value) { if (isEditMode.value) {
console.log('[ProfileView] Выход из режима редактирования');
try {
// Проверяем, были ли изменения // Проверяем, были ли изменения
const hasChanges = checkForChanges(); const hasChanges = checkForChanges();
console.log('[ProfileView] Обнаружены изменения:', hasChanges);
if (hasChanges) { if (hasChanges) {
// Если были изменения, автоматически сохраняем профиль console.log('[ProfileView] Сохранение изменений...');
await saveProfileChanges(); profileLoading.value = true; // Используем только profileLoading для индикации
} else {
// Если изменений не было, просто обновляем UI // Подготавливаем данные для отправки на сервер
console.log('[ProfileView] Изменений не обнаружено, пропускаем сохранение'); const dataToUpdate = { ...editableProfileData.value };
// Обрабатываем дату рождения
if (dataToUpdate.dateOfBirth) {
try {
// Получаем дату в формате ISO с поправкой на часовой пояс
const dateObj = new Date(dataToUpdate.dateOfBirth);
if (!isNaN(dateObj.getTime())) { // Проверяем, что дата валидна
dataToUpdate.dateOfBirth = dateObj.toISOString();
}
} catch (e) {
console.error('[ProfileView] Ошибка обработки даты:', e);
}
} }
// В любом случае переключаемся в режим просмотра // Отправляем запрос на сервер
isEditMode.value = false; const response = await api.updateUserProfile(dataToUpdate);
clearProfileMessages(); console.log('[ProfileView] Ответ от сервера (профиль):', response.data);
// Обновляем локальные данные напрямую, без вызова fetchUser
profileData.value = { ...profileData.value, ...dataToUpdate };
// Показываем сообщение об успешном сохранении
profileActionSuccess.value = 'Профиль успешно обновлен!';
// Автоматически скрываем сообщение через 3 секунды
setTimeout(() => {
profileActionSuccess.value = '';
}, 3000);
} else { } else {
// При входе в режим редактирования console.log('[ProfileView] Нет изменений, сохранение не требуется');
}
} catch (err) {
console.error('[ProfileView] Ошибка при сохранении профиля:', err);
profileActionError.value = err.response?.data?.message ||
'Произошла ошибка при обновлении профиля. Пожалуйста, попробуйте позже.';
} finally {
// В любом случае переключаемся в режим просмотра и сбрасываем состояние загрузки
isEditMode.value = false;
profileLoading.value = false;
clearProfileMessages();
}
} else {
// Если сейчас в режиме просмотра и пользователь хочет перейти в режим редактирования
console.log('[ProfileView] Вход в режим редактирования');
// Переключаемся в режим редактирования
isEditMode.value = true; isEditMode.value = true;
// Копируем данные профиля в редактируемый объект // Копируем данные профиля в редактируемый объект
@ -445,7 +488,7 @@ const toggleEditMode = async () => {
const date = new Date(profileData.value.dateOfBirth); const date = new Date(profileData.value.dateOfBirth);
formattedDate = date.toISOString().split('T')[0]; // Получаем только yyyy-MM-dd часть formattedDate = date.toISOString().split('T')[0]; // Получаем только yyyy-MM-dd часть
} catch (e) { } catch (e) {
console.error('Ошибка форматирования даты:', e); console.error('[ProfileView] Ошибка форматирования даты:', e);
formattedDate = ''; formattedDate = '';
} }
} }
@ -457,12 +500,12 @@ const toggleEditMode = async () => {
gender: profileData.value?.gender || '', gender: profileData.value?.gender || '',
location: { location: {
city: profileData.value?.location?.city || '', city: profileData.value?.location?.city || '',
// Можно добавить другие поля местоположения, если они есть
} }
}; };
// Сохраняем оригинальные данные для последующего сравнения // Важно! Сохраняем JSON-копию оригинальных данных для последующего сравнения
originalProfileData = JSON.stringify(editableProfileData.value); originalProfileData = JSON.stringify(editableProfileData.value);
console.log('[ProfileView] Сохранены оригинальные данные для сравнения:', originalProfileData);
// Устанавливаем поисковый запрос города // Устанавливаем поисковый запрос города
if (profileData.value?.location?.city) { if (profileData.value?.location?.city) {
@ -709,34 +752,42 @@ const clearMessages = () => {
}; };
const fetchProfileDataLocal = async () => { const fetchProfileDataLocal = async () => {
loading.value = true; console.log('[ProfileView] Начало загрузки данных профиля...');
error.value = ''; error.value = '';
loading.value = true;
initialLoading.value = true;
if (!isAuthenticated.value || !token.value) { try {
// Проверяем авторизацию
if (!token.value) {
console.log('[ProfileView] Токен отсутствует, авторизация не выполнена');
error.value = "Вы не авторизованы для просмотра этой страницы."; error.value = "Вы не авторизованы для просмотра этой страницы.";
loading.value = false;
initialLoading.value = false;
return; return;
} }
try { // Если у нас уже есть данные пользователя в хранилище, используем их
await fetchUser(); if (authUserFromStore.value && Object.keys(authUserFromStore.value).length > 0) {
console.log('[ProfileView] Использую данные профиля из хранилища:', authUserFromStore.value);
// После выполнения fetchUser проверяем, что данные получены
if (!authUserFromStore.value) {
console.error('[ProfileView] Пользователь не загружен после fetchUser');
error.value = 'Не удалось загрузить данные профиля. Попробуйте позже.';
} else {
// Обновляем данные профиля из полученных данных пользователя
profileData.value = { ...authUserFromStore.value }; profileData.value = { ...authUserFromStore.value };
console.log('[ProfileView] Данные профиля обновлены:', profileData.value); } else {
// Иначе делаем прямой запрос к API, минуя fetchUser
console.log('[ProfileView] Данных в хранилище нет, делаю прямой запрос к API');
const response = await api.getMe();
console.log('[ProfileView] Ответ от API /auth/me:', response.data);
// Сохраняем данные пользователя локально
profileData.value = response.data;
} }
console.log('[ProfileView] Данные профиля успешно загружены:', profileData.value);
} catch (err) { } catch (err) {
console.error('[ProfileView] Ошибка при вызове fetchUser:', err); console.error('[ProfileView] Ошибка при загрузке профиля:', err);
error.value = (err.response && err.response.data && err.response.data.message) error.value = (err.response && err.response.data && err.response.data.message)
? err.response.data.message ? err.response.data.message
: 'Не удалось загрузить данные профиля. Попробуйте позже.'; : 'Не удалось загрузить данные профиля. Попробуйте позже.';
} finally { } finally {
// Всегда сбрасываем индикаторы загрузки
console.log('[ProfileView] Завершение загрузки профиля, сброс индикаторов загрузки');
loading.value = false; loading.value = false;
initialLoading.value = false; initialLoading.value = false;
} }