|
@@ -0,0 +1,178 @@
|
|
|
|
|
+document.head.insertAdjacentHTML('beforeend','<style type="text/tailwindcss">'+stylFns['app/pages/Admin/Settings/index.styl']+'</style>')
|
|
|
|
|
+
|
|
|
|
|
+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()
|