📋 Информация о пользователе
@@ -117,7 +134,8 @@ export default {
data() {
return {
authLoading: false,
- statsLoading: false
+ statsLoading: false,
+ avatarLoadError: false
}
},
computed: {
@@ -139,6 +157,19 @@ export default {
statsError() {
return this.userStore.error
},
+ // Вычисляем полный URL аватара
+ avatarUrl() {
+ if (!this.user?.avatar) return null;
+
+ // Если avatar уже содержит полный URL, возвращаем как есть
+ if (this.user.avatar.startsWith('http')) {
+ return this.user.avatar;
+ }
+
+ // Иначе формируем полный URL
+ const baseUrl = 'https://begushiybashkir.ru/api/v1/user';
+ return baseUrl + this.user.avatar;
+ },
joinDate() {
if (!this.user?.createdAt) return 'января 2024';
@@ -172,74 +203,103 @@ export default {
},
methods: {
async onAvatarUpdated() {
+ // Сбрасываем флаг ошибки при обновлении аватара
+ this.avatarLoadError = false;
// Принудительно обновляем профиль
- await this.authStore.fetchProfile()
- console.log('Avatar updated, user data:', this.authStore.user)
+ await this.authStore.fetchProfile();
+ console.log('Avatar updated, user data:', this.authStore.user);
},
- getImageUrl(path) {
- const baseUrl = import.meta.env.BASE_URL
- return `${baseUrl}images/${path}`
+
+ // Обработчик ошибки загрузки изображения
+ handleAvatarError() {
+ console.error('Ошибка загрузки аватара:', this.avatarUrl);
+ this.avatarLoadError = true;
},
+
async loadUserData() {
- this.authLoading = true
+ this.authLoading = true;
+ this.avatarLoadError = false;
try {
- await this.authStore.fetchProfile()
- await this.loadStats()
+ await this.authStore.fetchProfile();
+ await this.loadStats();
} catch (error) {
- console.error('Ошибка загрузки данных:', error)
+ console.error('Ошибка загрузки данных:', error);
} finally {
- this.authLoading = false
+ this.authLoading = false;
}
},
+
async loadStats() {
- this.statsLoading = true
+ this.statsLoading = true;
try {
const [statsResult, achievementsResult] = await Promise.all([
this.userStore.fetchUserStats(),
this.userStore.fetchUserAchievements()
- ])
+ ]);
- // Проверяем результаты
if (!statsResult.success) {
- console.error('Ошибка загрузки статистики:', statsResult.error)
+ console.error('Ошибка загрузки статистики:', statsResult.error);
}
if (!achievementsResult.success) {
- console.error('Ошибка загрузки достижений:', achievementsResult.error)
+ console.error('Ошибка загрузки достижений:', achievementsResult.error);
}
} catch (error) {
- console.error('Ошибка загрузки статистики:', error)
+ console.error('Ошибка загрузки статистики:', error);
} finally {
- this.statsLoading = false
+ this.statsLoading = false;
}
},
+
+ async refreshStats() {
+ await this.loadStats();
+ },
+
async handleLogout() {
- await this.authStore.logout()
- this.$router.push('/')
+ await this.authStore.logout();
+ this.$router.push('/');
},
+
editProfile() {
- this.$router.push('/profile/edit')
+ this.$router.push('/profile/edit');
},
+
viewDetailedStats() {
// TODO: Переход на страницу детальной статистики
- alert('Функция в разработке')
+ alert('Функция в разработке');
}
},
async mounted() {
if (!this.user) {
- await this.loadUserData()
+ await this.loadUserData();
} else {
- await this.loadStats()
+ await this.loadStats();
}
}
}
\ No newline at end of file
diff --git a/serv_nginx/api_bb/internal/handlers/user.go b/serv_nginx/api_bb/internal/handlers/user.go
index 5e4efbf..a92ba71 100644
--- a/serv_nginx/api_bb/internal/handlers/user.go
+++ b/serv_nginx/api_bb/internal/handlers/user.go
@@ -39,7 +39,7 @@ func (h *UserHandler) Routes() chi.Router {
r.Get("/profile", h.GetProfile)
r.Post("/editProfile", h.UpdateProfile)
- r.Get("/avatar/{filename}", h.ServeAvatar)
+ r.Get("/avatars/{filename}", h.ServeAvatar)
return r
}
diff --git a/serv_nginx/api_bb/internal/routes/routes.go b/serv_nginx/api_bb/internal/routes/routes.go
index cf2ca76..6a178f6 100644
--- a/serv_nginx/api_bb/internal/routes/routes.go
+++ b/serv_nginx/api_bb/internal/routes/routes.go
@@ -58,7 +58,7 @@ func SetupRouter(db *gorm.DB, config *config.Config) http.Handler {
r.Mount("/", allHandler.UserHandler().Routes())
- r.Mount("/avatar", allHandler.AvatarHandler().Routes())
+ r.Mount("/avatars", allHandler.AvatarHandler().Routes())
// Здесь будут другие защищенные маршруты пользователя
})