diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index 7c52d64ae..a3efafdb9 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -3,25 +3,25 @@ import React from "react"; import axios from 'axios'; import md5 from 'md5'; import { requestProxy } from "./indexEduplus2RequestProxy"; -import { broadcastChannelOnmessage ,SetAppModel, isDev, queryString } from 'educoder'; -import { notification } from 'antd'; +import { broadcastChannelOnmessage, SetAppModel, isDev, queryString } from 'educoder'; +import { notification } from 'antd'; import cookie from 'react-cookies'; import './index.css'; const $ = window.$; -const opens ="79e33abd4b6588941ab7622aed1e67e8"; +const opens = "79e33abd4b6588941ab7622aed1e67e8"; let timestamp; let checkSubmitFlg = false; -let message501=false; +let message501 = false; broadcastChannelOnmessage('refreshPage', () => { - window.location.reload() + window.location.reload() }) -function locationurl(list){ +function locationurl(list) { if (window.location.port === "3007") { } else { - window.location.href=list + window.location.href = list } } @@ -30,7 +30,7 @@ function locationurl(list){ // TODO 开发期多个身份切换 - let debugType ="" +let debugType = "" if (isDev) { const _search = window.location.search; let parsed = {}; @@ -42,7 +42,7 @@ if (isDev) { window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' } // 超管 -debugType="admin"; +debugType = "admin"; // 老师 // debugType="teacher"; // 学生 @@ -53,30 +53,30 @@ debugType="admin"; function clearAllCookie() { - cookie.remove('_educoder_session', {path: '/'}); - cookie.remove('autologin_trustie', {path: '/'}); + cookie.remove('_educoder_session', { path: '/' }); + cookie.remove('autologin_trustie', { path: '/' }); setpostcookie() } clearAllCookie(); function setpostcookie() { - const str =window.location.pathname; + const str = window.location.pathname; // console.log(str.indexOf("/wxcode")) - let newdomain=".educoder.net" - if(str.indexOf("/wxcode") !== -1){ + let newdomain = ".educoder.net" + if (str.indexOf("/wxcode") !== -1) { console.log("123") - cookie.remove('_educoder_session', {path: '/'}); - cookie.remove('autologin_trustie', {path: '/'}); + cookie.remove('_educoder_session', { path: '/' }); + cookie.remove('autologin_trustie', { path: '/' }); // console.log("开始重写cookis"); const _params = window.location.search; // console.log("1111"); if (_params) { // console.log("22222"); let _search = _params.split('?')[1]; - 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: '/'}); + 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: '/' }); } } @@ -84,33 +84,37 @@ function setpostcookie() { setpostcookie(); - function railsgettimes(proxy) { - - clearAllCookie() - - if(timestamp&&checkSubmitFlg===false){ - $.ajax({url:proxy,async:false,success:function(data){ - if(data.status===0){ - timestamp=data.message; - setpostcookie(); - } - }}) - checkSubmitFlg=true - window.setTimeout(()=>{ - checkSubmitFlg=false; - }, 2000); - }else if(checkSubmitFlg===false){ - $.ajax({url:proxy,async:false,success:function(data){ - if(data.status===0){ - timestamp=data.message; - setpostcookie(); - } - }}) - checkSubmitFlg=true - window.setTimeout( ()=>{ - checkSubmitFlg=false; - }, 2000); - } +function railsgettimes(proxy) { + + clearAllCookie() + + if (timestamp && checkSubmitFlg === false) { + $.ajax({ + url: proxy, async: false, success: function (data) { + if (data.status === 0) { + timestamp = data.message; + setpostcookie(); + } + } + }) + checkSubmitFlg = true + window.setTimeout(() => { + checkSubmitFlg = false; + }, 2000); + } else if (checkSubmitFlg === false) { + $.ajax({ + url: proxy, async: false, success: function (data) { + if (data.status === 0) { + timestamp = data.message; + setpostcookie(); + } + } + }) + checkSubmitFlg = true + window.setTimeout(() => { + checkSubmitFlg = false; + }, 2000); + } } @@ -120,292 +124,291 @@ setpostcookie(); window._debugType = debugType; export function initAxiosInterceptors(props) { - initOnlineOfflineListener() - - // 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" - // proxy="https://test-jupyterweb.educoder.net" - // proxy="https://test-newweb.educoder.net" - // proxy="https://test-jupyterweb.educoder.net" - //proxy="https://test-jupyterweb.educoder.net/" - - - // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; - // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 - const requestMap = {}; - - window.setfalseInRequestMap = function(keyName) { - requestMap[keyName] = false; - } - - //响应前的设置 - axios.interceptors.request.use( - config => { - setpostcookie() - clearAllCookie() - // config.headers['Content-Type']= 'no-cache' - // 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' - // } - // --------------------------------------------- - // console.log("开始请求了"); - // console.log(config.url); - // console.log(window.location.pathname); - // - - // try { - // const str =window.location.pathname; - // if(str.indexOf("/wxcode") !== -1){ - // // console.log("开始重写cookis"); - // const _params = window.location.search; - // // console.log("1111"); - // if (_params) { - // // console.log("22222"); - // let _search = _params.split('?')[1]; - // var _educoder_sessionmys=""; - // var autologin_trusties=""; - // _search.split('&').forEach(item => { - // const _arr = item.split('='); - // if(_arr[0]==='_educoder_session'){ - // cookie.save('_educoder_session',_arr[1], { domain: '.educoder.net', path: '/'}); - // _educoder_sessionmys=_arr[1]; - // }else{ - // cookie.save('autologin_trustie',_arr[1], { domain: '.educoder.net', path: '/'}); - // autologin_trusties=_arr[1]; - // } - // }); - // try { - // const autlogins= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; - // config.params = {'Cookie': autlogins} - // config.headers['Cookie'] =autlogins; - // // console.log("设置了cookis"); - // } catch (e) { - // - // } - // try { - // const autloginysls= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; - // config.params = {'autloginysls': autloginysls} - // config.headers['Cookie'] =autloginysls; - // // console.log("设置了cookis"); - // }catch (e) { - // - // } - // } - // } - // }catch (e) { - // - // } - - - - if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) { - return config - } - requestProxy(config) - - let url = `/api${config.url}`; - - //qq登录去掉api - if(config.params&&config.params.redirect_uri!=undefined){ - if(config.params.redirect_uri.indexOf('otherloginqq')!=-1){ - url = `${config.url}`; - } - } - if(`${config[0]}`!=`true`){ - let timestamp = Date.parse(new Date())/1000; - if (window.location.port === "3007") { - // let timestamp=railsgettimes(proxy); - // console.log(timestamp) - // `https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp` - railsgettimes( `${proxy}/api/main/first_stamp.json`); - let newopens=md5(opens+timestamp) - config.url = `${proxy}${url}`; - if (config.url.indexOf('?') == -1) { - config.url = `${config.url}?debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; - } else { - config.url = `${config.url}&debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; - } - } else { - // 加api前缀 - // railsgettimes(`http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`); - - railsgettimes( `/api/main/first_stamp.json`); - let newopens=md5(opens+timestamp) - config.url = url; - if (config.url.indexOf('?') == -1) { - config.url = `${config.url}?randomcode=${timestamp}&client_key=${newopens}`; - } else { - config.url = `${config.url}&randomcode=${timestamp}&client_key=${newopens}`; - } - } - setpostcookie(); - } - // - // console.log(config); - 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); - }); + initOnlineOfflineListener() + + // 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" + // proxy="https://test-jupyterweb.educoder.net" + // proxy="https://test-newweb.educoder.net" + // proxy="https://test-jupyterweb.educoder.net" + //proxy="https://test-jupyterweb.educoder.net/" + + + // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; + // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 + const requestMap = {}; + + window.setfalseInRequestMap = function (keyName) { + requestMap[keyName] = false; + } - axios.interceptors.response.use(function (response) { - - // console.log(".............") - if(response===undefined){ - return - } - const config = response.config - 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 || '服务器异常,请联系管理员。' ) - if (window.location.pathname.startsWith('/tasks/')) { - props.showSnackbar( response.data.message || '服务器异常,请联系管理员。' ) - } else { - notification.open({ - message:"提示", - description: response.data.message || '服务器异常,请联系管理员。', - style: { - zIndex: 99999999 - }, - }); - // notification['error']({ - // message:"提示", - // description: response.data.message || '服务器异常,请联系管理员。', - // }); - } - - throw new axios.Cancel('Operation canceled by the user.'); + //响应前的设置 + axios.interceptors.request.use( + config => { + setpostcookie() + clearAllCookie() + // config.headers['Content-Type']= 'no-cache' + // 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' + // } + // --------------------------------------------- + // console.log("开始请求了"); + // console.log(config.url); + // console.log(window.location.pathname); + // + + // try { + // const str =window.location.pathname; + // if(str.indexOf("/wxcode") !== -1){ + // // console.log("开始重写cookis"); + // const _params = window.location.search; + // // console.log("1111"); + // if (_params) { + // // console.log("22222"); + // let _search = _params.split('?')[1]; + // var _educoder_sessionmys=""; + // var autologin_trusties=""; + // _search.split('&').forEach(item => { + // const _arr = item.split('='); + // if(_arr[0]==='_educoder_session'){ + // cookie.save('_educoder_session',_arr[1], { domain: '.educoder.net', path: '/'}); + // _educoder_sessionmys=_arr[1]; + // }else{ + // cookie.save('autologin_trustie',_arr[1], { domain: '.educoder.net', path: '/'}); + // autologin_trusties=_arr[1]; + // } + // }); + // try { + // const autlogins= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; + // config.params = {'Cookie': autlogins} + // config.headers['Cookie'] =autlogins; + // // console.log("设置了cookis"); + // } catch (e) { + // + // } + // try { + // const autloginysls= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; + // config.params = {'autloginysls': autloginysls} + // config.headers['Cookie'] =autloginysls; + // // console.log("设置了cookis"); + // }catch (e) { + // + // } + // } + // } + // }catch (e) { + // + // } + + + + if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) { + return config + } + requestProxy(config) + + let url = `/api${config.url}`; + + //qq登录去掉api + if (config.params && config.params.redirect_uri != undefined) { + if (config.params.redirect_uri.indexOf('otherloginqq') != -1) { + url = `${config.url}`; + } + } + if (`${config[0]}` != `true`) { + let timestamp = Date.parse(new Date()) / 1000; + if (window.location.port === "3007") { + // let timestamp=railsgettimes(proxy); + // console.log(timestamp) + // `https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp` + railsgettimes(`${proxy}/api/main/first_stamp.json`); + let newopens = md5(opens + timestamp) + config.url = `${proxy}${url}`; + if (config.url.indexOf('?') == -1) { + config.url = `${config.url}?debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; + } else { + config.url = `${config.url}&debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; + } } 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) - // } + // 加api前缀 + // railsgettimes(`http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`); + + railsgettimes(`/api/main/first_stamp.json`); + let newopens = md5(opens + timestamp) + config.url = url; + if (config.url.indexOf('?') == -1) { + config.url = `${config.url}?randomcode=${timestamp}&client_key=${newopens}`; + } else { + config.url = `${config.url}&randomcode=${timestamp}&client_key=${newopens}`; + } } - // if(response.data.status === 401){ - // console.log("401401401") - // } - if (response.data.status === 403||response.data.status === "403") { + setpostcookie(); + } + // 拦截器导致关键的业务数据丢失,先注释 + // 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); + }); - locationurl('/403'); - } + axios.interceptors.response.use(function (response) { - if (response.data.status === 404) { - locationurl('/nopage'); - } + // console.log(".............") + if (response === undefined) { + return + } + const config = response.config + 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 || '服务器异常,请联系管理员。' ) + if (window.location.pathname.startsWith('/tasks/')) { + props.showSnackbar(response.data.message || '服务器异常,请联系管理员。') + } else { + notification.open({ + message: "提示", + description: response.data.message || '服务器异常,请联系管理员。', + style: { + zIndex: 99999999 + }, + }); + // notification['error']({ + // message:"提示", + // description: response.data.message || '服务器异常,请联系管理员。', + // }); + } + + throw new axios.Cancel('Operation canceled by the user.'); + } 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) + // } + } + // if(response.data.status === 401){ + // console.log("401401401") + // } + if (response.data.status === 403 || response.data.status === "403") { - if (response.data.status === 500) { - locationurl('/500'); - } + locationurl('/403'); + } - if (response.data.status === 501) { - if(message501===false){ - message501=true - notification.open({ - message:"提示", - description:response.data.message || '访问异常,请求不合理', - style: { - zIndex: 99999999 - } - }) + if (response.data.status === 404) { + locationurl('/nopage'); + } + + if (response.data.status === 500) { + locationurl('/500'); + } + + if (response.data.status === 501) { + if (message501 === false) { + message501 = true + notification.open({ + message: "提示", + description: response.data.message || '访问异常,请求不合理', + style: { + zIndex: 99999999 } - window.setTimeout(function () { - message501=false - }, 2000); - } + }) + } + window.setTimeout(function () { + message501 = false + }, 2000); + } - // if (response.data.status === 402) { - // console.log(response.data.status); - // console.log(response.data); - // // locationurl(402); - // } - - // - // if (response.data.status === 401) { - // console.log("161"); - // console.log(config); - // return config; - // } - // if (response.data.status === 407) { - // 在app js 中解决 Trialapplication - // // - // ///在appjs - // notification.open({ - // message:"提示", - // description: "账号未认证", - // }); - // throw new axios.Cancel('Operation canceled by the user.'); - // // - // } - - requestMap[response.config.url] = false; - setpostcookie(); - return response; - }, function (error) { - return Promise.reject(error); - }); -// ----------------------------------------------------------------------------------- + // if (response.data.status === 402) { + // console.log(response.data.status); + // console.log(response.data); + // // locationurl(402); + // } + + // + // if (response.data.status === 401) { + // console.log("161"); + // console.log(config); + // return config; + // } + // if (response.data.status === 407) { + // 在app js 中解决 Trialapplication + // // + // ///在appjs + // notification.open({ + // message:"提示", + // description: "账号未认证", + // }); + // throw new axios.Cancel('Operation canceled by the user.'); + // // + // } + + requestMap[response.config.url] = false; + setpostcookie(); + return response; + }, function (error) { + return Promise.reject(error); + }); + // ----------------------------------------------------------------------------------- } function initOnlineOfflineListener() { - const $ = window.$ - $(window).bind("online", () => { - notification.destroy() - notification.success({ - duration: 2, - message: '网络恢复正常', - description: - '网络恢复正常,感谢使用。', - }) - }); - $(window).bind("offline", () => { - notification.destroy() - - notification.warning({ - duration: null, - message: '网络异常', - description: - '网络异常,请检测网络后重试。', - }) - }); + const $ = window.$ + $(window).bind("online", () => { + notification.destroy() + notification.success({ + duration: 2, + message: '网络恢复正常', + description: + '网络恢复正常,感谢使用。', + }) + }); + $(window).bind("offline", () => { + notification.destroy() + + notification.warning({ + duration: null, + message: '网络异常', + description: + '网络异常,请检测网络后重试。', + }) + }); }