request.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * 请求封装
  3. * 根据环境自动切换 API 地址
  4. */
  5. import config from '@/config/index.js'
  6. const {
  7. baseUrl,
  8. timeout,
  9. debug,
  10. env
  11. } = config
  12. const noTokenUrls = [
  13. '/oa/code/sendCode', // 获取验证码
  14. '/codeLogin', // 登录接口
  15. '/xcxLogin' // 一键登录
  16. ];
  17. // 核心请求方法
  18. const request = (url, method = 'GET', data = {}) => {
  19. // 1. 检查当前接口是否需要token
  20. const needToken = !noTokenUrls.some(path => url.startsWith(path));
  21. // 2. 获取本地存储的token
  22. const token = uni.getStorageSync('token') || '';
  23. const fullUrl = baseUrl + url;
  24. // 构建请求头(有token则自动携带)
  25. const header = {
  26. 'Content-Type': 'application/json;charset=UTF-8'
  27. };
  28. if (needToken && token) {
  29. header["Authorization"] = "Bearer " + token
  30. // Bearer
  31. }
  32. return new Promise((resolve, reject) => {
  33. uni.request({
  34. url: fullUrl,
  35. method: method.toUpperCase(), // 统一转大写避免错误
  36. data: data, // POST 参数放请求体
  37. header: header,
  38. timeout: 10000,
  39. success: (res) => {
  40. resolve(res.data);
  41. },
  42. fail: (err) => {
  43. // 统一错误提示
  44. uni.showToast({
  45. title: err.errMsg || '请求失败',
  46. icon: 'none'
  47. });
  48. reject(err);
  49. }
  50. });
  51. });
  52. };
  53. // 导出方法
  54. export default {
  55. // GET 请求
  56. get: (url, data = {}) => request(url, 'GET', data),
  57. // POST 请求
  58. post: (url, data = {}) => request(url, 'POST', data)
  59. };