request.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * uni-app 网络请求封装
  3. * @author steelwei
  4. */
  5. import { BASE_URL, CLIENT_ID, PLATFORM_CODE, TENANT_ID } from './config'
  6. import { getToken, clearAuth } from './auth'
  7. /**
  8. * 通用请求方法
  9. * @param {Object} options - 请求配置
  10. * @param {string} options.url - 请求路径(不含 BASE_URL)
  11. * @param {string} [options.method='GET'] - 请求方法
  12. * @param {Object} [options.data] - 请求数据
  13. * @param {Object} [options.header] - 额外请求头
  14. * @param {boolean} [options.needToken=true] - 是否需要携带 Token
  15. * @returns {Promise}
  16. */
  17. export default function request(options = {}) {
  18. const {
  19. url,
  20. method = 'GET',
  21. data,
  22. header = {},
  23. needToken = true
  24. } = options
  25. // 构建请求头
  26. const headers = {
  27. 'Content-Type': 'application/json;charset=utf-8',
  28. 'clientid': CLIENT_ID,
  29. 'X-Platform-Code': PLATFORM_CODE,
  30. ...header
  31. }
  32. // 携带 Token
  33. if (needToken) {
  34. const token = getToken()
  35. if (token) {
  36. headers['Authorization'] = 'Bearer ' + token
  37. }
  38. }
  39. return new Promise((resolve, reject) => {
  40. uni.request({
  41. url: BASE_URL + url,
  42. method: method.toUpperCase(),
  43. data,
  44. header: headers,
  45. success: (res) => {
  46. console.log(res)
  47. const statusCode = res.statusCode
  48. const code = res.data.code
  49. const msg = res.data.msg
  50. const result = res.data.data
  51. // HTTP 状态码错误
  52. // if (statusCode === 401) {
  53. // // Token 过期或未登录
  54. // clearAuth()
  55. // uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' })
  56. // setTimeout(() => {
  57. // uni.reLaunch({ url: '/pages/login/login' })
  58. // }, 1500)
  59. // return reject(new Error('未授权'))
  60. // }
  61. if (statusCode !== 200) {
  62. const msg = msg || `请求失败(${statusCode})`
  63. uni.showToast({ title: msg, icon: 'none' })
  64. return reject(new Error(msg))
  65. }
  66. if (code === 401) {
  67. // Token 过期或未登录
  68. clearAuth()
  69. uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' })
  70. setTimeout(() => {
  71. uni.reLaunch({ url: '/pages/login/login' })
  72. }, 1500)
  73. return reject(new Error('未授权'))
  74. }
  75. // // 业务状态码
  76. // if (result.code !== undefined && result.code !== 200) {
  77. // const msg = result.msg || '操作失败'
  78. // uni.showToast({ title: msg, icon: 'none' })
  79. // return reject(new Error(msg))
  80. // }
  81. resolve(res.data)
  82. },
  83. fail: (err) => {
  84. uni.showToast({ title: '网络异常,请稍后重试', icon: 'none' })
  85. reject(err)
  86. }
  87. })
  88. })
  89. }