axios.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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 changeOrg = getApp().globalData.changeOrg
  7. const curVer = getApp().globalData.version
  8. console.log(changeOrg, !hasToken,'changeOrg')
  9. // hasToken是否传入token,为true则不传token
  10. const header = {
  11. 'Version': curVer.version?curVer.version.replace(/\./g,''):''
  12. }
  13. if(!hasToken || changeOrg){
  14. header['access-token'] = authorization || ''
  15. }
  16. if(changeOrg){
  17. header['access-org'] = changeOrg || ''
  18. }
  19. //此token是登录成功后后台返回保存在storage中的
  20. let DefaultOpts = {
  21. url: baseUrl+opts.url,
  22. data: opts.data,
  23. method: opts.method,
  24. header: opts.header ? opts.header : header
  25. }
  26. console.log(DefaultOpts)
  27. let promise = new Promise(function(resolve, reject) {
  28. uni.request(DefaultOpts).then(
  29. (res) => {
  30. console.log(res)
  31. // 是否超时已跳转
  32. let loginTimeOut = uni.getStorageSync('loginTimeOut');
  33. if(res[0]&&res[0].errMsg.indexOf('request:fail')>=0){
  34. uni.showToast({
  35. icon:'none',
  36. title: '网络请求失败,请检查网络连接情况',
  37. mask: true,
  38. duration: 4000
  39. })
  40. resolve({
  41. status: 6000,
  42. message: "网络请求失败"
  43. })
  44. }
  45. let ret = res[1]
  46. if(!ret.status){
  47. ret.status = ret.statusCode
  48. }
  49. if(res[1].data.status){
  50. ret = res[1].data
  51. }else if(res[1].status){
  52. ret = res[1]
  53. }
  54. if(ret.status == '200'){
  55. resolve(ret)
  56. }else{
  57. if(ret.status == '401' || ret.status == '1099'){ // 未登录或登录过期
  58. uni.showToast({
  59. icon:'none',
  60. title: '未登录或登录已过期,请重新登录',
  61. duration: 5000
  62. })
  63. setTimeout(function() {
  64. const currentRoute = getRoutePath();
  65. const url = `/pages/login/login`
  66. uni.redirectTo({ url })
  67. }, 1000)
  68. }
  69. else{
  70. console.log(opts.url,'opts.url')
  71. if(ret.status == 500){
  72. if(
  73. opts.url.indexOf("shelfReplenish/detail/outScan")<0&&
  74. opts.url.indexOf("shelfReplenish/detail/queryByProductQrCode")<0&&
  75. opts.url.indexOf("shelfStockCheck/confirm")<0){
  76. uni.showToast({
  77. icon:'none',
  78. title: ret.message,
  79. mask: true,
  80. duration: 4000
  81. })
  82. }
  83. }
  84. }
  85. resolve(ret)
  86. }
  87. // ret.status = ret.statusCode // mock数据结构改造
  88. resolve(ret)
  89. }
  90. ).catch(
  91. (response) => {
  92. reject(response)
  93. }
  94. )
  95. })
  96. return promise
  97. }
  98. function getRoutePath() {
  99. // eslint-disable-next-line no-undef
  100. const pages = getCurrentPages(); // 获取加载的页面
  101. const currentPage = pages[pages.length - 1]; // 获取当前页面的对象
  102. let url = currentPage.route; // 当前页面url
  103. const options = objToUrl(currentPage.options); // 如果要获取url中所带的参数可以查看options
  104. const lanuch = [
  105. 'pages/index/index'
  106. ].includes(url);
  107. url = '/' + url;
  108. if (options.length) {
  109. url += '?' + options;
  110. }
  111. return {
  112. url,
  113. lanuch
  114. };
  115. }
  116. export default {
  117. baseUrl,
  118. request
  119. }