Merge branch 'master' of https://bdgit.educoder.net/Hjqreturn/educoder
commit
572dd32fee
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,16 +1,27 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
|
||||
|
||||
class Loading extends Component {
|
||||
render() {
|
||||
// Loading
|
||||
return (
|
||||
<div className="App" style={{minHeight: '800px'}}>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Loading;
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
|
||||
|
||||
import { Spin } from 'antd';
|
||||
|
||||
class Loading extends Component {
|
||||
render() {
|
||||
// Loading
|
||||
return (
|
||||
<div className="App" style={{minHeight: '800px'}}>
|
||||
<style>
|
||||
{
|
||||
`
|
||||
.margintop{
|
||||
margin-top:20%;
|
||||
}
|
||||
`
|
||||
}
|
||||
</style>
|
||||
<Spin size="large" className={"margintop"}/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Loading;
|
||||
|
@ -1,75 +1,75 @@
|
||||
.slider-img-wrapper img {
|
||||
width: 100%;
|
||||
border-radius: 15px;
|
||||
height: 350px;
|
||||
}
|
||||
.next-slick-list{
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.user_navlist{
|
||||
margin-left: 40px;
|
||||
}
|
||||
.next-slick-list{
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.black_nav_span{
|
||||
display: block;
|
||||
margin: 0px 20px;
|
||||
border-bottom: 1px solid #4B4B4B;
|
||||
padding-left: 8px;
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
.user_navlist_white{
|
||||
z-index: 100 !important;
|
||||
}
|
||||
|
||||
.next-slick.next-slick-horizontal.next-slick-outer{
|
||||
height: 350px;
|
||||
}
|
||||
|
||||
.black_nav_list li span a{
|
||||
color:#fff;
|
||||
}
|
||||
.black_nav_list li span a:hover{
|
||||
color:#000;
|
||||
}
|
||||
.black_nav_list li:hover span a{
|
||||
color:#000;
|
||||
}
|
||||
.little-titles{
|
||||
height: 22px !important;
|
||||
}
|
||||
|
||||
.user_navlist_white a{
|
||||
color: #989898 !important;
|
||||
}
|
||||
.user_navlist_white .navlistpanel-line .little-titles a{
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.newnext-loading{
|
||||
display:block;
|
||||
}
|
||||
|
||||
.educontentSlider{
|
||||
width: 1282px !important;
|
||||
}
|
||||
.user_navlist_white{
|
||||
max-height:350px !important;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.iconfontzhangjie{
|
||||
font-size: 10px !important;
|
||||
line-height: 23px;
|
||||
}
|
||||
.iconfontshixundaibeijing{
|
||||
font-size: 18px !important;
|
||||
line-height: 24px;
|
||||
.slider-img-wrapper img {
|
||||
width: 100%;
|
||||
/*border-radius: 15px;*/
|
||||
height: 350px;
|
||||
}
|
||||
.next-slick-list{
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.user_navlist{
|
||||
margin-left: 40px;
|
||||
}
|
||||
.next-slick-list{
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.black_nav_span{
|
||||
display: block;
|
||||
margin: 0px 20px;
|
||||
border-bottom: 1px solid #4B4B4B;
|
||||
padding-left: 8px;
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
.user_navlist_white{
|
||||
z-index: 100 !important;
|
||||
}
|
||||
|
||||
.next-slick.next-slick-horizontal.next-slick-outer{
|
||||
height: 350px;
|
||||
}
|
||||
|
||||
.black_nav_list li span a{
|
||||
color:#fff;
|
||||
}
|
||||
.black_nav_list li span a:hover{
|
||||
color:#000;
|
||||
}
|
||||
.black_nav_list li:hover span a{
|
||||
color:#000;
|
||||
}
|
||||
.little-titles{
|
||||
height: 22px !important;
|
||||
}
|
||||
|
||||
.user_navlist_white a{
|
||||
color: #989898 !important;
|
||||
}
|
||||
.user_navlist_white .navlistpanel-line .little-titles a{
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.newnext-loading{
|
||||
display:block;
|
||||
}
|
||||
|
||||
.educontentSlider{
|
||||
width: 1282px !important;
|
||||
}
|
||||
.user_navlist_white{
|
||||
max-height:350px !important;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.iconfontzhangjie{
|
||||
font-size: 10px !important;
|
||||
line-height: 23px;
|
||||
}
|
||||
.iconfontshixundaibeijing{
|
||||
font-size: 18px !important;
|
||||
line-height: 24px;
|
||||
}
|
@ -1,49 +1,49 @@
|
||||
import React, { Component } from 'react';
|
||||
import { Redirect } from 'react-router';
|
||||
import { getImageUrl, toPath } from 'educoder'
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
class NewFooter extends Component {
|
||||
constructor(props) {
|
||||
super(props)
|
||||
|
||||
}
|
||||
|
||||
componentWillReceiveProps(newProps, newContext) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="newFooter edu-txt-center">
|
||||
<div className="inner-footer_con">
|
||||
<div className="footercon">
|
||||
<div className="inline mt40 mb5">
|
||||
<a href="/" className="fl" style={{height:'70px'}}>
|
||||
<img alt="高校智能化教学与实训平台" src={getImageUrl(`images/educoder/headNavLogo.png?1526520218`)} width="70px">
|
||||
</img>
|
||||
</a>
|
||||
<span className="fl color-grey-c cdefault font-28 ml22" style={{lineHeight:'74px'}}>EduCoder.net</span>
|
||||
</div>
|
||||
<ul className="clearfix inner-footernav">
|
||||
<li><a href="/" className="fl" target="_blank">网站首页</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.about_us} className="fl" target="_blank">关于我们</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.connect_us} className="fl" target="_blank">联系我们</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.cooperation_partner} className="fl" target="_blank">合作伙伴</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.service_agreement} className="fl" target="_blank">服务协议</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.help_center} className="fl" target="_blank">帮助中心</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.feedback} className="fl" target="_blank">意见反馈</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<p className="footer_con-p inline lineh-30 font-14"><span className="font-18 fl">©</span> 2019 EduCoder<span className="ml15 mr15">湘ICP备17009477号</span><a href="https://team.trustie.net" style={{"color":"#888"}} target="_blank">Trustie</a> & IntelliDE inside.</p>
|
||||
</div>
|
||||
<div className="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default NewFooter;
|
||||
import React, { Component } from 'react';
|
||||
import { Redirect } from 'react-router';
|
||||
import { getImageUrl, toPath } from 'educoder'
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
class NewFooter extends Component {
|
||||
constructor(props) {
|
||||
super(props)
|
||||
|
||||
}
|
||||
|
||||
componentWillReceiveProps(newProps, newContext) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="newFooter edu-txt-center newContainers">
|
||||
<div className="inner-footer_con">
|
||||
<div className="footercon">
|
||||
<div className="inline mt40 mb5">
|
||||
<a href="/" className="fl" style={{height:'70px'}}>
|
||||
<img alt="高校智能化教学与实训平台" src={getImageUrl(`images/educoder/headNavLogo.png?1526520218`)} width="70px">
|
||||
</img>
|
||||
</a>
|
||||
<span className="fl color-grey-c cdefault font-28 ml22" style={{lineHeight:'74px'}}>EduCoder.net</span>
|
||||
</div>
|
||||
<ul className="clearfix inner-footernav">
|
||||
<li><a href="/" className="fl" target="_blank">网站首页</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.about_us} className="fl" target="_blank">关于我们</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.connect_us} className="fl" target="_blank">联系我们</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.cooperation_partner} className="fl" target="_blank">合作伙伴</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.service_agreement} className="fl" target="_blank">服务协议</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.help_center} className="fl" target="_blank">帮助中心</a></li>
|
||||
<li><a href={this.props.Footerdown===undefined?"":this.props.Footerdown.feedback} className="fl" target="_blank">意见反馈</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<p className="footer_con-p inline lineh-30 font-14"><span className="font-18 fl">©</span> 2019 EduCoder<span className="ml15 mr15">湘ICP备17009477号</span><a href="https://team.trustie.net" style={{"color":"#888"}} target="_blank">Trustie</a> & IntelliDE inside.</p>
|
||||
</div>
|
||||
<div className="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default NewFooter;
|
||||
|
@ -1,382 +1,382 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
|
||||
|
||||
import Loading from '../../Loading';
|
||||
|
||||
import Loadable from 'react-loadable';
|
||||
|
||||
import { TPMIndexHOC } from './TPMIndexHOC';
|
||||
|
||||
import { SnackbarHOC } from 'educoder';
|
||||
|
||||
import TPMBanner from './TPMBanner';
|
||||
|
||||
import axios from 'axios';
|
||||
|
||||
import TPMShixunDiscussContainer from './TPMShixunDiscussContainer';
|
||||
|
||||
import TPMRepositoryComponent from './TPMRepositoryComponent';
|
||||
|
||||
import TPMRepositoryCommits from './shixunchild/Repository/TPMRepositoryCommits';
|
||||
|
||||
import TPMsettings from './TPMsettings/TPMsettings';
|
||||
|
||||
import TPMChallengeComponent from './TPMChallengeContainer'
|
||||
import TPMPropaedeuticsComponent from './TPMPropaedeuticsComponent'
|
||||
import TPMRanking_listComponent from './TPMRanking_listContainer'
|
||||
import TPMCollaboratorsComponent from './TPMCollaboratorsContainer'
|
||||
|
||||
import '../page/tpiPage.css'
|
||||
//任务
|
||||
// const TPMChallengeComponent = Loadable({
|
||||
// loader: () => import('./TPMChallengeContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//背景知识
|
||||
// const TPMPropaedeuticsComponent = Loadable({
|
||||
// loader: () => import('./TPMPropaedeuticsComponent'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//版本库
|
||||
// const TPMRepositoryComponent = Loadable({
|
||||
// loader: () => import('./TPMRepositoryComponent'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
// const TPMRepositoryComponent = Loadable({
|
||||
// loader: () => import('./TPMRepositoryComponent'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//合作
|
||||
// const TPMCollaboratorsComponent = Loadable({
|
||||
// loader: () => import('./TPMCollaboratorsContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
|
||||
//评论
|
||||
// const TPMShixunDiscussComponent = Loadable({
|
||||
// loader: () => import('./TPMShixunDiscussContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//排行版
|
||||
// const TPMRanking_listComponent = Loadable({
|
||||
// loader: () => import('./TPMRanking_listContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
// //编辑实训
|
||||
// const TPMModifysettings = Loadable({
|
||||
// loader: () =>import('./modules/tpm/TPMsettings/TPMsettings'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//新建实训
|
||||
const TPMchallengesnew = Loadable({
|
||||
loader: () => import('./challengesnew/TPMchallengesnew'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//新建tab2
|
||||
const TPMevaluation = Loadable({
|
||||
loader: () => import('./challengesnew/TPMevaluation'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//新建tab3答案
|
||||
// const TPManswer = Loadable({
|
||||
// loader: () => import('./challengesnew/TPManswer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
const TPManswer = Loadable({
|
||||
loader: () => import('./challengesnew/TPManswer2'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//选择题
|
||||
const TPMquestion = Loadable({
|
||||
loader: () => import('./challengesnew/TPMquestion'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//fork列表
|
||||
const TPMFork_listComponent = Loadable({
|
||||
loader: () => import('./TPMFork/TPMForklist'),
|
||||
loading: Loading,
|
||||
})
|
||||
//背景知识修改
|
||||
const TPMUpdatepropaede = Loadable({
|
||||
loader: () => import('./TPMUpdatepropaede/TPMUpdatepropaede'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
|
||||
const interceptorUrlArray = ['repository.json', 'commits.json', 'propaedeutics.json'
|
||||
, 'challenges.json', 'discusses.json', 'ranking_list.json', 'collaborators.json']
|
||||
const cacheInterceptorUrlMap = {}
|
||||
class TPMIndex extends Component {
|
||||
constructor(props) {
|
||||
super(props)
|
||||
this.state = {
|
||||
loadingContent: false,
|
||||
power: false,
|
||||
shixunsDetails: {},
|
||||
shixunId: undefined,
|
||||
star_info: [0, 0, 0, 0, 0, 0],
|
||||
star_infos: [0, 0, 0, 0, 0, 0],
|
||||
identity:undefined,
|
||||
TPMRightSectionData:undefined,
|
||||
PropaedeuticsList: undefined,
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount = () => {
|
||||
|
||||
let id = this.props.match.params.shixunId;
|
||||
|
||||
// let collaborators = `/shixuns/` + id + `/propaedeutics.json`;
|
||||
//
|
||||
// axios.get(collaborators).then((response) => {
|
||||
// if (response.status === 200) {
|
||||
// if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
|
||||
//
|
||||
// }else{
|
||||
// this.setState({
|
||||
// PropaedeuticsList: response.data,
|
||||
// shixunId: id
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// }).catch((error) => {
|
||||
// console.log(error)
|
||||
// });
|
||||
|
||||
let Url = `/shixuns/` + id + `.json`;
|
||||
axios.get(Url).then((response) => {
|
||||
if (response.status === 200) {
|
||||
document.title=response.data.name;
|
||||
let newstar_info = [];
|
||||
// let start1=
|
||||
for (var i = 0; i < response.data.score_info.length; i++) {
|
||||
|
||||
if (i === 0) {
|
||||
newstar_info.push(response.data.score_info[i])
|
||||
} else {
|
||||
newstar_info.push((response.data.score_info[i] / 100) * 5)
|
||||
}
|
||||
}
|
||||
let newstar_infos = response.data.score_info;
|
||||
this.setState({
|
||||
shixunsDetails: response.data,
|
||||
shixunId: id,
|
||||
star_info: newstar_info,
|
||||
star_infos: newstar_infos,
|
||||
power: response.data.power,
|
||||
identity: response.data.identity,
|
||||
propaedeutics:response.data.propaedeutics,
|
||||
status: response.data.status,
|
||||
});
|
||||
}
|
||||
}).catch((error) => {
|
||||
this.setState({
|
||||
shixunsDetails: undefined,
|
||||
shixunId: undefined,
|
||||
star_info: undefined,
|
||||
star_infos: undefined,
|
||||
power: undefined,
|
||||
identity: undefined,
|
||||
status: undefined,
|
||||
propaedeutics:undefined
|
||||
});
|
||||
});
|
||||
|
||||
this.tpmContentRequestInterceptor = axios.interceptors.request.use((config) => {
|
||||
let url = config.url;
|
||||
// console.log('tpmContentRequestInterceptor:', url)
|
||||
for ( let i = 0; i < interceptorUrlArray.length; i++ ) {
|
||||
if (url.indexOf(interceptorUrlArray[i]) != -1) {
|
||||
url = url.split('?')[0]
|
||||
console.log('loadingContent, url:', url)
|
||||
|
||||
this.setState({ loadingContent: true })
|
||||
|
||||
cacheInterceptorUrlMap[url] = true
|
||||
}
|
||||
}
|
||||
return config;
|
||||
}, function (error) {
|
||||
return Promise.reject(error);
|
||||
});
|
||||
|
||||
// Add a response interceptor
|
||||
this.tpmContentResponseInterceptor = axios.interceptors.response.use((response) => {
|
||||
// console.log('loadingContent finished, url:', response.config.url)
|
||||
// TODO 依赖了api这个前缀
|
||||
let url = response.config.url.split('api')[1];
|
||||
url = url.split('?')[0]
|
||||
if (cacheInterceptorUrlMap[url]) {
|
||||
|
||||
this.setState({ loadingContent: false })
|
||||
delete cacheInterceptorUrlMap[response.url]
|
||||
}
|
||||
return response;
|
||||
}, function (error) {
|
||||
// Do something with response error
|
||||
return Promise.reject(error);
|
||||
});
|
||||
|
||||
|
||||
//右侧数据
|
||||
let shixunsDetailsURL=`/shixuns/`+id+`/show_right.json`;
|
||||
axios.get(shixunsDetailsURL).then((response)=> {
|
||||
this.setState({
|
||||
TPMRightSectionData: response.data
|
||||
});
|
||||
})
|
||||
|
||||
}
|
||||
componentWillUnmount = () => {
|
||||
axios.interceptors.request.eject(this.tpmContentRequestInterceptor);
|
||||
this.tpmContentRequestInterceptor = null;
|
||||
axios.interceptors.request.eject(this.tpmContentResponseInterceptor);
|
||||
this.tpmContentResponseInterceptor = null;
|
||||
}
|
||||
|
||||
|
||||
setLoadingContent = (isLoadingContent) => {
|
||||
this.setState({ loadingContent: isLoadingContent })
|
||||
}
|
||||
|
||||
// TpmTPMBannertype(type){
|
||||
//
|
||||
// }
|
||||
|
||||
render() {
|
||||
|
||||
return (
|
||||
<div className="newMain clearfix">
|
||||
|
||||
<TPMBanner
|
||||
{...this.props}
|
||||
{...this.state}
|
||||
></TPMBanner>
|
||||
|
||||
<Switch {...this.props}>
|
||||
|
||||
<Route path="/shixuns/:shixunId/repository/:repoId/commits" render={
|
||||
(props) => (<TPMRepositoryCommits {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/challenges" render={
|
||||
(props) => (<TPMChallengeComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route path="/shixuns/:shixunId/repository" render={
|
||||
(props) => (<TPMRepositoryComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
{/* <Route exact path="/shixuns/:shixunId/propaedeutics" component={TPMPropaedeuticsComponent}></Route> */}
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/propaedeutics" render={
|
||||
(props) => (<TPMPropaedeuticsComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/collaborators" render={
|
||||
(props) => (<TPMCollaboratorsComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
{/* <Route exact path="/shixuns/:shixunId/repository/:shixunId/" component={TPMRepositoryComponent}></Route> */}
|
||||
|
||||
|
||||
<Route path="/shixuns/:shixunId/shixun_discuss" render={
|
||||
(props) => (<TPMShixunDiscussContainer {...this.props} {...this.state} {...props}
|
||||
initForumState={(data)=>this.initForumState(data)}
|
||||
setSearchValue={this.setSearchValue}
|
||||
setHotLabelIndex={this.setHotLabelIndex}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
<Route path="/shixuns/:shixunId/settings" render={
|
||||
(props) => (<TPMsettings {...this.props} {...this.state} {...props} />)
|
||||
}></Route>
|
||||
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/ranking_list" render={
|
||||
(props) => (<TPMRanking_listComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/fork_list" render={
|
||||
(props) => (<TPMFork_listComponent {...this.props} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/update_propaedeutics" render={
|
||||
(props) => (<TPMUpdatepropaede {...this.props} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
{/*评测设置*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/tab=2" render={
|
||||
(props) => (<TPMevaluation {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
{/*参考答案*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/tab=3" render={
|
||||
(props) => (<TPManswer {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
{/*新建关卡*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/new" render={
|
||||
(props) => (<TPMchallengesnew {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
{/*编辑关卡*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/editcheckpoint" render={
|
||||
(props) => (<TPMchallengesnew {...this.props} {...props} {...this.state} />)
|
||||
}></Route>
|
||||
|
||||
{/*新建选择题*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/newquestion" render={
|
||||
(props) => (<TPMquestion {...this.props} {...props} {...this.state} />)
|
||||
}></Route>
|
||||
|
||||
{/*修改选择题*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/editquestion/:choose_id" render={
|
||||
(props) => (<TPMquestion {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
{/*修改选择题*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/editquestion" render={
|
||||
(props) => (<TPMquestion {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId" render={
|
||||
(props) => (<TPMChallengeComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
{/*<Route exact path="/shixuns/:shixunId" component={TPMChallengeComponent}></Route>*/}
|
||||
</Switch>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default SnackbarHOC() (TPMIndexHOC ( TPMIndex ));
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
|
||||
|
||||
import Loading from '../../Loading';
|
||||
|
||||
import Loadable from 'react-loadable';
|
||||
|
||||
import { TPMIndexHOC } from './TPMIndexHOC';
|
||||
|
||||
import { SnackbarHOC } from 'educoder';
|
||||
|
||||
import TPMBanner from './TPMBanner';
|
||||
|
||||
import axios from 'axios';
|
||||
|
||||
import TPMShixunDiscussContainer from './TPMShixunDiscussContainer';
|
||||
|
||||
import TPMRepositoryComponent from './TPMRepositoryComponent';
|
||||
|
||||
import TPMRepositoryCommits from './shixunchild/Repository/TPMRepositoryCommits';
|
||||
|
||||
import TPMsettings from './TPMsettings/TPMsettings';
|
||||
|
||||
import TPMChallengeComponent from './TPMChallengeContainer'
|
||||
import TPMPropaedeuticsComponent from './TPMPropaedeuticsComponent'
|
||||
import TPMRanking_listComponent from './TPMRanking_listContainer'
|
||||
import TPMCollaboratorsComponent from './TPMCollaboratorsContainer'
|
||||
|
||||
import '../page/tpiPage.css'
|
||||
//任务
|
||||
// const TPMChallengeComponent = Loadable({
|
||||
// loader: () => import('./TPMChallengeContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//背景知识
|
||||
// const TPMPropaedeuticsComponent = Loadable({
|
||||
// loader: () => import('./TPMPropaedeuticsComponent'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//版本库
|
||||
// const TPMRepositoryComponent = Loadable({
|
||||
// loader: () => import('./TPMRepositoryComponent'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
// const TPMRepositoryComponent = Loadable({
|
||||
// loader: () => import('./TPMRepositoryComponent'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//合作
|
||||
// const TPMCollaboratorsComponent = Loadable({
|
||||
// loader: () => import('./TPMCollaboratorsContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
|
||||
//评论
|
||||
// const TPMShixunDiscussComponent = Loadable({
|
||||
// loader: () => import('./TPMShixunDiscussContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//排行版
|
||||
// const TPMRanking_listComponent = Loadable({
|
||||
// loader: () => import('./TPMRanking_listContainer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
// //编辑实训
|
||||
// const TPMModifysettings = Loadable({
|
||||
// loader: () =>import('./modules/tpm/TPMsettings/TPMsettings'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
|
||||
//新建实训
|
||||
const TPMchallengesnew = Loadable({
|
||||
loader: () => import('./challengesnew/TPMchallengesnew'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//新建tab2
|
||||
const TPMevaluation = Loadable({
|
||||
loader: () => import('./challengesnew/TPMevaluation'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//新建tab3答案
|
||||
// const TPManswer = Loadable({
|
||||
// loader: () => import('./challengesnew/TPManswer'),
|
||||
// loading: Loading,
|
||||
// })
|
||||
const TPManswer = Loadable({
|
||||
loader: () => import('./challengesnew/TPManswer2'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//选择题
|
||||
const TPMquestion = Loadable({
|
||||
loader: () => import('./challengesnew/TPMquestion'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
//fork列表
|
||||
const TPMFork_listComponent = Loadable({
|
||||
loader: () => import('./TPMFork/TPMForklist'),
|
||||
loading: Loading,
|
||||
})
|
||||
//背景知识修改
|
||||
const TPMUpdatepropaede = Loadable({
|
||||
loader: () => import('./TPMUpdatepropaede/TPMUpdatepropaede'),
|
||||
loading: Loading,
|
||||
})
|
||||
|
||||
|
||||
const interceptorUrlArray = ['repository.json', 'commits.json', 'propaedeutics.json'
|
||||
, 'challenges.json', 'discusses.json', 'ranking_list.json', 'collaborators.json']
|
||||
const cacheInterceptorUrlMap = {}
|
||||
class TPMIndex extends Component {
|
||||
constructor(props) {
|
||||
super(props)
|
||||
this.state = {
|
||||
loadingContent: false,
|
||||
power: false,
|
||||
shixunsDetails: {},
|
||||
shixunId: undefined,
|
||||
star_info: [0, 0, 0, 0, 0, 0],
|
||||
star_infos: [0, 0, 0, 0, 0, 0],
|
||||
identity:undefined,
|
||||
TPMRightSectionData:undefined,
|
||||
PropaedeuticsList: undefined,
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount = () => {
|
||||
|
||||
let id = this.props.match.params.shixunId;
|
||||
|
||||
// let collaborators = `/shixuns/` + id + `/propaedeutics.json`;
|
||||
//
|
||||
// axios.get(collaborators).then((response) => {
|
||||
// if (response.status === 200) {
|
||||
// if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
|
||||
//
|
||||
// }else{
|
||||
// this.setState({
|
||||
// PropaedeuticsList: response.data,
|
||||
// shixunId: id
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// }).catch((error) => {
|
||||
// console.log(error)
|
||||
// });
|
||||
|
||||
let Url = `/shixuns/` + id + `.json`;
|
||||
axios.get(Url).then((response) => {
|
||||
if (response.status === 200) {
|
||||
document.title=response.data.name;
|
||||
let newstar_info = [];
|
||||
// let start1=
|
||||
for (var i = 0; i < response.data.score_info.length; i++) {
|
||||
|
||||
if (i === 0) {
|
||||
newstar_info.push(response.data.score_info[i])
|
||||
} else {
|
||||
newstar_info.push((response.data.score_info[i] / 100) * 5)
|
||||
}
|
||||
}
|
||||
let newstar_infos = response.data.score_info;
|
||||
this.setState({
|
||||
shixunsDetails: response.data,
|
||||
shixunId: id,
|
||||
star_info: newstar_info,
|
||||
star_infos: newstar_infos,
|
||||
power: response.data.power,
|
||||
identity: response.data.identity,
|
||||
propaedeutics:response.data.propaedeutics,
|
||||
status: response.data.shixun_status,
|
||||
});
|
||||
}
|
||||
}).catch((error) => {
|
||||
this.setState({
|
||||
shixunsDetails: undefined,
|
||||
shixunId: undefined,
|
||||
star_info: undefined,
|
||||
star_infos: undefined,
|
||||
power: undefined,
|
||||
identity: undefined,
|
||||
status: undefined,
|
||||
propaedeutics:undefined
|
||||
});
|
||||
});
|
||||
|
||||
this.tpmContentRequestInterceptor = axios.interceptors.request.use((config) => {
|
||||
let url = config.url;
|
||||
// console.log('tpmContentRequestInterceptor:', url)
|
||||
for ( let i = 0; i < interceptorUrlArray.length; i++ ) {
|
||||
if (url.indexOf(interceptorUrlArray[i]) != -1) {
|
||||
url = url.split('?')[0]
|
||||
console.log('loadingContent, url:', url)
|
||||
|
||||
this.setState({ loadingContent: true })
|
||||
|
||||
cacheInterceptorUrlMap[url] = true
|
||||
}
|
||||
}
|
||||
return config;
|
||||
}, function (error) {
|
||||
return Promise.reject(error);
|
||||
});
|
||||
|
||||
// Add a response interceptor
|
||||
this.tpmContentResponseInterceptor = axios.interceptors.response.use((response) => {
|
||||
// console.log('loadingContent finished, url:', response.config.url)
|
||||
// TODO 依赖了api这个前缀
|
||||
let url = response.config.url.split('api')[1];
|
||||
url = url.split('?')[0]
|
||||
if (cacheInterceptorUrlMap[url]) {
|
||||
|
||||
this.setState({ loadingContent: false })
|
||||
delete cacheInterceptorUrlMap[response.url]
|
||||
}
|
||||
return response;
|
||||
}, function (error) {
|
||||
// Do something with response error
|
||||
return Promise.reject(error);
|
||||
});
|
||||
|
||||
|
||||
//右侧数据
|
||||
let shixunsDetailsURL=`/shixuns/`+id+`/show_right.json`;
|
||||
axios.get(shixunsDetailsURL).then((response)=> {
|
||||
this.setState({
|
||||
TPMRightSectionData: response.data
|
||||
});
|
||||
})
|
||||
|
||||
}
|
||||
componentWillUnmount = () => {
|
||||
axios.interceptors.request.eject(this.tpmContentRequestInterceptor);
|
||||
this.tpmContentRequestInterceptor = null;
|
||||
axios.interceptors.request.eject(this.tpmContentResponseInterceptor);
|
||||
this.tpmContentResponseInterceptor = null;
|
||||
}
|
||||
|
||||
|
||||
setLoadingContent = (isLoadingContent) => {
|
||||
this.setState({ loadingContent: isLoadingContent })
|
||||
}
|
||||
|
||||
// TpmTPMBannertype(type){
|
||||
//
|
||||
// }
|
||||
|
||||
render() {
|
||||
|
||||
return (
|
||||
<div className="newMain clearfix">
|
||||
|
||||
<TPMBanner
|
||||
{...this.props}
|
||||
{...this.state}
|
||||
></TPMBanner>
|
||||
|
||||
<Switch {...this.props}>
|
||||
|
||||
<Route path="/shixuns/:shixunId/repository/:repoId/commits" render={
|
||||
(props) => (<TPMRepositoryCommits {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/challenges" render={
|
||||
(props) => (<TPMChallengeComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route path="/shixuns/:shixunId/repository" render={
|
||||
(props) => (<TPMRepositoryComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
{/* <Route exact path="/shixuns/:shixunId/propaedeutics" component={TPMPropaedeuticsComponent}></Route> */}
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/propaedeutics" render={
|
||||
(props) => (<TPMPropaedeuticsComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/collaborators" render={
|
||||
(props) => (<TPMCollaboratorsComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
{/* <Route exact path="/shixuns/:shixunId/repository/:shixunId/" component={TPMRepositoryComponent}></Route> */}
|
||||
|
||||
|
||||
<Route path="/shixuns/:shixunId/shixun_discuss" render={
|
||||
(props) => (<TPMShixunDiscussContainer {...this.props} {...this.state} {...props}
|
||||
initForumState={(data)=>this.initForumState(data)}
|
||||
setSearchValue={this.setSearchValue}
|
||||
setHotLabelIndex={this.setHotLabelIndex}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
<Route path="/shixuns/:shixunId/settings" render={
|
||||
(props) => (<TPMsettings {...this.props} {...this.state} {...props} />)
|
||||
}></Route>
|
||||
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/ranking_list" render={
|
||||
(props) => (<TPMRanking_listComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/fork_list" render={
|
||||
(props) => (<TPMFork_listComponent {...this.props} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId/update_propaedeutics" render={
|
||||
(props) => (<TPMUpdatepropaede {...this.props} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
{/*评测设置*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/tab=2" render={
|
||||
(props) => (<TPMevaluation {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
{/*参考答案*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/tab=3" render={
|
||||
(props) => (<TPManswer {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
{/*新建关卡*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/new" render={
|
||||
(props) => (<TPMchallengesnew {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
{/*编辑关卡*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/editcheckpoint" render={
|
||||
(props) => (<TPMchallengesnew {...this.props} {...props} {...this.state} />)
|
||||
}></Route>
|
||||
|
||||
{/*新建选择题*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/newquestion" render={
|
||||
(props) => (<TPMquestion {...this.props} {...props} {...this.state} />)
|
||||
}></Route>
|
||||
|
||||
{/*修改选择题*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/editquestion/:choose_id" render={
|
||||
(props) => (<TPMquestion {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
{/*修改选择题*/}
|
||||
<Route path="/shixuns/:shixunId/challenges/:checkpointId/editquestion" render={
|
||||
(props) => (<TPMquestion {...this.props} {...props} {...this.state}/>)
|
||||
}></Route>
|
||||
|
||||
<Route exact path="/shixuns/:shixunId" render={
|
||||
(props) => (<TPMChallengeComponent {...this.props} {...this.state} {...props}
|
||||
/>)
|
||||
}></Route>
|
||||
|
||||
|
||||
{/*<Route exact path="/shixuns/:shixunId" component={TPMChallengeComponent}></Route>*/}
|
||||
</Switch>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default SnackbarHOC() (TPMIndexHOC ( TPMIndex ));
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue