http.js 6.74 KB
import axios from "axios"
import router from "../../router"
import qs from "qs"
// import { Message as iviewMessage, Notice as iviewNotice } from 'view-design'
import { MessageBox, Toast } from "mint-ui"
//接口报错弹出
let CommonAlert = function (msg) {
  if (msg && msg.length > 0) {
    return Toast({
      message: msg,
      duration: 1500
    })
  }
}

// axios.defaults.timeout = 5000;
if (process.env.NODE_ENV == "development") {
  axios.defaults.baseURL = "/api"
} else {
  axios.defaults.baseURL = process.env.VUE_APP_URL
}
window.baseURL = axios.defaults.baseURL
//http request 拦截器
axios.create({
  withCredentials: true
})
axios.interceptors.request.use(
  (config) => {
    config.data = config.data
    config.headers["user-cookie"] = localStorage.getItem("vd_token")
    return config
  },
  (error) => {
    return Promise.reject(err)
  }
)

/**
 * 跳转登录页
 * 携带当前页面路由,以期在登录页面完成登录后返回当前页面
 */
const toLogin = () => {
  router.replace({
    path: "/login"
  })
}

//响应拦截器即异常处理
axios.interceptors.response.use(
  (response) => {
    if (response.data.code === 0 || response.data.code === -1) {
      CommonAlert(response.data.message || response.data.msg)
    } else if (response.data.code === -100) {
      localStorage.removeItem("vd_token")
      // window.location.hash = "/login";
    }
    return response
  },
  (err) => {
    if (err && err.response) {
      switch (err.response.status) {
        case 400:
          CommonAlert("错误请求")
          console.log("错误请求")
          break
        case 401:
          CommonAlert("未授权,请重新登录")
          // toLogin();
          console.log("未授权,请重新登录")
          break
        case 403:
          CommonAlert("拒绝访问")
          console.log("拒绝访问")
          break
        case 404:
          CommonAlert("请求错误,未找到该资源")
          console.log("请求错误,未找到该资源")
          break
        case 405:
          CommonAlert("请求方法未允许")
          console.log("请求方法未允许")
          break
        case 408:
          CommonAlert("请求超时")
          console.log("请求超时")
          break
        case 500:
          CommonAlert("服务器端出错")
          console.log("服务器端出错")
          break
        case 501:
          CommonAlert("网络未实现")
          console.log("网络未实现")
          break
        case 502:
          CommonAlert("网络错误")
          console.log("网络错误")
          break
        case 503:
          CommonAlert("服务不可用")
          console.log("服务不可用")
          break
        case 504:
          CommonAlert("网络超时")
          console.log("网络超时")
          break
        case 505:
          CommonAlert("http版本不支持该请求")
          console.log("http版本不支持该请求")
          break
        default:
          CommonAlert(`连接错误${err.response.status}`)
          console.log(`连接错误${err.response.status}`)
      }
    } else {
      CommonAlert("连接到服务器失败")
      console.log("连接到服务器失败")
    }
    return Promise.resolve(err.response)
  }
)

/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function get(url, params = {}) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, { params })
      .then(
        (response) => {
          resolve(response.data)
        },
        (err) => {
          reject(err)
        }
      )
      .catch(
        (response) => {
          resolve(response.data)
        },
        (err) => {
          reject(err)
        }
      )
  })
}

/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function post(url, data = {}, params = {}) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, data, {
        params
      })
      .then(
        (response) => {
          resolve(response.data)
        },
        (err) => {
          reject(err)
        }
      )
      .catch(
        (response) => {
          resolve(response.data)
        },
        (err) => {
          reject(err)
        }
      )
  })
}
export function postForm(url, data = {}) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, qs.stringify(data), {
        headers: {
          "Content-Type": "application/x-www-form-urlencoded"
        }
      })
      .then(
        (response) => {
          resolve(response.data)
        },
        (err) => {
          reject(err)
        }
      )
  })
}

//用来导出excel
export function expoertExcel(url, data = {}) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, qs.stringify(data), {
        responseType: "blob",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded"
        }
      })
      .then(
        (response) => {
          resolve(response.data)
        },
        (err) => {
          reject(err)
        }
      )
  })
}

//下载excel
export function downloadExcel(url, data = {}, title = "筛查信息导出表") {
  return axios({
    method: "post",
    url: url,
    data: data,
    responseType: "blob"
  })
    .then((res) => {
      if ("msSaveOrOpenBlob" in navigator) {
        //兼容ie
        let blob = new Blob([res.data], {
          type: "application/vnd.ms-excel"
        })
        window.navigator.msSaveOrOpenBlob(blob, `${title}.xlsx`)
        return
      } else {
        const link = document.createElement("a")
        let blob = new Blob([res.data], {
          type: "application/vnd.ms-excel"
        })
        link.style.display = "none"
        link.href = URL.createObjectURL(blob)
        link.setAttribute("download", `${title}.xlsx`)
        document.body.appendChild(link)
        link.click()
        document.body.removeChild(link)
      }
    })
    .catch((error) => {
      // this.$Notice.error({
      //   title: '错误',
      //   desc: '系统数据错误',
      // })
      CommonAlert("系统数据错误")
      console.log(error)
    })
}
/**
 * 封装delete请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function Delete(url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.delete(url, data).then(
      (response) => {
        resolve(response.data)
      },
      (err) => {
        reject(err)
      }
    )
  })
}

/**
 * 封装put请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function put(url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.put(url, data).then(
      (response) => {
        resolve(response.data)
      },
      (err) => {
        reject(err)
      }
    )
  })
}

export function getUrl() {
  return axios.defaults.baseURL
}