api.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import config, { getHeaders } from './config';
  2. import LocalStorage from '@/LocalStorage';
  3. interface Api {
  4. get: (url: string, data?: any) => Promise<any>,
  5. post: (url: string, data?: any) => Promise<any>,
  6. put: (url: string, data?: any) => Promise<any>,
  7. delete: (url: string, data?: any) => Promise<any>,
  8. };
  9. const apiGenerator = (): Api => {
  10. type Method = 'GET' | 'POST' | 'PUT' | 'DELETE';
  11. function request(
  12. method: Method,
  13. url: string,
  14. data?: any,
  15. ): Promise<any> {
  16. const options: {
  17. header: Object,
  18. method: Method,
  19. url: string,
  20. data?: any,
  21. } = {
  22. header: getHeaders(),
  23. method: method,
  24. url: config.baseURL + url,
  25. };
  26. if (Object.keys(data).length !== 0) {
  27. const params: { [key: string]: any } = {};
  28. for (const key in data) {
  29. if (data[key]) {
  30. params[key] = data[key];
  31. }
  32. }
  33. options.data = params;
  34. };
  35. return new Promise((resolve, reject) => {
  36. uni.request({
  37. ...options,
  38. success: (response) => {
  39. // HTTP状态码
  40. const statusCode = response.statusCode;
  41. if (statusCode === 200) {// 成功信息
  42. const data = response.data as { code: number, data: any };
  43. if (data.code === 200) {// 成功
  44. resolve(data);
  45. } else {// 失败
  46. if (data.code === 401) {
  47. LocalStorage.clear();
  48. uni.reLaunch({
  49. url: '/pages/login/index/index',
  50. success: () => {
  51. uni.showToast({
  52. icon: 'none',
  53. mask: true,
  54. duration: 2000,
  55. title: '登录过期',
  56. });
  57. }
  58. });
  59. reject();
  60. } else {
  61. reject(data);
  62. }
  63. }
  64. } else {// 错误信息
  65. uni.showToast({
  66. icon: 'none',
  67. mask: true,
  68. duration: 2000,
  69. title: '服务异常',
  70. });
  71. reject();
  72. }
  73. },
  74. fail: () => {
  75. uni.showToast({
  76. icon: 'none',
  77. mask: true,
  78. duration: 2000,
  79. title: '请求失败',
  80. });
  81. reject();
  82. },
  83. });
  84. });
  85. }
  86. return {
  87. get: (url, data = {}) => {
  88. return request('GET', url, data);
  89. },
  90. post: (url, data = {}) => {
  91. return request('POST', url, data);
  92. },
  93. put: (url, data = {}) => {
  94. return request('PUT', url, data);
  95. },
  96. delete: (url, data = {}) => {
  97. return request('DELETE', url, data);
  98. },
  99. }
  100. };
  101. const api = apiGenerator();
  102. export default api;