审查视图

shenhailong authored
1
朱兆平 authored
2 3 4
import Vue from 'vue'
import App from './App'
import ElementUI from 'element-ui'
5
import 'element-ui/lib/theme-chalk/index.css'
朱兆平 authored
6 7 8 9
//import './assets/theme/theme-green/index.css'
import VueRouter from 'vue-router'
import store from './vuex/store'
import Vuex from 'vuex'
10
import axios from 'axios'
11
import rout from './routes'
朱兆平 authored
12
import Mock from './mock'
朱兆平 authored
13
import i18n from './lang'
14
import 'font-awesome/css/font-awesome.min.css'
15
16
import * as socketApi from './api/socket'
17
import '@/styles/index.scss'
18
19
20 21 22 23 24
//定义一个全局过滤器实现日期格式化
Vue.filter('datefmt',function(input,fmtstring){

    return moment(input).format(fmtstring)
25 26
});
27 28
// 注册websocket组件到VUE
Vue.prototype.socketApi = socketApi
29
30
Vue.config.productionTip = false
朱兆平 authored
31 32 33 34
Mock.bootstrap();
Vue.use(ElementUI)
Vue.use(VueRouter)
Vue.use(Vuex)
35
Vue.prototype.$axios = axios;
朱兆平 authored
36 37

//NProgress.configure({ showSpinner: false });
zhangFan authored
38 39
// console.log("mainjs:");
// console.log(rout.routes);
朱兆平 authored
40
const router = new VueRouter({
41
    routes:rout.routes
42
});
43
Vue.prototype.$rout =router;
44 45 46 47

//本地存储系统初始化的router路由,用来处理用户退出后,把路由数据初始化
sessionStorage.setItem('sysMenu', JSON.stringify(rout.routes));
朱兆平 authored
48 49 50 51
router.beforeEach((to, from, next) => {
  //NProgress.start();
  if (to.path == '/login') {
    sessionStorage.removeItem('user');
52
    sessionStorage.removeItem('menu');
53
    sessionStorage.removeItem('token');
朱兆平 authored
54 55
  }
  let user = JSON.parse(sessionStorage.getItem('user'));
56 57 58
  if(sessionStorage.getItem('token')){
      axios.defaults.headers.common['Authorization'] = sessionStorage.getItem('token');
  }
59
  if (!user && to.path != '/login' && !sessionStorage.getItem('menu') && !sessionStorage.getItem('token')) {
朱兆平 authored
60 61 62 63
    next({ path: '/login' })
  } else {
    next()
  }
64 65
});
zhangFan authored
66
const message = Vue.prototype.$message;
朱兆平 authored
67
axios.defaults.baseURL = '/api';
68 69 70
axios.interceptors.response.use(
    res => {
        //对响应数据做些事
71
        if (res.data && res.status!==200) {
朱兆平 authored
72
            message({
73 74
                //  饿了么的消息弹窗组件,类似toast
                showClose: true,
75
                message: 'res.data.error.message.message ? res.data.error.message.message : res.data.error.message',
76 77 78 79 80 81 82 83
                type: "error"
            });
            return Promise.reject(res.data.error.message);
        }
        return res;
    },
    error => {
        // 用户登录的时候会拿到一个基础信息,比如用户名,token,过期时间戳
朱兆平 authored
84
        // 直接丢sessionStorage
85 86 87 88 89 90 91 92 93
        if (!sessionStorage.getItem("token")) {
            // 若是接口访问的时候没有发现有鉴权的基础信息,直接返回登录页
            router.push({
                path: "/login"
            });
        } else {

            // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
            if (error.response.status === 401) {
朱兆平 authored
94 95 96 97 98 99
                router.push({
                    path: "/login"
                });
                message({
                    //  饿了么的消息弹窗组件
                    message: '授权超时,或未授权,请重新登录',
100
                    type: "error"
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
                });
            }

            // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
            if (error.response.status === 403) {
                router.push({
                    path: "/error/403"
                });
            }
            if (error.response.status === 500) {
                router.push({
                    path: "/error/500"
                });
            }
            if (error.response.status === 502) {
                router.push({
                    path: "/error/502"
                });
            }
            if (error.response.status === 404) {
                router.push({
                    path: "/error/404"
                });
            }
        }
        // 返回 response 里的错误信息
        let errorInfo =  error.data.error ? error.data.error.message : error.data;
        return Promise.reject(errorInfo);
    }
);
朱兆平 authored
132 133 134 135 136

//router.afterEach(transition => {
//NProgress.done();
//});
137
let vue = new Vue({
朱兆平 authored
138 139 140 141
  //el: '#app',
  //template: '<App/>',
  router,
  store,
朱兆平 authored
142
  i18n,
朱兆平 authored
143 144 145 146
  //components: { App }
  render: h => h(App)
}).$mount('#app')