# Инициализация глобальных переменных 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 'Приложение Браер-Колор инициализировано'