All files / src/views ForbiddenView.vue

0% Statements 0/25
100% Branches 1/1
100% Functions 1/1
0% Lines 0/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40                                                                               
<script setup lang="ts">
import { useRouter } from 'vue-router'
import { ShieldAlert } from 'lucide-vue-next'
import { useI18n } from 'vue-i18n'
import BaseButton from '@/components/ui/BaseButton.vue'
 
/**
 * 403-Hint-View. Renderert, wenn der Router-Guard einen Routenwechsel
 * wegen fehlender Rolle blockt — statt still aufs Dashboard zu
 * springen (alte Variante, in der der Nutzer rätseln musste, warum
 * der Klick nichts tut). Ein Toast hat den Grund schon gemeldet;
 * diese Seite gibt dem Nutzer einen Rückweg.
 */
const router = useRouter()
const { t } = useI18n()
 
const goHome = () => {
  router.replace('/dashboard')
}
</script>
 
<template>
  <div class="min-h-[60vh] flex items-center justify-center p-6">
    <div class="text-center max-w-md">
      <div class="mx-auto w-16 h-16 rounded-full bg-red-50 flex items-center justify-center mb-4">
        <ShieldAlert :size="32" class="text-red-600" />
      </div>
      <h1 class="text-2xl font-bold text-gray-900 mb-2">
        {{ t('ForbiddenView.title') }}
      </h1>
      <p class="text-gray-600 mb-6">
        {{ t('ForbiddenView.description') }}
      </p>
      <BaseButton @click="goHome">
        {{ t('ForbiddenView.backToDashboard') }}
      </BaseButton>
    </div>
  </div>
</template>