You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

97 lines
2.8 KiB

  1. import axios from 'axios'
  2. import { serialize } from '@/util/util'
  3. import { getStore } from '@/util/store'
  4. import NProgress from 'nprogress' // progress bar
  5. import errorCode from '@/const/errorCode'
  6. import router from '@/router/router'
  7. import { Message } from 'element-ui'
  8. import 'nprogress/nprogress.css'
  9. import qs from 'qs'
  10. import store from '@/store' // progress bar style
  11. axios.defaults.timeout = 30000
  12. // 返回其他状态吗
  13. axios.defaults.validateStatus = function (status) {
  14. return status >= 200 && status <= 500 // 默认的
  15. }
  16. // 跨域请求,允许保存cookie
  17. axios.defaults.withCredentials = true
  18. // NProgress Configuration
  19. NProgress.configure({
  20. showSpinner: false
  21. })
  22. // HTTPrequest拦截
  23. axios.interceptors.request.use(config => {
  24. NProgress.start() // start progress bar
  25. const TENANT_ID = getStore({ name: 'tenantId' })
  26. const isToken = (config.headers || {}).isToken === false
  27. const token = store.getters.access_token
  28. if (token && !isToken) {
  29. config.headers['Authorization'] = 'Bearer ' + token// token
  30. }
  31. if (TENANT_ID) {
  32. config.headers['TENANT-ID'] = TENANT_ID // 租户ID
  33. }
  34. // 白单验证
  35. // let arr=['/auth/oauth/token','/auth/token/logout','/code/check','/admin/tenant/list','/code','/admin/menu']
  36. // if(arr.indexOf(config.url)==-1){
  37. // Object.assign(config.params,{orgType:localStorage.getItem('orgType')||''})
  38. // }
  39. // console.log(config.params,'data')
  40. // headers中配置serialize为true开启序列化
  41. if (config.method === 'post' && config.headers.serialize) {
  42. // console.log(config.data,'data')
  43. config.data = serialize(config.data)
  44. delete config.data.serialize
  45. }
  46. if (config.method === 'get') {
  47. config.paramsSerializer = function (params) {
  48. // console.log(params,'get')
  49. // console.log(Object.assign(params,{orgType:localStorage.getItem('orgType')}))
  50. return qs.stringify(params, { arrayFormat: 'repeat' })
  51. }
  52. }
  53. // console.log(config,'config')
  54. return config
  55. }, error => {
  56. return Promise.reject(error)
  57. })
  58. let idx=0
  59. // HTTPresponse拦截
  60. axios.interceptors.response.use(res => {
  61. NProgress.done()
  62. const status = Number(res.status) || 200
  63. const message = res.data.msg || errorCode[status] || errorCode['default']
  64. if ((status === 401 || status === 500) && process.env.NODE_ENV === 'production') {
  65. idx++
  66. if(idx==1){
  67. Message({
  68. message: '当前登录状态异常,请重新登录~',
  69. type: 'error'
  70. })
  71. }
  72. store.dispatch('LogOut').then(() => {
  73. router.push({ path: '/login' })
  74. })
  75. return
  76. }else{
  77. idx=0
  78. }
  79. // console.log(idx);
  80. if (status !== 200 || res.data.code === 1) {
  81. Message({
  82. message: message,
  83. type: 'error'
  84. })
  85. return Promise.reject(new Error(message))
  86. }
  87. return res.data
  88. }, error => {
  89. NProgress.done()
  90. return Promise.reject(new Error(error))
  91. })
  92. export default axios