64 lines
1.7 KiB
TypeScript

import { createApp } from 'vue'
import App from './App.vue'
import { router, routePathes, filterExclude } from './router'
import store from './store'
import VueAxios from 'vue-axios'
import axios from 'axios'
// 配置默认axios参数
const service = axios.create({
timeout: 10000
})
import { ElMessage, ElLoading } from 'element-plus'
// 添加请求拦截器
service.interceptors.request.use(config => {
// 在发送请求之前添加token到请求头
const token = app.$store.state.loginInfo.token
if (token !== null && config.headers) {
config.headers.token = token
}
return config
}, err => {
// 请求错误的处理
ElMessage.error('请求超时,请稍后再试')
return Promise.reject(err)
})
service.interceptors.response.use(res=> {
return res.data
}, err => {
if (err.response.status >= 500) {
ElMessage.error('服务器内部错误')
} else if (err.response.status >= 400) {
if(typeof err.response.data.message === 'string') {
ElMessage.warning(err.response.data.message)
} else if (Array.isArray(err.response.data.message)) {
let message = err.response.data.message.join('<br/>')
ElMessage.warning(message)
}
if (err.response.status === 403) {
app.$router.push('/login')
}
}
return Promise.reject(err)
})
// 全局路由导航前置守卫
router.beforeEach(function (to, from, next) {
app.$store.commit('setBreadcrumb', routePathes[to.path] || [])
if(filterExclude.indexOf(to.path) !== -1 || app.$store.state.loginInfo.token) {
next()
} else {
next('/login')
}
})
const app = createApp(App)
.use(router)
.use(store)
.use(VueAxios, service)
.directive('loading', ElLoading.directive)
.mount('#app')