service.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import Request from 'luch-request'
  2. /**
  3. * 阿里云2ce15942be1999220210d9837b01d37e
  4. */
  5. // let baseURL = 'http://8.135.18.59:1889/api/'
  6. // let tokenUrl=baseURL+"/blade-auth/oauth/token?tenant_id=000000&username=admin&password=1ac87efdaf318558f05d1840a94bdd94&grant_type=password&scope=all&type=account"
  7. let baseURL = "http://192.168.1.120"
  8. let tokenUrl = baseURL +
  9. "/blade-auth/oauth/token?tenant_id=000000&password=21232f297a57a5a743894a0e4a801fc3&username=admin&grant_type=password"
  10. //获取tenantId
  11. const getTenantId = () => {
  12. let tenantId = null
  13. try {
  14. tenantId = uni.getStorageSync('lifeData').vuex_tenantId
  15. } catch (e) {}
  16. return tenantId
  17. }
  18. //获取token
  19. const getTokenStorage = () => {
  20. let token = ''
  21. try {
  22. token = uni.getStorageSync('token')
  23. } catch (e) {}
  24. return token
  25. }
  26. const http = new Request()
  27. http.setConfig((config) => {
  28. /* 设置全局配置 */
  29. config.baseURL = baseURL /* 根域名不同 */
  30. config.header = {
  31. ...config.header,
  32. }
  33. return config
  34. })
  35. http.interceptors.request.use((config) => {
  36. console.log();
  37. /* 请求之前拦截器。可以使用async await 做异步操作 */
  38. config.header = {
  39. ...config.header,
  40. "Blade-Auth": getTokenStorage()
  41. }
  42. let tenantId=getTenantId()
  43. if (config.method == 'POST' && config.data && tenantId) {
  44. config.data.tenantId=tenantId
  45. }
  46. return config
  47. }, (config) => {
  48. return Promise.reject(config)
  49. })
  50. // 是否正在刷新的标记
  51. let isRefreshing = false
  52. // 重试队列,每一项将是一个待执行的函数形式
  53. let requests = []
  54. http.interceptors.response.use(async (response) => {
  55. /* 请求之后拦截器。可以使用async await 做异步操作 */
  56. let data = response.data
  57. if (data.code && data.code != 200) {
  58. uni.showToast({
  59. icon: 'none',
  60. title: data.msg
  61. })
  62. return Promise.reject(response)
  63. }
  64. return response
  65. }, async (err) => { // 请求错误做点什么
  66. //toekn过期处理
  67. if (err.data.code == 401) {
  68. let {
  69. config
  70. } = err
  71. if (!isRefreshing) {
  72. isRefreshing = true
  73. let token = uni.getStorageSync('token')
  74. let [, res] = await uni.request({
  75. url: tokenUrl,
  76. method: 'POST',
  77. header: {
  78. Authorization: "Basic c2FiZXI6c2FiZXJfc2VjcmV0"
  79. },
  80. })
  81. //否则保存新的token
  82. token = res.data.token_type + " " + res.data.access_token
  83. uni.setStorageSync('token', token)
  84. requests.forEach(cb => cb())
  85. // 重试完了清空这个队列
  86. requests = []
  87. isRefreshing = false
  88. return http.request(config)
  89. } else {
  90. return new Promise((resolve) => {
  91. // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
  92. requests.push(() => {
  93. resolve(http.request(config))
  94. })
  95. })
  96. }
  97. }
  98. if (err.data.code == 500) {
  99. uni.hideLoading()
  100. uni.showModal({
  101. title: '提示',
  102. content:err.data.msg,
  103. showCancel:false,
  104. confirmColor: '#2979ff' ,
  105. });
  106. }
  107. return Promise.reject(err)
  108. })
  109. export {
  110. http
  111. }