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/courses/Index.js b/public/react/src/modules/courses/Index.js index a2f9a14e5..95927893d 100644 --- a/public/react/src/modules/courses/Index.js +++ b/public/react/src/modules/courses/Index.js @@ -305,7 +305,7 @@ class CoursesIndex extends Component{ //Do your stuff here }); } - + //更新左边课堂导航 updataleftNav=()=>{ let query=this.props.location.pathname let {isaloadtype}=this.state; diff --git a/public/react/src/modules/courses/elearning/Elearning.js b/public/react/src/modules/courses/elearning/Elearning.js index 74fdfe201..2ed4bbaa8 100644 --- a/public/react/src/modules/courses/elearning/Elearning.js +++ b/public/react/src/modules/courses/elearning/Elearning.js @@ -29,12 +29,14 @@ class Elearning extends Component{ userlogin:"", isRender:false, subject_id:0, + myupdataleftNavs:this.myupdataleftNav } } componentDidMount() { // 记得删除退出课堂 - // console.log("获取到数据"); + // console.log("在线学习"); + // console.log("获取到数据"); // console.log(this.props); this.getdata(); } @@ -289,6 +291,9 @@ class Elearning extends Component{ }) }; + myupdataleftNav=()=>{ + this.props.updataleftNavfun(); + } render(){ console.log("Elearning++++++++"); // console.log(this.props.Chapterupdate); @@ -397,7 +402,7 @@ class Elearning extends Component{
{/*开始学习*/} - this.Startlearningtwo()} Myreload={()=>this.Myreload()} Tojoinclass={()=>this.Tojoinclass()} getPathCardsList={()=>this.getdata()}> + this.Startlearningtwo()} Myreload={()=>this.Myreload()} Tojoinclass={()=>this.Tojoinclass()} getPathCardsList={()=>this.getdata()} >
diff --git a/public/react/src/modules/courses/elearning/YslDetailCards.js b/public/react/src/modules/courses/elearning/YslDetailCards.js index cb6f06fde..4b295f118 100644 --- a/public/react/src/modules/courses/elearning/YslDetailCards.js +++ b/public/react/src/modules/courses/elearning/YslDetailCards.js @@ -210,7 +210,7 @@ class YslDetailCards extends Component{ - //取消的 + //确认的 updatapathCardsedit=()=>{ this.setState({ idsum:undefined, @@ -219,9 +219,10 @@ class YslDetailCards extends Component{ editbuttomtypeadd:false }) this.props.getPathCardsList(); + this.props.myupdataleftNavs(); // this.props.updatadetailInfoLists(); }; - //确认的 + //取消的 editeditbuttomtypecanle=()=>{ this.setState({ editbuttomtype:true, @@ -300,6 +301,7 @@ class YslDetailCards extends Component{ this.updatapathCardsedit() this.props.showNotification(`删除成功`); + this.props.myupdataleftNavs(); }else { this.props.showNotification(`删除失败`); } diff --git a/public/react/src/modules/courses/shixunHomework/shixunHomework.js b/public/react/src/modules/courses/shixunHomework/shixunHomework.js index c9653260a..a37fa32b1 100644 --- a/public/react/src/modules/courses/shixunHomework/shixunHomework.js +++ b/public/react/src/modules/courses/shixunHomework/shixunHomework.js @@ -1067,7 +1067,7 @@ class ShixunHomework extends Component{ {/*{datas&&datas.category_name===undefined||datas&&datas.category_name===null?datas&&datas.main_category_name:datas&&datas.category_name+" 作业列表"}*/} 实训作业
  • - {datas===undefined?"":datas.homeworks && datas.homeworks.length>1?this.props.isClassManagement()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null? + {datas===undefined?"":datas.homeworks && datas.homeworks.length>1?this.props.isAdminOrCreator()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null? 调整排序 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) => { diff --git a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js index 3425735ae..433146b8c 100644 --- a/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js +++ b/public/react/src/modules/paths/PathDetail/DetailCardsEditAndAdd.js @@ -135,10 +135,11 @@ class DetailCardsEditAndAdd extends Component{ //点击新建阶段 addStage=()=>{ - this.props.editeditbuttomtypes(); this.setState({ editPanel:true }) + this.props.editeditbuttomtypes(); + } //取消新建阶段 @@ -275,13 +276,12 @@ class DetailCardsEditAndAdd extends Component{ shixun_id:shixuns_listeditlist }).then((response) => { // window.location.href = "/paths/" + response.data.subject_id - this.props.getPathCardsLists(); - this.cancelAddState(); this.setState({ stage_nametype:false, descriptiontype:false }) + this.props.getPathCardsLists(); }).catch((error) => { console.log(error) }); diff --git a/public/react/src/modules/paths/PathNew.js b/public/react/src/modules/paths/PathNew.js index 7dcef663b..4e1621bc5 100644 --- a/public/react/src/modules/paths/PathNew.js +++ b/public/react/src/modules/paths/PathNew.js @@ -288,7 +288,7 @@ class PathNew extends Component{
    - + {this.isEditPage ? 取消 diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js index 657a1ef6b..c366b21a3 100644 --- a/public/react/src/modules/tpm/TPMIndexHOC.js +++ b/public/react/src/modules/tpm/TPMIndexHOC.js @@ -202,48 +202,40 @@ export function TPMIndexHOC(WrappedComponent) { NORMAL = 6 # 普通用户 Anonymous = 7 # 普未登录 */ - //超管 + //超管0 isSuperAdmin = () => { // return false return this.state.coursedata&&this.state.coursedata.course_identity === 0 } - // 课堂管理等 + //超管、运维0-1 isClassManagement = () => { - // return this.state.coursedata&&this.state.coursedata.course_identity >= 0 && return this.state.coursedata&&this.state.coursedata.course_identity < 2 } - //老师等 + //超管、运维、课堂管理0-2 isAdminOrCreator = () => { - // return this.state.coursedata&&this.state.coursedata.course_identity >= 0 && return this.state.coursedata&&this.state.coursedata.course_identity < 3 } - // 助教等 + //超管、运维、课堂管理、老师0-3 isAdminOrTeacher = () => { - // return this.state.coursedata&&this.state.coursedata.course_identity >= 0 && return this.state.coursedata&&this.state.coursedata.course_identity < 4 } - // 老师、管理员等 + // 超管、运维、课堂管理、老师、助教0-4 isAdmin = () => { - // return false - // return this.state.coursedata&&this.state.coursedata.course_identity >= 0 && return this.state.coursedata&&this.state.coursedata.course_identity < 5 } - // 学生 + // 学生5 isStudent = () => { - // return true - // return this.state.coursedata&&this.state.coursedata.course_identity >= 0 && return this.state.coursedata&&this.state.coursedata.course_identity === 5 } + // 超管、运维、课堂管理、老师、助教、学生0-5 isAdminOrStudent = () => { - // return this.state.coursedata&&this.state.coursedata.course_identity >= 0 && return this.state.coursedata&&this.state.coursedata.course_identity <= 5 } - // 非课堂成员 + // 游客未登录/非课堂成员6> isNotMember = () => { - // return this.state.coursedata&&this.state.coursedata.course_identity >= 0 && return this.state.coursedata&&this.state.coursedata.course_identity >= 6 } - + //课堂是否已结束 isCourseEnd = () => { return this.state.current_user ? this.state.current_user.course_is_end : false }