index.pug 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. ModalWindow(
  2. :isVisible="isVisible"
  3. @update:isVisible="$emit('update:isVisible', $event)"
  4. :title="event.title"
  5. :contentClass="'max-w-4xl'"
  6. :showFooter="false"
  7. )
  8. template([body])
  9. div(class="event-detail")
  10. div(class="grid grid-cols-1 lg:grid-cols-2 gap-8")
  11. div(class="event-visual")
  12. img(:src="event.image" :alt="event.title" class="w-full rounded-xl shadow-lg")
  13. div(class="event-stats grid grid-cols-3 gap-4 mt-4 text-center")
  14. div(class="stat p-4 bg-gray-50 dark:bg-gray-700 rounded-lg")
  15. div(class="stat-value text-xl font-bold text-accent") {{ event.availableTickets }}
  16. div(class="stat-label text-sm text-gray-600 dark:text-gray-400") Осталось билетов
  17. div(class="stat p-4 bg-gray-50 dark:bg-gray-700 rounded-lg")
  18. div(class="stat-value text-xl font-bold text-gray-800 dark:text-white") {{ event.duration }}
  19. div(class="stat-label text-sm text-gray-600 dark:text-gray-400") Продолжительность
  20. div(class="stat p-4 bg-gray-50 dark:bg-gray-700 rounded-lg")
  21. div(class="stat-value text-xl font-bold text-gray-800 dark:text-white") {{ event.ageRestriction }}
  22. div(class="stat-label text-sm text-gray-600 dark:text-gray-400") Возраст
  23. div(class="event-info")
  24. div(class="info-grid space-y-6")
  25. div(class="info-item flex items-start")
  26. div(class="icon mr-4 mt-1")
  27. svg(class="w-5 h-5 text-accent" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  28. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z")
  29. div(class="content")
  30. div(class="label font-semibold text-gray-700 dark:text-gray-300") Дата и время
  31. div(class="value text-lg text-gray-800 dark:text-white") {{ formatDateTime(event.date, event.time) }}
  32. div(class="info-item flex items-start")
  33. div(class="icon mr-4 mt-1")
  34. svg(class="w-5 h-5 text-accent" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  35. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z")
  36. div(class="content")
  37. div(class="label font-semibold text-gray-700 dark:text-gray-300") Место проведения
  38. div(class="value text-lg text-gray-800 dark:text-white") {{ event.venue }}
  39. div(class="text-sm text-gray-600 dark:text-gray-400") Концертный зал "Кохи Борбад"
  40. div(class="info-item flex items-start")
  41. div(class="icon mr-4 mt-1")
  42. svg(class="w-5 h-5 text-accent" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  43. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10")
  44. div(class="content")
  45. div(class="label font-semibold text-gray-700 dark:text-gray-300") Категория
  46. div(class="value")
  47. span(
  48. :class="getCategoryBadgeClass(event.category)"
  49. class="inline-block px-3 py-1 text-sm font-medium rounded-full"
  50. ) {{ getCategoryLabel(event.category) }}
  51. div(class="info-item flex items-start")
  52. div(class="icon mr-4 mt-1")
  53. svg(class="w-5 h-5 text-accent" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  54. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1")
  55. div(class="content")
  56. div(class="label font-semibold text-gray-700 dark:text-gray-300") Цена
  57. div(class="value text-3xl font-bold text-accent") {{ event.price }}
  58. span(class="text-lg font-normal text-gray-600 dark:text-gray-400") сомони
  59. div(class="info-item")
  60. div(class="label font-semibold text-gray-700 dark:text-gray-300 mb-2") Описание мероприятия
  61. div(class="value text-gray-600 dark:text-gray-400 leading-relaxed") {{ event.description }}
  62. div(class="action-buttons mt-8 flex flex-col sm:flex-row gap-4")
  63. button(
  64. @click="bookTickets"
  65. class="bg-accent text-white px-8 py-4 rounded-lg font-medium hover:bg-yellow-600 transition-colors flex items-center justify-center flex-1"
  66. )
  67. svg(class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  68. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z")
  69. span Купить билеты
  70. button(
  71. @click="addToCalendar"
  72. class="border border-gray-300 text-gray-700 px-6 py-4 rounded-lg font-medium hover:bg-gray-50 transition-colors flex items-center justify-center flex-1 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700"
  73. )
  74. svg(class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24")
  75. path(stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z")
  76. span В календарь
  77. template([footer])
  78. div(class="flex justify-between items-center w-full")
  79. div(class="social-share flex space-x-2")
  80. button(
  81. @click="shareOnFacebook"
  82. class="p-3 rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 transition-colors dark:bg-blue-900 dark:text-blue-300 dark:hover:bg-blue-800"
  83. aria-label="Поделиться в Facebook"
  84. )
  85. svg(class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24")
  86. path(d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z")
  87. button(
  88. @click="shareOnTwitter"
  89. class="p-3 rounded-full bg-blue-400 text-white hover:bg-blue-500 transition-colors"
  90. aria-label="Поделиться в Twitter"
  91. )
  92. svg(class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24")
  93. path(d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z")
  94. div(class="close-section")
  95. button(
  96. @click="$emit('update:isVisible', false)"
  97. class="text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors"
  98. ) Закрыть