| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import axios from 'axios'
- import {Message, MessageBox} from 'element-ui'
- import db from '@/utils/localstorage'
- import {Base64} from 'js-base64';
- // 请求添加条件,如token
- axios.interceptors.request.use(config => {
- const isToken = config.headers['X-isToken'] === false ? config.headers['X-isToken'] : true;
- const token = db.get('TOKEN', '');
- if (token && isToken) {
- config.headers.token = 'Bearer ' + token;
- }
- // 转换多语言
- const langTips = {"en": "en_US", "zh": "zh_CN", "de": "de_DE"}
- // 多国语言
- config.headers.lang = langTips[db.get('LANGUAGE', '') || "zh"]
- config.headers.tenant = db.get('TENANT', '')
- const clientId = process.env.VUE_APP_CLIENT_ID;
- const clientSecret = process.env.VUE_APP_CLIENT_SECRET;
- config.headers['Authorization'] = `Basic ${Base64.encode(`${clientId}:${clientSecret}`)}`;
- return config
- },
- error => {
- return Promise.reject(error)
- }
- )
- // 接口返回处理
- axios.interceptors.response.use(
- response => {
- return response
- },
- error => {
- return Promise.reject(error)
- }
- )
- function handleError(error, reject, opts) {
- let isAlert = opts.custom ? opts.custom['isAlert'] : true;
- isAlert = isAlert === undefined ? true : isAlert;
- if (isAlert) {
- if (error.code === 'ECONNABORTED') {
- Message({
- message: '请求超时'
- })
- } else if (error.response && error.response.data) {
- // 回话失败,返回登录页面
- if(error.response.data.code == 40001 || error.response.data.code == 40000){
- window.location.hash = '/login'
- }
- if(error.response.data.msg){
- Message({
- message: error.response.data.msg
- })
- } else if(error.response.data.message){
- Message({
- message: error.response.data.message
- })
- }
- } else if (error.message) {
- Message({
- message: error.message
- })
- }
- }
- reject(error)
- }
- function handleSuccess(res, resolve, opts) {
- let isAlert = opts.custom ? opts.custom['isAlert'] : true;
- isAlert = isAlert === undefined ? true : isAlert;
- if (res.data.isError) {
- // 未登录
- if (res.data.code === 40000 || res.data.code === 40001
- || res.data.code === 40002 || res.data.code === 40003
- || res.data.code === 40005 || res.data.code === 40006
- || res.data.code === 40008
- ) {
- debugger
- MessageBox.alert(res.data.msg, '提醒', {
- confirmButtonText: '确定',
- callback: () => {
- window.location.hash = '/login'
- }
- })
- } else {
- if (isAlert) {
- Message.error(res.data.msg);
- }
- }
- }
- resolve(res)
- }
- // http请求
- const httpServer = (opts) => {
- // 公共参数
- const publicParams = {
- ts: Date.now()
- }
- // http默认配置
- const method = opts.method.toUpperCase()
- // baseURL
- // 开发环境: /api // 开发环境在 vue.config.js 中有 devServer.proxy 代理
- // 生产环境: http://IP:PORT/api // 生产环境中 代理失效, 故需要配置绝对路径
- const httpDefaultOpts = {
- method,
- baseURL: process.env.VUE_APP_PROD_REQUEST_DOMAIN_PREFIX + process.env.VUE_APP_BASE_API,
- url: opts.url,
- responseType: opts.responseType || '',
- timeout: 20000
- }
- if (opts['meta']) {
- httpDefaultOpts.headers = opts['meta']
- }
- const dataRequest = ['PUT', 'POST', 'PATCH']
- if (dataRequest.includes(method)) {
- httpDefaultOpts.data = opts.data || {}
- } else {
- httpDefaultOpts.params = {
- ...publicParams,
- ...(opts.data || {})
- }
- }
- // formData转换
- if (opts.formData) {
- httpDefaultOpts.transformRequest = [data => {
- const formData = new FormData()
- if (data) {
- Object.entries(data).forEach(item => {
- formData.append(item[0], item[1])
- })
- }
- return formData
- }]
- }
- const promise = new Promise((resolve, reject) => {
- axios(httpDefaultOpts).then(response => {
- handleSuccess(response, resolve, opts)
- }).catch(error => {
- handleError(error, reject, opts)
- })
- })
- return promise
- }
- export default httpServer
|