DashboardScrollAreaSchedules.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. @click="goToCard(card)"
  9. >
  10. <img :src="card.image" :alt="card.alt" class="promo-card__img" />
  11. </div>
  12. </div>
  13. </section>
  14. </template>
  15. <script setup>
  16. import Banner1 from 'src/assets/banner_1.svg';
  17. import Banner2 from 'src/assets/banner_2.svg';
  18. import { useRouter } from 'vue-router';
  19. import { useQuasar } from 'quasar';
  20. import ProfileHelpDialog from 'src/components/profile/ProfileHelpDialog.vue';
  21. const router = useRouter();
  22. const $q = useQuasar();
  23. const cards = [
  24. { id: 1, image: Banner1, alt: 'Diária sob medida', routeName: 'OpportunitiesPage' },
  25. { id: 2, image: Banner2, alt: 'Como aceitar uma diária', action: 'help' },
  26. ];
  27. const goToCard = (card) => {
  28. if (card.action === 'help') {
  29. $q.dialog({ component: ProfileHelpDialog })
  30. return
  31. }
  32. if (card.routeName) {
  33. router.push({ name: card.routeName })
  34. }
  35. }
  36. </script>
  37. <style scoped lang="scss">
  38. .promo-scroll-wrapper {
  39. width: 100%;
  40. overflow: hidden;
  41. }
  42. .promo-scroll {
  43. display: flex;
  44. gap: 12px;
  45. overflow-x: auto;
  46. overscroll-behavior-x: contain;
  47. padding: 0 0 4px 16px;
  48. scroll-snap-type: x mandatory;
  49. &::-webkit-scrollbar {
  50. display: none;
  51. }
  52. &::after {
  53. content: '';
  54. flex: 0 0 16px;
  55. }
  56. }
  57. .promo-card {
  58. height: 120px;
  59. border-radius: 10px;
  60. overflow: hidden;
  61. scroll-snap-align: start;
  62. background: #e8e4f5;
  63. flex-shrink: 0;
  64. cursor: pointer;
  65. }
  66. .promo-card__img {
  67. width: 100%;
  68. height: 100%;
  69. object-fit: cover;
  70. display: block;
  71. border-radius: 10px;
  72. }
  73. </style>