diff --git a/serv_nginx/bbvue/src/App.vue b/serv_nginx/bbvue/src/App.vue index dcc40a9..345544e 100644 --- a/serv_nginx/bbvue/src/App.vue +++ b/serv_nginx/bbvue/src/App.vue @@ -120,6 +120,7 @@ body { } .header-container { + max-width: 1200px; display: flex; justify-content: space-between; align-items: center; diff --git a/serv_nginx/bbvue/src/components/NavigationMenu.vue b/serv_nginx/bbvue/src/components/NavigationMenu.vue index 9d387ff..66510bd 100644 --- a/serv_nginx/bbvue/src/components/NavigationMenu.vue +++ b/serv_nginx/bbvue/src/components/NavigationMenu.vue @@ -167,6 +167,7 @@ export default { padding: 0; position: relative; transition: transform 0.3s ease; + } .burger-menu:hover { @@ -181,7 +182,7 @@ export default { display: block; height: 3px; width: 100%; - background-color: white; + background-color: rgb(0, 0, 0); border-radius: 3px; transition: all 0.3s ease; transform-origin: center; diff --git a/serv_nginx/bbvue/src/components/writeLogo.vue b/serv_nginx/bbvue/src/components/writeLogo.vue index b259f86..9900a65 100644 --- a/serv_nginx/bbvue/src/components/writeLogo.vue +++ b/serv_nginx/bbvue/src/components/writeLogo.vue @@ -33,12 +33,16 @@ export default { width: 30px; height: 30px; object-fit: contain; + border: 2px solid white; } .mobile-logo span { font-weight: 600; color: #2e8b57; font-size: 0.9rem; + border: 2px solid black; /* Black border for the text */ + padding: 2px 4px; /* Optional: Adds space inside the border */ + border-radius: 4px; /* Optional: Rounded corners */ } /* Скрыть на десктопе по умолчанию */ diff --git a/serv_nginx/bbvue/src/views/About.vue b/serv_nginx/bbvue/src/views/About.vue index ede646a..dc84e95 100644 --- a/serv_nginx/bbvue/src/views/About.vue +++ b/serv_nginx/bbvue/src/views/About.vue @@ -55,7 +55,7 @@
Команда бегового клуба Бегущий Башкир - +
@@ -281,6 +281,23 @@ export default { // eslint-disable-next-line vue/multi-word-component-names name: 'About', + mounted() { + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) + }, + beforeUnmount() { + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) + }, metaInfo: { title: 'О нас - Бегущий Башкир | Беговой клуб в Уфе', meta: [ @@ -302,6 +319,18 @@ export default { console.log(`${baseUrl}images/${path}`) return `${baseUrl}images/${path}` }, + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, } } diff --git a/serv_nginx/bbvue/src/views/Achievements.vue b/serv_nginx/bbvue/src/views/Achievements.vue index 283c863..2c9ecd0 100644 --- a/serv_nginx/bbvue/src/views/Achievements.vue +++ b/serv_nginx/bbvue/src/views/Achievements.vue @@ -27,36 +27,20 @@
-
- -
@@ -71,11 +55,7 @@

🏆 Командные достижения

-
+
🏅

{{ achievement.title }}

{{ achievement.description }}

@@ -88,45 +68,28 @@
-
+

{{ category.icon }} {{ category.title }}

-
+

{{ achievement.name }}

{{ achievement.result }}
- +

Темп: {{ achievement.pace }}

{{ achievement.note }}

- + - +
- + PB {{ category.distance }} @@ -191,6 +154,23 @@ export default { // eslint-disable-next-line vue/multi-word-component-names name: 'Achievements', + mounted() { + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) + }, + beforeUnmount() { + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) + }, data() { return { searchQuery: '', @@ -472,6 +452,18 @@ export default { } }, methods: { + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, setFilter(filter) { this.activeFilter = filter }, @@ -896,52 +888,52 @@ export default { .hero-title { font-size: 2.2rem; } - + .hero-stats { gap: 2rem; } - + .stat-number { font-size: 2rem; } - + .filters-container { flex-direction: column; align-items: stretch; } - + .search-box { min-width: auto; } - + .filter-buttons { justify-content: center; } - + .view-toggle { align-self: center; } - + .achievements-grid.grid { grid-template-columns: 1fr; } - + .achievement-header { flex-direction: column; align-items: flex-start; } - + .result { margin-left: 0; margin-top: 0.5rem; align-self: flex-start; } - + .cta-buttons { flex-direction: column; align-items: center; } - + .btn { width: 100%; max-width: 300px; @@ -952,23 +944,23 @@ export default { .hero-section { padding: 60px 0 40px; } - + .hero-title { font-size: 1.8rem; } - + .category-title { font-size: 1.5rem; } - + .section-title { font-size: 2rem; } - + .stats-grid { grid-template-columns: 1fr; } - + .container { padding: 0 15px; } @@ -980,6 +972,7 @@ export default { opacity: 0; transform: translateY(30px); } + to { opacity: 1; transform: translateY(0); diff --git a/serv_nginx/bbvue/src/views/Gallery.vue b/serv_nginx/bbvue/src/views/Gallery.vue index 4d104c5..0dec742 100644 --- a/serv_nginx/bbvue/src/views/Gallery.vue +++ b/serv_nginx/bbvue/src/views/Gallery.vue @@ -261,6 +261,18 @@ export default { } }, methods: { + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, getImageUrl(path) { // В продакшене замените на правильный путь const baseUrl = import.meta.env.BASE_URL @@ -330,14 +342,27 @@ export default { } }, mounted() { + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) this.startAutoSlide() document.addEventListener('keydown', this.handleKeydown) }, beforeUnmount() { + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) this.stopAutoSlide() document.removeEventListener('keydown', this.handleKeydown) document.body.style.overflow = '' - } + }, } diff --git a/serv_nginx/bbvue/src/views/Home.vue b/serv_nginx/bbvue/src/views/Home.vue index e5ebc9b..f64f765 100644 --- a/serv_nginx/bbvue/src/views/Home.vue +++ b/serv_nginx/bbvue/src/views/Home.vue @@ -322,12 +322,9 @@ export default { .title-main { display: block; font-size: 3rem; - font-weight: 800; + font-weight: 800; text-shadow: - -1px -1px 0 black, - 1px -1px 0 black, - -1px 1px 0 black, - 1px 1px 0 black; + 2px 2px 4px #26302868; line-height: 1.1; margin-bottom: 0.5rem; letter-spacing: 2px; diff --git a/serv_nginx/bbvue/src/views/Login.vue b/serv_nginx/bbvue/src/views/Login.vue index 18840db..92235cd 100644 --- a/serv_nginx/bbvue/src/views/Login.vue +++ b/serv_nginx/bbvue/src/views/Login.vue @@ -60,6 +60,18 @@ export default { } }, methods: { + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, async handleLogin() { const result = await this.authStore.login(this.credentials) @@ -99,12 +111,27 @@ export default { }, 3000) } }, + beforeUnmount() { + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) + }, // Добавляем проверку при монтировании компонента mounted() { // Если пользователь уже авторизован, показываем уведомление if (this.authStore.isAuthenticated) { this.showAlreadyLoggedInNotification() } + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) }, showAlreadyLoggedInNotification() { const notification = document.createElement('div') diff --git a/serv_nginx/bbvue/src/views/Members.vue b/serv_nginx/bbvue/src/views/Members.vue index 7874794..20b96c7 100644 --- a/serv_nginx/bbvue/src/views/Members.vue +++ b/serv_nginx/bbvue/src/views/Members.vue @@ -482,6 +482,18 @@ export default { } }, methods: { + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, getExperienceLabel(experience) { const labels = { 'beginner': 'Начинающий', @@ -664,10 +676,23 @@ export default { mounted() { document.addEventListener('keydown', this.handleKeydown) this.loadMembers() + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) }, beforeUnmount() { document.removeEventListener('keydown', this.handleKeydown) document.body.style.overflow = '' + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) } } diff --git a/serv_nginx/bbvue/src/views/News.vue b/serv_nginx/bbvue/src/views/News.vue index 171bc9a..7416b84 100644 --- a/serv_nginx/bbvue/src/views/News.vue +++ b/serv_nginx/bbvue/src/views/News.vue @@ -387,6 +387,20 @@ export default { methods: { ...mapActions(useAuthStore, ['fetchProfile']), + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, + // Валидация формы validateForm() { this.clearAllErrors() @@ -708,10 +722,22 @@ export default { await this.fetchProfile() } this.checkAuth() + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) }, beforeUnmount() { document.removeEventListener('keydown', this.handleKeydown) document.body.style.overflow = '' + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) } } diff --git a/serv_nginx/bbvue/src/views/PrivacyPolicy.vue b/serv_nginx/bbvue/src/views/PrivacyPolicy.vue index c4784f4..968565f 100644 --- a/serv_nginx/bbvue/src/views/PrivacyPolicy.vue +++ b/serv_nginx/bbvue/src/views/PrivacyPolicy.vue @@ -14,7 +14,8 @@

1. Общие положения

-

1.1. Настоящая Политика конфиденциальности регулирует порядок сбора, хранения и использования персональных данных пользователей бегового клуба "Бегущий Башкир".

+

1.1. Настоящая Политика конфиденциальности регулирует порядок сбора, хранения и использования персональных + данных пользователей бегового клуба "Бегущий Башкир".

1.2. Используя наш сайт и услуги, вы соглашаетесь с условиями настоящей Политики.

@@ -42,7 +43,8 @@

4. Защита данных

-

4.1. Мы принимаем все необходимые меры для защиты ваших персональных данных от несанкционированного доступа.

+

4.1. Мы принимаем все необходимые меры для защиты ваших персональных данных от несанкционированного + доступа.

4.2. Данные хранятся на защищенных серверах и передаются в зашифрованном виде.

@@ -77,7 +79,7 @@

8. Контакты

По вопросам, связанным с обработкой персональных данных, обращайтесь:

📧 Email: privacy@begushiybashkir.ru
- 📞 Телефон: +7 (XXX) XXX-XX-XX

+ 📞 Телефон: +7 (XXX) XXX-XX-XX

@@ -96,12 +98,47 @@ @@ -654,6 +682,7 @@ export default { .avatar-section { margin-bottom: 1.5rem; } + .avatar-preview { position: relative; width: 150px; @@ -664,8 +693,10 @@ export default { border: 4px solid #2e8b57; background: linear-gradient(135deg, #f5f5f5, #e0e0e0); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); - isolation: isolate; /* Новое свойство */ - background-image: none !important; /* Явно убираем фоновое изображение */ + isolation: isolate; + /* Новое свойство */ + background-image: none !important; + /* Явно убираем фоновое изображение */ } .avatar-image { @@ -673,7 +704,8 @@ export default { height: 100%; object-fit: cover; transition: transform 0.3s ease; - display: block; /* Убедитесь, что block */ + display: block; + /* Убедитесь, что block */ } .avatar-placeholder { diff --git a/serv_nginx/bbvue/src/views/ProfileEdit.vue b/serv_nginx/bbvue/src/views/ProfileEdit.vue index 1f88818..39aa493 100644 --- a/serv_nginx/bbvue/src/views/ProfileEdit.vue +++ b/serv_nginx/bbvue/src/views/ProfileEdit.vue @@ -137,6 +137,18 @@ export default { } }, methods: { + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, async onAvatarUpdated() { // Обновляем данные пользователя после загрузки аватара await this.authStore.fetchProfile() @@ -205,7 +217,22 @@ export default { this.initializeForm() }) } - } + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) + }, + beforeUnmount() { + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) + }, } diff --git a/serv_nginx/bbvue/src/views/Register.vue b/serv_nginx/bbvue/src/views/Register.vue index de2612c..d23ceaf 100644 --- a/serv_nginx/bbvue/src/views/Register.vue +++ b/serv_nginx/bbvue/src/views/Register.vue @@ -125,6 +125,23 @@ import { useAuthStore } from '../stores/auth' export default { // eslint-disable-next-line vue/multi-word-component-names name: 'Register', + mounted() { + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) + }, + beforeUnmount() { + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) + }, setup() { const authStore = useAuthStore() return { authStore } @@ -195,7 +212,19 @@ export default { } else { console.error('Ошибка регистрации:', result.error) } - } + }, + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, } } diff --git a/serv_nginx/bbvue/src/views/Reviews.vue b/serv_nginx/bbvue/src/views/Reviews.vue index b228b6b..799c0e5 100644 --- a/serv_nginx/bbvue/src/views/Reviews.vue +++ b/serv_nginx/bbvue/src/views/Reviews.vue @@ -372,6 +372,18 @@ export default { } }, methods: { + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, async loadReviews() { this.loading = true try { @@ -643,10 +655,25 @@ export default { } }, mounted() { + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) this.checkAuth() this.loadReviews() this.loadStats() }, + beforeUnmount() { + // Убираем обработчики при размонтировании + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) + }, watch: { sortBy() { this.currentPage = 1 diff --git a/serv_nginx/bbvue/src/views/Training.vue b/serv_nginx/bbvue/src/views/Training.vue index 972e616..fd6cee4 100644 --- a/serv_nginx/bbvue/src/views/Training.vue +++ b/serv_nginx/bbvue/src/views/Training.vue @@ -345,6 +345,18 @@ export default { } }, methods: { + handleFirstInteraction() { + if (!this.hasInteracted) { + this.hasInteracted = true + this.showContent() + clearTimeout(this.autoShowTimeout) + } + }, + showContent() { + this.isContentVisible = true + // Эмитим событие для показа хедера + this.$emit('show-header') + }, getImageUrl(path) { // В продакшене замените на правильный путь const baseUrl = import.meta.env.BASE_URL @@ -387,10 +399,22 @@ export default { }, mounted() { document.addEventListener('keydown', this.handleKeydown) + window.addEventListener('scroll', this.handleFirstInteraction, { passive: true, once: true }) + window.addEventListener('click', this.handleFirstInteraction, { once: true }) + window.addEventListener('touchstart', this.handleFirstInteraction, { once: true }) + this.autoShowTimeout = setTimeout(() => { + if (!this.hasInteracted) { + this.showContent() + } + }, 3000) }, beforeUnmount() { document.removeEventListener('keydown', this.handleKeydown) document.body.style.overflow = '' + window.removeEventListener('scroll', this.handleFirstInteraction) + window.removeEventListener('click', this.handleFirstInteraction) + window.removeEventListener('touchstart', this.handleFirstInteraction) + clearTimeout(this.autoShowTimeout) } }