api.js 4.2 KB

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