request.ts 2.6 KB

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