diff --git a/frontend/src/assets/hero-keyvisual.svg b/frontend/src/assets/hero-keyvisual.svg new file mode 100644 index 0000000..b2041cf --- /dev/null +++ b/frontend/src/assets/hero-keyvisual.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/AppShell.vue b/frontend/src/components/AppShell.vue index 9d63c8e..9aefcf6 100644 --- a/frontend/src/components/AppShell.vue +++ b/frontend/src/components/AppShell.vue @@ -5,9 +5,11 @@ import { Star } from '@lucide/vue' import Button from './ui/Button.vue' import { useAuthStore } from '../stores/auth' +import { usePhases } from '../composables/usePhases' const route = useRoute() const authStore = useAuthStore() +const { infoForPhaseKey } = usePhases() const loginOpen = ref(false) const loginError = ref('') const loginForm = reactive({ @@ -18,8 +20,9 @@ const loginForm = reactive({ const navItems = [ { label: 'Home', to: '/' }, - { label: 'Nominierung', to: '/nominations' }, - { label: 'Voting', to: '/voting' }, + { label: 'Nominierung', to: '/nominations', requiresAuth: true, phase: 'nomination' }, + { label: 'Voting', to: '/voting', requiresAuth: true, phase: 'voting' }, + { label: 'Clips', to: '/clips', requiresAuth: true, phase: 'nomination' }, { label: 'Gewinner', to: '/winners' }, { label: 'Admin', to: '/admin' }, ] @@ -29,9 +32,15 @@ const currentLabel = computed( ) const visibleNavItems = computed(() => - navItems.filter((item) => item.to !== '/admin' || authStore.isAdmin), + navItems.filter((item) => { + if (item.to === '/admin') return authStore.isAdmin + // Teilnahme-Seiten erst nach Login zeigen + if (item.requiresAuth && !authStore.isLoggedIn) return false + // ... und nur, solange ihre Phase aktiv ist + if (item.phase && infoForPhaseKey(item.phase).state !== 'active') return false + return true + }), ) -const isAdminRoute = computed(() => route.path.startsWith('/admin')) async function login(role: 'viewer' | 'admin') { loginError.value = '' @@ -58,20 +67,18 @@ async function login(role: 'viewer' | 'admin') {
-
+
- +
VTUBER - STAR AWARDS + STAR AWARDS
@@ -84,7 +91,10 @@ async function login(role: 'viewer' | 'admin') {
@@ -104,13 +114,15 @@ async function login(role: 'viewer' | 'admin') {
-