main.js
4.5 KB
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')