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

View File

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

View File

@@ -22,7 +22,7 @@ const bandStore = useBandStore()
<v-row>
<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
:title="member.name"
:image=" member.image"

View File

@@ -26,7 +26,7 @@ defineProps({
</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="text-h2 mt-5">
{{ rating.toFixed(1) }}
@@ -45,7 +45,7 @@ defineProps({
</div>
</v-col>
<v-col>
<v-col cols="12" md="6">
<v-list style="background-color: transparent;">
<v-list-item
v-for="ratingValue in ratings"

View File

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

View File

@@ -104,7 +104,7 @@ function generateExerciseKey() {
<!-- Exercise item -->
<v-timeline-item
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'"
>
<!-- Right side -->
@@ -115,7 +115,7 @@ function generateExerciseKey() {
exercise.exerciseNr,
]) + getExerciseNameLanguage(exercise)
"
:color="exercise.solved ? 'green' : 'primary'"
:color="exercise.solved ? 'green-darken-4' : 'primary'"
>
{{ getExerciseDescriptionLanguage(exercise) }}
</card-view>