requestConfig.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. import request from "@/plugins/request";
  2. import store from '@/store';
  3. import base from '@/config/baseUrl';
  4. // #ifdef H5
  5. import {
  6. h5Login
  7. } from '@/config/html5Utils';
  8. // #endif
  9. // #ifdef MP-WEIXIN
  10. import {
  11. onLogin
  12. } from '@/config/login';
  13. import {
  14. beforeEach
  15. } from "node:test";
  16. // #endif
  17. let version_code = '';
  18. //可以new多个request来支持多个域名请求
  19. let $http = new request({
  20. //接口请求地址
  21. baseUrl: base.baseUrl,
  22. //服务器本地上传文件地址0
  23. fileUrl: base.baseUrl,
  24. // 服务器上传图片默认url
  25. defaultUploadUrl: "api/common/v1/upload_image",
  26. // 服务器上传文件名称
  27. defaultFileName: "file",
  28. //设置请求头(如果使用报错跨域问题,可能是content-type请求类型和后台那边设置的不一致)
  29. });
  30. // 添加获取七牛云token的方法
  31. $http.getQnToken = function(callback) {
  32. //该地址需要开发者自行配置(每个后台的接口风格都不一样)
  33. $http.get("api/kemean/aid/qn_upload").then(data => {
  34. /*
  35. *接口返回参数:
  36. *visitPrefix:访问文件的域名
  37. *token:七牛云上传token
  38. *folderPath:上传的文件夹
  39. *region: 地区 默认为:SCN
  40. */
  41. callback({
  42. visitPrefix: data.visitPrefix,
  43. token: data.token,
  44. folderPath: data.folderPath
  45. });
  46. });
  47. }
  48. //请求开始拦截器
  49. $http.requestStart = function(options) {
  50. if (options.load) {
  51. //打开加载动画
  52. store.commit("setLoadingShow", true);
  53. }
  54. // 图片上传大小限制
  55. if (options.method == "FILE" && options.maxSize) {
  56. // 文件最大字节: options.maxSize 可以在调用方法的时候加入参数
  57. let maxSize = options.maxSize;
  58. for (let item of options.files) {
  59. if (item.size > maxSize) {
  60. setTimeout(() => {
  61. uni.showToast({
  62. title: "图片过大,请重新上传",
  63. icon: "none",
  64. duration: 2000
  65. });
  66. }, 500);
  67. return false;
  68. }
  69. }
  70. }
  71. // #ifdef APP-PLUS
  72. // 添加当前版本号
  73. // if(version_code){
  74. // options.header['version_code'] = version_code;
  75. // }
  76. // #endif
  77. //请求前加入token
  78. if (!!options.header.Authorization) {
  79. } else if (store.state.token) {
  80. options.header['Authorization'] = store.state.token;
  81. };
  82. return options;
  83. }
  84. //请求结束
  85. $http.requestEnd = function(options, resolve) {
  86. //判断当前接口是否需要加载动画
  87. if (options.load) {
  88. // 关闭加载动画
  89. store.commit("setLoadingShow", false);
  90. }
  91. }
  92. let loginPopupNum = 0;
  93. //所有接口数据处理(此方法需要开发者根据各自的接口返回类型修改,以下只是模板)
  94. $http.dataFactory = async function(res) {
  95. if (res.response.statusCode && res.response.statusCode == 200) {
  96. let httpData = res.response.data;
  97. if (typeof(httpData) == "string") {
  98. httpData = JSON.parse(httpData);
  99. }
  100. /*********以下只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/
  101. //判断数据是否请求成功
  102. if (httpData.code) {
  103. return Promise.resolve(httpData);
  104. // return Promise.resolve(httpData.data);
  105. } else if (httpData.code == "1000" || httpData.code == "1001" || httpData.code == 1100) {
  106. store.commit("emptyUserInfo");
  107. // #ifdef MP-WEIXIN
  108. // onLogin();
  109. // #endif
  110. // #ifdef H5
  111. h5Login("force");
  112. // #endif
  113. // #ifdef APP-PLUS
  114. var content = '此时此刻需要您登录喔~';
  115. if (httpData.code == "1000") {
  116. content = '此时此刻需要您登录喔';
  117. }
  118. if (loginPopupNum <= 0) {
  119. loginPopupNum++;
  120. uni.showModal({
  121. title: '温馨提示',
  122. content: content,
  123. confirmText: "去登录",
  124. cancelText: "再逛会",
  125. showCancel: false,
  126. success: function(res) {
  127. loginPopupNum--;
  128. if (res.confirm) {
  129. uni.navigateTo({
  130. url: "/pages/user/login"
  131. });
  132. }
  133. }
  134. });
  135. }
  136. // #endif
  137. // 返回错误的结果(catch接受数据)
  138. return Promise.reject({
  139. statusCode: 0,
  140. // errMsg: "【request】" + (httpData.info || httpData.msg)
  141. errMsg: (httpData.info || httpData.msg)
  142. });
  143. } else if (httpData.code == "403") {
  144. if (loginPopupNum <= 0) {
  145. loginPopupNum++;
  146. uni.showModal({
  147. title: "提示",
  148. content: "您还未登录或登录已失效~",
  149. confirmText: "去登录",
  150. cancelText: "再逛会",
  151. showCancel: false,
  152. success: (res) => {
  153. loginPopupNum--;
  154. if (res.confirm) {
  155. store.commit("emptyUserInfo");
  156. uni.reLaunch({
  157. url: '/pages/login/login'
  158. });
  159. }
  160. }
  161. });
  162. }
  163. // 返回错误的结果(catch接受数据)
  164. return Promise.reject({
  165. statusCode: 0,
  166. // errMsg: "【request】" + (httpData.info || httpData.msg)
  167. errMsg: (httpData.info || httpData.msg)
  168. });
  169. } else { //其他错误提示
  170. if (res.isPrompt) {
  171. uni.showToast({
  172. title: httpData.info || httpData.msg,
  173. icon: "none",
  174. duration: 3000
  175. });
  176. }
  177. // 返回错误的结果(catch接受数据)
  178. return Promise.reject({
  179. statusCode: 0,
  180. // errMsg: "【request】" + (httpData.info || httpData.msg)
  181. errMsg: (httpData.info || httpData.msg)
  182. });
  183. }
  184. /*********以上只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/
  185. } else if (res.response.statusCode && res.response.statusCode == 403) {
  186. if (loginPopupNum <= 0) {
  187. loginPopupNum++;
  188. uni.showModal({
  189. title: "提示",
  190. content: "您还未登录或登录已失效~",
  191. confirmText: "去登录",
  192. cancelText: "再逛会",
  193. success: (res) => {
  194. loginPopupNum--;
  195. if (res.confirm) {
  196. store.commit("emptyUserInfo");
  197. uni.reLaunch({
  198. url: '/pages/login/login'
  199. });
  200. }
  201. }
  202. });
  203. }
  204. // 返回错误的结果(catch接受数据)
  205. return Promise.reject({
  206. statusCode: 0,
  207. // errMsg: "【request】登录已失效"
  208. errMsg: "登录已失效"
  209. });
  210. } else {
  211. // 返回错误的结果(catch接受数据)
  212. return Promise.reject({
  213. statusCode: res.response.statusCode,
  214. // errMsg: "【request】数据工厂验证不通过"
  215. errMsg: "数据工厂验证不通过"
  216. });
  217. }
  218. };
  219. $http.requestError = function(e) {
  220. // e.statusCode == 0 是参数效验错误抛出的
  221. if (e.statusCode == 0) {
  222. uni.showToast({
  223. title: e.errMsg,
  224. icon: "none",
  225. duration: 2000
  226. });
  227. throw e;
  228. } else {
  229. uni.showToast({
  230. title: "网络错误,请检查一下网络",
  231. icon: "none",
  232. duration: 2000
  233. });
  234. }
  235. }
  236. export default $http;