index.vue 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <template>
  2. <div
  3. v-if="albums"
  4. class="w-screen h-full flex flex-col gap-5 mt-3"
  5. >
  6. <NuxtLink
  7. v-for="album in albums"
  8. :key="album.id"
  9. :to="`/gallery/${album.id}`"
  10. class="bg-background-100 bg-opacity-80 rounded-md mx-1 select-none hover:opacity-60 duration-150 transition-all"
  11. >
  12. <img
  13. class="w-full rounded-t-md"
  14. :src="album.preview"
  15. alt="Фото"
  16. >
  17. <p
  18. class="text-center text-sm font-semibold my-3"
  19. v-text="album.title"
  20. />
  21. <p
  22. class="text-xs text-right mb-2 pr-2"
  23. v-text="album.date"
  24. />
  25. </NuxtLink>
  26. </div>
  27. <div
  28. v-else
  29. class="w-screen h-full flex justify-center items-center"
  30. >
  31. <ILoader class="w-16 h-16 text-foreground" />
  32. </div>
  33. </template>
  34. <script setup lang="ts">
  35. definePageMeta({
  36. name: 'Галерея',
  37. middleware: ['user-only'],
  38. })
  39. const albums = ref<object>()
  40. const { $api } = useNuxtApp()
  41. onMounted(async () => albums.value = await $api.gallery.getAlbums())
  42. </script>