@ -1,8 +1,12 @@
@@ -1,8 +1,12 @@
import axios from 'axios'
import { Notification , MessageBox , Message } from 'element-ui'
import { Notification , MessageBox , Message , Loading } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams , blobValidate } from "@/utils/ruoyi" ;
import { saveAs } from 'file-saver'
let downloadLoadingInstance ;
axios . defaults . headers [ 'Content-Type' ] = 'application/json;charset=utf-8'
// 创建axios实例
@ -12,6 +16,7 @@ const service = axios.create({
@@ -12,6 +16,7 @@ const service = axios.create({
// 超时
timeout : 10000
} )
// request拦截器
service . interceptors . request . use ( config => {
// 是否需要设置 token
@ -21,24 +26,7 @@ service.interceptors.request.use(config => {
@@ -21,24 +26,7 @@ service.interceptors.request.use(config => {
}
// get请求映射params参数
if ( config . method === 'get' && config . params ) {
let url = config . url + '?' ;
for ( const propName of Object . keys ( config . params ) ) {
const value = config . params [ propName ] ;
var part = encodeURIComponent ( propName ) + "=" ;
if ( value !== null && typeof ( value ) !== "undefined" ) {
if ( typeof value === 'object' ) {
for ( const key of Object . keys ( value ) ) {
if ( value [ key ] !== null && typeof ( value [ key ] ) !== 'undefined' ) {
let params = propName + '[' + key + ']' ;
let subPart = encodeURIComponent ( params ) + '=' ;
url += subPart + encodeURIComponent ( value [ key ] ) + '&' ;
}
}
} else {
url += part + encodeURIComponent ( value ) + "&" ;
}
}
}
let url = config . url + '?' + tansParams ( config . params ) ;
url = url . slice ( 0 , - 1 ) ;
config . params = { } ;
config . url = url ;
@ -55,17 +43,24 @@ service.interceptors.response.use(res => {
@@ -55,17 +43,24 @@ service.interceptors.response.use(res => {
const code = res . data . code || 200 ;
// 获取错误信息
const msg = errorCode [ code ] || res . data . msg || errorCode [ 'default' ]
// 二进制数据则直接返回
if ( res . request . responseType === 'blob' || res . request . responseType === 'arraybuffer' ) {
return res . data
}
if ( code === 401 ) {
MessageBox . confirm ( '登录状态已过期,您可以继续留在该页面,或者重新登录' , '系统提示' , {
let doms = document . getElementsByClassName ( 'el-message-box' ) [ 0 ]
if ( doms === undefined ) {
MessageBox . confirm ( '登录状态已过期,您可以继续留在该页面,或者重新登录' , '系统提示' , {
confirmButtonText : '重新登录' ,
cancelButtonText : '取消' ,
type : 'warning'
}
) . then ( ( ) => {
store . dispatch ( 'LogOut' ) . then ( ( ) => {
location . href = '/index' ;
} )
} ) . catch ( ( ) => { } ) ;
) . then ( ( ) => {
store . dispatch ( 'LogOut' ) . then ( ( ) => {
location . href = '/index' ;
} )
} ) . catch ( ( ) => { } ) ;
}
return Promise . reject ( '无效的会话,或者会话已过期,请重新登录。' )
} else if ( code === 500 ) {
Message ( {
@ -103,4 +98,27 @@ service.interceptors.response.use(res => {
@@ -103,4 +98,27 @@ service.interceptors.response.use(res => {
}
)
// 通用下载方法
export function download ( url , params , filename ) {
downloadLoadingInstance = Loading . service ( { text : "正在下载数据,请稍候" , spinner : "el-icon-loading" , background : "rgba(0, 0, 0, 0.7)" , } )
return service . post ( url , params , {
transformRequest : [ ( params ) => { return tansParams ( params ) } ] ,
headers : { 'Content-Type' : 'application/x-www-form-urlencoded' } ,
responseType : 'blob'
} ) . then ( async ( data ) => {
const isLogin = await blobValidate ( data ) ;
if ( isLogin ) {
const blob = new Blob ( [ data ] )
saveAs ( blob , filename )
} else {
Message . error ( '无效的会话,或者会话已过期,请重新登录。' ) ;
}
downloadLoadingInstance . close ( ) ;
} ) . catch ( ( r ) => {
console . error ( r )
Message . error ( '下载文件出现错误,请联系管理员!' )
downloadLoadingInstance . close ( ) ;
} )
}
export default service