axios.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /* eslint-disable indent */
  2. /*
  3. * @Author: your name
  4. * @Date: 2020-10-16 10:38:49
  5. * @LastEditTime: 2021-12-02 15:50:51
  6. * @LastEditors: Please set LastEditors
  7. * @Description: In User Settings Edit
  8. * @FilePath: \vue3-element-admin\src\plugins\axios.js
  9. */
  10. "use strict";
  11. import axios from "axios";
  12. import Qs from "qs";
  13. import NProgress from "nprogress";
  14. import {igSuccessUrl} from "../api/config";
  15. import { SET_TOKEN } from "@/store/modules/app/type";
  16. // Full config: https://github.com/axios/axios#request-config
  17. // axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || '';
  18. // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
  19. // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
  20. const install = (app, { router, store, opt }) => {
  21. let config = {
  22. Global: true,
  23. // baseURL: process.env.baseURL || process.env.apiUrl || ""
  24. // timeout: 60 * 1000, // Timeout
  25. // withCredentials: true, // Check cross-site Access-Control
  26. // {"userName":"Administrator","pwd":"123456"}
  27. // userName=Administrator&pwd=123456
  28. };
  29. if (VE_ENV.MODE === "production") {
  30. // config.transformRequest = [(data) => Qs.parse(data)];
  31. }
  32. const _axios = axios.create(config);
  33. let ve_loading;
  34. let ve_message = null;
  35. let loadingCount = 0;
  36. // 请求拦截
  37. _axios.interceptors.request.use(
  38. (config) => {
  39. NProgress.done();
  40. if (config.Global) {
  41. if(getIsShow(config.url) == false) {
  42. // NProgress.start();
  43. // ve_loading = app.config.globalProperties.$loading({
  44. // lock: true,
  45. // text: "Loading",
  46. // spinner: "el-icon-loading",
  47. // background: "rgba(0,0,0,0.1)",
  48. // });
  49. }
  50. }
  51. loadingCount++;
  52. //*请求头添加token
  53. const token = store.getters.token;
  54. token && (config.headers.token = token);
  55. config.headers.appId = "wx153ff06f5e0c7a8e"
  56. // Do something before request is sent
  57. return config;
  58. },
  59. (error) => {
  60. // Do something with request error
  61. return Promise.reject(error);
  62. }
  63. );
  64. // Add a response interceptor
  65. // 响应拦截
  66. _axios.interceptors.response.use(
  67. (response) => {
  68. // TODO 根据响应头更新token
  69. //store.dispatch(`app/${SET_TOKEN}`, new Date().getTime());
  70. loadingCount--;
  71. if (loadingCount <= 0) {
  72. NProgress.done();
  73. if(ve_loading)
  74. ve_loading.close();
  75. }
  76. let type = "";
  77. if (response.data.code == 0 || response.data.code === 1) {
  78. type = "success";
  79. } else {
  80. type = "error";
  81. }
  82. //igSuccess 状态为false 才需要成功提示
  83. if(type == "error" || getIsShow(response.request.responseURL) == false){
  84. if (ve_message) {
  85. ve_message.close();
  86. ve_message = null;
  87. }
  88. if(response.data.msg)
  89. // ve_message = app.config.globalProperties.$message({
  90. // type,
  91. // message: response.data.msg,
  92. // });
  93. console.log()
  94. }
  95. // Do something with response data
  96. return response.data;
  97. },
  98. (error) => {
  99. loadingCount--;
  100. if (loadingCount <= 0) {
  101. NProgress.done();
  102. ve_loading && ve_loading.close();
  103. }
  104. if (error && error.response) {
  105. let message = "";
  106. switch (error.response.status) {
  107. case 400:
  108. message = "请求错误";
  109. break;
  110. case 401: {
  111. message = "未授权,请登录";
  112. router.replace({
  113. name: "Login",
  114. });
  115. break;
  116. }
  117. case 403:
  118. message = "没有权限,拒绝访问";
  119. break;
  120. case 404:
  121. message = `请求地址出错`;
  122. break;
  123. case 408:
  124. message = "请求超时";
  125. break;
  126. case 500:
  127. message = "服务器内部错误";
  128. break;
  129. case 501:
  130. message = "服务未实现";
  131. break;
  132. case 502:
  133. message = "网关错误";
  134. break;
  135. case 503:
  136. message = "服务不可用";
  137. break;
  138. case 504:
  139. message = "网关超时";
  140. break;
  141. case 505:
  142. message = "HTTP版本不受支持";
  143. break;
  144. default:
  145. break;
  146. }
  147. if (ve_message) {
  148. ve_message.close();
  149. ve_message = null;
  150. }
  151. // ve_message = app.config.globalProperties.$message({
  152. // message,
  153. // type: "error",
  154. // });
  155. }
  156. // Do something with response error
  157. return Promise.reject(error);
  158. }
  159. );
  160. function getIsShow(url){
  161. //请求成功的时候过滤不需要提示的请求
  162. for(let s of igSuccessUrl){
  163. if(url.indexOf(s) > -1){
  164. return true;
  165. }
  166. }
  167. return false;
  168. }
  169. const method = {
  170. post: (url, p, config) => {
  171. return _axios.post(url, p, config)
  172. },
  173. get: (url, p, config) =>{
  174. return _axios.get(url, Object.assign(config, { params: p }))
  175. },
  176. put: (url, p, config) =>{
  177. return _axios.put(url, p, config)
  178. },
  179. delete: (url, p, config) =>{
  180. return _axios.delete(url, config)
  181. },
  182. };
  183. let api = {};
  184. const files = require.context("@/api/modules", false, /\.js$/);
  185. files.keys().forEach((key) => {
  186. const fileName = key.replace(/(\.\/|\.js)/g, "");
  187. api[fileName] = {};
  188. let obj = files(key);
  189. Object.keys(obj).forEach((item) => {
  190. api[fileName][item] = (p, config = {}) => {
  191. if(obj[item].mock){
  192. return new Promise((resolve)=>{
  193. resolve(obj[item].response(p))
  194. }).catch((res)=>{
  195. console.error(res)
  196. })
  197. }
  198. let res = method[obj[item].type](pathVariable(obj[item].url, p ), p, config);
  199. return res
  200. };
  201. });
  202. });
  203. window[opt] = api;
  204. app.config.globalProperties[opt] = api;
  205. };
  206. function pathVariable(url,obj){
  207. let prefix = url.indexOf("{")
  208. if(prefix > -1){
  209. let suffix = url.indexOf("}")
  210. let key = url.substr(prefix + 1, suffix - prefix - 1)
  211. url = url.replace("{"+key+"}",obj[key])
  212. return pathVariable(url, obj);
  213. }
  214. return url;
  215. }
  216. export default { install };