Improve band page for smaller screens

This commit is contained in:
2025-09-02 11:14:17 +02:00
parent 409fa835a3
commit ff21a9feda
8 changed files with 68 additions and 59 deletions

View File

@@ -1,50 +1,63 @@
<script setup lang="ts"> <script setup lang="ts">
import { useTheme } from 'vuetify/lib/framework.mjs'; import { useTheme } from "vuetify/lib/framework.mjs";
import { i18n } from './plugins/i18n'; import { i18n } from "./plugins/i18n";
import { ref, watch } from 'vue'; import { ref, watch } from "vue";
import { usePreferencesStore } from './stores/preferences.store'; import { usePreferencesStore } from "./stores/preferences.store";
import { useFeedbackStore } from './stores/feedback.store'; import { useFeedbackStore } from "./stores/feedback.store";
import companyFooter from './components/navigation/companyFooter.vue'; import companyFooter from "./components/navigation/companyFooter.vue";
import urlBar from './components/navigation/urlBar.vue'; import urlBar from "./components/navigation/urlBar.vue";
import { useRouter } from 'vue-router'; import { useRouter } from "vue-router";
import NavigationBar from './components/navigation/navigationBar.vue'; import NavigationBar from "./components/navigation/navigationBar.vue";
import { BannerStateEnum } from './data/enums/bannerStateEnum'; import { BannerStateEnum } from "./data/enums/bannerStateEnum";
const preferencesStore = usePreferencesStore() const preferencesStore = usePreferencesStore();
const feedbackStore = useFeedbackStore() const feedbackStore = useFeedbackStore();
const theme = useTheme() const theme = useTheme();
const router = useRouter() const router = useRouter();
theme.global.name.value = preferencesStore.theme theme.global.name.value = preferencesStore.theme;
// Global watcher // Global watcher
// Watch for language change // Watch for language change
watch(() => preferencesStore.language, () => { watch(
i18n.global.locale = preferencesStore.language () => preferencesStore.language,
}, { immediate: true }) () => {
i18n.global.locale = preferencesStore.language;
},
{ immediate: true }
);
// Watch for theme change // Watch for theme change
watch(() => preferencesStore.theme, () => { watch(
theme.global.name.value = preferencesStore.theme () => preferencesStore.theme,
}) () => {
theme.global.name.value = preferencesStore.theme;
}
);
// Watch for 404 page directions // Watch for 404 page directions
watch(() => feedbackStore.notFound, () => { watch(
if (feedbackStore.notFound) { () => feedbackStore.notFound,
feedbackStore.notFound = false () => {
router.push("/404") if (feedbackStore.notFound) {
feedbackStore.notFound = false;
router.push("/404");
}
} }
}) );
// Watch for snackbar disappear // Watch for snackbar disappear
watch(() => feedbackStore.showSnackbar, () => { watch(
if (!feedbackStore.showSnackbar) { () => feedbackStore.showSnackbar,
feedbackStore.snackbars = [] () => {
if (!feedbackStore.showSnackbar) {
feedbackStore.snackbars = [];
}
} }
}) );
function calcMargin(i) { function calcMargin(i) {
return (i * 60) + 10 + 'px' return i * 60 + 10 + "px";
} }
</script> </script>
@@ -52,11 +65,10 @@ function calcMargin(i) {
<v-app> <v-app>
<!-- Browser Navigation bar replica --> <!-- Browser Navigation bar replica -->
<url-bar /> <url-bar />
<!-- Navigaion bar of page --> <!-- Navigaion bar of page -->
<navigation-bar /> <navigation-bar />
<v-main> <v-main>
<!-- Snackbar in the top right corner for user feedback --> <!-- Snackbar in the top right corner for user feedback -->
<v-snackbar <v-snackbar
@@ -75,21 +87,18 @@ function calcMargin(i) {
</v-snackbar> </v-snackbar>
<!-- Here changes the router the content --> <!-- Here changes the router the content -->
<v-container max-width="1400" min-height="1000" class="py-0" height="100%"> <v-container
max-width="1400"
min-height="1000"
class="py-0 px-0"
height="100%"
>
<v-sheet color="sheet" height="100%"> <v-sheet color="sheet" height="100%">
<router-view></router-view> <router-view></router-view>
</v-sheet> </v-sheet>
</v-container> </v-container>
<v-btn <v-btn fab dark fixed bottom right color="primary">
fab
dark
fixed
bottom
right
color="primary"
>
<v-icon>keyboard_arrow_up</v-icon> <v-icon>keyboard_arrow_up</v-icon>
</v-btn> </v-btn>
@@ -100,12 +109,12 @@ function calcMargin(i) {
<!-- Test Environment sticker in bottom right corner --> <!-- Test Environment sticker in bottom right corner -->
<v-sheet <v-sheet
color="error" color="error"
position="fixed" position="fixed"
location="bottom right" location="bottom right"
class="pa-3 mb-12 mr-n16 text-center text-h5" class="pa-3 mb-12 mr-n16 text-center text-h5"
width="300" width="300"
style="rotate: 315deg; z-index: 1008;" style="rotate: 315deg; z-index: 1008"
> >
{{ $t('misc.testEnvironment') }} {{ $t("misc.testEnvironment") }}
</v-sheet> </v-sheet>
</template> </template>

View File

@@ -50,7 +50,7 @@ defineProps({
</v-col> </v-col>
<v-col cols="8"> <v-col cols="12" md="10">
<!-- Title --> <!-- Title -->
<v-skeleton-loader <v-skeleton-loader
type="heading" type="heading"

View File

@@ -22,7 +22,7 @@ const bandStore = useBandStore()
<v-row> <v-row>
<v-spacer /> <v-spacer />
<v-col v-for="member of bandStore.band.members" cols="6" md="3"> <v-col v-for="member of bandStore.band.members" cols="12" md="3">
<card-with-top-image <card-with-top-image
:title="member.name" :title="member.name"
:image=" member.image" :image=" member.image"

View File

@@ -26,7 +26,7 @@ defineProps({
</v-row> </v-row>
<v-row> <v-row>
<v-col> <v-col cols="12" md="6">
<div class="d-flex align-center justify-center flex-column" style="height: 100%;"> <div class="d-flex align-center justify-center flex-column" style="height: 100%;">
<div class="text-h2 mt-5"> <div class="text-h2 mt-5">
{{ rating.toFixed(1) }} {{ rating.toFixed(1) }}
@@ -45,7 +45,7 @@ defineProps({
</div> </div>
</v-col> </v-col>
<v-col> <v-col cols="12" md="6">
<v-list style="background-color: transparent;"> <v-list style="background-color: transparent;">
<v-list-item <v-list-item
v-for="ratingValue in ratings" v-for="ratingValue in ratings"

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import ratingSection from './ratingSection.vue'; import ratingSection from './components/ratingSection.vue';
import bandMemberSection from './bandMemberSection.vue'; import bandMemberSection from './components/bandMemberSection.vue';
import gallerySection from './gallerySection.vue'; import gallerySection from './components/gallerySection.vue';
import concertSection from './concertSection.vue'; import concertSection from './components/concertSection.vue';
import heroImage from '@/components/pageParts/heroImage.vue'; import heroImage from '@/components/pageParts/heroImage.vue';
import { useBandStore } from '@/stores/band.store'; import { useBandStore } from '@/stores/band.store';
import { onMounted, watch } from 'vue'; import { onMounted, watch } from 'vue';
@@ -38,7 +38,7 @@ watch(() => router.currentRoute.value.params.name, () => {
<v-row> <v-row>
<v-spacer /> <v-spacer />
<v-col cols="10"> <v-col cols="12" md="10">
<concert-section /> <concert-section />
<band-member-section /> <band-member-section />

View File

@@ -104,7 +104,7 @@ function generateExerciseKey() {
<!-- Exercise item --> <!-- Exercise item -->
<v-timeline-item <v-timeline-item
v-if="exercise.available" v-if="exercise.available"
:dot-color="exercise.solved ? 'green' : 'primary'" :dot-color="exercise.solved ? 'green-darken-4' : 'primary'"
:icon="exercise.solved ? 'mdi-check' : 'mdi-pencil'" :icon="exercise.solved ? 'mdi-check' : 'mdi-pencil'"
> >
<!-- Right side --> <!-- Right side -->
@@ -115,7 +115,7 @@ function generateExerciseKey() {
exercise.exerciseNr, exercise.exerciseNr,
]) + getExerciseNameLanguage(exercise) ]) + getExerciseNameLanguage(exercise)
" "
:color="exercise.solved ? 'green' : 'primary'" :color="exercise.solved ? 'green-darken-4' : 'primary'"
> >
{{ getExerciseDescriptionLanguage(exercise) }} {{ getExerciseDescriptionLanguage(exercise) }}
</card-view> </card-view>