TodayHadith.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <template>
  2. <div class="today-hadith">
  3. <q-banner class="banner">
  4. حدیث روز
  5. </q-banner>
  6. <q-linear-progress v-if="hadithes.loading"
  7. indeterminate />
  8. <div v-if="!hadithes.loading && todayHadith?.id"
  9. class="today-hadith-item">
  10. <div class="today-hadith-item-thumbnail">
  11. <q-img src="/assets/images/web/today-hadith-thumbnail.png" />
  12. </div>
  13. <div class="today-hadith-item-data">
  14. <div class="today-hadith-item-narrator">
  15. {{ todayHadith.narrator }}
  16. </div>
  17. <div class="today-hadith-item-arabian-text"
  18. v-html="todayHadith.arabian_text" />
  19. <div class="today-hadith-item-persian-text"
  20. v-html="todayHadith.persian_text" />
  21. <div class="today-hadith-item-source">
  22. {{ todayHadith.source }}
  23. </div>
  24. </div>
  25. </div>
  26. </div>
  27. </template>
  28. <script>
  29. import 'vue3-carousel/dist/carousel.css'
  30. import { APIGateway } from 'src/api/APIGateway.js'
  31. import { Hadith, HadithList } from 'src/models/Hadith.js' // using Classroom instead of Event to prevent props warning
  32. import { mixinPrefetchServerData, mixinAuth } from 'src/mixin/Mixins.js'
  33. import { EventRegistrationList } from 'src/models/EventRegistration.js'
  34. export default {
  35. name: 'TodayHadith',
  36. mixins: [mixinPrefetchServerData, mixinAuth],
  37. data () {
  38. return {
  39. userRegistrations: new EventRegistrationList(),
  40. todayHadith: new Hadith(),
  41. hadithes: new HadithList()
  42. }
  43. },
  44. methods: {
  45. prefetchServerDataPromise () {
  46. return this.getHadith()
  47. },
  48. prefetchServerDataPromiseThen (hadithes) {
  49. this.hadithes = new HadithList(hadithes.list)
  50. this.todayHadith = this.hadithes.list[0]
  51. this.hadithes.loading = false
  52. },
  53. prefetchServerDataPromiseCatch () {
  54. this.hadithes.loading = false
  55. },
  56. getHadith () {
  57. this.hadithes.loading = true
  58. // return APIGateway.event.index()
  59. return APIGateway.hadith.index({
  60. status: 'TODAY',
  61. per_page: 9999
  62. })
  63. }
  64. }
  65. }
  66. </script>
  67. <style scoped lang="scss">
  68. .today-hadith {
  69. .q-banner {
  70. margin-bottom: 32px;
  71. }
  72. .today-hadith-item {
  73. background: #F6F6F6;
  74. display: flex;
  75. justify-content: flex-start;
  76. border-radius: 20px;
  77. .today-hadith-item-thumbnail {
  78. width: 416px;
  79. @media only screen and (max-width: 1024px){
  80. & {
  81. display: none;
  82. }
  83. }
  84. }
  85. .today-hadith-item-data {
  86. width: calc( 100% - 416px );
  87. padding: 42px 40px;
  88. .today-hadith-item-narrator {
  89. font-size: 16px;
  90. letter-spacing: 0;
  91. color: #212121;
  92. margin-bottom: 29px;
  93. }
  94. .today-hadith-item-arabian-text {
  95. font-size: 20px;
  96. letter-spacing: 0;
  97. color: #475F4A;
  98. margin-bottom: 31px;
  99. }
  100. .today-hadith-item-persian-text {
  101. font-size: 18px;
  102. letter-spacing: 0;
  103. color: #212121;
  104. margin-bottom: 30px;
  105. }
  106. .today-hadith-item-source {
  107. font-size: 18px;
  108. letter-spacing: 0;
  109. color: #AAA095;
  110. text-align: right;
  111. }
  112. @media only screen and (max-width: 1024px){
  113. & {
  114. width: 100%;
  115. }
  116. }
  117. }
  118. }
  119. }
  120. </style>