DashboardScrollAreaSchedules.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <section class="promo-scroll-wrapper q-ma-md">
  3. <div class="promo-scroll">
  4. <div
  5. v-for="card in cards"
  6. :key="card.id"
  7. class="promo-card"
  8. :class="{ 'cursor-pointer': card.route }"
  9. @click="card.route && router.push({ name: card.route })"
  10. >
  11. <img :src="card.image" :alt="card.alt" class="promo-card__img" />
  12. </div>
  13. </div>
  14. </section>
  15. </template>
  16. <script setup>
  17. import { useRouter } from 'vue-router';
  18. import Banner1 from 'src/assets/banner_1.svg';
  19. import Banner2 from 'src/assets/banner_2.svg';
  20. const router = useRouter();
  21. const cards = [
  22. { id: 1, image: Banner1, alt: 'Diária sob medida', route: null },
  23. { id: 2, image: Banner2, alt: 'Escolha profissionais', route: 'SearchPage' },
  24. ];
  25. </script>
  26. <style scoped lang="scss">
  27. .promo-scroll-wrapper {
  28. width: 100%;
  29. overflow: hidden;
  30. }
  31. .promo-scroll {
  32. display: flex;
  33. gap: 12px;
  34. overflow-x: auto;
  35. overscroll-behavior-x: contain;
  36. padding: 0 0 4px 16px;
  37. scroll-snap-type: x mandatory;
  38. &::-webkit-scrollbar {
  39. display: none;
  40. }
  41. &::after {
  42. content: '';
  43. flex: 0 0 16px;
  44. }
  45. }
  46. .promo-card {
  47. height: 120px;
  48. border-radius: 10px;
  49. overflow: hidden;
  50. scroll-snap-align: start;
  51. background: #e8e4f5;
  52. flex-shrink: 0;
  53. }
  54. .promo-card__img {
  55. width: 100%;
  56. height: 100%;
  57. object-fit: cover;
  58. display: block;
  59. border-radius: 10px;
  60. }
  61. </style>