You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/src/AppConfig.js

231 lines
7.6 KiB

6 years ago
import React from "react";
import axios from 'axios';
import { requestProxy } from "./indexEduplus2RequestProxy";
6 years ago
import { broadcastChannelOnmessage ,SetAppModel, isDev, queryString } from 'educoder';
6 years ago
import { notification } from 'antd';
6 years ago
import './index.css'
6 years ago
broadcastChannelOnmessage('refreshPage', () => {
window.location.reload()
})
function locationurl(list){
6 years ago
debugger
6 years ago
if (window.location.port === "3007") {
6 years ago
6 years ago
} else {
window.location.replace(list)
}
6 years ago
}
6 years ago
let hashTimeout
6 years ago
// TODO 开发期多个身份切换
6 years ago
let debugType =""
6 years ago
if (isDev) {
const _search = window.location.search;
let parsed = {};
if (_search) {
parsed = queryString.parse(_search);
}
debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' :
window.location.search.indexOf('debug=s') != -1 ? 'student' :
window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin'
}
6 years ago
window._debugType = debugType;
6 years ago
export function initAxiosInterceptors(props) {
initOnlineOfflineListener()
6 years ago
// TODO 避免重复的请求 https://github.com/axios/axios#cancellation
// https://github.com/axios/axios/issues/1497
// TODO 读取到package.json中的配置
var proxy = "http://localhost:3000"
// proxy = "http://testbdweb.trustie.net"
// proxy = "http://testbdweb.educoder.net"
// proxy = "https://testeduplus2.educoder.net"
//proxy="http://47.96.87.25:48080"
proxy="https://pre-newweb.educoder.net"
proxy="https://test-newweb.educoder.net"
6 years ago
6 years ago
// 在这里使用requestMap控制避免用户通过双击等操作发出重复的请求
// 如果需要支持重复的请求考虑config里面自定义一个allowRepeat参考来控制
const requestMap = {};
window.setfalseInRequestMap = function(keyName) {
requestMap[keyName] = false;
}
axios.interceptors.request.use(
config => {
// if (token) { // 每次发送请求之前判断是否存在token如果存在则统一在http请求的header都加上token不用每次请求都手动添加了
// config.headers.Authorization = token;
// }
// --------------------------------------------- 測試3007连测试服的代码
// if (url.indexOf('file_update') != -1 || url.indexOf('game_build') != -1 || url.indexOf('game_status') != -1) {
// proxy = 'https://testbdweb.trustie.net'
// } else {
// proxy = 'http://localhost:3000'
// }
// ---------------------------------------------
6 years ago
if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) {
6 years ago
return config
}
requestProxy(config)
var url = `/api${config.url}`;
if(`${config[0]}`!=`true`){
if (window.location.port === "3007") {
if (url.indexOf('.json') == -1) {
alert('开发提示:请给接口加.json:' + url)
}
config.url = `${proxy}${url}`;
if (config.url.indexOf('?') == -1) {
5 years ago
config.url = `${config.url}?debug=${debugType}`;
6 years ago
} else {
5 years ago
config.url = `${config.url}&debug=${debugType}`;
6 years ago
}
} else {
// 加api前缀
config.url = url;
}
}
if (requestMap[config.url] === true) { // 避免重复的请求
return false;
}
// 非file_update请求
if (config.url.indexOf('update_file') === -1) {
requestMap[config.url] = true;
window.setTimeout("setfalseInRequestMap('"+config.url+"')", 900)
}
// setTimeout("setfalseInRequestMap(" + config.url + ")", 1200)
return config;
},
err => {
return Promise.reject(err);
});
axios.interceptors.response.use(function (response) {
// console.log(".............")
if(response===undefined){
return
}
6 years ago
const config = response.config
6 years ago
if (response.data.status === -1) {
// console.error('error:', response.data.message)
// throw new Error()
// https://github.com/axios/axios/issues?utf8=%E2%9C%93&q=cancel+request+in+response+interceptors+
// https://github.com/axios/axios/issues/583
// message.info(response.data.message || '服务端返回status -1请联系管理员。');
// props.showSnackbar( response.data.message || '服务器异常,请联系管理员。' )
6 years ago
if (window.location.pathname.startsWith('/tasks/')) {
6 years ago
props.showSnackbar( response.data.message || '服务器异常,请联系管理员。' )
} else {
notification.open({
message:"提示",
description: response.data.message || '服务器异常,请联系管理员。',
6 years ago
style: {
zIndex: 99999999
},
6 years ago
});
// notification['error']({
// message:"提示",
// description: response.data.message || '服务器异常,请联系管理员。',
// });
}
6 years ago
6 years ago
throw new axios.Cancel('Operation canceled by the user.');
6 years ago
} else {
// hash跳转
var hash = window.location.hash;
if (hash) {
hashTimeout && window.clearTimeout(hashTimeout)
hashTimeout = setTimeout(() => {
var element = document.querySelector(hash);
if (element) {
element.scrollIntoView();
}
}, 400)
}
6 years ago
}
6 years ago
// if(response.data.status === 401){
// console.log("401401401")
// }
6 years ago
if (response.data.status === 403||response.data.status === "403") {
6 years ago
locationurl('/403');
6 years ago
}
if (response.data.status === 404) {
locationurl('/nopage');
}
if (response.data.status === 500) {
locationurl('/500');
}
6 years ago
6 years ago
// if (response.data.status === 402) {
// console.log(response.data.status);
// console.log(response.data);
// // locationurl(402);
// }
6 years ago
6 years ago
//
// if (response.data.status === 401) {
// console.log("161");
// console.log(config);
// return config;
// }
6 years ago
// if (response.data.status === 407) {
// 在app js 中解决 Trialapplication
// // </Trialapplication>
// ///在appjs
// notification.open({
// message:"提示",
// description: "账号未认证",
// });
// throw new axios.Cancel('Operation canceled by the user.');
// //
// }
requestMap[response.config.url] = false;
return response;
}, function (error) {
return Promise.reject(error);
});
// -----------------------------------------------------------------------------------
}
function initOnlineOfflineListener() {
const $ = window.$
$(window).bind("online", () => {
notification.destroy()
notification.success({
duration: null,
message: '网络恢复正常',
description:
'网络恢复正常,感谢使用。',
})
});
$(window).bind("offline", () => {
notification.destroy()
notification.warning({
duration: null,
message: '网络异常',
description:
'网络异常,请检测网络后重试。',
})
});
6 years ago
}