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 &&