| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- document.head.insertAdjacentHTML('beforeend','<style type="text/css">'+stylFns['app/pages/Admin/Slider/index.styl']+'</style>')
- 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()
|