index.coffee 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. # Инициализация глобальных переменных
  2. globalThis.renderFns = require 'pug.json'
  3. globalThis.stylFns = require 'styl.json'
  4. PouchDBService = require 'app/utils/pouch.coffee'
  5. # Инициализация сервиса данных
  6. pouchService = PouchDBService
  7. document.head.insertAdjacentHTML 'beforeend','<meta charset="UTF-8">'
  8. document.head.insertAdjacentHTML 'beforeend','<meta name="viewport" content="width=device-width, initial-scale=1.0">'
  9. document.head.insertAdjacentHTML('beforeend','<style type="text/css">'+stylFns['app/index.styl']+'</style>')
  10. document.head.insertAdjacentHTML('beforeend','<title></title>')
  11. # Создание главного приложения Vue
  12. globalThis.app = Vue.createApp({
  13. data: ->
  14. return {
  15. theme: localStorage.getItem('theme') || 'light'
  16. companyName: 'Браер-Колор'
  17. loading: false
  18. cartItems: []
  19. user: null
  20. currentDomain: window.location.hostname
  21. languages: ['ru', 'en']
  22. currentLanguage: 'ru'
  23. }
  24. render: (new Function '_ctx', '_cache', renderFns['app/index.pug'])()
  25. computed:
  26. isAdmin: -> @user?.role == 'admin'
  27. methods:
  28. toggleTheme: ->
  29. @theme = if @theme == 'light' then 'dark' else 'light'
  30. localStorage.setItem 'theme', @theme
  31. document.documentElement.classList.toggle 'dark'
  32. setLanguage: (lang) ->
  33. if @languages.includes lang
  34. @currentLanguage = lang
  35. localStorage.setItem 'language', lang
  36. showNotification: (message, type = 'success') ->
  37. # Реализация системы уведомлений
  38. console.dir "#{type.toUpperCase()}: #{message}"
  39. loadUserData: ->
  40. # Загрузка данных пользователя из localStorage или PouchDB
  41. userData = localStorage.getItem 'user'
  42. if userData
  43. try
  44. @user = JSON.parse userData
  45. catch
  46. @user = null
  47. mounted: ->
  48. # Инициализация темы
  49. if @theme == 'dark'
  50. document.documentElement.classList.add 'dark'
  51. # Инициализация PouchDB
  52. try
  53. await pouchService.init()
  54. console.dir 'PouchDB инициализирован'
  55. catch error
  56. console.error 'Ошибка инициализации PouchDB:', error
  57. # Загрузка пользователя (если авторизован)
  58. @loadUserData()
  59. })
  60. # Настройка маршрутизатора
  61. router = VueRouter.createRouter({
  62. history: VueRouter.createWebHistory()
  63. routes: [
  64. { path: '/', component: require 'app/pages/Home' },
  65. {
  66. path: '/admin',
  67. component: require 'app/pages/Admin'
  68. meta: { requiresAdmin: true }
  69. redirect: '/admin/settings'
  70. children: [
  71. #{ path: 'slider', component: require 'app/pages/Admin/Slider' }
  72. #{ path: 'products', component: require 'app/pages/Admin/Products' }
  73. #{ path: 'clients', component: require 'app/pages/Admin/Clients' }
  74. { path: 'blog', component: require 'app/pages/Admin/Blog' }
  75. #{ path: 'routes', component: require 'app/pages/Admin/Routes' }
  76. { path: 'settings', component: require 'app/pages/Admin/Settings' }
  77. ]
  78. },
  79. #{ path: '/catalog', component: require 'app/pages/Catalog' },
  80. #{ path: '/blog/:slug', component: require 'app/pages/BlogArticle' },
  81. #{ path: '/contacts', component: require 'app/pages/Contacts' },
  82. #{ path: '/about', component: require 'app/pages/About' }
  83. ]
  84. })
  85. # Глобальный навигационный хук
  86. #router.beforeEach (to, from, next) ->
  87. # if to.meta.requiresAdmin
  88. # userData = localStorage.getItem 'user'
  89. # if userData
  90. # try
  91. # user = JSON.parse userData
  92. # if user.role == 'admin'
  93. # next()
  94. # else
  95. # next('/')
  96. # catch
  97. # next('/')
  98. # else
  99. # next('/')
  100. # else
  101. # next()
  102. app.use(router)
  103. # Глобальная обработка ошибок
  104. app.config.errorHandler = (err, vm, info) ->
  105. console.error 'Vue Error:', err
  106. console.error 'Component:', vm
  107. console.error 'Info:', info
  108. # В продакшне отправлять ошибки на сервер
  109. if process.env.NODE_ENV != 'production'
  110. vm?.$root?.showNotification?('Произошла ошибка приложения', 'error')
  111. # Монтирование приложения
  112. app.mount('body')
  113. debug.log 'Приложение Браер-Колор инициализировано'