forgeplus-react/src/AppConfig.js

183 lines
5.0 KiB
JavaScript
Raw Normal View History

2020-03-16 14:12:11 +08:00
import axios from 'axios';
import { requestProxy } from "./indexEduplus2RequestProxy";
2020-09-29 11:21:00 +08:00
import { broadcastChannelOnmessage, isDev, queryString } from 'educoder';
2020-04-28 17:23:34 +08:00
import { notification } from 'antd';
2020-03-16 14:12:11 +08:00
import cookie from 'react-cookies';
import './index.css';
2020-04-28 17:23:34 +08:00
let message501 = false;
2020-03-16 14:12:11 +08:00
broadcastChannelOnmessage('refreshPage', () => {
2020-04-28 17:23:34 +08:00
window.location.reload()
2020-03-16 14:12:11 +08:00
})
2020-04-28 17:23:34 +08:00
function locationurl(list) {
2020-03-16 14:12:11 +08:00
if (window.location.port === "3007") {
} else {
2020-04-28 17:23:34 +08:00
window.location.href = list
2020-03-16 14:12:11 +08:00
}
}
// TODO 开发期多个身份切换
2020-04-28 17:23:34 +08:00
let debugType = ""
2020-03-16 14:12:11 +08:00
if (isDev) {
const _search = window.location.search;
let parsed = {};
if (_search) {
parsed = queryString.parse(_search);
}
2020-05-11 14:18:32 +08:00
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
window.location.search.indexOf('debug=s') !== -1 ? 'student' :
2023-05-31 17:47:54 +08:00
window.location.search.indexOf('debug=a') !== -1 ? 'admin' : parsed.debug || ''
2020-03-16 14:12:11 +08:00
}
function clearAllCookie() {
2020-04-28 17:23:34 +08:00
cookie.remove('_educoder_session', { path: '/' });
cookie.remove('autologin_trustie', { path: '/' });
2020-03-16 14:12:11 +08:00
setpostcookie()
}
clearAllCookie();
function setpostcookie() {
2020-04-28 17:23:34 +08:00
const str = window.location.pathname;
if (str.indexOf("/wxcode") !== -1) {
2020-03-16 14:12:11 +08:00
console.log("123")
2020-04-28 17:23:34 +08:00
cookie.remove('_educoder_session', { path: '/' });
cookie.remove('autologin_trustie', { path: '/' });
2020-03-16 14:12:11 +08:00
const _params = window.location.search;
if (_params) {
let _search = _params.split('?')[1];
2020-04-28 17:23:34 +08:00
let _educoder_sessions = _search.split('&')[0].split('=');
cookie.save('_educoder_session', _educoder_sessions[1], { domain: '.educoder.net', path: '/' });
let autologin_trusties = _search.split('&')[1].split('=');
cookie.save('autologin_trustie', autologin_trusties[1], { domain: '.educoder.net', path: '/' });
2020-03-16 14:12:11 +08:00
}
}
}
setpostcookie();
window._debugType = debugType;
export function initAxiosInterceptors(props) {
2020-04-28 17:23:34 +08:00
initOnlineOfflineListener()
// TODO 避免重复的请求 https://github.com/axios/axios#cancellation
2020-09-29 11:21:00 +08:00
var
2020-10-15 11:27:25 +08:00
proxy = "http://localhost:3000"
2021-11-24 10:26:23 +08:00
proxy = "https://testforum.trustie.net"
2020-04-20 15:37:01 +08:00
2020-04-28 17:23:34 +08:00
const requestMap = {};
window.setfalseInRequestMap = function (keyName) {
requestMap[keyName] = false;
}
//响应前的设置
axios.interceptors.request.use(
config => {
setpostcookie()
clearAllCookie()
if (config.url.indexOf(proxy) !== -1 || config.url.indexOf(':') !== -1) {
2020-04-28 17:23:34 +08:00
return config
}
requestProxy(config)
let url = `/api${config.url}`;
2020-06-18 11:36:05 +08:00
if (`${config[0]}` !== `true`) {
2020-04-28 17:23:34 +08:00
if (window.location.port === "3007") {
config.url = `${proxy}${url}`;
2020-06-18 11:36:05 +08:00
if (config.url.indexOf('?') === -1) {
2020-04-28 17:23:34 +08:00
config.url = `${config.url}?debug=${debugType}`;
} else {
config.url = `${config.url}&debug=${debugType}`;
}
2020-05-11 14:18:32 +08:00
} else {
config.url = url;
2020-04-28 17:23:34 +08:00
}
setpostcookie();
}
if (config.url.indexOf('update_file') === -1) {
requestMap[config.url] = true;
window.setTimeout("setfalseInRequestMap('" + config.url + "')", 900)
}
return config;
},
err => {
return Promise.reject(err);
});
axios.interceptors.response.use(function (response) {
if (response === undefined) {
return
}
2020-09-29 11:21:00 +08:00
const config = response.config;
2020-04-28 17:23:34 +08:00
if (response.data.status === -1) {
if (window.location.pathname.startsWith('/tasks/')) {
props.showSnackbar(response.data.message || '服务器异常,请联系管理员。')
} else {
notification.open({
message: "提示",
description: response.data.message || '服务器异常,请联系管理员。',
style: {
zIndex: 99999999
},
});
}
throw new axios.Cancel('Operation canceled by the user.');
2020-04-20 15:37:01 +08:00
}
2020-05-11 14:18:32 +08:00
2020-04-28 17:23:34 +08:00
if (response.data.status === 403 || response.data.status === "403") {
2020-04-20 15:37:01 +08:00
locationurl('/403');
}
if (response.data.status === 404) {
2020-04-28 17:23:34 +08:00
locationurl('/nopage');
2020-04-20 15:37:01 +08:00
}
if (response.data.status === 500) {
2020-04-28 17:23:34 +08:00
locationurl('/500');
2020-04-20 15:37:01 +08:00
}
2020-03-16 14:12:11 +08:00
2020-04-20 15:37:01 +08:00
if (response.data.status === 501) {
2020-04-28 17:23:34 +08:00
if (message501 === false) {
message501 = true
2020-04-20 15:37:01 +08:00
notification.open({
2020-04-28 17:23:34 +08:00
message: "提示",
description: response.data.message || '访问异常,请求不合理',
2020-04-20 15:37:01 +08:00
style: {
zIndex: 99999999
}
})
}
window.setTimeout(function () {
2020-04-28 17:23:34 +08:00
message501 = false
2020-04-20 15:37:01 +08:00
}, 2000);
}
requestMap[response.config.url] = false;
setpostcookie();
return response;
2020-04-28 17:23:34 +08:00
}, function (error) {
return Promise.reject(error);
});
2020-03-16 14:12:11 +08:00
}
function initOnlineOfflineListener() {
2020-04-28 17:23:34 +08:00
const $ = window.$
$(window).bind("online", () => {
notification.destroy()
notification.success({
duration: 2,
message: '网络恢复正常',
description:
'网络恢复正常,感谢使用。',
})
});
$(window).bind("offline", () => {
notification.destroy()
notification.warning({
duration: null,
message: '网络异常',
description:
'网络异常,请检测网络后重试。',
})
});
2020-03-16 14:12:11 +08:00
}