import Vue from 'vue' import Vuetify from 'vuetify' import 'vuetify/dist/vuetify.min.css' import VueTouch from 'vue-touch' import Vuex from 'vuex' import globalStore from '@/store/global' import storeModules from '@/config/store' import axios from 'axios' import { router, registerRouterGuards } from '@/router' import VueI18n from 'vue-i18n' import i18nMessages from '@/config/i18n' import '@/assets/styles.css' Vue.config.productionTip = false Vue.use(Vuex) Object.keys(storeModules).forEach(key => { storeModules[key].namespaced = true }) globalStore.modules = storeModules var store = new Vuex.Store(globalStore) registerRouterGuards(store) Vue.use(VueI18n) const i18n = new VueI18n({ locale: store.state.settings.locale, silentTranslationWarn: true, messages: i18nMessages }) Vue.use(Vuetify, { theme: { primary: '#0195ff' }, lang: { t: (key, ...params) => i18n.t(key, params) } }) Vue.use(VueTouch) axios.interceptors.response.use(null, error => { if (error.response.data.status === 'TOKEN_INVALID' || error.response.data.status === 'TOKEN_MISSING') { axios.post('/api/logout').then(response => { router.push('/login') }) } return Promise.reject(error) }) Vue.prototype.$http = axios new Vue({ store, router, i18n, computed: { locale: () => store.state.settings.locale }, watch: { locale: v => { i18n.locale = v } }, template: '' }).$mount('#app')