request.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import store from '../store'
  2. import CryptoJS from 'crypto-js'
  3. import qs from 'qs'
  4. import common from '../utils/common'
  5. import {
  6. baseURL
  7. } from '@/api/config'
  8. let requestNum = 0 // 当前请求数量
  9. // console.log(baseURL)
  10. export function request({
  11. url,
  12. method,
  13. data,
  14. ...config
  15. }, isLoading = false, isErrorToast = true) {
  16. data = {
  17. ...store.state.sysInfo,
  18. ...data
  19. }
  20. showLoading(isLoading)
  21. return new Promise((resolve, reject) => {
  22. uni.request({
  23. url: baseURL + url,
  24. method: method || 'POST',
  25. data: {
  26. ...data,
  27. sign: getSign(data)
  28. },
  29. header: {
  30. 'content-type': 'application/x-www-form-urlencoded',
  31. token: store.state.token
  32. },
  33. timeout: 30000,
  34. ...config,
  35. success: ({
  36. statusCode,
  37. data = {}
  38. }) => {
  39. if (statusCode === 200) {
  40. if (data.code === 205 || data.code === 206) {
  41. resolve(data)
  42. } else if (data.code >= 200 && data.code < 300) {
  43. resolve(data.data)
  44. } else {
  45. reject(errHandle(data.code, data, isErrorToast))
  46. }
  47. } else {
  48. reject(errHandle(statusCode, data, isErrorToast))
  49. }
  50. },
  51. fail: xhr => {
  52. console.log('failXhr => ', xhr)
  53. reject(errHandle(null, null, isErrorToast))
  54. },
  55. complete: () => {
  56. hideLoading(isLoading)
  57. }
  58. })
  59. })
  60. }
  61. function errHandle(code, data, isErrorToast) {
  62. if (code === 401 || code === 402 || code === 403) {
  63. // 401 未登录或者 token 过期,402 账号在其他地方登录
  64. store.commit('exit')
  65. }
  66. if (isErrorToast) {
  67. common.toast(data.msg || '请求失败,请稍后再试')
  68. }
  69. return {
  70. code,
  71. data
  72. }
  73. }
  74. function getSign(obj) {
  75. // 按 ASCII 码排序
  76. let str = qs.stringify(obj, {
  77. sort: (a, b) => a.localeCompare(b)
  78. })
  79. // 拼接密钥
  80. str += '&key=fec905e4e7568e8f70529e1dc1f51c59'
  81. str = decodeURIComponent(str)
  82. // MD5 运算
  83. // str = CryptoJS.MD5(str)
  84. // AES 加密
  85. str = common.Encryption(str)
  86. // 转大写
  87. str = str.toUpperCase()
  88. return str
  89. }
  90. function showLoading(isLoading) {
  91. if (!isLoading) return
  92. requestNum++
  93. if (requestNum === 1) {
  94. uni.showLoading({
  95. title: '加载中...'
  96. })
  97. }
  98. }
  99. function hideLoading(isLoading) {
  100. if (!isLoading) return
  101. requestNum--
  102. if (requestNum <= 0) {
  103. uni.hideLoading()
  104. }
  105. }