index.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { platform } from './platform';
  2. import { hideLoading, showLoading } from './loading';
  3. import { MyRequestOptions, HttpResponse } from './type/index';
  4. const mapBaseUrl = {
  5. H5: '/dev-api',
  6. MpWeixin: 'https://xxxx'
  7. // 测试环境 / 预发布环境 / 生产环境自己补充...
  8. };
  9. const baseUrl = mapBaseUrl[platform];
  10. /**
  11. * 封装uni.request
  12. * @param {String} option.method 请求方式
  13. * @param {String} option.url 请求url
  14. * @param {Object} option.data 请求参数
  15. * @param {Object} option.loading loading配置信息
  16. * @param {Boolean} option.loading.show 显示loading
  17. * 余下配置参考 RequestOptions 类型定义
  18. * 如果要扩展 可在 MyRequestOptions 下进行类型扩展
  19. *
  20. * ====
  21. * MyRequestOptions HttpResponse 放在了./type/index.ts 建议放在 global.d.ts 全局 ts 类型定义中
  22. * ====
  23. * @returns
  24. */
  25. const request = <T = any>(
  26. option : MyRequestOptions
  27. ) : Promise<HttpResponse<T>> => {
  28. return new Promise((resolve, reject) => {
  29. // 处理请求loading
  30. if (option.loading?.show) {
  31. showLoading(option.loading.option);
  32. }
  33. uni.request({
  34. method: option.method || 'GET',
  35. url: `${baseUrl}${option.url}`, // 完整URL
  36. data: option.data || {},
  37. header: option.header || {},
  38. success: async (res) => {
  39. // 处理响应数据
  40. if (option.loading?.show) {
  41. hideLoading();
  42. }
  43. // ========= 下面按要求后端的返回自行处理 ========
  44. const data = res.data as HttpResponse<T>;
  45. if (data.code === 200) {
  46. resolve(data);
  47. } else {
  48. uni.showToast({
  49. title: data.errMsg,
  50. icon: 'none'
  51. });
  52. }
  53. if (data.code === 401) {
  54. // 删除缓存
  55. uni.navigateTo({
  56. url: '/pages/login/login'
  57. });
  58. }
  59. // ========= 上面按要求后端的返回自行处理 ========
  60. },
  61. fail: (err) => {
  62. if (option.loading?.show) {
  63. hideLoading();
  64. }
  65. uni.showToast({
  66. title: err.errMsg,
  67. icon: 'none'
  68. });
  69. reject(err);
  70. }
  71. });
  72. });
  73. };
  74. // 这里仅封装了部分常用的请求方法,可以根据需求继续封装其他方法
  75. request.post = <T = any>(option : MyRequestOptions) => {
  76. return request({
  77. method: 'POST',
  78. ...option
  79. }) as unknown as Promise<HttpResponse<T>>;
  80. };
  81. request.get = <T = any>(option : MyRequestOptions) => {
  82. return request({
  83. method: 'GET',
  84. ...option
  85. }) as unknown as Promise<HttpResponse<T>>;
  86. };
  87. request.put = <T = any>(option : MyRequestOptions) => {
  88. return request({
  89. method: 'PUT',
  90. ...option
  91. }) as unknown as Promise<HttpResponse<T>>;
  92. };
  93. request.delete = <T = any>(option : MyRequestOptions) => {
  94. return request({
  95. method: 'DELETE',
  96. ...option
  97. }) as unknown as Promise<HttpResponse<T>>;
  98. };
  99. export default request;