# Инициализация глобальных переменных
globalThis.renderFns = require 'pug.json'
globalThis.stylFns = require 'styl.json'
globalThis.themeConfig = require 'app/theme.config.coffee'
# Инициализация Tailwind с кастомной конфигурацией
tailwind.config = {
theme: {
extend: {
colors: themeConfig.colors
fontFamily: themeConfig.typography.fonts
borderRadius: themeConfig.borderRadius
}
}
darkMode: 'class'
}
PouchDBService = require 'app/utils/pouch.coffee'
# Инициализация сервиса данных
pouchService = PouchDBService
document.head.insertAdjacentHTML 'beforeend',''
document.head.insertAdjacentHTML 'beforeend',''
document.head.insertAdjacentHTML('beforeend','')
document.head.insertAdjacentHTML('beforeend','')
document.head.insertAdjacentHTML('beforeend','
Кохи Борбад - Концертный зал Душанбе')
# Создание главного приложения Vue
globalThis.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'
}
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
showNotification: (message, type = 'success') ->
# Реализация системы уведомлений
console.dir "#{type.toUpperCase()}: #{message}"
loadUserData: ->
# Загрузка данных пользователя из localStorage или PouchDB
userData = localStorage.getItem 'user'
if userData
try
@user = JSON.parse userData
catch
@user = null
mounted: ->
# Инициализация темы
if @theme == 'dark'
document.documentElement.classList.add 'dark'
# Инициализация PouchDB
try
await pouchService.init()
console.dir 'PouchDB инициализирован'
catch error
console.error 'Ошибка инициализации PouchDB:', error
# Загрузка пользователя (если авторизован)
@loadUserData()
})
# Настройка маршрутизатора
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')
console.log 'Приложение Браер-Колор инициализировано'