axios.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { objToUrl } from '@/libs/tools.js';
  2. const baseUrl = getApp().globalData.baseUrl
  3. //带Token请求
  4. const request = (opts, hasToken) => {
  5. const authorization = getApp().globalData.token
  6. const curVer = getApp().globalData.version
  7. // console.log(authorization, 'authorization')
  8. // hasToken是否传入token,为true则不传token
  9. const header = {
  10. // 'USER-TERM-TYPE': 'ipad', // 支付时需要用到 与pad一致
  11. // 'App-Type': 2,
  12. 'Version': curVer.version?curVer.version.replace(/\./g,''):''
  13. }
  14. if(!hasToken){
  15. header.authorization = authorization
  16. }
  17. //此token是登录成功后后台返回保存在storage中的
  18. let DefaultOpts = {
  19. url: baseUrl+opts.url,
  20. data: opts.data,
  21. method: opts.method,
  22. header: opts.header ? opts.header : header
  23. }
  24. console.log(DefaultOpts)
  25. let promise = new Promise(function(resolve, reject) {
  26. uni.request(DefaultOpts).then(
  27. (res) => {
  28. console.log(res)
  29. // 是否超时已跳转
  30. let loginTimeOut = uni.getStorageSync('loginTimeOut');
  31. if(res[0]&&res[0].errMsg.indexOf('request:fail')>=0){
  32. resolve({
  33. status: 6000,
  34. message: "网络请求失败"
  35. })
  36. }
  37. let ret = res[1]
  38. ret.status = ret.statusCode
  39. if(res[1].data.status){
  40. ret = res[1].data
  41. }else if(res[1].status){
  42. ret = res[1]
  43. }
  44. if(ret.status == '200'){
  45. resolve(ret)
  46. }else{
  47. if(ret.status == '401'){ // 未登录或登录过期
  48. // 除过查询未完成订单的请求
  49. if(opts.url.indexOf("order/unFinishedOrderRunStatus")<0){
  50. uni.showToast({
  51. icon:'none',
  52. title: '未登录或登录已过期,请重新登录',
  53. duration: 5000
  54. })
  55. setTimeout(function() {
  56. const currentRoute = getRoutePath();
  57. const url = `/pages/login/pwLogin?lanuch=${currentRoute.lanuch}&path=` + encodeURIComponent(currentRoute.url);
  58. uni.redirectTo({ url });
  59. }, 1000);
  60. }
  61. }
  62. else{
  63. if(ret.status == 500){
  64. if(opts.url.indexOf("store/validateStoreAndDevice")<0&&opts.url.indexOf("couponReceives/findUsableCoupon")<0){
  65. uni.showToast({
  66. icon:'none',
  67. title: ret.message,
  68. mask: true,
  69. duration: 3000
  70. })
  71. }
  72. }
  73. }
  74. resolve(ret)
  75. }
  76. resolve(ret)
  77. }
  78. ).catch(
  79. (response) => {
  80. reject(response)
  81. }
  82. )
  83. })
  84. return promise
  85. }
  86. function getRoutePath() {
  87. // eslint-disable-next-line no-undef
  88. const pages = getCurrentPages(); // 获取加载的页面
  89. const currentPage = pages[pages.length - 1]; // 获取当前页面的对象
  90. let url = currentPage.route; // 当前页面url
  91. const options = objToUrl(currentPage.options); // 如果要获取url中所带的参数可以查看options
  92. const lanuch = [
  93. 'pages/index/index'
  94. ].includes(url);
  95. url = '/' + url;
  96. if (options.length) {
  97. url += '?' + options;
  98. }
  99. return {
  100. url,
  101. lanuch
  102. };
  103. }
  104. export default {
  105. baseUrl,
  106. request
  107. }