CareProgramItem.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <template>
  2. <div class="row--block--wrapper">
  3. <div>
  4. <ul :class="align">
  5. <li v-for="(item, index) in items" :key="index">
  6. <div class="thumb">
  7. <img :src="item.imagePath" :alt="item.title" />
  8. </div>
  9. <div class="desc--wrap">
  10. <h2 class="title">{{ item.title }}</h2>
  11. <div class="captions" v-html="item.description"></div>
  12. <NuxtLink
  13. v-if="item.linkUrl"
  14. class="more--detail--href mt--20 ft--16"
  15. :to="item.linkUrl"
  16. :target="item.linkTarget || '_blank'"
  17. >
  18. {{ item.linkText }}<i class="ico"></i>
  19. </NuxtLink>
  20. <div class="small--text" v-if="item.smallText">{{ item.smallText }}</div>
  21. <div class="captions--text" v-if="item.captionText">
  22. {{ item.captionText }}
  23. </div>
  24. </div>
  25. </li>
  26. </ul>
  27. </div>
  28. </div>
  29. </template>
  30. <script setup>
  31. defineProps({
  32. align: {
  33. type: String,
  34. default: "",
  35. },
  36. items: {
  37. type: Array,
  38. required: true,
  39. default: () => [],
  40. validator: (items) => {
  41. return items.every(
  42. (item) =>
  43. item.imagePath &&
  44. item.title &&
  45. item.description &&
  46. typeof item.imagePath === "string" &&
  47. typeof item.title === "string" &&
  48. typeof item.description === "string"
  49. );
  50. },
  51. },
  52. });
  53. </script>