/* eslint-disable*/
import axios from 'axios'
import {getLoginUrl} from '../config';
import vue from '../main';
import {urlParamsParse} from '../utils/tool';
import {getGlobalResCode} from '@/utils/global.js';
let appcode;
let admin_name;
let admin_id;
let key;
let institution_id;
let company_id;
let terminal;
// 获取关键信息
function getHingeData() {
if (appcode) return;
appcode = sessionStorage.getItem("appcode");
admin_name = sessionStorage.getItem("admin_name");
admin_id = sessionStorage.getItem("admin_id");
key = sessionStorage.getItem("key");
institution_id = sessionStorage.getItem("institution_id");
company_id = sessionStorage.getItem("company_id");
terminal = sessionStorage.getItem('terminal');
}
// 是否已经执行退出操作
let isLogOutAction = false;
// `transformRequest` 允许在向服务器发送前,修改请求数据
// 对 data 进行任意转换处理
const transformRequest = [function (data, headers) {
if (!data) return data;
let dataStr = Object.keys(data).reduce((total, key, curIndex, arr) => {
const value = data[key];
return total += `${key}=${value}&`
}, '');
if (dataStr.slice(-1) === '&') {
return dataStr.slice(0, -1);
} else {
return dataStr;
}
}];
// 根据terminal添加到url上
const setUrl = function(url) {
if (!terminal || !url) return '';
if (url.indexOf('http:') !== -1 || url.indexOf('https:') !== -1) {
return url;
}
url = '/index.php?' + url;
if (urlParamsParse('v', url)) {
return url;
} else {
if (url.slice(-1) === '&') {
url += `v=${terminal}`
} else {
url += `&v=${terminal}`
}
return url;
}
};
// 转换无效数据
// 把null和void 0的值转为''
const transferInvalidData = (data) => {
if (!data) return false;
let newObj = {};
Object.keys(data).forEach(key => {
if (data[key] === null || data[key] === void 0) {
newObj[key] = '';
} else {
newObj[key] = data[key];
}
});
return newObj;
};
const instance = axios.create({
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
transformRequest,
});
instance.interceptors.request.use(function(request) {
request.url = setUrl(request.url);
return request;
}, function (error) {
return Promise.reject(error);
});
instance.interceptors.response.use(function (response) {
let res = response.data;
const isToLogin = getGlobalResCode('toLogin', res.code);
if (isToLogin) {
if (isLogOutAction) return;
isLogOutAction = true;
vue.$message.error(res.message || 'ajax错误');
if (process.env.NODE_ENV === 'production') {
vue.$store.dispatch('LogOut');
setTimeout(() => {
isLogOutAction = false;
window.location.href = getLoginUrl();
}, 1200)
} else {
console.warn('开发环境,不跳转');
return Promise.reject();
}
return Promise.reject(res);
} else {
return res;
}
}, function (error) {
return Promise.reject(error);
});
export const requestData = function(url, data={}, method='post', responseType='json', version='v2'){
getHingeData();
if (!appcode || !admin_id || !key) {
if (isLogOutAction) return;
isLogOutAction = true;
alert('请重新登录!');
if (process.env.NODE_ENV === 'production') {
vue.$store.dispatch('LogOut');
setTimeout(() => {
isLogOutAction = false;
window.location.href = getLoginUrl();
}, 1200)
}
return;
}
let reqData = {
appcode:appcode,
admin_name:admin_name,
admin_id:admin_id,
institution_id:institution_id,
company_id:company_id,
reqorigin: 'cloudmanager',
...data,
key:key,
};
let config = {
url,
method,
responseType,
};
// api版本
if (version) {
if (url.indexOf("serviceversion") === -1) {
config['params'] = {
serviceversion: version,
...config['params'],
};
}
}
// api版本
if (version === 'v1') {
if (url.indexOf("serviceversion") === -1) {
config['params'] = {
serviceversion: 'v1',
...config['params'],
};
}
}
if (method === 'post') {
config['data'] = transferInvalidData({
...config['data'],
...reqData,
});
} else {
config['params'] = transferInvalidData({
...config['params'],
...reqData,
});
}
return instance(config);
}
dev.js
// 根据不同的环境更改不同的baseUrl
let baseUrl = ''
let agenturl = ''
let testurl = ''
if (process.env.NODE_ENV === 'development') {
baseUrl = '/api'
agenturl = '/agent'
testurl = '/newApi'
} else if (process.env.NODE_ENV === 'production') {
if (window.location.protocol === 'https:') {
baseUrl = ''
agenturl = ''
testurl = ''
} else {
baseUrl = ''
agenturl = ''
testurl = ''
}
}
export { baseUrl, agenturl, testurl }
http.js 封装
import axios from 'axios'
import qs from 'qs'
import router from '@/router'
import { Message, MessageBox } from 'element-ui'
import { baseUrl, agenturl, testurl } from '@/api/dev'
axios.defaults.timeout = 50000
// axios.defaults.baseURL = baseUrl
// http request 拦截器
axios.interceptors.request.use(
config => {
let key = ''
let admin_id = ''
if (sessionStorage.getItem('userInfo')) {
key = JSON.parse(sessionStorage.getItem('userInfo')).key
admin_id = JSON.parse(sessionStorage.getItem('userInfo')).admin_id
}
if (key && admin_id) {
if (config.method === 'post') {
config.data = {
...config.data,
admin_id: admin_id,
key: key,
appcode: process.env.VUE_APP_APPCODE
// appcode: '5c3d73a0f1f18c30cqb5zkov'
}
} else if (config.method === 'get') {
config.params = {
...config.params,
key: key,
admin_id: admin_id,
appcode: process.env.VUE_APP_APPCODE
// appcode: '5c3d73a0f1f18c30cqb5zkov'
}
}
}
if (config.method === 'post' || config.method === 'put') {
config.data = qs.stringify(config.data)
}
config.headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
return config
},
error => {
return Promise.reject(error)
}
)
// http response 拦截器
axios.interceptors.response.use(
response => {
if (response.data === '' || response.data.length === 0 || response.data === 'undefined' || response.data === undefined) {
Message.error('数据可能走丢了!')
}
if (response.data.code === -100010005) {
if (document.getElementsByClassName('el-message-box__wrapper').length > 0) {
return false
}
MessageBox.alert(`账号异常<p>账号已在其它终端登录,请知晓</p>`, '提示', {
confirmButtonText: '确定',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: action => {
localStorage.clear()
sessionStorage.clear()
router.push({ path: '/login' })
return false
}
})
}
return response
},
error => {
// 1.判断请求超时
if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
Message({
type: 'error',
message: '请求超时!'
})
// return service.request(originalRequest);//例如再重复请求一次
}
// 2.需要重定向到错误页面
const errorInfo = error.response
if (errorInfo) {
// error =errorInfo.data//页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
if (errorInfo.status === 500) {
Message({
type: 'error',
message: '服务器出现了问题,请联系管理员!(' + errorInfo.status + ')'
})
}
if (errorInfo.status === 404) {
Message({
type: 'error',
message: '接口出现了未知问题,请联系管理员!(' + errorInfo.status + ')'
})
}
// if (errorInfo.status === 404) {
// router.push({
// path: "/error/404"
// });
// }
}
return Promise.reject(error)
}
)
/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/
// export function get2(url, params = {}) {
// return new Promise((resolve, reject) => {
// axios.get(agenturl + url, params).then(
// response => {
// resolve(response.data)
// },
// err => {
// reject(err)
// }
// )
// .then(response => {
// resolve(response.data)
// })
// .catch(err => {
// reject(err)
// })
// })
// }
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
// export function post(url, data = {}) {
// return new Promise((resolve, reject) => {
// axios.post(baseUrl + url, data).then(
// response => {
// resolve(response.data)
// },
// err => {
// reject(err)
// }
// )
// })
// }
export function get1(url, data = {}) {
return new Promise((resolve, reject) => {
axios.get(agenturl + url, data).then(
response => {
resolve(response.data)
},
err => {
reject(err)
}
)
})
}
export function post(url, data = {}) {
return axios.post(baseUrl + url, data).then(
response => response.data,
err => err
).catch(() => '')
}
export function post2(url, data = {}) {
return axios.post(agenturl + url, data).then(
response => response.data,
err => err
).catch(() => '')
}
export function post3(url, data = {}) {
return new Promise((resolve, reject) => {
axios(agenturl + url, data, { responseType: 'blob' }, { method: 'post' }).then(
response => {
resolve(response.data)
},
err => {
reject(err)
}
)
})
}
/**
* 封装其他站点下post请求
* @param url
* @param data
* @returns {Promise}
*/
// export function postAgent(url, data = {}) {
// return new Promise((resolve, reject) => {
// axios.post(agenturl + url, data).then(
// response => {
// resolve(response.data)
// },
// err => {
// reject(err)
// }
// )
// })
// }
// export function testReq(url, data = {}) {
// return new Promise((resolve, reject) => {
// axios.post(testurl + url, data).then(
// response => {
// resolve(response.data)
// },
// err => {
// reject(err)
// }
// )
// })
// }
// export function fetch(url, params) { // 封装axios的post请求
// return new Promise((resolve, reject) => { // promise 用法
// axios.post(url, params).then(response => {
// resolve(response.data) // promise相关
// }).catch(error => {
// reject(error) // promise相关
// })
// })
// }
export function postAgent(url, data = {}) {
return axios.post(agenturl + url, data).then(
response => response.data,
err => err
).catch(() => '')
}
export function testReq(url, data = {}) {
return axios.post(testurl + url, data).then(
response => response.data,
err => err
).catch(() => '')
}
export function fetch(url, params) { // 封装axios的post请求
return axios.post(url, params).then(
response => response.data, // promise相关
err => err
).catch(() => 'error') // promise相关
}
export default { // 暴露htto_mock方法,即模拟数据页面中用到的方法
http_mock(url, params) {
return fetch(url, params)
}
}
调用
// 标签系统
import { post2 } from '@/api/https'
const labelSystem = {
UsertagSortApi(data) {
return post2('tag/v4000/company/Usertag/settagsort/?', data)
},
}
export default labelSystem
Vue3
import axios from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import qs from 'qs'
import { Session } from '/@/utils/storage';
// 配置新建一个 axios 实例
const service = axios.create({
baseURL: window.location.protocol + import.meta.env.VITE_API_URL as any,
timeout: 50000,
// headers: { 'Content-Type': 'application/json' },
})
// 添加请求拦截器
service.interceptors.request.use(
(config) => {
const userInfo = Session.get('userInfo')
// console.log(' userInfo :', userInfo)
let infos = {}
if (userInfo) {
infos = {
institution_id: userInfo.institution_id || '',
company_id: userInfo.company_id || '',
admin_id: userInfo.admin_id || '',
key: userInfo.key || '',
admin_truename: userInfo.truename || '',
admin_name: userInfo.username || '',
admin_wechat_subject: userInfo.wechat_subject || ''
}
}
// console.log(' infos :', infos)
config.data = { ...config.data, appcode: import.meta.env.VITE_App_Code }
if (config.method === 'post' || config.method === 'put') {
config.data = { ...config.data, ...infos, }
config.data = qs.stringify(config.data)
}
if (config.method === 'get') {
config.data = { ...config.data, ...infos, }
config.url = config.url + '&' + qs.stringify(config.data)
}
// console.log(' config 1 => :', config)
config.headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 添加响应拦截器
service.interceptors.response.use(
(response) => {
// 对响应数据做点什么
if (response.status === 200) {
return response.data
}
},
(error) => {
// 对响应错误做点什么
if (error.message.indexOf('timeout') != -1) {
ElMessage.error('网络超时');
} else if (error.message == 'Network Error') {
ElMessage.error('网络连接错误');
} else {
if (error.response.data) ElMessage.error(error.response.statusText);
else ElMessage.error('接口路径找不到');
}
return Promise.reject(error);
}
);
// 导出 axios 实例
export default service;
//封装
import request from '/@/utils/request';
/**
* 登录api接口集合
* @method signIn 用户登录
* @method signOut 用户退出登录
*/
export default {
keywordGetlistApi: (params: object) => { //关键字列表
return request({
url: '地址',
method: 'post',
data: params
})
},
}