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