modified: serv_nginx/bbvue/src/stores/user.js

modified:   serv_nginx/bbvue/src/views/Profile.vue
fix some bag
This commit is contained in:
2025-10-20 03:54:55 +05:00
parent 88046f722d
commit 7515a1314a
2 changed files with 17 additions and 45 deletions
+1 -1
View File
@@ -97,7 +97,7 @@ export const useUserStore = defineStore('user', () => {
try {
const response = await apiClient.get('/user/achievements')
console.log("debug /user/achievements " + response.data)
userAchievements.value = response.data
userAchievements.value = response.data || []
return { success: true, data: userAchievements.value }
} catch (error) {
console.warn('Achievements endpoint not available, using mock data', error)
+16 -44
View File
@@ -88,7 +88,7 @@
</div>
<!-- Личные рекорды -->
<div class="personal-bests-section" v-if="personalBests.length > 0">
<div class="personal-bests-section" v-if="personalBests && personalBests.length > 0">
<h3> Личные рекорды</h3>
<div class="bests-grid">
<div v-for="best in personalBests" :key="best.id" class="best-card">
@@ -102,7 +102,7 @@
</div>
<!-- Ближайшие события -->
<div class="events-section" v-if="upcomingEvents.length > 0">
<div class="events-section" v-if="upcomingEvents && upcomingEvents.length > 0">
<h3>📅 Ближайшие события</h3>
<div class="events-list">
<div v-for="event in upcomingEvents" :key="event.id" class="event-card">
@@ -229,9 +229,9 @@ export default {
},
recentAchievements() {
return this.userAchievements
.filter(a => a.verified)
.sort((a, b) => new Date(b.date) - new Date(a.date))
.slice(0, 3)
.filter(a => a.verified || a.achieved) // Добавить проверку на achieved
.sort((a, b) => new Date(b.date || b.created_at) - new Date(a.date || a.created_at)) // Добавить fallback
.slice(0, 3);
},
achievementProgress() {
return this.userStore.achievementProgress
@@ -349,19 +349,21 @@ export default {
async loadExtendedData() {
this.statsLoading = true;
try {
const [statsResult, achievementsResult, bestsResult, eventsResult, planResult] = await Promise.all([
// Использовать правильные методы из стора
const [statsResult, achievementsResult, bestsResult, eventsResult, planResult] = await Promise.allSettled([
this.userStore.fetchUserStats(),
this.userStore.fetchUserAchievements(),
this.fetchPersonalBests(),
this.fetchUpcomingEvents(),
this.fetchCurrentTrainingPlan()
this.userStore.fetchPersonalBests(),
this.userStore.fetchUpcomingEvents(),
this.userStore.fetchCurrentTrainingPlan()
]);
if (!statsResult.success) console.error('Ошибка статистики:', statsResult.error);
if (!achievementsResult.success) console.error('Ошибка достижений:', achievementsResult.error);
if (!bestsResult.success) console.error('Ошибка рекордов:', bestsResult.error);
if (!eventsResult.success) console.error('Ошибка событий:', eventsResult.error);
if (!planResult.success) console.error('Ошибка плана:', planResult.error);
// Обработка результатов
if (statsResult.status === 'rejected') console.error('Ошибка статистики:', statsResult.reason);
if (achievementsResult.status === 'rejected') console.error('Ошибка достижений:', achievementsResult.reason);
if (bestsResult.status === 'rejected') console.error('Ошибка рекордов:', bestsResult.reason);
if (eventsResult.status === 'rejected') console.error('Ошибка событий:', eventsResult.reason);
if (planResult.status === 'rejected') console.error('Ошибка плана:', planResult.reason);
} catch (error) {
console.error('Ошибка загрузки расширенных данных:', error);
@@ -370,36 +372,6 @@ export default {
}
},
async fetchPersonalBests() {
try {
const response = await this.userStore.fetchPersonalBests;
this.personalBests = response.data;
return { success: true };
} catch (error) {
return { success: false, error: error.message };
}
},
async fetchUpcomingEvents() {
try {
const response = await this.userStore.apiClient.get('/events/upcoming');
this.upcomingEvents = response.data;
return { success: true };
} catch (error) {
return { success: false, error: error.message };
}
},
async fetchCurrentTrainingPlan() {
try {
const response = await this.userStore.apiClient.get('/training-plans/current');
this.currentTrainingPlan = response.data;
return { success: true };
} catch (error) {
return { success: false, error: error.message };
}
},
formatTime(minutes) {
if (!minutes) return '0 мин';
const hours = Math.floor(minutes / 60);