api.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. // 判断数据是否请求成功
  60. if (httpData.code === 401 || httpData.code === "401") { // 仅处理401情况
  61. if (loginPopupNum <= 0) {
  62. loginPopupNum++;
  63. uni.showModal({
  64. title: '温馨提示',
  65. content: '登录已失效,需要您登录喔~',
  66. confirmText: "去登录",
  67. cancelText: "再逛会",
  68. showCancel: false,
  69. success: function(res) {
  70. loginPopupNum--;
  71. if (res.confirm) {
  72. store.commit("emptyUserInfo");
  73. uni.navigateTo({
  74. url: "/pages/login/login"
  75. });
  76. }
  77. }
  78. });
  79. }
  80. return Promise.reject({
  81. statusCode: 0,
  82. errMsg: (httpData.info || httpData.msg)
  83. });
  84. } else { // 其他所有情况(包括成功和其他错误码)直接返回resolve
  85. return Promise.resolve(httpData);
  86. }
  87. /*********以上只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/
  88. } else if (res.response.statusCode && res.response.statusCode == 403) {
  89. if (loginPopupNum <= 0) {
  90. loginPopupNum++;
  91. uni.showModal({
  92. title: "提示",
  93. content: "您还未登录或登录已失效~",
  94. confirmText: "去登录",
  95. cancelText: "再逛会",
  96. success: (res) => {
  97. loginPopupNum--;
  98. if (res.confirm) {
  99. store.commit("emptyUserInfo");
  100. uni.reLaunch({
  101. url: '/pages/login/login'
  102. });
  103. }
  104. }
  105. });
  106. }
  107. // 返回错误的结果(catch接受数据)
  108. return Promise.reject({
  109. statusCode: 0,
  110. // errMsg: "【request】登录已失效"
  111. errMsg: "登录已失效"
  112. });
  113. } else {
  114. // 返回错误的结果(catch接受数据)
  115. return Promise.reject({
  116. statusCode: res.response.statusCode,
  117. // errMsg: "【request】数据工厂验证不通过"
  118. errMsg: "数据工厂验证不通过"
  119. });
  120. }
  121. };
  122. $http.requestError = function(e) {
  123. // e.statusCode == 0 是参数效验错误抛出的
  124. if (e.statusCode == 0) {
  125. uni.showToast({
  126. title: e.errMsg,
  127. icon: "none",
  128. duration: 2000
  129. });
  130. throw e;
  131. } else {
  132. uni.showToast({
  133. title: "接口异常",
  134. icon: "none",
  135. duration: 2000
  136. });
  137. }
  138. if (e.requestId && pendingCallbacks[e.requestId]) {
  139. pendingCallbacks[e.requestId]();
  140. }
  141. }
  142. export default $http;