api.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import request from "@/plugins/request";
  2. import store from '@/store';
  3. import base from '@/config/baseUrl';
  4. // #ifdef MP-WEIXIN
  5. import {
  6. onLogin
  7. } from '@/config/login';
  8. import {
  9. beforeEach
  10. } from "node:test";
  11. // #endif
  12. let version_code = '';
  13. //可以new多个request来支持多个域名请求
  14. let $http = new request({
  15. //接口请求地址
  16. baseUrl: base.baseUrl,
  17. //服务器本地上传文件地址0
  18. fileUrl: base.baseUrl,
  19. // 服务器上传图片默认url
  20. defaultUploadUrl: "api/common/v1/upload_image",
  21. // 服务器上传文件名称
  22. defaultFileName: "file",
  23. //设置请求头(如果使用报错跨域问题,可能是content-type请求类型和后台那边设置的不一致)
  24. });
  25. //请求开始拦截器
  26. $http.requestStart = function(options) {
  27. if (options.load) {
  28. //打开加载动画
  29. store.commit("setLoadingShow", true);
  30. }
  31. // 添加租户标识到请求头
  32. if (store.state.system_code) {
  33. options.header['system_code'] = store.state.system_code;
  34. }
  35. // 已有的Token处理
  36. if (!options.header.Authorization && store.state.token) {
  37. options.header['Authorization'] = store.state.token;
  38. }
  39. return options;
  40. }
  41. //请求结束
  42. $http.requestEnd = function(options, resolve) {
  43. //判断当前接口是否需要加载动画
  44. if (options.load) {
  45. // 关闭加载动画
  46. store.commit("setLoadingShow", false);
  47. }
  48. }
  49. let loginPopupNum = 0;
  50. //所有接口数据处理(此方法需要开发者根据各自的接口返回类型修改,以下只是模板)
  51. $http.dataFactory = async function(res) {
  52. if (res.response.statusCode && res.response.statusCode == 200) {
  53. let httpData = res.response.data;
  54. if (typeof(httpData) == "string") {
  55. httpData = JSON.parse(httpData);
  56. }
  57. /*********以下只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/
  58. //判断数据是否请求成功
  59. if (httpData.code) {
  60. return Promise.resolve(httpData);
  61. // return Promise.resolve(httpData.data);
  62. } else if (httpData.code == "401") {
  63. if (loginPopupNum <= 0) {
  64. loginPopupNum++;
  65. uni.showModal({
  66. title: '温馨提示',
  67. content: '登录已失效,需要您登录喔~',
  68. confirmText: "去登录",
  69. cancelText: "再逛会",
  70. showCancel: false,
  71. success: function(res) {
  72. loginPopupNum--;
  73. if (res.confirm) {
  74. store.commit("emptyUserInfo");
  75. uni.navigateTo({
  76. url: "/pages/login/login"
  77. });
  78. }
  79. }
  80. });
  81. }
  82. // 返回错误的结果(catch接受数据)
  83. return Promise.reject({
  84. statusCode: 0,
  85. // errMsg: "【request】" + (httpData.info || httpData.msg)
  86. errMsg: (httpData.info || httpData.msg)
  87. });
  88. } else if (httpData.code == "403") {
  89. if (loginPopupNum <= 0) {
  90. loginPopupNum++;
  91. uni.showModal({
  92. title: "提示",
  93. content: "您还未登录或登录已失效~",
  94. confirmText: "去登录",
  95. cancelText: "再逛会",
  96. showCancel: false,
  97. success: (res) => {
  98. loginPopupNum--;
  99. if (res.confirm) {
  100. store.commit("emptyUserInfo");
  101. uni.reLaunch({
  102. url: '/pages/login/login'
  103. });
  104. }
  105. }
  106. });
  107. }
  108. // 返回错误的结果(catch接受数据)
  109. return Promise.reject({
  110. statusCode: 0,
  111. // errMsg: "【request】" + (httpData.info || httpData.msg)
  112. errMsg: (httpData.info || httpData.msg)
  113. });
  114. } else { //其他错误提示
  115. if (res.isPrompt) {
  116. uni.showToast({
  117. title: httpData.info || httpData.msg,
  118. icon: "none",
  119. duration: 3000
  120. });
  121. }
  122. // 返回错误的结果(catch接受数据)
  123. return Promise.reject({
  124. statusCode: 0,
  125. // errMsg: "【request】" + (httpData.info || httpData.msg)
  126. errMsg: (httpData.info || httpData.msg)
  127. });
  128. }
  129. /*********以上只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/
  130. } else if (res.response.statusCode && res.response.statusCode == 403) {
  131. if (loginPopupNum <= 0) {
  132. loginPopupNum++;
  133. uni.showModal({
  134. title: "提示",
  135. content: "您还未登录或登录已失效~",
  136. confirmText: "去登录",
  137. cancelText: "再逛会",
  138. success: (res) => {
  139. loginPopupNum--;
  140. if (res.confirm) {
  141. store.commit("emptyUserInfo");
  142. uni.reLaunch({
  143. url: '/pages/login/login'
  144. });
  145. }
  146. }
  147. });
  148. }
  149. // 返回错误的结果(catch接受数据)
  150. return Promise.reject({
  151. statusCode: 0,
  152. // errMsg: "【request】登录已失效"
  153. errMsg: "登录已失效"
  154. });
  155. } else {
  156. // 返回错误的结果(catch接受数据)
  157. return Promise.reject({
  158. statusCode: res.response.statusCode,
  159. // errMsg: "【request】数据工厂验证不通过"
  160. errMsg: "数据工厂验证不通过"
  161. });
  162. }
  163. };
  164. $http.requestError = function(e) {
  165. // e.statusCode == 0 是参数效验错误抛出的
  166. if (e.statusCode == 0) {
  167. uni.showToast({
  168. title: e.errMsg,
  169. icon: "none",
  170. duration: 2000
  171. });
  172. throw e;
  173. } else {
  174. uni.showToast({
  175. title: "网络错误,请检查一下网络",
  176. icon: "none",
  177. duration: 2000
  178. });
  179. }
  180. if (e.requestId && pendingCallbacks[e.requestId]) {
  181. pendingCallbacks[e.requestId]();
  182. }
  183. }
  184. export default $http;