123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- import axios from 'axios'
- import store from '../store'
- import router from '../router'
- import { getToken, removeToken } from '@/utils/auth'
- import { anonUrls } from '../config'
- import {getRefreshToken, setRefreshToken, setToken} from "./auth";
- import {getAuthToken} from "../api/login";
- import Vue from 'vue'
- const Base64 = require('js-base64').Base64
- // 创建axios实例
- const service = axios.create({
- baseURL: '/api/', // api的base_url
- timeout: 15000, // 请求超时时间
- headers: {
- "Pragma": "no-cache",
- "Cache-Control": "must-revalidate",
- "Cache-Control": "no-cache" ,
- "Cache-Control": "no-store",
- }
- })
- const notSetAuthHeaderUrls = anonUrls;
- const base64Urls= [
- "./uc",
- "./op",
- "/umsUsers",
- "./personnel",
- "./meeting",
- "./cms",
- "./project"
- ]
- const needDownloadUrl=[
- // "/uum/sysAllAuditLogs/backups"
- ]
- // request拦截器
- let getTokenByRefreshToken = false;
- let retryRequests = [];
- service.interceptors.request.use(config => {
- let token = Vue.prototype.$Cookies.get('token');
- if (!config.headers.ANON && needSetAuthHead(config.url)) {
- // config.headers['Auth'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- // config.headers['Authorization'] = 'Bearer ' + getToken()
- config.headers['Authorization'] = 'Bearer ' + getToken()
- }else if(token !=undefined ){
- config.headers['Authorization'] = 'Bearer ' + getToken()
- }
- /* if(needBase64(config.url)){
- if(config.method=="post"||config.method=="put"){
- config.headers.post["Content-Type"] = "application/json;charset=UTF-8";
- config.headers.put["Content-Type"]="application/json;charset=UTF-8";
- config.data=Base64.encode(JSON.stringify(config.data));
- }
- }*/
- return config
- }, error => {
- // Do something with request error
- console.log(error) // for debug
- Promise.reject(error)
- })
- // respone拦截器
- service.interceptors.response.use(
- response => {
- //解密
- /* if(needBase64(response.config.url)){
- if(!needDownload(response.config.url)){
- response.data=JSON.parse(Base64.decode(response.data));
- }
- }else if(response.config.url.indexOf("/login") !=-1){
- response.data=JSON.parse(Base64.decode(response.data));
- }else{
- //
- }*/
- /**
- * code为非20000是抛错 可结合自己业务进行修改
- */
- // if (response['headers']['content-disposition']) {
- // const data = response.data;
- // var fileName = response['headers']['content-disposition'].split(";")[1].split("filename=")[1];
- // var index = fileName.lastIndexOf("\"");
- // if (index == fileName.length - 1) {
- // var start = 0;
- // if (fileName.indexOf("\"") == 0) {
- // start = 1;
- // }
- // fileName = fileName.substring(start, index);
- // }
- // return {
- // data,
- // fileName
- // }
- // }
- if (response['headers']['captcha-uid']) {
- return response;
- }
- const res = response.data;
- if (res['access_token'] || !res.status) {
- return response.data;
- }
- if (res.status != 200) {
- if (res.status == 401) {
- removeToken();
- // router.push({
- // path: '/login',
- // })
- } else {
- msg(res.msg);
- }
- return Promise.reject(res)
- } else {
- return response.data
- }
- },
- error => {
- const config = error.config;
- if (config.url == '/api/./uua/oauth/token') {
- removeToken();
- closeLoading();
- router.push({
- path: '/login',
- })
- return ;baseProjectEntityList
- }
- if (error && error.response) {
- if (error.response.status == 401) {
- Vue.prototype.$Cookies.remove('token');
- Vue.prototype.$Cookies.remove('userInfo');
- if (!getTokenByRefreshToken) {
- let p = new Promise((resolve) => {
- retryRequests.push((token) => {
- config.baseURL = '';
- config.headers['Authorization'] = 'Bearer ' + token;
- resolve(service(config));
- })
- });
- getTokenByRefreshToken = true;
- getAuthToken(getRefreshToken()).then(res => {
- if (res.hasOwnProperty('access_token') && res.access_token) {
- setToken(res['access_token']);
- setRefreshToken(res['refresh_token']);
- retryRequests.forEach(cb => cb(getToken()));
- retryRequests = [];
- }
- }).catch(error => {
- removeToken();
- closeLoading();
- router.push({
- path: '/login',
- })
- }).finally(() => {
- getTokenByRefreshToken = false;
- });
- return p;
- } else {
- return new Promise((resolve) => {
- retryRequests.push((token) => {
- config.baseURL = '';
- config.headers['Authorization'] = 'Bearer ' + token;
- resolve(service(config));
- })
- });
- }
- } else if (error.response.status == 403) {
- msg("无权访问");
- } else if (error.response.status == 500) {
- msg("系统繁忙,请稍后再试");
- }
- }
- console.log('err' + error) // for debug
- // store.dispatch('user/LOGOUT').then(() => {
- // //location.reload()// 为了重新实例化vue-router对象 避免bug
- // })
- // Message({
- // message: error.message,
- // type: 'error',
- // duration: 5 * 1000
- // })
- return Promise.reject(error)
- }
- )
- const needSetAuthHead = (url) => {
- return notSetAuthHeaderUrls.indexOf(url) == -1;
- }
- const msg = (msg) => {
- }
- const needBase64 = (reqUrl) => {
- var needBaseFlag=false;
- base64Urls.forEach(url =>{
- if(reqUrl.indexOf(url)!=-1){
- needBaseFlag=true;
- }
- })
- return needBaseFlag;
- }
- const needDownload = (repUrl) =>{
- var needUploadFlag=false;
- needDownloadUrl.forEach(url =>{
- if(repUrl.indexOf(url)!=-1){
- needUploadFlag=true;
- }
- })
- return needUploadFlag;
- }
- /* eslint-disable no-proto */
- service.__proto__ = axios
- /* eslint-enable */
- export default service
|