ajax1.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * axios全局配置
  3. */
  4. import axios from "axios";
  5. import config from '@/config/index';
  6. // import store from "../store"
  7. // import router from "../router"
  8. import Vue from "vue";
  9. import { Message } from "element-ui";
  10. import Cookies from "js-cookie";
  11. let loseToken = false,
  12. serverError = false;
  13. /**
  14. * baseUrl
  15. */
  16. function getUrl() {
  17. return 'https://park.lhzhtc.cn';
  18. }
  19. /**
  20. * baseUrl
  21. */
  22. function getTokenUrl() {
  23. return Vue.prototype.tokenUrl;
  24. }
  25. axios.defaults.timeout = 30000;
  26. axios.defaults.withCredentials = false; //配置为false
  27. /**
  28. * 超时设置
  29. */
  30. const service = axios.create({
  31. // baseURL: process.env.NODE_ENV === "production" ? getUrl() : "",
  32. baseURL: getUrl(),
  33. timeout: 30000 // 请求超时时间
  34. });
  35. //刷新token
  36. async function refreshToken() {
  37. let tokenUrl = getTokenUrl();
  38. let url = `${tokenUrl}/cas/jwt/token`;
  39. await axios.get(url).then(
  40. response => {
  41. console.log(response.data);
  42. if (response.data.status === true) {
  43. Cookies.set("jwtToken", response.data.jwtToken, {
  44. expires: 7,
  45. path: "/"
  46. });
  47. }
  48. },
  49. error => {
  50. console.log("错误", error.message);
  51. }
  52. );
  53. }
  54. //检查token有效期
  55. // function check() {
  56. // const token = Cookies.get("jwtToken")
  57. // if (!token) {
  58. // return false
  59. // }
  60. // let infostr = token.substring(token.indexOf(".") + 1, token.lastIndexOf("."))
  61. // let Base64 = require("js-base64").Base64
  62. // let info = Base64.decode(infostr)
  63. // //解析token为对象json
  64. // let infoObject = JSON.parse(info)
  65. // //当前时间戳
  66. // let current = new Date().getTime() / 1000
  67. // //当有效期过期时需要删除本地的token以及续签token
  68. // if (infoObject.exp < current) {
  69. // Cookies.set("jwtToken", null, { expires: 0 })
  70. // return false
  71. // } else if (infoObject.exp - current < 60 * 30) {
  72. // //当有效期还剩半小时过期时主动更新token
  73. // refreshToken()
  74. // }
  75. // return true
  76. // }
  77. // http request 拦截器
  78. // 每次请求都为http头增加Authorization字段,其内容为token
  79. service.interceptors.request.use(
  80. config => {
  81. config.url = getUrl() + config.url;
  82. //config.baseURL = getUrl()
  83. // if (check()) {
  84. // 判断是否存在token,如果存在的话,则每个http header都加上token
  85. const token = Cookies.get("jwtToken");
  86. // config.headers.Authorization = token
  87. // }
  88. return config;
  89. },
  90. err => {
  91. return Promise.reject(err);
  92. }
  93. );
  94. // http response 拦截器
  95. // 针对响应代码确认跳转到对应页面
  96. service.interceptors.response.use(
  97. response => {
  98. //token失效拦截
  99. if (response.data.code == 1001) {
  100. //访问后场失败:1001 token失效
  101. //清空token
  102. //清空首页的vuex的state
  103. // store.commit("user/setIsLogin", false)
  104. // store.commit("user/setAcctInfo", {})
  105. //跳转到首页
  106. //router.push('/home');
  107. if (!loseToken) {
  108. Message({
  109. message: "登录账号已过期或无访问权限,请重新登录",
  110. type: "error",
  111. showClose: true
  112. });
  113. }
  114. loseToken = true;
  115. setTimeout(() => {
  116. loseToken = false;
  117. }, 5000);
  118. top.location = 'https://park.lhzhtc.cn/SaaS-Platform';
  119. return Promise.reject(response);
  120. }
  121. //业务异常拦截 (code8)
  122. else if (response.data.code == 8) {
  123. Message({
  124. message: `${response.data.msg}`,
  125. type: "warning",
  126. showClose: true
  127. });
  128. return Promise.reject(response);
  129. }
  130. //运行时异常拦截 (不显示具体信息)
  131. else if (response.data.code == 9) {
  132. Message({
  133. message: "系统内部错误,请联系管理员或稍后重试",
  134. type: "error",
  135. showClose: true
  136. });
  137. return Promise.reject(response);
  138. }
  139. return Promise.resolve(response.data);
  140. },
  141. error => {
  142. if (
  143. error.code == "ECONNABORTED" ||
  144. error.message.indexOf("timeout") != -1
  145. ) {
  146. ("请求超时");
  147. }
  148. if (!serverError) {
  149. Message({
  150. message: `连接服务器错误:${error.message}`,
  151. type: "error",
  152. showClose: true
  153. });
  154. }
  155. serverError = true;
  156. setTimeout(() => {
  157. serverError = false;
  158. }, 5000);
  159. return Promise.reject(error); // 返回接口返回的错误信息
  160. }
  161. );
  162. export default service;