document.head.insertAdjacentHTML('beforeend','') PouchDB = require 'app/utils/pouch' module.exports = name: 'AdminSlider' render: (new Function '_ctx', '_cache', renderFns['app/pages/Admin/Slider/index.pug'])() data: -> return { slides: [] showSlideModal: false editingSlide: null availableDomains: [] slideForm: { title: '' subtitle: '' image: '' buttonText: 'В каталог' buttonLink: '/catalog' order: 0 active: true domains: [] } } methods: loadSlides: -> PouchDB.queryView('admin', 'slides', { include_docs: true }) .then (result) => @slides = result.rows.map (row) -> row.doc # Сортируем по порядку @slides.sort (a, b) -> a.order - b.order .catch (error) => console.error 'Ошибка загрузки слайдов:', error @showNotification 'Ошибка загрузки слайдов', 'error' loadDomains: -> PouchDB.queryView('admin', 'domain_settings', { include_docs: true }) .then (result) => @availableDomains = result.rows.map (row) -> row.doc .catch (error) => console.error 'Ошибка загрузки доменов:', error editSlide: (slide) -> @editingSlide = slide @slideForm = { title: slide.title || '' subtitle: slide.subtitle || '' image: slide.image || '' buttonText: slide.buttonText || 'В каталог' buttonLink: slide.buttonLink || '/catalog' order: slide.order || 0 active: slide.active != false domains: slide.domains || [] } @showSlideModal = true saveSlide: -> if !@slideForm.title @showNotification 'Введите заголовок слайда', 'error' return slideData = { type: 'hero_slide' ...@slideForm updatedAt: new Date().toISOString() } if @editingSlide slideData._id = @editingSlide._id slideData._rev = @editingSlide._rev slideData.createdAt = @editingSlide.createdAt else slideData._id = "hero_slide:#{Date.now()}" slideData.createdAt = new Date().toISOString() # Автоматически устанавливаем порядок для нового слайда slideData.order = @slides.length PouchDB.saveToRemote(slideData) .then (result) => @showSlideModal = false @resetSlideForm() @loadSlides() @showNotification 'Слайд успешно сохранен' .catch (error) => console.error 'Ошибка сохранения слайда:', error @showNotification 'Ошибка сохранения слайда', 'error' deleteSlide: (slideId) -> if confirm('Вы уверены, что хотите удалить этот слайд?') PouchDB.getDocument(slideId) .then (doc) -> PouchDB.saveToRemote({ ...doc, _deleted: true }) .then (result) => @loadSlides() @showNotification 'Слайд удален' .catch (error) => console.error 'Ошибка удаления слайда:', error @showNotification 'Ошибка удаления слайда', 'error' toggleSlideStatus: (slide) -> updatedSlide = { ...slide active: !slide.active updatedAt: new Date().toISOString() } PouchDB.saveToRemote(updatedSlide) .then (result) => @loadSlides() @showNotification 'Статус слайда обновлен' .catch (error) => console.error 'Ошибка обновления статуса:', error @showNotification 'Ошибка обновления статуса', 'error' resetSlideForm: -> @editingSlide = null @slideForm = { title: '' subtitle: '' image: '' buttonText: 'В каталог' buttonLink: '/catalog' order: @slides.length active: true domains: [] } getStatusClass: (isActive) -> baseClass = 'admin-slider__item-status' if isActive return "#{baseClass} admin-slider__item-status--active" else return "#{baseClass} admin-slider__item-status--inactive" getToggleBtnClass: (isActive) -> baseClass = 'admin-slider__btn' if isActive return "#{baseClass} admin-slider__btn--delete" else return "#{baseClass} admin-slider__btn--primary" showNotification: (message, type = 'success') -> @$root.showNotification?(message, type) || debug.log("#{type}: #{message}") mounted: -> @loadSlides() @loadDomains()