request.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. import axios, {AxiosInstance} from 'axios';
  2. import {ElLoading, ElMessage, ElMessageBox} from 'element-plus';
  3. import {Session} from '/@/utils/storage';
  4. import qs from 'qs';
  5. // @ts-ignore
  6. let loadingInstance: ElLoading = null;
  7. let url = import.meta.env.VITE_API_URL;
  8. if (!url) {
  9. url = `${location.origin}/admin/`;
  10. }
  11. // 配置新建一个 axios 实例
  12. const service: AxiosInstance = axios.create({
  13. baseURL: url,
  14. timeout: 50000,
  15. headers: {'Content-Type': 'application/json'},
  16. paramsSerializer: {
  17. serialize(params) {
  18. return qs.stringify(params, {allowDots: true});
  19. },
  20. },
  21. });
  22. // 添加请求拦截器
  23. service.interceptors.request.use(
  24. (config) => {
  25. // 在发送请求之前做些什么 token
  26. if (Session.get('token')) {
  27. config.headers!['satoken'] = `${Session.get('token')}`;
  28. }
  29. return config;
  30. },
  31. (error) => {
  32. // 对请求错误做些什么
  33. return Promise.reject(error);
  34. }
  35. );
  36. // 添加响应拦截器
  37. service.interceptors.response.use(
  38. (response) => {
  39. // 对响应数据做点什么
  40. const res = response.data;
  41. // console.log(res)
  42. if (res.code && res.code !== 0) {
  43. // `token` 过期或者账号已在别处登录
  44. if (res.code === 401) {
  45. Session.clear(); // 清除浏览器全部临时缓存
  46. ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
  47. .then(() => {
  48. window.location.href = '/'; // 去登录页
  49. })
  50. .catch(() => {
  51. window.location.href = '/'; // 去登录页
  52. });
  53. return Promise.reject(service.interceptors.response);
  54. } else if (res.code === 200) {
  55. return response.data;
  56. } else {
  57. ElMessage.error(res.msg||res.message || '系统繁忙,请稍后再试!');
  58. return Promise.reject(res.msg||res.message || '系统繁忙,请稍后再试!');
  59. }
  60. } else {
  61. return response.data;
  62. }
  63. },
  64. (error) => {
  65. // console.error(error)
  66. // 对响应错误做点什么
  67. if (error.message.indexOf('timeout') != -1) {
  68. ElMessage.error('网络超时');
  69. } else if (error.message == 'Network Error') {
  70. ElMessage.error('网络连接错误');
  71. } else if (error.message.includes("404")) {
  72. ElMessage.error('接口不存在');
  73. } else {
  74. if (error.response.data) {
  75. ElMessage.error(error.response.data.message || error.response.statusText);
  76. return Promise.reject(error.response.data.message || error.response.statusText);
  77. } else {
  78. ElMessage.error('接口路径找不到');
  79. }
  80. }
  81. return Promise.reject(error);
  82. }
  83. );
  84. export function $put(url: string, data = {}, showLoading = false) {
  85. if (showLoading) {
  86. loadingInstance = ElLoading.service({fullscreen: true})
  87. }
  88. return new Promise((resolve, reject) => {
  89. service.put(url, data)
  90. .then(response => {
  91. if (showLoading) {
  92. loadingInstance.close();
  93. }
  94. resolve(response.data);
  95. }, err => {
  96. // ////if(showLoading)Spin.hide();
  97. reject(err)
  98. })
  99. })
  100. }
  101. export function $patch(url: string, data = {}, showLoading = false) {
  102. //if(showLoading)Spin.show();
  103. return new Promise((resolve, reject) => {
  104. service.patch(url, data)
  105. .then(response => {
  106. ////if(showLoading)Spin.hide();
  107. resolve(response.data);
  108. }, err => {
  109. ////if(showLoading)Spin.hide();
  110. reject(err)
  111. })
  112. })
  113. }
  114. export function $get(url: string, params = {}, showLoading = false) {
  115. //if(showLoading)Spin.show();
  116. return new Promise((resolve, reject) => {
  117. service.get(url, {
  118. params: params
  119. }).then(response => {
  120. ////if(showLoading)Spin.hide();
  121. resolve(response.data);
  122. }).catch(err => {
  123. console.error("err=>" + err)
  124. ////if(showLoading)Spin.hide();
  125. reject(err)
  126. })
  127. })
  128. }
  129. export function $post(url: string, data = {}, showLoading = false) {
  130. //if(showLoading)Spin.show();
  131. return new Promise((resolve, reject) => {
  132. service.post(url, data, {
  133. headers: {"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8;"}
  134. })
  135. .then(response => {
  136. ////if(showLoading)Spin.hide();
  137. resolve(response.data);
  138. }, err => {
  139. console.error("err=>" + err)
  140. ////if(showLoading)Spin.hide();
  141. reject(err)
  142. })
  143. })
  144. }
  145. export function $body(url: string, data = {}, showLoading = false) {
  146. //if(showLoading)Spin.show();
  147. return new Promise((resolve, reject) => {
  148. service.post(url, data)
  149. .then(response => {
  150. ////if(showLoading)Spin.hide();
  151. resolve(response.data);
  152. }, err => {
  153. ////if(showLoading)Spin.hide();
  154. reject(err)
  155. })
  156. })
  157. }
  158. export function $upload(url: string, formData = {}, showLoading = false) {
  159. //if(showLoading)Spin.show();
  160. return new Promise((resolve, reject) => {
  161. service.post(url, formData, {
  162. headers: {'Content-Type': 'multipart/form-data'}
  163. }).then(response => {
  164. ////if(showLoading)Spin.hide();
  165. resolve(response.data);
  166. }, err => {
  167. ////if(showLoading)Spin.hide();
  168. reject(err)
  169. })
  170. })
  171. }
  172. // 导出 axios 实例
  173. // export default {service,$post:post,$get:get,$upload:upload,$put:put,$body:body};