Clone
<template>
  <div class="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 flex items-center justify-center px-4">
    <div class="max-w-md w-full">
      <div class="bg-white rounded-2xl shadow-xl p-8">
        <div class="text-center">
          <router-link to="/" class="inline-flex items-center space-x-2 mb-6">
            <LinkIcon class="h-8 w-8 text-indigo-600" />
            <span class="text-2xl font-bold text-gray-900">QRurl</span>
          </router-link>

          <div v-if="loading" class="py-8">
            <Loader2Icon class="h-12 w-12 text-indigo-600 animate-spin mx-auto mb-4" />
            <p class="text-gray-600">Verifying your login...</p>
          </div>

          <div v-else-if="error" class="py-8">
            <AlertCircleIcon class="h-12 w-12 text-red-500 mx-auto mb-4" />
            <h3 class="text-xl font-semibold text-gray-900 mb-2">Verification Failed</h3>
            <p class="text-gray-600 mb-6">{{ error }}</p>
            <router-link
              to="/login"
              class="inline-block bg-indigo-600 text-white px-6 py-3 rounded-lg font-semibold hover:bg-indigo-700 transition"
            >
              Back to Login
            </router-link>
          </div>

          <div v-else-if="success" class="py-8">
            <CheckCircleIcon class="h-12 w-12 text-green-500 mx-auto mb-4" />
            <h3 class="text-xl font-semibold text-gray-900 mb-2">Success!</h3>
            <p class="text-gray-600">Redirecting to dashboard...</p>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { Link as LinkIcon, Loader2 as Loader2Icon, CheckCircle as CheckCircleIcon, AlertCircle as AlertCircleIcon } from 'lucide-vue-next'
import { useAuthStore } from '../stores/auth'

const route = useRoute()
const router = useRouter()
const authStore = useAuthStore()

const loading = ref(true)
const success = ref(false)
const error = ref('')

onMounted(async () => {
  const token = route.query.token

  if (!token) {
    error.value = 'No verification token provided'
    loading.value = false
    return
  }

  try {
    await authStore.verifyMagicLink(token)
    success.value = true
    
    // Redirect to dashboard after 2 seconds
    setTimeout(() => {
      router.push('/dashboard')
    }, 2000)
  } catch (err) {
    error.value = err.response?.data?.error || 'Invalid or expired token'
  } finally {
    loading.value = false
  }
})
</script>