service.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import Request from 'luch-request'
  2. import util from '../../utils/util.js'
  3. import setting from './setting.js'
  4. let baseURL = setting.baseURL
  5. const getTokenUrl=()=>{
  6. let tokenObj=uni.getStorageSync("tokenObj")
  7. let url = baseURL+`blade-auth/oauth/token?tenant_id=${tokenObj.tenant_id}&password=${tokenObj.password}&username=${tokenObj.username}&grant_type=password&scope=all&type=account`;
  8. console.log("tokenurl:"+url)
  9. return url
  10. }
  11. //获取token
  12. const getTokenStorage = () => {
  13. let token = ''
  14. try {
  15. token = uni.getStorageSync('token')
  16. } catch (e) {
  17. }
  18. return token
  19. }
  20. //不需要加上Blade-Auth的url
  21. const WHiTE_LIST=['agency/getAgencyTenantList']
  22. const http = new Request()
  23. http.setConfig((config) => { /* 设置全局配置 */
  24. config.baseURL = baseURL /* 根域名不同 */
  25. config.header = {
  26. ...config.header,
  27. }
  28. return config
  29. })
  30. http.interceptors.request.use((config) => { /* 请求之前拦截器。可以使用async await 做异步操作 */
  31. if (!WHiTE_LIST.includes(config.url)) {
  32. config.header = {
  33. ...config.header,
  34. "Blade-Auth": getTokenStorage()
  35. }
  36. }
  37. return config
  38. }, (config) => {
  39. return Promise.reject(config)
  40. })
  41. // 是否正在刷新的标记
  42. let isRefreshing = false
  43. // 重试队列,每一项将是一个待执行的函数形式
  44. let requests = []
  45. let count=0
  46. http.interceptors.response.use(async (response) => { /* 请求之后拦截器。可以使用async await 做异步操作 */
  47. //toekn过期处理
  48. //200 返回数据成功 0 上传文件成功 400 没有相关数据 || response.data.buildingCount 数据统计的~晕~~~~
  49. console.log(response.data.code)
  50. if (response.data.code == 200 || response.data.buildingCount!=undefined || response.data.code ==400 || response.data.code ==0 || response.data.access_token!=undefined) {
  51. return response.data
  52. }else{
  53. return Promise.reject(response)
  54. }
  55. },async (err) => { // 请求错误做点什么
  56. if (err.data.code == 401) {
  57. count ++
  58. if (count==10) {
  59. return
  60. }
  61. let {config} = err
  62. if (!isRefreshing) {
  63. isRefreshing = true
  64. let token = uni.getStorageSync('token')
  65. let url=getTokenUrl()
  66. // if (url.indexOf('tenantId=undefined')>0) {
  67. // uni.showModal({
  68. // content:"会话过期,请重新登录",
  69. // title:"提示",
  70. // showCancel:false,
  71. // success(resp) {
  72. // uni.clearStorageSync()
  73. // uni.reLaunch({
  74. // url:"/pages/login/login"
  75. // })
  76. // }
  77. // })
  78. // return
  79. // }
  80. let [,res] = await uni.request({
  81. url:url,
  82. method: 'POST',
  83. header:{
  84. Authorization:"Basic c2FiZXI6c2FiZXJfc2VjcmV0"
  85. },
  86. })
  87. //否则保存新的token
  88. token=res.data.token_type+" "+res.data.access_token
  89. uni.setStorageSync('token', token)
  90. requests.forEach(cb => cb())
  91. // 重试完了清空这个队列
  92. requests = []
  93. isRefreshing = false
  94. return http.request(config)
  95. } else {
  96. return new Promise((resolve) => {
  97. // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
  98. requests.push(() => {
  99. resolve(http.request(config))
  100. })
  101. })
  102. }
  103. }
  104. return Promise.reject(err)
  105. })
  106. export {
  107. http
  108. }