123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- import axios from "axios";
- import { MessageBox, Message, Loading } from 'element-ui'
- import { getToken,removeToken } from '@/utils/auth'
- import {tansParams,judgmentNetworkReturnAddress} from "@/utils/public";
- //判定http或者https
- let urlText = window.location.href.split('://')[0]+'://';
- //弹窗状态开关
- let messageData = null;
- // 弹层数据
- let loadingInstance = {};
- let options = {
- spinner:"",
- background: 'rgba(255, 255, 255, 0.1)'
- };
- let loadingCount = 0;
- // 允许跨域
- axios.defaults.headers.post["Access-Control-Allow-Origin-Type"] = "*";
- axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
- // 创建 axios 请求实例
- const serviceAxios = axios.create({
- baseURL: urlText+judgmentNetworkReturnAddress(), // 基础请求地址
- timeout: 10000, // 请求超时设置
- withCredentials: false, // 跨域请求是否需要携带 cookie
- });
- // 创建请求拦截
- serviceAxios.interceptors.request.use(config => {
- // 弹层相关
- loadingInstance = Loading.service(options)
- const isToken = (config.headers || {}).isToken === false
- if (getToken() && !isToken) {
- config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- }
- // get请求映射params参数
- if (config.method === 'get' && config.params) {
- let url = config.url + '?' + tansParams(config.params);
- url = url.slice(0, -1);
- config.params = {};
- config.url = url;
- }
- // 弹层相关
- loadingCount ++;
- return config;
- },
- (error) => {
- // 弹层相关
- loadingCount --;
- if(loadingCount===0){
- loadingInstance.close();
- }
- Promise.reject(error);
- }
- );
- // 创建响应拦截
- serviceAxios.interceptors.response.use(res => {
- // 弹层相关
- loadingCount --;
- if(loadingCount===0) {
- loadingInstance.close();
- }
- // 未设置状态码则默认成功状态
- const code = res.data.code || 200;
- // 获取错误信息
- if(code == 5002){
- if(getToken()){
- removeToken();
- MessageBox.confirm('登录状态已过期,请重新登录', '系统提示', {
- confirmButtonText: '确定',
- showCancelButton:false,
- closeOnClickModal:false,
- cancelButtonText: '取消',
- type: 'warning'
- }
- ).then(() => {
- if(localStorage.getItem('entranceJumpType') == 'PC'){
- window.location.href = process.env.VUE_APP_OUT_URL;
- }else{
- router.replace({
- path: '/'
- })
- }
- }).catch(() => {});
- }
- }else if (code == 5005) {
- if(getToken()){
- removeToken();
- MessageBox.confirm('没有相关权限,请重新登录', '系统提示', {
- confirmButtonText: '确定',
- showCancelButton:false,
- closeOnClickModal:false,
- cancelButtonText: '取消',
- type: 'warning'
- }
- ).then(() => {
- if(localStorage.getItem('entranceJumpType') == 'PC'){
- window.location.href = process.env.VUE_APP_OUT_URL;
- }else{
- router.replace({
- path: '/'
- })
- }
- }).catch(() => {});
- }
- }else if(code == 5007){
- return res.data
- }else if (code != 200) {
- if(!messageData){
- messageData = Message({
- message: res.data.message,
- type: 'error',
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return res.data
- // return Promise.reject(new Error('系统未知错误,请联系管理员'))
- } else {
- return res.data
- }
- },
- (error) => {
- // 弹层相关
- loadingCount --;
- if(loadingCount===0){
- loadingInstance.close();
- }
- let { message } = error;
- if (message == "Network Error") {
- message = "服务连接异常";
- }
- else if (message.includes("timeout")) {
- message = "系统接口请求超时";
- }
- else if (message.includes("Request failed with status code")) {
- if(message.substr(message.length - 3) == 401){
- if(getToken()){
- removeToken();
- MessageBox.confirm('登录状态已过期,请重新登录', '系统提示', {
- confirmButtonText: '确定',
- showCancelButton:false,
- closeOnClickModal:false,
- cancelButtonText: '取消',
- type: 'warning'
- }
- ).then(() => {
- if(localStorage.getItem('entranceJumpType') == 'PC'){
- window.location.href = process.env.VUE_APP_OUT_URL;
- }else{
- router.replace({
- path: '/'
- })
- }
- }).catch(() => {});
- }
- }else{
- messageData = Message({
- message: message,
- type: 'error',
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return Promise.reject(error)
- }
- if(!messageData){
- messageData = Message({
- message: message,
- type: 'error',
- duration: 5 * 1000,
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return Promise.reject(error)
- }
- );
- // 通用下载方法
- export function download(url, params, filename) {
- return serviceAxios.post(url, params, {
- transformRequest: [(params) => {
- return this.tansParams(params)
- }],
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- "Access-Control-Allow-Origin": "*",
- token:getToken(),
- },
- responseType: 'blob'
- }).then((data) => {
- const content = data
- const blob = new Blob([content])
- if ('download' in document.createElement('a')) {
- const elink = document.createElement('a');
- elink.download = filename
- elink.style.display = 'none'
- elink.href = URL.createObjectURL(blob)
- document.body.appendChild(elink)
- elink.click()
- URL.revokeObjectURL(elink.href)
- document.body.removeChild(elink)
- } else {
- navigator.msSaveBlob(blob, filename)
- }
- this.msgSuccess('正在下载,请稍候')
- }).catch((r) => {
- //console.error(r)
- })
- }
- // 通用文件下载方法POST请求
- export function downloadPost(fileUrl,fleName) {
- const newUrl = urlText + judgmentNetworkReturnAddress() + fileUrl;
- const x = new XMLHttpRequest();
- x.open("post", newUrl, true);
- x.setRequestHeader("Authorization",getToken());
- x.responseType = "blob";
- x.onload = () => {
- const url = URL.createObjectURL(x.response);
- const a = document.createElement("a");
- a.href = url;
- a.download = fleName;
- a.target = "_blank";
- a.click();
- };
- x.send();
- this.msgSuccess('正在下载,请稍候')
- }
- // 通用文件下载方法GET请求
- export function downloadGet(fileUrl,fleName) {
- const newUrl = urlText + judgmentNetworkReturnAddress() + fileUrl;
- const x = new XMLHttpRequest();
- x.open('get', newUrl, true)
- x.setRequestHeader("Authorization",getToken());
- x.responseType = "blob";
- x.onload = () => {
- const url = URL.createObjectURL(x.response);
- const a = document.createElement("a");
- a.href = url;
- a.download = fleName;
- a.target = "_blank";
- a.click();
- };
- x.send();
- this.msgSuccess('正在下载,请稍候')
- }
- // 通用URL地址文件下载方法
- export function downloadUrl(fileUrl,fleName) {
- const x = new XMLHttpRequest();
- x.open('get', fileUrl, true)
- x.setRequestHeader("Authorization",getToken());
- x.responseType = "blob";
- x.onload = () => {
- const url = URL.createObjectURL(x.response);
- const a = document.createElement("a");
- a.href = url;
- a.download = fleName;
- a.target = "_blank";
- a.click();
- };
- x.send();
- this.msgSuccess('正在下载,请稍候')
- }
- export default serviceAxios;
|