document.head.insertAdjacentHTML('beforeend','')
PouchDB = require 'app/utils/pouch'
module.exports =
name: 'AdminSettings'
render: (new Function '_ctx', '_cache', renderFns['app/pages/Admin/Settings/index.pug'])()
data: ->
return {
activeTab: 'domains'
tabs: [
{ id: 'domains', name: 'Домены' }
{ id: 'languages', name: 'Языки' }
{ id: 'general', name: 'Общие настройки' }
]
domains: []
languages: [
{ code: 'ru', name: 'Русский', enabled: true }
{ code: 'en', name: 'English', enabled: false }
{ code: 'de', name: 'Deutsch', enabled: false }
]
availableLanguages: [
{ code: 'ru', name: 'Русский' }
{ code: 'en', name: 'English' }
{ code: 'de', name: 'Deutsch' }
]
generalSettings: {
companyName: 'Браер-Колор'
notificationEmail: 'admin@braer-color.ru'
currency: 'RUB'
}
showDomainModal: false
editingDomain: null
domainForm: {
domain: ''
companyName: ''
languages: ['ru']
}
}
computed:
currentDomain: ->
window.location.hostname
methods:
getTabClass: (tab) ->
baseClass = 'admin-settings__tab'
isActive = @activeTab == tab.id
if isActive
return "#{baseClass} admin-settings__tab--active"
else
return "#{baseClass} admin-settings__tab--inactive"
getLanguageBtnClass: (lang) ->
baseClass = 'admin-settings__language-btn'
if lang.enabled
return "#{baseClass} admin-settings__language-btn--enabled"
else
return "#{baseClass} admin-settings__language-btn--disabled"
loadDomains: ->
PouchDB.queryView('admin', 'domain_settings', { include_docs: true })
.then (result) =>
@domains = result.rows.map (row) -> row.doc
.catch (error) =>
console.error 'Ошибка загрузки доменов:', error
@showNotification 'Ошибка загрузки доменов', 'error'
loadGeneralSettings: ->
PouchDB.getDocument('settings:general')
.then (settings) =>
@generalSettings = { ...@generalSettings, ...settings }
.catch (error) =>
debug.log 'Общие настройки не найдены, используются значения по умолчанию'
saveGeneralSettings: ->
settingsDoc = {
_id: 'settings:general'
type: 'settings'
...@generalSettings
updatedAt: new Date().toISOString()
}
PouchDB.saveToRemote(settingsDoc)
.then (result) =>
@showNotification 'Общие настройки сохранены'
.catch (error) =>
console.error 'Ошибка сохранения настроек:', error
@showNotification 'Ошибка сохранения настроек', 'error'
addDomain: ->
@editingDomain = null
@domainForm = {
domain: ''
companyName: ''
languages: ['ru']
}
@showDomainModal = true
editDomain: (domain) ->
@editingDomain = domain
@domainForm = {
domain: domain.domain
companyName: domain.companyName
languages: domain.languages || ['ru']
}
@showDomainModal = true
saveDomain: ->
if !@domainForm.domain
@showNotification 'Введите домен', 'error'
return
domainDoc = {
_id: "domain_settings:#{@domainForm.domain}"
type: 'domain_settings'
domain: @domainForm.domain
companyName: @domainForm.companyName
languages: @domainForm.languages
createdAt: if @editingDomain then @editingDomain.createdAt else new Date().toISOString()
updatedAt: new Date().toISOString()
}
if @editingDomain
domainDoc._rev = @editingDomain._rev
PouchDB.saveToRemote(domainDoc)
.then (result) =>
@showDomainModal = false
@loadDomains()
@showNotification 'Домен сохранен'
.catch (error) =>
console.error 'Ошибка сохранения домена:', error
@showNotification 'Ошибка сохранения домена', 'error'
deleteDomain: (domainId) ->
if confirm('Вы уверены, что хотите удалить этот домен?')
PouchDB.getDocument(domainId)
.then (doc) ->
PouchDB.saveToRemote({ ...doc, _deleted: true })
.then (result) =>
@loadDomains()
@showNotification 'Домен удален'
.catch (error) =>
console.error 'Ошибка удаления домена:', error
@showNotification 'Ошибка удаления домена', 'error'
toggleLanguage: (langCode) ->
language = @languages.find (lang) -> lang.code == langCode
if language
language.enabled = !language.enabled
# Сохраняем настройки языков
@saveLanguageSettings()
saveLanguageSettings: ->
languagesDoc = {
_id: 'settings:languages'
type: 'settings'
languages: @languages.filter((lang) -> lang.enabled).map((lang) -> lang.code)
updatedAt: new Date().toISOString()
}
PouchDB.saveToRemote(languagesDoc)
.then (result) =>
@showNotification 'Настройки языков обновлены'
.catch (error) =>
console.error 'Ошибка сохранения языков:', error
@showNotification 'Ошибка сохранения языков', 'error'
showNotification: (message, type = 'success') ->
@$root.showNotification?(message, type) || debug.log("#{type}: #{message}")
mounted: ->
@loadDomains()
@loadGeneralSettings()