http.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import Taro from '@tarojs/taro'
  2. import { noEmpty } from '@utils'
  3. const HLKEY = '654mca0l38b489d9'
  4. const CJ = require('crypto-js')
  5. const Http = (options = { data: {} }) => {
  6. return new Promise((resolve, reject) => {
  7. if (options.loadingStr === 'loading') {
  8. Taro.showLoading({
  9. mask: true,
  10. title: '加载中..'
  11. })
  12. }
  13. Taro.getEnv() === Taro.ENV_TYPE.WEAPP && Taro.showNavigationBarLoading()
  14. let header = {
  15. // 'Content-Type': 'application/json',
  16. 'Content-Type': 'application/x-www-form-urlencoded'
  17. }
  18. let params = {...options.data}
  19. if (Taro.getStorageSync('APP_token')) params.token = Taro.getStorageSync('APP_token')
  20. for (let key in options.data) {
  21. if (options.data[key] === undefined || options.data[key] === 'undefined') {
  22. params[key] = ''
  23. }
  24. }
  25. try {
  26. // let baseUrl = 'http://api.dev.com'
  27. let baseUrl = 'https://api.honglouplus.com'
  28. // let baseUrl = 'https://api.honglounews.com'
  29. const resX = Taro.request({
  30. url: baseUrl + options.url,
  31. data: {
  32. ...params
  33. },
  34. header,
  35. method: options.method || 'POST',
  36. complete: res => {
  37. if (options.loadingStr === 'loading') {
  38. Taro.hideLoading()
  39. }
  40. Taro.getEnv() === Taro.ENV_TYPE.WEAPP && Taro.hideNavigationBarLoading()
  41. }
  42. })
  43. resX.then(res => {
  44. const { statusCode } = res
  45. if (statusCode === 200) {
  46. const msg = res.data || ''
  47. const key = CJ.enc.Utf8.parse(HLKEY)
  48. const bytes = CJ.AES.decrypt(msg, key, {
  49. mode: CJ.mode.ECB,
  50. padding: CJ.pad.Pkcs7
  51. })
  52. const originalText = bytes.toString(CJ.enc.Utf8)
  53. const data = JSON.parse(originalText)
  54. // console.log(data)
  55. // const data = res.data
  56. const { errno } = data
  57. switch (errno) {
  58. case 0:
  59. return resolve(noEmpty(data.data) ? data.data : data)
  60. break
  61. case 401:
  62. case 402:
  63. case 403:
  64. case 404:
  65. case 405:
  66. if (Taro.getStorageSync('APP_token')) {
  67. Taro.removeStorageSync('APP_MY_REFERRER')
  68. Taro.login({
  69. success: function (res) {
  70. if (res.code) {
  71. Taro.api.base.apiwxautologin({code: res.code}).then(cData => {
  72. if (cData.token === 'error') {
  73. Taro.removeStorageSync('APP_token')
  74. } else {
  75. const userInfo = {
  76. nickName: cData.nickname,
  77. avatarUrl: cData.avatar,
  78. phone: cData.phone,
  79. ...cData,
  80. }
  81. if (!cData.avatar) Taro.setStorageSync('APP_needUsername', 'yes')
  82. Taro.setStorageSync('APP_userInfo', userInfo)
  83. Taro.setStorageSync('APP_token', cData.token)
  84. }
  85. })
  86. }
  87. }
  88. })
  89. } else {
  90. Taro.showToast({
  91. title: `请先登录~`,
  92. icon: 'none',
  93. mask: true,
  94. })
  95. }
  96. break
  97. default:
  98. Taro.showModal({
  99. title: '提示',
  100. content: `${data.errmsg}(${errno})`,
  101. })
  102. return reject(data)
  103. }
  104. } else {
  105. // Taro.reLaunch({
  106. // url: '/pages/login/index?backType=error'
  107. // })
  108. Taro.showToast({
  109. title: `网络请求错误,状态码${statusCode}`,
  110. icon: 'none',
  111. mask: true,
  112. })
  113. reject(data)
  114. throw new Error(`网络请求错误,状态码${statusCode}`)
  115. }
  116. })
  117. } catch (err) {
  118. Taro.getEnv() === Taro.ENV_TYPE.WEAPP && Taro.hideNavigationBarLoading()
  119. reject(new Error('网络请求出错~'))
  120. }
  121. })
  122. }
  123. // export default Http
  124. function request (url, data, loadingStr) {
  125. let pages = getCurrentPages()
  126. if (pages.length > 8) {
  127. Taro.reLaunch({
  128. url: '/pages/index/index'
  129. })
  130. }
  131. return Http({
  132. url,
  133. data,
  134. loadingStr
  135. })
  136. }
  137. function requestNoErrorTip (url, data) {
  138. return Http({
  139. url,
  140. data,
  141. noErrorTip: true
  142. })
  143. }
  144. export {
  145. request,
  146. requestNoErrorTip
  147. }