request.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import axios from 'axios'
  2. import type { AxiosRequestConfig } from 'axios'
  3. // import { ElMessage } from 'element-plus'
  4. import { showConfirmDialog, showSuccessToast, showFailToast } from 'vant';
  5. import user from '~/store/user'
  6. const token = user.token
  7. export interface Response {
  8. code: string
  9. data: any
  10. msg: string
  11. }
  12. const instance = axios.create({
  13. baseURL: window.GLOBAL_CONFIG.api,
  14. timeout: 6 * 1000,
  15. headers: {
  16. 'Content-Type': 'application/x-www-form-urlencoded',
  17. },
  18. method: 'post',
  19. })
  20. instance.interceptors.request.use(
  21. async (config) => {
  22. if (config.method?.toLocaleLowerCase() === 'get') {
  23. config.params = Object.assign({ token }, config.params)
  24. }
  25. else {
  26. config.data = Object.assign(
  27. {
  28. token,
  29. client: 'web',
  30. site: 'dyaw',
  31. api: 'json',
  32. issubmit: (config.url?.endsWith('add') || config.url?.endsWith('edit')) ? '1' : undefined,
  33. },
  34. config.data)
  35. }
  36. // console.log('request config :>> ', config);
  37. return config
  38. },
  39. (error) => {
  40. console.error('request error: ', error)
  41. return Promise.reject(error)
  42. },
  43. )
  44. // response interceptor
  45. instance.interceptors.response.use(
  46. (response) => {
  47. response.data.code = response.data?.code?.toString()
  48. response.data.msg = response.data.msg.replace(/<.*?>/g, ' ')
  49. const { code, msg } = response.data
  50. if (code !== '1')
  51. // ElMessage.error(msg)
  52. showFailToast(msg)
  53. return response.data
  54. },
  55. (error) => {
  56. console.error(`response error: ${error}`)
  57. return Promise.reject(error)
  58. },
  59. )
  60. export default (config: AxiosRequestConfig): Promise<Response> => instance.request(config)
  61. const obj2form = (data: { [key: string]: any }) => {
  62. const formData = new FormData()
  63. Object.keys(data).forEach(key => formData.append(key, data[key]))
  64. return formData
  65. }
  66. export const REQUEST = {
  67. empty: axios,
  68. default: instance,
  69. import: (c: Partial<AxiosRequestConfig>) => instance({
  70. timeout: 10 * 60 * 1000,
  71. transformRequest: [obj2form],
  72. ...c,
  73. }),
  74. upload: (c: Partial<AxiosRequestConfig>) => instance({
  75. timeout: 3 * 60 * 1000,
  76. transformRequest: [obj2form],
  77. ...c,
  78. }),
  79. download: (c: Partial<AxiosRequestConfig>) => instance({
  80. timeout: 1 * 60 * 1000,
  81. method: 'get',
  82. params: { token, limit: 10000, page: 1, api: 'xls', ...c },
  83. }),
  84. }
  85. export function download(url: string, data?: object | null) {
  86. const params = Object.assign({ token, limit: 10000, page: 1, api: 'xls' }, data)
  87. const paramsStr = Object.entries(params).map(([k, v]) => `${k}=${v}`).join('&')
  88. const el = document.createElement('a')
  89. const href = `${window.GLOBAL_CONFIG.api}${url}?${paramsStr}`
  90. el.setAttribute('href', href)
  91. el.click()
  92. }