审查视图

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150

import Vue from 'vue'
import App from './App'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
//import './assets/theme/theme-green/index.css'
import VueRouter from 'vue-router'
import store from './vuex/store'
import Vuex from 'vuex'
import axios from 'axios'
import rout from './routes'
import Mock from './mock'
import i18n from './lang'
import 'font-awesome/css/font-awesome.min.css'

import * as socketApi from './api/socket'
import '@/styles/index.scss'


//定义一个全局过滤器实现日期格式化
Vue.filter('datefmt',function(input,fmtstring){

    return moment(input).format(fmtstring)

});

// 注册websocket组件到VUE
Vue.prototype.socketApi = socketApi

Vue.config.productionTip = false
Mock.bootstrap();
Vue.use(ElementUI)
Vue.use(VueRouter)
Vue.use(Vuex)
Vue.prototype.$axios = axios;

//NProgress.configure({ showSpinner: false });
// console.log("mainjs:");
// console.log(rout.routes);
const router = new VueRouter({
    routes:rout.routes
});
Vue.prototype.$rout =router;

//本地存储系统初始化的router路由,用来处理用户退出后,把路由数据初始化
sessionStorage.setItem('sysMenu', JSON.stringify(rout.routes));

router.beforeEach((to, from, next) => {
  //NProgress.start();
  if (to.path == '/login') {
    sessionStorage.removeItem('user');
    sessionStorage.removeItem('menu');
    sessionStorage.removeItem('token');
  }
  let user = JSON.parse(sessionStorage.getItem('user'));
  if(sessionStorage.getItem('token')){
      axios.defaults.headers.common['Authorization'] = sessionStorage.getItem('token');
  }
  if (!user && to.path != '/login' && !sessionStorage.getItem('menu') && !sessionStorage.getItem('token')) {
    next({ path: '/login' })
  } else {
    next()
  }
});

const message = Vue.prototype.$message;
axios.defaults.baseURL = '/api';
axios.interceptors.response.use(
    res => {
        //对响应数据做些事
        if (res.data && res.status!==200) {
            message({
                //  饿了么的消息弹窗组件,类似toast
                showClose: true,
                message: 'res.data.error.message.message ? res.data.error.message.message : res.data.error.message',
                type: "error"
            });
            return Promise.reject(res.data.error.message);
        }
        return res;
    },
    error => {
        // 用户登录的时候会拿到一个基础信息,比如用户名,token,过期时间戳
        // 直接丢sessionStorage
        if (!sessionStorage.getItem("token")) {
            // 若是接口访问的时候没有发现有鉴权的基础信息,直接返回登录页
            router.push({
                path: "/login"
            });
        } else {

            // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
            if (error.response.status === 401) {
                message({
                    //  饿了么的消息弹窗组件
                    message: '授权超时,或访问未授权,请重新登录',
                    type: "error"
                });
            }

            // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
            if (error.response.status === 403) {
                router.push({
                    path: "/error/403"
                });
            }
            if (error.response.status === 500) {
                message({
                    //  饿了么的消息弹窗组件
                    message: error.message,
                    type: "error"
                });
                // router.push({
                //     path: "/error/500"
                // });
            }
            if (error.response.status === 502) {
                router.push({
                    path: "/error/502"
                });
            }
            if (error.response.status === 404) {
                message({
                    //  饿了么的消息弹窗组件
                    message: error.message,
                    type: "error"
                });
            }
        }
        // 返回 response 里的错误信息
        let errorInfo =  error.response ? error.response.statusText : (error.data.error ? error.data.error.message : error.message);
        return Promise.reject(errorInfo);
    }
);


//router.afterEach(transition => {
//NProgress.done();
//});

let vue = new Vue({
  //el: '#app',
  //template: '<App/>',
  router,
  store,
  i18n,
  //components: { App }
  render: h => h(App)
}).$mount('#app')