123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- import Axios, { AxiosInstance, AxiosRequestConfig } from "axios";
- import qs from "qs";
- import NProgress from "../progress";
- import { getToken, getRelaComNo } from "/@/utils/auth";
- import { store } from "/@/store";
- import { trigger } from "/@/plugins/errorHooks/trigger";
- import {
- PureHttpError,
- RequestMethods,
- PureHttpResponse,
- PureHttpRequestConfig
- } from "./types.d";
- // 相关配置请参考:www.axios-js.com/zh-cn/docs/#axios-request-config-1
- const defaultConfig: AxiosRequestConfig = {
- baseURL: "",
- timeout: 10000,
- headers: {
- Accept: "application/json, text/plain, */*",
- "Content-Type": "application/json",
- "X-Requested-With": "XMLHttpRequest"
- },
- // 数组格式参数序列化
- paramsSerializer: params => qs.stringify(params, { indices: false })
- };
- class PureHttp {
- constructor() {
- this.httpInterceptorsRequest();
- this.httpInterceptorsResponse();
- }
- // 初始化配置对象
- private static initConfig: PureHttpRequestConfig = {};
- // 保存当前Axios实例对象
- private static axiosInstance: AxiosInstance = Axios.create(defaultConfig);
- // 请求拦截
- private httpInterceptorsRequest(): void {
- PureHttp.axiosInstance.interceptors.response.use(response => {
- const { data } = response;
- const { code, message } = data;
- //响应code 检查登出
- if (
- Number(code) >= 101 &&
- Number(code) <= 140 &&
- message !== "账户已禁用"
- ) {
- trigger("userLogout");
- }
- return response;
- });
- PureHttp.axiosInstance.interceptors.request.use(
- (config: PureHttpRequestConfig) => {
- const $config = config;
- // console.log($config);
- // 开启进度条动画
- NProgress.start();
- // 优先判断post/get等方法是否传入回掉,否则执行初始化设置等回掉
- if (typeof config.beforeRequestCallback === "function") {
- config.beforeRequestCallback($config);
- return $config;
- }
- if (PureHttp.initConfig.beforeRequestCallback) {
- PureHttp.initConfig.beforeRequestCallback($config);
- return $config;
- }
- const token = getToken();
- const relaComNo = getRelaComNo();
- const isSuper = store.state.value["pure-user"].isSuperUser;
- if (token && config && config.data) {
- config.data["token"] = token;
- config.data["relaComNo"] = config.data["relaComNo"]
- ? config.data["relaComNo"]
- : relaComNo;
- if (config.data["noRela"] || isSuper) {
- config.data["relaComNo"] = "";
- delete config.data["noRela"];
- }
- if (config.data["emptyRela"] || isSuper) {
- delete config.data["relaComNo"];
- delete config.data["emptyRela"];
- }
- return $config;
- } else {
- return $config;
- }
- },
- error => {
- return Promise.reject(error);
- }
- );
- }
- // 响应拦截
- private httpInterceptorsResponse(): void {
- const instance = PureHttp.axiosInstance;
- instance.interceptors.response.use(
- (response: PureHttpResponse) => {
- const $config = response.config;
- // 关闭进度条动画
- NProgress.done();
- // 优先判断post/get等方法是否传入回掉,否则执行初始化设置等回掉
- if (typeof $config.beforeResponseCallback === "function") {
- $config.beforeResponseCallback(response);
- return response.data;
- }
- if (PureHttp.initConfig.beforeResponseCallback) {
- PureHttp.initConfig.beforeResponseCallback(response);
- return response.data;
- }
- return response.data;
- },
- (error: PureHttpError) => {
- const $error = error;
- $error.isCancelRequest = Axios.isCancel($error);
- // 关闭进度条动画
- NProgress.done();
- // 所有的响应异常 区分来源为取消请求/非取消请求
- return Promise.reject($error);
- }
- );
- }
- // 通用请求工具函数
- public request<T>(
- method: RequestMethods,
- url: string,
- param?: AxiosRequestConfig,
- axiosConfig?: PureHttpRequestConfig
- ): Promise<T> {
- const config = {
- method,
- url,
- ...param,
- ...axiosConfig
- } as PureHttpRequestConfig;
- // 单独处理自定义请求/响应回掉
- return new Promise((resolve, reject) => {
- PureHttp.axiosInstance
- .request(config)
- .then((response: undefined) => {
- resolve(response);
- })
- .catch(error => {
- reject(error);
- });
- });
- }
- // 单独抽离的post工具函数
- public post<T, P>(
- url: string,
- params?: T,
- config?: PureHttpRequestConfig
- ): Promise<P> {
- return this.request<P>("post", url, params, config);
- }
- // 单独抽离的get工具函数
- public get<T, P>(
- url: string,
- params?: T,
- config?: PureHttpRequestConfig
- ): Promise<P> {
- return this.request<P>("get", url, params, config);
- }
- }
- export const http = new PureHttp();
|