index.coffee 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. # app/pages/Events/index.coffee
  2. document.head.insertAdjacentHTML('beforeend','<style type="text/tailwindcss" page="Events">'+stylFns['app/pages/Events/index.styl']+'</style>')
  3. module.exports =
  4. name: 'Events'
  5. render: (new Function '_ctx', '_cache', renderFns['app/pages/Events/index.pug'])()
  6. data: ->
  7. allEvents: [
  8. {
  9. id: 1
  10. title: 'Концерт симфонического оркестра'
  11. date: '2025-10-15'
  12. time: '19:00'
  13. description: 'Произведения Чайковского и Рахманинова в исполнении Национального симфонического оркестра под руководством маэстро Фирдавса Абдурахмонова. Незабываемый вечер классической музыки в акустике мирового уровня.'
  14. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  15. category: 'classical'
  16. price: 50
  17. venue: 'Большой зал'
  18. duration: '2 часа 30 минут'
  19. ageRestriction: '12+'
  20. availableTickets: 45
  21. }
  22. {
  23. id: 2
  24. title: 'Вечер таджикской народной музыки'
  25. date: '2025-10-20'
  26. time: '18:30'
  27. description: 'Выступление фольклорного ансамбля "Шашмаком" с программой традиционных мелодий и танцев. Погрузитесь в богатую культурную традицию Таджикистана.'
  28. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  29. category: 'folk'
  30. price: 30
  31. venue: 'Малый зал'
  32. duration: '2 часа'
  33. ageRestriction: '6+'
  34. availableTickets: 28
  35. }
  36. {
  37. id: 3
  38. title: 'Джазовый фестиваль "Borbad Jazz"'
  39. date: '2025-10-25'
  40. time: '20:00'
  41. description: 'Международные джазовые коллективы из Европы и Азии в уникальной акустике зала. Три дня незабываемой музыки от лучших джазменов мира.'
  42. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  43. category: 'jazz'
  44. price: 70
  45. venue: 'Большой зал'
  46. duration: '3 часа'
  47. ageRestriction: '16+'
  48. availableTickets: 15
  49. }
  50. {
  51. id: 4
  52. title: 'Концерт популярной музыки'
  53. date: '2025-10-28'
  54. time: '19:30'
  55. description: 'Лучшие поп-исполнители Таджикистана представят новые хиты и классические композиции. Энергичное шоу с современной хореографией.'
  56. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  57. category: 'pop'
  58. price: 45
  59. venue: 'Большой зал'
  60. duration: '2 часа 15 минут'
  61. ageRestriction: '12+'
  62. availableTickets: 67
  63. }
  64. {
  65. id: 5
  66. title: 'Оперный гала-концерт'
  67. date: '2025-11-02'
  68. time: '18:00'
  69. description: 'Известные оперные певцы исполнят арии из мировых шедевров оперного искусства. Вечер великой музыки в исполнении мастеров.'
  70. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  71. category: 'classical'
  72. price: 80
  73. venue: 'Большой зал'
  74. duration: '2 часа 45 минут'
  75. ageRestriction: '12+'
  76. availableTickets: 23
  77. }
  78. {
  79. id: 6
  80. title: 'Танцевальное шоу "Восточные ритмы"'
  81. date: '2025-11-05'
  82. time: '19:00'
  83. description: 'Традиционные и современные танцевальные коллективы представят красочное шоу. Яркие костюмы, зажигательная музыка и мастерство танцовщиков.'
  84. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  85. category: 'dance'
  86. price: 35
  87. venue: 'Большой зал'
  88. duration: '2 часа 30 минут'
  89. ageRestriction: '6+'
  90. availableTickets: 89
  91. }
  92. {
  93. id: 7
  94. title: 'Камерная музыка: Струнный квартет'
  95. date: '2025-11-08'
  96. time: '17:00'
  97. description: 'Изысканная программа камерной музыки в исполнении ведущего струнного квартета страны. Интимная атмосфера и тонкое звучание.'
  98. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  99. category: 'classical'
  100. price: 40
  101. venue: 'Камерный зал'
  102. duration: '1 час 45 минут'
  103. ageRestriction: '12+'
  104. availableTickets: 34
  105. }
  106. {
  107. id: 8
  108. title: 'Фестиваль современной музыки'
  109. date: '2025-11-12'
  110. time: '20:30'
  111. description: 'Экспериментальные проекты и инновационные музыкальные направления. Откройте для себя новые грани музыкального искусства.'
  112. image: 'https://avatars.mds.yandex.net/get-altay/9822373/2a0000019377c5d52c95d3175340aab4a35a/XXL_height'
  113. category: 'experimental'
  114. price: 55
  115. venue: 'Малый зал'
  116. duration: '3 часа'
  117. ageRestriction: '18+'
  118. availableTickets: 18
  119. }
  120. ]
  121. displayedEvents: []
  122. selectedEvent: null
  123. showEventModal: false
  124. loading: false
  125. currentPage: 1
  126. pageSize: 6
  127. eventFilters: [
  128. {
  129. key: 'category'
  130. label: 'Категория'
  131. type: 'select'
  132. options: [
  133. { value: 'all', label: 'Все категории' }
  134. { value: 'classical', label: 'Классическая музыка' }
  135. { value: 'folk', label: 'Фольклор' }
  136. { value: 'jazz', label: 'Джаз' }
  137. { value: 'pop', label: 'Поп-музыка' }
  138. { value: 'dance', label: 'Танцевальное шоу' }
  139. { value: 'experimental', label: 'Экспериментальная музыка' }
  140. ]
  141. }
  142. {
  143. key: 'venue'
  144. label: 'Зал'
  145. type: 'select'
  146. options: [
  147. { value: 'all', label: 'Все залы' }
  148. { value: 'Большой зал', label: 'Большой зал' }
  149. { value: 'Малый зал', label: 'Малый зал' }
  150. { value: 'Камерный зал', label: 'Камерный зал' }
  151. ]
  152. }
  153. {
  154. key: 'priceRange'
  155. label: 'Цена, сомони'
  156. type: 'range'
  157. min: 0
  158. max: 100
  159. step: 5
  160. }
  161. ]
  162. sortOptions: [
  163. { value: 'date-asc', label: 'По дате (сначала ближайшие)' }
  164. { value: 'date-desc', label: 'По дате (сначала дальние)' }
  165. { value: 'price-asc', label: 'По цене (сначала дешевые)' }
  166. { value: 'price-desc', label: 'По цене (сначала дорогие)' }
  167. { value: 'name-asc', label: 'По названию (А-Я)' }
  168. { value: 'name-desc', label: 'По названию (Я-А)' }
  169. { value: 'popularity', label: 'По популярности' }
  170. ]
  171. categoryLabels:
  172. classical: 'Классика'
  173. folk: 'Фольклор'
  174. jazz: 'Джаз'
  175. pop: 'Поп'
  176. dance: 'Танцы'
  177. experimental: 'Эксперимент'
  178. computed:
  179. hasMoreEvents: ->
  180. @currentPage * @pageSize < @allEvents.length
  181. mounted: ->
  182. @displayedEvents = @allEvents.slice(0, @pageSize)
  183. methods:
  184. handleFilterChange: (filteredItems) ->
  185. @displayedEvents = filteredItems
  186. @currentPage = 1
  187. showEventDetails: (event) ->
  188. @selectedEvent = event
  189. @showEventModal = true
  190. bookTicket: (event) ->
  191. # Открываем модальное окно покупки билетов
  192. @selectedEvent = event
  193. @showEventModal = true
  194. # Можно также сразу перейти к покупке
  195. debug.log 'Бронирование билета на:', event.title
  196. handleTicketBooking: (event) ->
  197. # Логика обработки покупки билетов
  198. debug.log 'Обработка покупки билета на:', event.title
  199. @$root.$emit('open-modal', {
  200. component: 'SuccessModal'
  201. props: {
  202. title: 'Билет забронирован!'
  203. content: "Вы успешно забронировали билет на "+event.title+". Подробности отправлены на вашу почту."
  204. }
  205. })
  206. loadMoreEvents: ->
  207. @loading = true
  208. # Имитация загрузки
  209. setTimeout =>
  210. @currentPage += 1
  211. startIndex = 0
  212. endIndex = @currentPage * @pageSize
  213. @displayedEvents = @allEvents.slice(startIndex, endIndex)
  214. @loading = false
  215. , 1000
  216. resetFilters: ->
  217. @displayedEvents = @allEvents.slice(0, @pageSize)
  218. @currentPage = 1
  219. getCategoryLabel: (category) ->
  220. @categoryLabels[category] || category
  221. getCategoryBadgeClass: (category) ->
  222. classes =
  223. classical: 'bg-blue-500'
  224. folk: 'bg-green-500'
  225. jazz: 'bg-purple-500'
  226. pop: 'bg-pink-500'
  227. dance: 'bg-orange-500'
  228. experimental: 'bg-indigo-500'
  229. classes[category] || 'bg-gray-500'
  230. formatDate: (dateString) ->
  231. date = new Date(dateString)
  232. options = { day: 'numeric', month: 'short' }
  233. date.toLocaleDateString('ru-RU', options)