| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /**** request.js ****/
- // 导入axios
- import axios from 'axios'
- import { useAuthStore } from '@/stores/modules/auth'
- import { useBaseStore } from '@/stores/modules/base'
- import { message } from 'ant-design-vue';
- import NProgress from 'nprogress' // nprogress插件
- import 'nprogress/nprogress.css' // nprogress样式
- import utils from '@/utils/utils'
- import router from '@/router'
- let CancelToken = axios.CancelToken;
- let source = CancelToken.source();
- // 根据浏览器地址动态获取接口地址
- const DynamicAcquisitionURL = ()=> {
- var str = window.location.href;
- var index = str.indexOf('/');
- var num = 0;
- while(index !== -1) {
- num++;
- index = str.indexOf('/',index + 1);
- if (num++ === 3) {
- return str.slice(0, index);
- }
- }
- }
- const geolocation = ()=>{
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(function(position) {
- let lat = position.coords.latitude;
- let lon = position.coords.longitude;
- console.log("Latitude: " + lat + " Longitude: " + lon);
- }, function(error) {
- });
- } else {
- console.log("Geolocation is not supported by this browser.");
- }
-
- if (navigator.connection) {
- // message.error({content:'当前网络速度过慢,请检查网络状态!',key:1})
- useBaseStore().connection = navigator.connection.downlink
- } else {
- console.log("浏览器不支持 navigator.connection API");
- }
- }
- //1. 创建新的axios实例,
- const service = axios.create({
- // 公共接口--这里注意后面会讲
- baseURL:process.env.NODE_ENV === 'production' ? DynamicAcquisitionURL():'/api',
- // 超时时间 单位是ms,这里设置了3s的超时时间
- timeout: 1000 * 60 * 5
- })
- // 2.请求拦截器
- service.interceptors.request.use(async config => {
- const token = sessionStorage.getItem('token')?sessionStorage.getItem('token'):''
- const appid = useAuthStore().app ? useAuthStore().app.systemappid :''
- //发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
- config.data['accesstoken'] = token
- config.data['systemappid'] = appid
- if (!config.headers) {
- config.headers = {}
- }
- if (!config.headers['Content-Type']) {
- config
- .headers['Content-Type'] = 'application/json;charset=UTF-8';
- }
- utils.anti_shake(config, axios);
- // useBaseStore().checkNeedSaveData(config, axios)
- geolocation()
- return config
-
- }, error => {
- Promise.reject(error)
- })
- // 3.响应拦截器
- service.interceptors.response.use(response => {
- if (response.data.code == -1) {
- message.error({content:response.data.msg,key:1})
- router.push({name:'login'})
- setTimeout(() => {
- window.location.reload();
- }, 500);
- } else {
- useBaseStore().canPointer = true
- return response.data;
- }
-
- }, error => {
- // console.log(error)
- // 接收到异常响应的处理开始
- if (error && error.response) {
- // 1.公共错误处理
- // 2.根据响应码具体处理
- switch (error.response.status) {
- case 400:
- message.error('错误请求')
- break;
- case 401:
- message.error('未授权,请重新登录')
- break;
- case 403:
- message.error('拒绝访问')
- break;
- case 404:
- message.error('请求错误,未找到该资源')
- break;
- case 405:
- message.error('请求方法未允许')
- break;
- case 408:
- message.error('请求超时')
- break;
- case 500:
- message.error({content:'服务器端出错',key:'服务器端出错'})
- break;
- case 501:
- message.error('网络未实现')
- break;
- case 502:
- message.error('网络错误')
- break;
- case 503:
- message.error('服务不可用')
- break;
- case 504:
- message.error('网络超时')
- break;
- case 505:
- message.error('http版本不支持该请求')
- break;
- default:
- message.error = `连接错误${error.response.status}`
- }
- } else {
- source.cancel('停止请求');
- }
- return Promise.resolve(error.response)
- })
- //4.导入文件
- export default service
|