From 335a3b4378abeb4058262b66decb72bff6b8a8fc Mon Sep 17 00:00:00 2001 From: hjm <63528605@qq.com> Date: Thu, 12 Sep 2019 09:31:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E4=B8=AD=EF=BC=8C=20tpi=20?= =?UTF-8?q?=20this.props.shixun.code=5Fedit=5Fpermission?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react/src/context/TPIContextProvider.js | 4 ++- .../src/modules/page/MainContentContainer.js | 35 ++++++++++++++----- public/react/src/modules/page/VNCContainer.js | 27 ++++++++++---- .../page/component/monaco/TPIMonaco.js | 4 +-- .../modules/page/main/CodeRepositoryView.js | 9 ++--- .../page/main/CodeRepositoryViewContainer.js | 4 ++- 6 files changed, 59 insertions(+), 24 deletions(-) diff --git a/public/react/src/context/TPIContextProvider.js b/public/react/src/context/TPIContextProvider.js index df738ef98..2d58140e6 100644 --- a/public/react/src/context/TPIContextProvider.js +++ b/public/react/src/context/TPIContextProvider.js @@ -268,12 +268,14 @@ pop_box_new(htmlvalue, 480, 182); }); } - onPathChange(index) { + onPathChange(index, callback) { let { challenge } = this.state; // challenge = Object.assign({}, challenge) // challenge.pathIndex = index; this.setState({ challenge: update(challenge, {pathIndex: { $set: index }}), + }, () => { + callback && callback() }) // TODO load new path content } diff --git a/public/react/src/modules/page/MainContentContainer.js b/public/react/src/modules/page/MainContentContainer.js index 3a9643f8d..8d6153186 100644 --- a/public/react/src/modules/page/MainContentContainer.js +++ b/public/react/src/modules/page/MainContentContainer.js @@ -208,11 +208,12 @@ class MainContentContainer extends Component { if (!this.props || !this.props.game || ( newProps.game.identifier !== this.props.game.identifier ) ) { setTimeout(this.fetchRepositoryCode( newProps), 1500); - } else if ( this.props.challenge.pathIndex != newProps.challenge.pathIndex - && newProps.challenge.pathIndex !== -1) { // 切换到只读文件 + } + // else if ( this.props.challenge.pathIndex != newProps.challenge.pathIndex + // && newProps.challenge.pathIndex !== -1) { // 切换到只读文件 // pathIndex切换 - setTimeout(this.fetchRepositoryCode( newProps), 1500); - } + // setTimeout(this.fetchRepositoryCode( newProps), 1500); + // } } if (newProps.myshixun) { var stageId = newProps.match.params.stageId; @@ -231,9 +232,13 @@ class MainContentContainer extends Component { // 切换关卡时,停止轮训 this.oldGameIdentifier = prevProps.game.identifier; this.doFileUpdateRequestOnCodeMirrorBlur(prevProps) - } else if (challenge && (challenge.pathIndex || prevProps.challenge.pathIndex) && challenge.pathIndex != prevProps.challenge.pathIndex) { + } + // else if (this.props.shixun && this.props.shixun.code_edit_permission && this.state.currentPath != prevState.currentPath) { + // this.doFileUpdateRequestOnCodeMirrorBlur(prevProps) + // } + else if (challenge && (challenge.pathIndex || prevProps.challenge.pathIndex) && challenge.pathIndex != prevProps.challenge.pathIndex) { this.doFileUpdateRequestOnCodeMirrorBlur(prevProps) - } + } } @@ -253,6 +258,9 @@ class MainContentContainer extends Component { this.setState({ codeLoading: false }); return; } + if (type && arg_path) { + this.doFileUpdateRequestOnCodeMirrorBlur(this.props) + } const stageId = game.identifier let path; let isEditablePath = false; @@ -535,7 +543,9 @@ class MainContentContainer extends Component { this.oldRepositoryCode = codeContent; let argPath; - if (challenge.pathIndex === -1) { // 当前是只读文件 + if (this.props.shixun && this.props.shixun.code_edit_permission == true) { + argPath = this.state.currentPath + } else if (challenge.pathIndex === -1) { // 当前是只读文件 argPath = challenge.multiPath === true ? challenge.path[0] : challenge.path } else { argPath = challenge.multiPath === true ? challenge.path[challenge.pathIndex] : challenge.path @@ -624,6 +634,11 @@ class MainContentContainer extends Component { gameBuilding: false }) } + onPathChange = (index, isDropDown) => { + this.props.onPathChange(index, () => { + isDropDown && this.fetchRepositoryCode() + }) + } onRunCodeTest() { // tipContent(0, 100, 30, 360, 1) // return; // for test @@ -634,7 +649,7 @@ class MainContentContainer extends Component { showDialog({ contentText: '需要先切回可编辑的文件才可评测,确认要现在切换吗?', callback: () => { - onPathChange(0) + this.onPathChange(0, true) handleGdialogClose(); } }) @@ -957,7 +972,9 @@ class MainContentContainer extends Component { onRepositoryCodeUpdate={this.onRepositoryCodeUpdate} onRunCodeTest={this.onRunCodeTest} codemirrorDidMount={this.codemirrorDidMount} fetchRepositoryCode={this.fetchRepositoryCode} showResetCodeDialog={this.showResetCodeDialog} showResetPassedCodeDialog={this.showResetPassedCodeDialog} - doFileUpdateRequestOnCodeMirrorBlur={this.doFileUpdateRequestOnCodeMirrorBlur} > + doFileUpdateRequestOnCodeMirrorBlur={this.doFileUpdateRequestOnCodeMirrorBlur} + onPathChange={this.onPathChange} + > ); diff --git a/public/react/src/modules/page/VNCContainer.js b/public/react/src/modules/page/VNCContainer.js index ec8a31820..3a85976bb 100644 --- a/public/react/src/modules/page/VNCContainer.js +++ b/public/react/src/modules/page/VNCContainer.js @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import axios from 'axios' -import { Spin } from 'antd' +import { Spin, Icon } from 'antd' import ClipboardJS from 'clipboard' import VNCDisplay from './VNCDisplay' @@ -22,7 +22,9 @@ class VNCContainer extends Component { this.state = { fileTreeSelectedKeys: [], repositoryCode: '', - displayKey: 1 + displayKey: 1, + vnc_reseting: false, + } } componentDidMount() { @@ -116,6 +118,7 @@ class VNCContainer extends Component { this.setState({ bottomDrawer: true }) } onResetVNC = () => { + if (this.state.vnc_reseting) return; // 桌面系统将恢复到初始状态,您在系统中创建的数据可能会丢失 // 请确保您的数据已保存(如:版本库代码已推送到服务器) // 是否确认重置? @@ -127,13 +130,15 @@ class VNCContainer extends Component { , onOk: () => { const url = `/tasks/${this.props.game.identifier}/reset_vnc_link.json` + this.setState({ vnc_reseting: true }) axios.get(url, { }).then((response) => { if (response.data.data && response.data.data.vnc_url) { // reset this.setState({ displayKey: this.state.displayKey + 1, - vnc_url: response.data.data.vnc_url + vnc_url: response.data.data.vnc_url, + vnc_reseting: false }) } else { } @@ -141,7 +146,7 @@ class VNCContainer extends Component { }).catch(error =>{ console.log(error) - this.setState({ readingCodeLoading: false }); + this.setState({ vnc_reseting: false }); this.props.showSnackbar(`服务端异常,请联系管理员!`); }) @@ -270,15 +275,23 @@ class VNCContainer extends Component { > - + {/* */} + {this.state.vnc_reseting ? + : } 重置桌面系统 + + {/* + */} + + - + > + + { domArray.push( -

this.onPathChange(index) } > +

this.onPathChange(index, true) } > {item}

) }) @@ -501,7 +501,8 @@ class CodeRepositoryView extends Component { } */}
+ style={{ backgroundImage: `url('${notEditablePathImg}')` + , display: (isEditablePath || this.props.shixun && this.props.shixun.code_edit_permission ? 'none' : 'block') }}> {/**/} {/* cm monaco 切换 */} {/* */} diff --git a/public/react/src/modules/page/main/CodeRepositoryViewContainer.js b/public/react/src/modules/page/main/CodeRepositoryViewContainer.js index c6e7ddc79..111ccd253 100644 --- a/public/react/src/modules/page/main/CodeRepositoryViewContainer.js +++ b/public/react/src/modules/page/main/CodeRepositoryViewContainer.js @@ -231,12 +231,14 @@ class CodeRepositoryViewContainer extends Component { const { fetchRepositoryCode, onPathChange, showSnackbar, challenge } = this.props; const nodePath = info.node.props.eventKey; + let isCurrentFile = false; // 设置pathIndex为-1,那么代码文件下拉可以切回可编辑的文件 if (!challenge.multiPath) { // 单path任务 多path任务 path是数组 if (challenge.path.trim() == nodePath.trim()) { if (challenge.pathIndex === 0) { showSnackbar(`当前编辑文件已经是${nodePath}`) } else { + fetchRepositoryCode(null, nodePath, 1); onPathChange(0) } return; @@ -244,7 +246,7 @@ class CodeRepositoryViewContainer extends Component { onPathChange(-1) } } else { - let isCurrentFile = false; + let cur_index = -1; if (challenge.path && challenge.path.forEach) { challenge.path.forEach((item, index) => {