request.js 2.9KB

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