service.js 3.7 KB

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