diff --git a/public/react/src/context/TPIContextProvider.js b/public/react/src/context/TPIContextProvider.js index ae88bf865..3e7695847 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,48 @@ pop_box_new(htmlvalue, 480, 182); currentPassedGameGainExperience: experience, }) } + initDisplayInterval = () => { + 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 +690,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: