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