GridBanner.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <template>
  2. <div class="grid--banner--type2">
  3. <ul>
  4. <li v-for="(item, index) in items" :key="index">
  5. <div class="thumb">
  6. <img :src="item.image" :alt="item.title || '배너 이미지'" loading="lazy" />
  7. </div>
  8. <div class="desc--wrapper">
  9. <h2 v-if="item.title">{{ item.title }}</h2>
  10. <h3 v-if="item.subtitle">{{ item.subtitle }}</h3>
  11. <h4 v-if="item.cautionText" v-html="item.cautionText"></h4>
  12. <NuxtLink
  13. v-if="item.linkUrl"
  14. class="more--detail--href mt--20 ft--16"
  15. :to="item.linkUrl"
  16. :target="item.linkTarget || '_self'"
  17. >
  18. {{ item.linkText || "자세히 보기" }} <i class="ico"></i>
  19. </NuxtLink>
  20. </div>
  21. </li>
  22. </ul>
  23. </div>
  24. </template>
  25. <script setup>
  26. // Props 정의
  27. const props = defineProps({
  28. items: {
  29. type: Array,
  30. required: true,
  31. validator: (value) => {
  32. return value.every(
  33. (item) => item.hasOwnProperty("image") && item.hasOwnProperty("title")
  34. );
  35. },
  36. },
  37. });
  38. </script>