index.coffee 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. document.head.insertAdjacentHTML('beforeend','<style type="text/css">'+stylFns['app/pages/Admin/Settings/index.styl']+'</style>')
  2. PouchDB = require 'app/utils/pouch'
  3. module.exports =
  4. name: 'AdminSettings'
  5. render: (new Function '_ctx', '_cache', renderFns['app/pages/Admin/Settings/index.pug'])()
  6. data: ->
  7. return {
  8. activeTab: 'domains'
  9. tabs: [
  10. { id: 'domains', name: 'Домены' }
  11. { id: 'languages', name: 'Языки' }
  12. { id: 'general', name: 'Общие настройки' }
  13. ]
  14. domains: []
  15. languages: [
  16. { code: 'ru', name: 'Русский', enabled: true }
  17. { code: 'en', name: 'English', enabled: false }
  18. { code: 'de', name: 'Deutsch', enabled: false }
  19. ]
  20. availableLanguages: [
  21. { code: 'ru', name: 'Русский' }
  22. { code: 'en', name: 'English' }
  23. { code: 'de', name: 'Deutsch' }
  24. ]
  25. generalSettings: {
  26. companyName: 'Браер-Колор'
  27. notificationEmail: 'admin@braer-color.ru'
  28. currency: 'RUB'
  29. }
  30. showDomainModal: false
  31. editingDomain: null
  32. domainForm: {
  33. domain: ''
  34. companyName: ''
  35. languages: ['ru']
  36. }
  37. }
  38. computed:
  39. currentDomain: ->
  40. window.location.hostname
  41. methods:
  42. getTabClass: (tab) ->
  43. baseClass = 'admin-settings__tab'
  44. isActive = @activeTab == tab.id
  45. if isActive
  46. return "#{baseClass} admin-settings__tab--active"
  47. else
  48. return "#{baseClass} admin-settings__tab--inactive"
  49. getLanguageBtnClass: (lang) ->
  50. baseClass = 'admin-settings__language-btn'
  51. if lang.enabled
  52. return "#{baseClass} admin-settings__language-btn--enabled"
  53. else
  54. return "#{baseClass} admin-settings__language-btn--disabled"
  55. loadDomains: ->
  56. PouchDB.queryView('admin', 'domain_settings', { include_docs: true })
  57. .then (result) =>
  58. @domains = result.rows.map (row) -> row.doc
  59. .catch (error) =>
  60. console.error 'Ошибка загрузки доменов:', error
  61. @showNotification 'Ошибка загрузки доменов', 'error'
  62. loadGeneralSettings: ->
  63. PouchDB.getDocument('settings:general')
  64. .then (settings) =>
  65. @generalSettings = { ...@generalSettings, ...settings }
  66. .catch (error) =>
  67. debug.log 'Общие настройки не найдены, используются значения по умолчанию'
  68. saveGeneralSettings: ->
  69. settingsDoc = {
  70. _id: 'settings:general'
  71. type: 'settings'
  72. ...@generalSettings
  73. updatedAt: new Date().toISOString()
  74. }
  75. PouchDB.saveToRemote(settingsDoc)
  76. .then (result) =>
  77. @showNotification 'Общие настройки сохранены'
  78. .catch (error) =>
  79. console.error 'Ошибка сохранения настроек:', error
  80. @showNotification 'Ошибка сохранения настроек', 'error'
  81. addDomain: ->
  82. @editingDomain = null
  83. @domainForm = {
  84. domain: ''
  85. companyName: ''
  86. languages: ['ru']
  87. }
  88. @showDomainModal = true
  89. editDomain: (domain) ->
  90. @editingDomain = domain
  91. @domainForm = {
  92. domain: domain.domain
  93. companyName: domain.companyName
  94. languages: domain.languages || ['ru']
  95. }
  96. @showDomainModal = true
  97. saveDomain: ->
  98. if !@domainForm.domain
  99. @showNotification 'Введите домен', 'error'
  100. return
  101. domainDoc = {
  102. _id: "domain_settings:#{@domainForm.domain}"
  103. type: 'domain_settings'
  104. domain: @domainForm.domain
  105. companyName: @domainForm.companyName
  106. languages: @domainForm.languages
  107. createdAt: if @editingDomain then @editingDomain.createdAt else new Date().toISOString()
  108. updatedAt: new Date().toISOString()
  109. }
  110. if @editingDomain
  111. domainDoc._rev = @editingDomain._rev
  112. PouchDB.saveToRemote(domainDoc)
  113. .then (result) =>
  114. @showDomainModal = false
  115. @loadDomains()
  116. @showNotification 'Домен сохранен'
  117. .catch (error) =>
  118. console.error 'Ошибка сохранения домена:', error
  119. @showNotification 'Ошибка сохранения домена', 'error'
  120. deleteDomain: (domainId) ->
  121. if confirm('Вы уверены, что хотите удалить этот домен?')
  122. PouchDB.getDocument(domainId)
  123. .then (doc) ->
  124. PouchDB.saveToRemote({ ...doc, _deleted: true })
  125. .then (result) =>
  126. @loadDomains()
  127. @showNotification 'Домен удален'
  128. .catch (error) =>
  129. console.error 'Ошибка удаления домена:', error
  130. @showNotification 'Ошибка удаления домена', 'error'
  131. toggleLanguage: (langCode) ->
  132. language = @languages.find (lang) -> lang.code == langCode
  133. if language
  134. language.enabled = !language.enabled
  135. # Сохраняем настройки языков
  136. @saveLanguageSettings()
  137. saveLanguageSettings: ->
  138. languagesDoc = {
  139. _id: 'settings:languages'
  140. type: 'settings'
  141. languages: @languages.filter((lang) -> lang.enabled).map((lang) -> lang.code)
  142. updatedAt: new Date().toISOString()
  143. }
  144. PouchDB.saveToRemote(languagesDoc)
  145. .then (result) =>
  146. @showNotification 'Настройки языков обновлены'
  147. .catch (error) =>
  148. console.error 'Ошибка сохранения языков:', error
  149. @showNotification 'Ошибка сохранения языков', 'error'
  150. showNotification: (message, type = 'success') ->
  151. @$root.showNotification?(message, type) || debug.log("#{type}: #{message}")
  152. mounted: ->
  153. @loadDomains()
  154. @loadGeneralSettings()