service.js 3.4 KB

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