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