diff --git a/public/react/src/common/SnackbarHOC.js b/public/react/src/common/SnackbarHOC.js
index a59607bf4..d66b697ca 100644
--- a/public/react/src/common/SnackbarHOC.js
+++ b/public/react/src/common/SnackbarHOC.js
@@ -23,22 +23,31 @@ export function SnackbarHOC(options = {}) {
}
// 全局的snackbar this.props.showSnackbar调用即可
- showSnackbar(description, message = "提示",icon) {
- // this.setState({
- // snackbarOpen: true,
- // snackbarText: text,
- // snackbarVertical: vertical,
- // snackbarHorizontal: horizontal,
- // })
- const data = {
- message,
- description
- }
- if (icon) {
- data.icon = icon;
+ // showSnackbar(description, message = "提示",icon) {
+ // // this.setState({
+ // // snackbarOpen: true,
+ // // snackbarText: text,
+ // // snackbarVertical: vertical,
+ // // snackbarHorizontal: horizontal,
+ // // })
+ // const data = {
+ // message,
+ // description
+ // }
+ // if (icon) {
+ // data.icon = icon;
+ // }
+ // notification.open(data);
+ // }
+
+ showSnackbar(text, vertical, horizontal) {
+ this.setState({
+ snackbarOpen: true,
+ snackbarText: text,
+ snackbarVertical: vertical,
+ snackbarHorizontal: horizontal,
+ })
}
- notification.open(data);
- }
render() {
const { snackbarOpen, snackbarText, snackbarHorizontal, snackbarVertical } = this.state;
diff --git a/public/react/src/context/TPIContextProvider.js b/public/react/src/context/TPIContextProvider.js
index ae88bf865..3cb725c34 100644
--- a/public/react/src/context/TPIContextProvider.js
+++ b/public/react/src/context/TPIContextProvider.js
@@ -54,6 +54,8 @@ const testSetsExpandedArrayInitVal = [false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false]
window.__fetchAllFlag = false; // 是否调用过fetchAll TODO 如何多次使用provider?
+
+const $ = window.$
class TPIContextProvider extends Component {
constructor(props) {
super(props)
@@ -592,13 +594,49 @@ pop_box_new(htmlvalue, 480, 182);
currentPassedGameGainExperience: experience,
})
}
+ initDisplayInterval = () => {
+ const challenge = this.state.challenge
+ if (this.showWebDisplayButtonTimeout) {
+ window.clearTimeout(this.showWebDisplayButtonTimeout)
+ }
+ this.showWebDisplayButtonTimeout = window.setTimeout(() => {
+ this.setState({ challenge: update(challenge,
+ {
+ showWebDisplayButton: { $set: false },
+ })
+ })
+ this.showWebDisplayButtonTimeout = null
+ }, 61 * 1000)
+
+ let remain = 60
+ if (this.displayInterval) {
+ window.clearInterval(this.displayInterval)
+ }
+ this.displayInterval = window.setInterval(() => {
+ const button = $('#showWebDisplayButton');
+ if (button.length) {
+ button.html(`查看效果(${remain})`)
+ if (remain == 0) {
+ button.html('查看效果')
+ }
+ }
+ if (remain == 0) {
+ window.clearInterval(this.displayInterval)
+ this.displayInterval = null
+ return;
+ }
+
+ remain -= 1;
+ }, 1000)
+ }
language_display(data) {
const { game, tomcat_url } = this.state;
- const $ = window.$;
const challenge = Object.assign({}, this.state.challenge)
if(challenge.isWeb && data.port != -1) {
// var $result = $("#php_display");
challenge.showWebDisplayButton = true; // ActionView处是否出现查看效果按钮
+ this.initDisplayInterval()
+
const path = challenge.web_route || challenge.path
const webDisplayUrl = `${tomcat_url}:${data.port}/${path}`
challenge.webDisplayUrl = webDisplayUrl
@@ -653,24 +691,11 @@ pop_box_new(htmlvalue, 480, 182);
const currentGamePassed = this.props.game !== 2 && status === 2
- currentGamePassed && this.language_display(response);
+
// 评测通过了,立即同步costTime
currentGamePassed && this._updateCostTime(true, true);
- if (currentGamePassed) {
- game.status = 2;
- game.next_game = next_game;
-
- } else {
- this.showDialog({
- contentText:
,
- isSingleButton: true
- })
- }
const output_sets = {
"test_sets": test_sets,
@@ -689,6 +714,31 @@ pop_box_new(htmlvalue, 480, 182);
// output_sets.test_sets_array = test_sets_array;
// }
+ // 检查是否编译通过
+ let compileSuccess = false;
+ if (test_sets && test_sets.length) {
+ test_sets.some((item) => {
+ if (item.compile_success) {
+ compileSuccess = true;
+ return true;
+ }
+ })
+ }
+
+ compileSuccess && this.language_display(response);
+ if (currentGamePassed) {
+ game.status = 2;
+ game.next_game = next_game;
+ } else {
+ this.showDialog({
+ contentText: ,
+ isSingleButton: true
+ })
+ }
+
this.setState({
testSetsExpandedArray: testSetsExpandedArrayInitVal.slice(0), // 重置测试集展开状态
diff --git a/public/react/src/modules/courses/Resource/Fileslistitem.js b/public/react/src/modules/courses/Resource/Fileslistitem.js
index 1af027757..6a1e16d6d 100644
--- a/public/react/src/modules/courses/Resource/Fileslistitem.js
+++ b/public/react/src/modules/courses/Resource/Fileslistitem.js
@@ -5,7 +5,8 @@ import {Link} from 'react-router-dom';
import {getImageUrl} from 'educoder';
import axios from 'axios'
import {getUrl} from 'educoder';
-import moment from 'moment';
+import moment from 'moment'
+import { Base64 } from 'js-base64';
import CoursesListType from '../coursesPublic/CoursesListType';
import Showoldfiles from "../coursesPublic/Showoldfiles";
import Modals from '../../modals/Modals';
@@ -26,8 +27,18 @@ class Fileslistitem extends Component{
})
this.props.Settingtypes(discussMessage.id)
}
- showfiles=(value)=>{
+ downloadfiles=(url,name)=>{
+ const aLink = document.createElement('a');
+ aLink.style.display='none';
+ console.log(name)
+ aLink.setAttribute('download',name)
+ aLink.href = url;
+ document.body.appendChild(aLink);
+ aLink.click();
+ // document.body.removeChild(aLink);
+ }
+ showfiles=(value)=>{
let {discussMessage,coursesId}=this.props
let file_id=discussMessage.id
let url="/files/"+file_id+"/histories.json"
@@ -38,35 +49,14 @@ class Fileslistitem extends Component{
}).then((result)=>{
if(result.data.attachment_histories.length===0){
-
- let link = document.createElement('a');
- document.body.appendChild(link);
- link.href = result.data.url;
- console.log(value)
- link.download = value;
- //兼容火狐浏览器
- let evt = document.createEvent("MouseEvents");
- evt.initEvent("click", false, false);
- link.dispatchEvent(evt);
- document.body.removeChild(link);
-
-
- // // window.location.href=result.data.url;
- // let url = window.URL.createObjectURL(new Blob([result.data.url]));
- // let link = document.createElement('a');
- // link.style.display = 'none';
- // link.href = url;
- // link.setAttribute('download',result.data.title);
- // document.body.appendChild(link);
- // link.click();
-
- }else{
+ this.downloadfiles(result.data.url,result.data.title)
+ }else{
this.setState({
Showoldfiles:true,
allfiles:result.data
})
}
- // console.log(result)
+
}).catch((error)=>{
console.log(error)
})
diff --git a/public/react/src/modules/courses/poll/PollListItem.js b/public/react/src/modules/courses/poll/PollListItem.js
index 16770ce43..8e6198eae 100644
--- a/public/react/src/modules/courses/poll/PollListItem.js
+++ b/public/react/src/modules/courses/poll/PollListItem.js
@@ -21,6 +21,7 @@ class PollListItem extends Component{
const IsAdmin =this.props.isAdmin();
const isStudent = this.props.isStudent();
+ const isNotMember = this.props.isNotMember();
let t= item.end_time ? moment(item.end_time) - moment() : 0;
return(
@@ -42,7 +43,7 @@ class PollListItem extends Component{
{item.polls_name}
}
{
- item.lock_status === 0 ? :""
+ item.lock_status === 0 ? :""
}
{
diff --git a/public/react/src/modules/page/main/ActionView.js b/public/react/src/modules/page/main/ActionView.js
index e0e52de9e..fff7d416d 100644
--- a/public/react/src/modules/page/main/ActionView.js
+++ b/public/react/src/modules/page/main/ActionView.js
@@ -25,7 +25,14 @@ const styles = theme => ({
color: '#4CACFF',
border: '1px solid #4CACFF'
}
+ },
+ hoverButton: {
+ margin: theme.spacing.unit,
+ height: '30px',
+ padding: '0 16px',
+ color: '#4CACFF',
+ border: '1px solid #4CACFF'
},
buttonText: {
color: '#1B4061 !important',
@@ -64,11 +71,12 @@ class ActionView extends Component {
{/*将第一个按钮改为visibility方式隐藏,不然加载时测评按钮会出现没有垂直居中的情况*/}
-
-
+
+
+
{
!gameBuilding &&