request.js 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import Taro from '@tarojs/taro';
  2. import { getToken, setToken } from './token';
  3. import logger from './log';
  4. const getQueryStrByParams = params => {
  5. if (!params) return undefined;
  6. return Object.keys(params).map(key => {
  7. const value = params[key];
  8. return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
  9. }).join('&')
  10. }
  11. export default function request(api, options = {}) {
  12. return new Promise((resolve, reject) => {
  13. const { method = 'GET', params, data = {}, header = {}, silent = false, noSuccesTip, ...cfgs } = options;
  14. const queryStr = params ? getQueryStrByParams(params) : undefined;
  15. // eslint-disable-next-line no-undef
  16. const url = queryStr ? `${HOST}${api}?${queryStr}` : `${HOST}${api}`;
  17. const personId = Taro.getStorageSync('personId');
  18. const onError = (err) => {
  19. console.error(err);
  20. logger.error(`接口 [${method}]: ${url}`);
  21. logger.error('参数: ', data);
  22. logger.error(err);
  23. if (!silent && 'GET' !== method.toUpperCase()) {
  24. Taro.showModal({
  25. title: err.message || err,
  26. showCancel: false,
  27. })
  28. }
  29. reject(err);
  30. };
  31. Taro.request({
  32. url,
  33. data,
  34. method,
  35. header: {
  36. 'x-personId': personId,
  37. 'content-type': 'application/json',
  38. 'authorization': getToken(),
  39. ...header,
  40. },
  41. ...cfgs,
  42. }).then(({ statusCode, header, data = result }) => {
  43. if (statusCode >= 300) {
  44. logger.error(header);
  45. return onError(`网络错误 ${statusCode}`);
  46. }
  47. if (data.code === 1000) {
  48. if (data.data?.token) {
  49. setToken(data.data.token);
  50. }
  51. if (!silent && 'GET' !== method.toUpperCase()) {
  52. if (!noSuccesTip) {
  53. Taro.showToast({
  54. title: '操作成功',
  55. icon: 'none',
  56. })
  57. }
  58. }
  59. resolve(data.data);
  60. } else {
  61. onError(data);
  62. }
  63. }).catch(onError);
  64. });
  65. }
  66. export const uploadFiles = async (files, url) => {
  67. const uploads = []
  68. const token = getToken();
  69. for (var i = 0; i < files.length; i++) {
  70. uploads[i] = new Promise((resolve, reject) => {
  71. Taro.uploadFile({
  72. // eslint-disable-next-line no-undef
  73. url: url || `${HOST}/api/ma/file`,
  74. filePath: files[i].tempFilePath,
  75. header: {
  76. 'authorization': token,
  77. },
  78. name: 'file',
  79. formData: {
  80. fileType: files[i].fileType,
  81. },
  82. success: function (res) {
  83. // debugger
  84. const _data = JSON.parse(res.data)
  85. // if (_data.code !== CODE_SUCCESS) {
  86. // reject(new Error(_data.message))
  87. // }
  88. resolve(_data.data)
  89. },
  90. fail(err) {
  91. reject(err)
  92. }
  93. })
  94. })
  95. }
  96. return Promise.all(uploads)
  97. }