import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import filters from './filters'
import directive from './directive'
import {http} from './ajax/index.js';
import axios from 'axios'

import {hideLoading, showLoading} from './ajax/loading';
import Util from "./tool";

//加载全局样式
import '@/assets/css/public/common.min.css'
import '@/assets/css/font/iconfont.css'

//本地环境开启提示信息
Vue.config.productionTip = true;

Vue.prototype.$ELEMENT = {
  size: 'mini',
  zIndex: 30000
};

//加载过滤器
Object.keys(filters).forEach(key => Vue.filter(key, filters[key]));

//加载自定义指令
Vue.use(directive);

//处理顶部导航TAB
router.afterEach((to, from, next) => {
  if (to.path == "/" || to.path == "/login" || to.path == '/notfound' || to.path == '/bindError') {
    return;
  }
  let tabOldArr = sessionStorage.getItem('tabs');
  let tabOldJson;
  let tabNewJson = [];
  if (tabOldArr) {
    tabOldJson = JSON.parse(tabOldArr);
    for (var i = 0; i < tabOldJson.length; i++) {
      tabNewJson.push(JSON.stringify(tabOldJson[i]))
    }
    if (tabNewJson.indexOf(JSON.stringify({path: to.path, title: to.meta.title, query: to.query})) == -1) {
      tabOldJson.push({
        path: to.path,
        title: to.meta.title,
        query: to.query
      })
    }
  } else {
    tabOldJson = [{
      path: to.path,
      title: to.meta.title,
      query: to.query
    }]
  }
  if (tabOldJson) {
    sessionStorage.setItem('tabs', JSON.stringify(tabOldJson));
  }
});

axios.interceptors.request.use((config) => {
  if (config.loading) {
    showLoading();
  }
  return config;
}, (err) => {
  return Promise.reject(err)
})

axios.interceptors.response.use(res => {
  hideLoading();
  if (res.data.code == 101) {
    //token验证失败
    var path = window.location.hash;
    path = path.substr(1)
    router.push({
      path: "/login",
      query: {
        referer: encodeURI(path)
      }
    })
  }
  return res.data;
}, error => {
  Message('网络出现问题,请检查网络');
  hideLoading();
  return Promise.reject(new Error(error))
})

//挂载到VUE原型上封装后的http请求
Vue.prototype.$http = http;

//路由页面回跳处理  
router.beforeEach((to, from, next) => {
  if (to.path == "/login" || to.path == '/notfound' || to.path == '/bindError') {
    next()
  } else {
    let token = Util.getCookie('token') || '';
    if (!token) {
      window.userInfo = ""
      var path_ = window.location.hash
      path_ = path_.substr(1)
      window.location.href = '/#/login?referer=' + encodeURI(path_);
      history.go(0);
    } else {
      next();
    }
  }
});


new Vue({
  router,
  render: (h) => h(App),
}).$mount("#app");