审查视图

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
                message({
                    //  饿了么的消息弹窗组件
朱兆平 authored
96
                    message: '授权超时,或访问未授权,请重新登录',
97
                    type: "error"
98 99 100 101 102 103 104 105 106 107
                });
            }

            // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
            if (error.response.status === 403) {
                router.push({
                    path: "/error/403"
                });
            }
            if (error.response.status === 500) {
朱兆平 authored
108 109 110 111
                message({
                    //  饿了么的消息弹窗组件
                    message: error.message,
                    type: "error"
112
                });
朱兆平 authored
113 114 115
                // router.push({
                //     path: "/error/500"
                // });
116 117 118 119 120 121 122
            }
            if (error.response.status === 502) {
                router.push({
                    path: "/error/502"
                });
            }
            if (error.response.status === 404) {
123 124 125 126
                message({
                    //  饿了么的消息弹窗组件
                    message: error.message,
                    type: "error"
127 128 129 130
                });
            }
        }
        // 返回 response 里的错误信息
131
        let errorInfo =  error.response ? error.response.statusText : (error.data.error ? error.data.error.message : error.message);
132 133 134 135
        return Promise.reject(errorInfo);
    }
);
朱兆平 authored
136 137 138 139 140

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