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()