From a9c694225649cc02a9b459ef3a393e9a562442fe Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Sat, 6 Jul 2019 10:13:30 +0800 Subject: [PATCH] display --- .../react/src/context/TPIContextProvider.js | 79 +++++++++++++++---- .../react/src/modules/page/main/ActionView.js | 18 +++-- 2 files changed, 77 insertions(+), 20 deletions(-) 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:
-
评测未通过
-
详情请参见“测试结果”
-
, - isSingleButton: true - }) - } const output_sets = { "test_sets": test_sets, @@ -689,6 +713,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/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 &&