Index.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <div class="min-h-screen bg-background">
  3. <Header />
  4. <main>
  5. <HeroSection />
  6. <ServicesSection />
  7. <PrintingNuancesSection />
  8. <ModelUploadSection />
  9. <QuotingSection />
  10. <ProcessSection />
  11. <ReviewsSection />
  12. <CTASection />
  13. </main>
  14. <Footer />
  15. </div>
  16. </template>
  17. <script setup lang="ts">
  18. import Header from "@/components/Header.vue";
  19. import HeroSection from "@/components/HeroSection.vue";
  20. import ServicesSection from "@/components/ServicesSection.vue";
  21. import { defineAsyncComponent, computed } from "vue";
  22. import { useHead } from "@unhead/vue";
  23. import { useI18n } from "vue-i18n";
  24. const { t } = useI18n();
  25. useHead({
  26. title: computed(() => t('seo.home.title')),
  27. meta: [
  28. { name: 'description', content: computed(() => t('seo.home.description')) },
  29. { property: 'og:title', content: computed(() => t('seo.home.title')) },
  30. { property: 'og:description', content: computed(() => t('seo.home.description')) },
  31. ],
  32. script: [
  33. {
  34. type: 'application/ld+json',
  35. children: JSON.stringify({
  36. "@context": "https://schema.org",
  37. "@type": "LocalBusiness",
  38. "name": "Radionica 3D",
  39. "image": "https://radionica3d.me/logo.png",
  40. "address": {
  41. "@type": "PostalAddress",
  42. "addressLocality": "Herceg Novi",
  43. "addressCountry": "ME"
  44. },
  45. "url": "https://radionica3d.me",
  46. "telephone": "+382...",
  47. "description": t('seo.home.description'),
  48. "priceRange": "$$",
  49. "openingHours": "Mo-Fr 09:00-18:00"
  50. })
  51. }
  52. ]
  53. });
  54. const PrintingNuancesSection = defineAsyncComponent(() => import("@/components/PrintingNuancesSection.vue"));
  55. const ModelUploadSection = defineAsyncComponent(() => import("@/components/ModelUploadSection.vue"));
  56. const QuotingSection = defineAsyncComponent(() => import("@/components/QuotingSection.vue"));
  57. const ProcessSection = defineAsyncComponent(() => import("@/components/ProcessSection.vue"));
  58. const ReviewsSection = defineAsyncComponent(() => import("@/components/ReviewsSection.vue"));
  59. const CTASection = defineAsyncComponent(() => import("@/components/CTASection.vue"));
  60. const Footer = defineAsyncComponent(() => import("@/components/Footer.vue"));
  61. </script>