123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- import axios from 'axios'
- import { getToken, deleteToken } from '@/utils/auth'
- import { blobToJson } from '@/utils'
- import { checkToken } from '@/api/system'
- import {
- instanceWorkflow
- } from '@/api/workflow'
- import route from '@/router'
- import qs from 'qs'
- import Vue from 'vue'
- import store from '@/store'
- // create an axios instance
- const service = axios.create({
- // baseURL: 'http://192.168.3.162:7654',
- baseURL: process.env.VUE_APP_BASE_API,
- // baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
- // withCredentials: true, // send cookies when cross-domain requests
- timeout: 120000 // request timeout
- })
- // request interceptor
- // 发送请求拦截器
- service.interceptors.request.use(
- config => {
- // do something before request is sent
- // if (getToken()) {
- // config.headers.token = getToken()
- // }
- config.headers.token = getToken()
- return config
- },
- error => {
- // do something with request error
- // console.error(error) // for debug
- return Promise.reject(error)
- }
- )
- // response interceptor
- // 请求返回之后的拦截器
- service.interceptors.response.use(
- async response => {
- const res = response.data
- if (response.request.responseType === 'blob') {
- // 返回的文件流当报错时转化成json
- if (response.headers['content-type'] === 'application/json') {
- try {
- const result = await blobToJson(res)
- return Promise.reject(result.msg)
- } catch (error) {
- return Promise.reject(error)
- }
- }
- const name = response.headers['content-disposition']
- // console.log(name)
- return {
- data: res,
- name: name ? decodeURI(name.replace('attachment;filename=', '')) : '未命名'
- }
- }
- // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
- if ([50008, 50012, 50014, 402000, 401].includes(res.code)) {
- // Vue.prototype.$message.error('登陆过期,请重新登陆')
- const str = '登陆过期,请重新登陆'
- try {
- checkToken()
- } catch (error) {
- Vue.prototype.$message.error(error)
- }
- return Promise.reject(str)
- }
- if (res.code === 302) {
- // const str = '登陆过期,返回登录'
- deleteToken()
- const url = res.data?.redirectUrl === 'local' ? `/login-local?redirect=${route.history.current.fullPath}` : (res.data?.redirectUrl || '/login-local')
- // setTimeout(() => {
- // Vue.prototype.$message.error(str)
- // })
- debugger
- window.location.href = url
- return
- }
- // 登录验证码过期
- if (res.code === 60902) {
- return Promise.reject(res)
- }
- if (res.code === 72000) {
- // 审核拦截
- try {
- await Vue.prototype.$confirm('当前操作需要执行审核流程,是否继续', '提示')
- const obj = store.getters.workOrder
- await instanceWorkflow({
- ...res.data,
- createUserPageRoute: obj[2] ?? '/work-order/my-order',
- approvePageRoute: obj[1] ?? '/work-order/approval'
- })
- const str = '已发起工作流,请等待审核'
- const fn = Vue.prototype.$message.success
- Vue.prototype.$message.success = () => {
- fn(str)
- }
- setTimeout(() => {
- Vue.prototype.$message.success = fn
- })
- return Promise.resolve(str)
- } catch (error) {
- if (error === 'cancel') {
- const fn = Vue.prototype.$message.error
- Vue.prototype.$message.error = () => {}
- setTimeout(() => {
- Vue.prototype.$message.error = fn
- })
- const str = '取消操作'
- return Promise.reject(str)
- }
- return Promise.reject(error)
- }
- }
- if (res.code !== 20000 && res.code !== 200) {
- if (res.data && Object.keys(res.data).length) {
- return Promise.reject(res)
- }
- return Promise.reject(res.msg?.error || res.msg || `Error ${res.code}`)
- }
- return res
- },
- error => {
- // console.error(error)
- // error = error.message || error
- return Promise.reject(error)
- }
- )
- // 请求方法
- const http = {
- post (url, params) {
- return service.post(url, params, {
- transformRequest: [(params) => {
- return JSON.stringify(params)
- }],
- headers: {
- 'Content-Type': 'application/json'
- }
- })
- },
- get (url, params) {
- return service.get(url, {
- params: params,
- paramsSerializer: (params) => {
- return qs.stringify(params)
- }
- })
- },
- delete (url, params) {
- return service.delete(url)
- },
- put (url, params) {
- return service.put(url, params)
- },
- formData (url, params) {
- return service.post(url, params, {
- timeout: 600000,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- })
- },
- upload (url, params, options = {}) {
- return service.post(url, params, {
- timeout: 600000,
- headers: {
- 'Content-Type': 'multipart/form-data'
- },
- ...options
- })
- },
- download (url, params) {
- return service.post(url, params, {
- timeout: 10000,
- headers: {
- 'Content-Type': 'application/json'
- },
- responseType: 'blob'
- })
- }
- }
- export default http
|