与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.3 KiB

2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
  1. var baseUrl = require('../utils/baseUrl')
  2. var ajaxtimes = 0
  3. var isShowingTokenExpiredModal = false // 新增:标记是否正在显示token过期弹窗
  4. module.exports = {
  5. http(url, method, params) {
  6. //发送一次请求就加1
  7. ajaxtimes++
  8. let token = 'token' // 获取token,自行获取token和签名,token和签名表示每个接口都要发送的数据
  9. let sign = 'sign' // 获取签名 (后台怎么定义的,就传什么)
  10. let data = {
  11. token,
  12. sign
  13. }
  14. wx.showLoading({
  15. title: '加载中...',
  16. })
  17. let urls = baseUrl + url
  18. if (params.data) { // 在这里判断一下data是否存在,params表示前端需要传递的数据,params是一个对象,有三组键值对,data:表示请求要发送的数据,success:成功的回调,fail:失败的回调,这三个字段可缺可无,其余字段会忽略
  19. for (let key in params.data) { // 在这里判断传过来的参数值为null,就删除这个属性
  20. if (params.data[key] == null || params.data[key] == 'null') {
  21. delete params.data[key]
  22. }
  23. }
  24. data = {
  25. ...data,
  26. ...params.data
  27. }
  28. }
  29. if (params.id) {
  30. urls = urls + '/' + params.id
  31. }
  32. // console.log(urls);
  33. var value = null
  34. try {
  35. value = wx.getStorageSync('token')
  36. if (value) {
  37. // console.log(value);
  38. }
  39. } catch (e) {
  40. // Do something when catch error
  41. }
  42. wx.request({
  43. url: urls, // 就是拼接上前缀,此接口域名是开放接口,可访问
  44. method: method, // 判断请求类型,除了值等于'post'外,其余值均视作get 其他的请求类型也可以自己加上的 method: method == 'post' ? 'post' : 'get'
  45. data,
  46. header: {
  47. 'content-type': 'application/json',
  48. 'Authorization':'Bearer '+ value
  49. },
  50. success(res) {
  51. // console.log(res);
  52. if(res.data.code == 401){
  53. // 只在没有显示弹窗时才显示
  54. if (!isShowingTokenExpiredModal) {
  55. isShowingTokenExpiredModal = true
  56. wx.showModal({
  57. title: '提示',
  58. content: '登录已过期,请重新登录',
  59. success (res) {
  60. if (res.confirm) {
  61. // 重置标记
  62. isShowingTokenExpiredModal = false
  63. wx.reLaunch({
  64. url: '/pages/login/login',
  65. })
  66. } else if (res.cancel) {
  67. // 重置标记
  68. isShowingTokenExpiredModal = false
  69. }
  70. },
  71. // 确保在模态框关闭时重置标记
  72. complete: function() {
  73. // 如果success回调没有执行(例如直接点击蒙层关闭),在这里重置标记
  74. setTimeout(() => {
  75. isShowingTokenExpiredModal = false
  76. }, 300)
  77. }
  78. })
  79. }
  80. // 401错误时,不调用params.success,直接返回
  81. return
  82. } else {
  83. params.success && params.success(res.data)
  84. }
  85. },
  86. fail(err) {
  87. params.fail && params.fail(err)
  88. },
  89. complete(){
  90. //完成一次请求就减一
  91. ajaxtimes--;
  92. if(ajaxtimes===0){
  93. wx.hideLoading()
  94. }
  95. },
  96. })
  97. }
  98. }