From c01ce8a18c8ba8c581ab25cfd5a2003802215f8f Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Tue, 14 Oct 2025 22:45:30 +0500 Subject: [PATCH] modified: begushiybashkir/bbvue/src/views/Profile.vue modified: serv_nginx/api_bb/internal/handlers/user.go modified: serv_nginx/api_bb/internal/routes/routes.go change url path into back to avatars --- begushiybashkir/bbvue/src/views/Profile.vue | 338 ++++++++++++++++---- serv_nginx/api_bb/internal/handlers/user.go | 2 +- serv_nginx/api_bb/internal/routes/routes.go | 2 +- 3 files changed, 270 insertions(+), 72 deletions(-) diff --git a/begushiybashkir/bbvue/src/views/Profile.vue b/begushiybashkir/bbvue/src/views/Profile.vue index 07f5233..871ee91 100644 --- a/begushiybashkir/bbvue/src/views/Profile.vue +++ b/begushiybashkir/bbvue/src/views/Profile.vue @@ -6,13 +6,30 @@
- + +
+
+ +
+ 👤 +
+
+ +
+

{{ user.firstName }} {{ user.lastName }}

Участник с {{ joinDate }}

{{ user.email }}

📱 {{ user.phone }}

+

📋 Информация о пользователе

@@ -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()) // Здесь будут другие защищенные маршруты пользователя })