{"version":3,"file":"fx-axios.mjs","sources":["../../../../../packages/utils/request/fx-axios.ts"],"sourcesContent":["import axios, { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios'\nimport * as qs from 'qs'\nimport { Loading } from '../loading'\nimport { useUser, UserApi } from 'fx-front-ucenter'\n\nconst pending = new Map() // 声明一个数组用于存储每个ajax请求的取消函数和ajax标识\n\nconst { getToken } = useUser()\n\nexport interface FxAxiosConfig extends AxiosRequestConfig {\n  noLoadingUrls?: string[]\n  arrayBufferUrls?: string[]\n  formDataUrls?: string[]\n  hideErrorMessageCodes?: string[]\n  reloginCodes?: string[]\n  removeRepeatedUrl?: boolean\n  serverConfig?: Record<string, any>\n  axiosConfig?: any[]\n  headerConfig?: Map<string[], Record<string, any>>\n}\n\nexport class FxAxios {\n  service: AxiosInstance\n  constructor(axiosConfig = { timeout: 100000 } as FxAxiosConfig) {\n    if (axiosConfig.serverConfig && typeof axiosConfig.serverConfig === 'object') {\n      if (axiosConfig.serverConfig.swanUrl) {\n        const xhr = new XMLHttpRequest()\n        xhr.open('get', axiosConfig.serverConfig.swanUrl, false)\n        xhr.onreadystatechange = () => {\n          if (xhr.status === 200 && xhr.readyState === 4) {\n            const responseJson = JSON.parse(xhr.responseText)\n\n            responseJson.LOGO && setFavicon(responseJson.LOGO)\n            responseJson.TITLE && (document.title = responseJson.TITLE)\n\n            Object.keys(responseJson).forEach(k => {\n              if (['[', '{'].includes(responseJson[k][0]) && [']', '}'].includes(responseJson[k][responseJson[k].length - 1])) {\n                try {\n                  responseJson[k] = JSON.parse(responseJson[k])\n                } catch (e) {\n                  console.error('parse serverconfig error', e)\n                }\n              }\n            })\n\n            Object.assign(axiosConfig.serverConfig, responseJson)\n            localStorage.setItem('$SERVER_CONFIG', JSON.stringify(responseJson))\n          }\n        }\n        xhr.send()\n      }\n    }\n    this.service = axios.create(axiosConfig)\n    // 设置 post、put 默认 Content-Type\n    this.service.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'\n    this.service.defaults.headers.put['Content-Type'] = 'application/json;charset=UTF-8'\n\n    const noLoadingString = (axiosConfig.noLoadingUrls || []).join('|').replace(/\\//g, '\\\\/')\n    this.service.interceptors.request.use(\n      config => {\n        if (!config.url?.match(noLoadingString)) {\n          Loading.showFullScreenLoading()\n        }\n        setResponseTypeToBuffer(config, axiosConfig)\n        setHeaderToFormData(config, axiosConfig)\n        setHeaderConfig(config, axiosConfig)\n        const url = [config.method, config.url, qs.stringify(config.params), qs.stringify(config.data)].join('&')\n        config.cancelToken = config.cancelToken ||\n          new axios.CancelToken(cancel => {\n            if (!pending.has(url)) {\n              // 如果 pending 中不存在当前请求，则添加进去\n              pending.set(url, cancel)\n            }\n          })\n        this.handleRequestConfig(config)\n        return config\n      },\n      error => {\n        Loading.tryHideFullScreenLoading()\n        console.error(error) // for debug\n        return Promise.reject(error)\n      },\n    )\n\n    this.service.interceptors.response.use(\n      response => {\n        if (!response.config.url?.match(noLoadingString)) {\n          Loading.tryHideFullScreenLoading()\n        }\n        // removeRepeatUrl(response.config, axiosConfig); // 在一个ajax响应后再执行一下取消操作，把已经完成的请求从pending中移除\n        if (response.data instanceof ArrayBuffer) {\n          return response\n        }\n        const responseCode = response.data.code + ''\n        // 成功/登录异常不显示错误提示\n        if ((axiosConfig.hideErrorMessageCodes || ['0', '200010000', '1A0101', '3A0311']).every(c => c !== responseCode)) {\n          // 约定只要responseCode不等于0，就是异常状态\n          Loading.showMessageTip(2, response.data.desc || '系统异常')\n          console.warn(`响应信息:${response.data.desc}`)\n        }\n        if ((axiosConfig.reloginCodes || ['1A0101', '3A0311']).includes(responseCode)) {\n          if (window.parent !== window) {\n            window.parent.postMessage({ method: 'logout' }, '*')\n            ;(window as any).$wujie?.props?.method?.logout?.()\n          } else {\n            this.handleTokenExpired(response, axiosConfig)\n          }\n        }\n        return response\n      },\n      error => {\n        console.error(error.response) // for debug\n        Loading.tryHideFullScreenLoading()\n        // 可以根据后端返回的状态码进行不同的操作\n        if (error.response) {\n          const errorCode = error.response.status\n          switch (errorCode) {\n            case 400:\n              Loading.showMessageTip(5, '请求出现错误')\n              break\n            case 401:\n              Loading.showMessageTip(2, 'Token过期，请重新登录')\n              this.handleTokenExpired(error.response, axiosConfig)\n              break\n            case 403:\n              Loading.showMessageTip(2, '权限认证失效，请重新登录')\n              this.handleAuthFailed(error.response, axiosConfig)\n              break\n            case 404:\n              Loading.showMessageTip(5, '网络请求不存在')\n              break\n            case 500:\n              Loading.showMessageTip(5, '系统异常')\n              break\n            case 501:\n              Loading.showMessageTip(5, '请求还没有被实现')\n              break\n            case 502:\n              Loading.showMessageTip(5, '网关错误')\n              break\n            case 503:\n              Loading.showMessageTip(5, '服务暂时不可用')\n              break\n            case 505:\n              Loading.showMessageTip(5, '请求的 HTTP 版本不支持')\n              break\n            default:\n              break\n          }\n        }\n        return Promise.reject(error)\n      },\n    )\n  }\n  handleRequestConfig(config: AxiosRequestConfig) {\n    const token = getToken()\n    if (token) {\n      if (config.headers) config.headers.authorization = token\n    }\n  }\n  handleTokenExpired(_: AxiosResponse, axiosConfig: FxAxiosConfig) {\n    const loginUrl = encodeURIComponent(`${window.location.origin}/${axiosConfig.serverConfig?.PROD_PREFIX || ''}`)\n    const url = UserApi.getUserCenterUrl(loginUrl)\n\n    window.setTimeout(() => {\n      // 退出到总集登录页\n      window.location.href = url\n    }, 10)\n  }\n  handleAuthFailed(_: AxiosResponse, axiosConfig: FxAxiosConfig) {\n    this.handleTokenExpired(_, axiosConfig)\n  }\n}\n\nconst setHeaderToFormData = (config: AxiosRequestConfig, axiosConfig: FxAxiosConfig) => {\n  // 设置content-type特殊方式\n  const formDataFlag = (axiosConfig.formDataUrls || []).some(\n    (url: any) => config.url?.indexOf(url) !== -1,\n  )\n  if (formDataFlag) {\n    if (config.headers) config.headers['Content-Type'] = 'multipart/form-data'\n  }\n}\n\nconst setHeaderConfig = (config: AxiosRequestConfig, axiosConfig: FxAxiosConfig) => {\n  const headerConfig = axiosConfig?.headerConfig ?? new Map<string[], Record<string, any>>()\n  for(const entry of headerConfig.entries()) {\n    const flag = (entry[0] || []).some(url => config.url?.indexOf(url) !== -1)\n    if (flag && entry[1]) {\n      if (config.headers) Object.assign(config.headers, { ...entry[1] })\n    }\n  }\n}\n\n// 下载文件配置\nconst setResponseTypeToBuffer = (config: AxiosRequestConfig, axiosConfig: FxAxiosConfig) => {\n  const flag = (axiosConfig.arrayBufferUrls || []).some(item => config.url?.indexOf(item) !== -1)\n  if (flag) {\n    config.responseType = 'arraybuffer'\n  }\n}\n\nconst setFavicon = (url: string) => {\n  if (url) {\n    const favicon = (document.querySelector('link[rel*=\\'icon\\']') || document.createElement('link')) as HTMLLinkElement\n    favicon.type = 'image/x-icon'\n    favicon.rel = 'shortcut icon'\n    favicon.href = url\n    document.getElementsByTagName('head')[0].appendChild(favicon)\n  }\n}\n\n// const removeRepeatUrl = ever => {\n//   for (const p in pending) {\n//     if (pending[p].u === ever.url + '&' + ever.method) {\n//       //当当前请求在数组中存在时执行函数体\n//       pending[p].f() //执行取消操作\n//       pending.splice(p, 1) //把这条记录从数组中移除\n//     }\n//   }\n// }\n\nlet fxAxios: AxiosInstance\n\nconst getFxAxios = (config: {\n  serverConfig: Record<string, any> | undefined\n  arrayBufferUrls: string[]\n  noLoadingUrls: string[]\n  formDataUrls: string[]\n  hideErrorMessageCodes?: string[]\n  reloginCodes?: string[]\n  headerConfig?: Map<string[], Record<string, any>>\n}) => {\n  if (!fxAxios) {\n    fxAxios = new FxAxios(config).service\n  }\n  return fxAxios\n}\n\nexport { getFxAxios }\n\n"],"names":[],"mappings":"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"}