| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- # Инициализация глобальных переменных
- globalThis.renderFns = require 'pug.json'
- globalThis.stylFns = require 'styl.json'
- PouchDBService = require 'app/utils/pouch.coffee'
- # Инициализация сервиса данных
- pouchService = PouchDBService
- document.head.insertAdjacentHTML 'beforeend','<meta charset="UTF-8">'
- document.head.insertAdjacentHTML 'beforeend','<meta name="viewport" content="width=device-width, initial-scale=1.0">'
- document.head.insertAdjacentHTML('beforeend','<style type="text/css">'+stylFns['app/index.styl']+'</style>')
- document.head.insertAdjacentHTML('beforeend','<title></title>')
- # Создание главного приложения Vue
- app = Vue.createApp({
- data: ->
- return {
- theme: localStorage.getItem('theme') || 'light'
- companyName: 'Браер-Колор'
- loading: false
- cartItems: []
- user: null
- currentDomain: window.location.hostname
- languages: ['ru', 'en']
- currentLanguage: 'ru'
- currentDomainSettings: null
- }
-
- render: (new Function '_ctx', '_cache', renderFns['app/index.pug'])()
-
- computed:
- isAdmin: -> @user?.role == 'admin'
-
- methods:
- toggleTheme: ->
- @theme = if @theme == 'light' then 'dark' else 'light'
- localStorage.setItem 'theme', @theme
- document.documentElement.classList.toggle 'dark'
-
- setLanguage: (lang) ->
- if @languages.includes lang
- @currentLanguage = lang
- localStorage.setItem 'language', @lang
-
- loadDomainSettings: ->
- pouchService.getDocument("domain_settings:#{@currentDomain}")
- .then (settings) =>
- @currentDomainSettings = settings
- # Устанавливаем заголовок страницы
- if settings?.companyName
- document.title = settings.companyName
- .catch (error) =>
- debug.log 'Настройки домена не найдены, используются значения по умолчанию'
- @currentDomainSettings = null
-
- showNotification: (message, type = 'success') ->
- # Реализация системы уведомлений
- debug.log "#{type.toUpperCase()}: #{message}"
-
- mounted: ->
- # Инициализация темы
- if @theme == 'dark'
- document.documentElement.classList.add 'dark'
-
- # Инициализация PouchDB
- try
- await pouchService.init()
- debug.log 'PouchDB инициализирован'
- # Загружаем настройки домена
- await @loadDomainSettings()
- catch error
- console.error 'Ошибка инициализации PouchDB:', error
-
- # Загрузка пользователя (если авторизован)
- @loadUserData()
-
- loadUserData: ->
- # Загрузка данных пользователя из localStorage или PouchDB
- userData = localStorage.getItem 'user'
- if userData
- try
- @user = JSON.parse userData
- catch
- @user = null
- })
- # Настройка маршрутизатора
- router = VueRouter.createRouter({
- history: VueRouter.createWebHistory()
- routes: [
- { path: '/', component: require 'app/pages/Home' },
- {
- path: '/admin',
- component: require 'app/pages/Admin'
- meta: { requiresAdmin: true }
- redirect: '/admin/settings'
- children: [
- { path: 'slider', component: require 'app/pages/Admin/Slider' }
- { path: 'products', component: require 'app/pages/Admin/Products' }
- #{ path: 'clients', component: require 'app/pages/Admin/Clients' }
- { path: 'blog', component: require 'app/pages/Admin/Blog' }
- #{ path: 'routes', component: require 'app/pages/Admin/Routes' }
- { path: 'settings', component: require 'app/pages/Admin/Settings' }
- ]
- },
- #{ path: '/catalog', component: require 'app/pages/Catalog' },
- #{ path: '/blog/:slug', component: require 'app/pages/BlogArticle' },
- #{ path: '/contacts', component: require 'app/pages/Contacts' },
- #{ path: '/about', component: require 'app/pages/About' }
- ]
- })
- # Глобальный навигационный хук
- #router.beforeEach (to, from, next) ->
- # if to.meta.requiresAdmin
- # userData = localStorage.getItem 'user'
- # if userData
- # try
- # user = JSON.parse userData
- # if user.role == 'admin'
- # next()
- # else
- # next('/')
- # catch
- # next('/')
- # else
- # next('/')
- # else
- # next()
- app.use(router)
- # Глобальная обработка ошибок
- app.config.errorHandler = (err, vm, info) ->
- console.error 'Vue Error:', err
- console.error 'Component:', vm
- console.error 'Info:', info
-
- # В продакшне отправлять ошибки на сервер
- if process.env.NODE_ENV != 'production'
- vm?.$root?.showNotification?('Произошла ошибка приложения', 'error')
- # Монтирование приложения
- app.mount('body')
- debug.log 'Приложение Браер-Колор инициализировано'
|