123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- import axios from 'axios'
- import { Notification, MessageBox, Message, Loading } from 'element-ui'
- import router from '@/router'
- import store from '@/store'
- import { getToken } from '@/utils/auth'
- import errorCode from '@/utils/errorCode'
- import { tansParams,judgmentNetworkReturnAddress } from "@/utils/ruoyi";
- //判定http或者https
- let urlText = window.location.href.split('://')[0]+'://';
- //分锅器
- let potType = false;
- //弹窗状态开关
- let messageData = null;
- // 弹层数据
- let loadingInstance = {};
- let options = {
- spinner:"",
- background: 'rgba(255, 255, 255, 0.1)'
- };
- let loadingCount = 0;
- axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
- // 创建axios实例
- const service = axios.create({
- // axios中请求配置有baseURL选项,表示请求URL公共部分
- baseURL: urlText+judgmentNetworkReturnAddress(),
- // 超时
- timeout: 10000
- })
- // request拦截器
- service.interceptors.request.use(config => {
- if(config.type == 'video'){
- config.baseURL = localStorage.getItem('cameraExtranetAgent');
- potType = true;
- }else{
- potType = false;
- }
- // 弹层相关
- loadingInstance = Loading.service(options)
- // 是否需要设置 token
- const isToken = (config.headers || {}).isToken === false
- if (getToken() && !isToken) {
- config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- }
- // get请求映射params参数
- if (config.method === 'get' && config.params) {
- let url = config.url + '?' + tansParams(config.params);
- url = url.slice(0, -1);
- config.params = {};
- config.url = url;
- }
- // 弹层相关
- loadingCount ++;
- return config
- }, error => {
- // 弹层相关
- loadingCount --;
- if(loadingCount===0){
- loadingInstance.close();
- }
- Promise.reject(error)
- })
- // 响应拦截器
- service.interceptors.response.use(res => {
- // 弹层相关
- loadingCount --;
- if(loadingCount===0) {
- loadingInstance.close();
- }
- // 未设置状态码则默认成功状态
- const code = res.data.code || 200;
- // 获取错误信息
- const msg = errorCode[code] || res.data.message || errorCode['default']
- if (code == 5005) {
- //无权限
- router.replace({
- path: '/403'
- })
- }else if(code == 429){
- if(!messageData){
- messageData = Message({
- message: '服务器繁忙,请稍后重试',
- type: 'error',
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return Promise.reject(new Error(msg))
- } else if (code === 500) {
- if(!messageData){
- messageData = Message({
- message: msg,
- type: 'error',
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return Promise.reject(new Error(msg))
- } else if (code == 303 || code == 530 || code == 503 || code == 504|| code == 205) {
- // 303-考试从定向 530-账号不存在 503-验证码错误 504特殊报错code 205智能门禁状态 用于报错后需要返回code进行后续操作
- return res.data
- } else if (code != 200) {
- if(!messageData){
- messageData = Message({
- message: msg,
- type: 'error',
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return Promise.reject(new Error(msg))
- // Notification.error({
- // title: msg
- // })
- // return Promise.reject('error')
- } else {
- return res.data
- }
- },
- error => {
- // 弹层相关
- loadingCount --;
- if(loadingCount===0){
- loadingInstance.close();
- }
- let { message } = error;
- if (message == "Network Error") {
- if(potType){
- message = "视频监控接口连接异常";
- }else{
- message = "服务连接异常";
- }
- }
- else if (message.includes("timeout")) {
- if(potType){
- message = "视频监控接口请求超时";
- }else{
- message = "系统接口请求超时";
- }
- }
- else if (message.includes("Request failed with status code")) {
- if(message.substr(message.length - 3) == 401){
- if(getToken()){
- store.dispatch('delToken').then(() => {})
- MessageBox.confirm('登录状态已过期,请重新登录', '系统提示', {
- confirmButtonText: '确定',
- showCancelButton:false,
- closeOnClickModal:false,
- cancelButtonText: '取消',
- type: 'warning'
- }
- ).then(() => {
- store.dispatch('LogOutNoData').then(() => {
- localStorage.removeItem('serviceType');
- if(process.env.VUE_APP_LOGIN_TYPE === 'certification'){
- window.location.href = process.env.VUE_APP_OUT_URL;
- }else{
- router.replace({
- path: '/login'
- })
- }
- })
- return
- }).catch(() => {});
- }
- }else{
- messageData = Message({
- message: message,
- type: 'error',
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return Promise.reject(error)
- }
- if(!messageData){
- messageData = Message({
- message: message,
- type: 'error',
- duration: 5 * 1000,
- offset:100
- })
- setTimeout(function(){
- messageData = null
- },1000);
- }
- return Promise.reject(error)
- }
- )
- // 通用下载方法
- export function download(url, params, filename) {
- return service.post(url, params, {
- transformRequest: [(params) => {
- return tansParams(params)
- }],
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- },
- responseType: 'blob'
- }).then((data) => {
- const content = data
- const blob = new Blob([content])
- if ('download' in document.createElement('a')) {
- const elink = document.createElement('a');
- elink.download = filename
- elink.style.display = 'none'
- elink.href = URL.createObjectURL(blob)
- document.body.appendChild(elink)
- elink.click()
- URL.revokeObjectURL(elink.href)
- document.body.removeChild(elink)
- } else {
- navigator.msSaveBlob(blob, filename)
- }
- this.msgSuccess('正在下载,请稍候')
- }).catch((r) => {
- console.error(r)
- })
- }
- // 通用文件下载方法POST请求
- export function downloadPost(fileUrl,fleName) {
- const newUrl = urlText + judgmentNetworkReturnAddress() + fileUrl;
- const x = new XMLHttpRequest();
- x.open("post", newUrl, true);
- x.setRequestHeader("Authorization",getToken());
- x.responseType = "blob";
- x.onload = () => {
- const url = URL.createObjectURL(x.response);
- const a = document.createElement("a");
- a.href = url;
- a.download = fleName;
- a.target = "_blank";
- a.click();
- };
- x.send();
- this.msgSuccess('正在下载,请稍候')
- }
- // 通用文件下载方法GET请求
- export function downloadGet(fileUrl,fleName) {
- const newUrl = urlText + judgmentNetworkReturnAddress() + fileUrl;
- const x = new XMLHttpRequest();
- x.open('get', newUrl, true)
- x.setRequestHeader("Authorization",getToken());
- x.responseType = "blob";
- x.onload = () => {
- const url = URL.createObjectURL(x.response);
- const a = document.createElement("a");
- a.href = url;
- a.download = fleName;
- a.target = "_blank";
- a.click();
- };
- x.send();
- this.msgSuccess('正在下载,请稍候')
- }
- // 通用URL地址文件下载方法
- export function downloadUrl(fileUrl,fleName) {
- const x = new XMLHttpRequest();
- x.open('get', fileUrl, true)
- x.setRequestHeader("Authorization",getToken());
- x.responseType = "blob";
- x.onload = () => {
- const url = URL.createObjectURL(x.response);
- const a = document.createElement("a");
- a.href = url;
- a.download = fleName;
- a.target = "_blank";
- a.click();
- };
- x.send();
- this.msgSuccess('正在下载,请稍候')
- }
- export default service
|