import React, { Component } from 'react'; import MonacoEditor from 'react-monaco-editor'; //MonacoDiffEditor 对比模式 import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal,Icon,DatePicker,Breadcrumb,Upload,Button,notification, Tooltip} from 'antd'; // import "antd/dist/antd.css"; import locale from 'antd/lib/date-picker/locale/zh_CN'; import moment from 'moment'; import axios from 'axios'; import './css/TPMsettings.css'; import { getImageUrl, toPath, getUrl ,appendFileSizeToUploadFileAll} from 'educoder'; let origin = getUrl(); let path = getUrl("/editormd/lib/") const $ = window.$; let timeout; let currentValue; const Option = Select.Option; const RadioGroup = Radio.Group; const confirm = Modal.confirm; // 处理整点 半点 // 取传入时间往后的第一个半点 export function handleDateStrings(dateString) { if (!dateString) return dateString; const ar = dateString.split(':') if (ar[1] == '00' || ar[1] == '30') { return dateString } const miniute = parseInt(ar[1]); if (miniute < 30 || miniute == 60) { return [ar[0], '30'].join(':') } if (miniute < 60) { // 加一个小时 const tempStr = [ar[0], '00'].join(':'); const format = "YYYY-MM-DD HH:mm"; const _moment = moment(tempStr, format) _moment.add(1, 'hours') return _moment.format(format) } return dateString } // 恢复数据 function md_rec_data(k,mdu,id, editor){ if(window.sessionStorage.getItem(k+mdu) !== null){ editor.setValue(window.sessionStorage.getItem(k+mdu)); md_clear_data(k,mdu,id); } } // 保存数据 function md_add_data(k,mdu,d){ window.sessionStorage.setItem(k+mdu,d); } // 清空保存的数据 function md_clear_data(k,mdu,id){ window.sessionStorage.removeItem(k+mdu); var id1 = "#e_tip_"+id; var id2 = "#e_tips_"+id; if(k == 'content'){ $(id2).html(""); }else{ $(id1).html(""); } } function md_elocalStorage(editor,mdu,id){ if (window.sessionStorage){ var oc = window.sessionStorage.getItem('content'+mdu); if(oc !== null ){ $("#e_tips_"+id).data('editor', editor); var h = '您上次有已保存的数据,是否恢复 ? / 不恢复'; $("#e_tips_"+id).html(h); } setInterval(function() { var d = new Date(); var h = d.getHours(); var m = d.getMinutes(); var s = d.getSeconds(); h = h < 10 ? '0' + h : h; m = m < 10 ? '0' + m : m; s = s < 10 ? '0' + s : s; if(editor.getValue().trim() != ""){ md_add_data("content",mdu,editor.getValue()); var id1 = "#e_tip_"+id; var id2 = "#e_tips_"+id; $(id1).html(" 数据已于 " + h + ':' + m + ':' + s +" 保存 "); $(id2).html(""); } },10000); }else{ $("#e_tip_"+id).after('您的浏览器不支持localStorage.无法开启自动保存草稿服务,请升级浏览器!'); } } function create_editorMD(id, width, high, placeholder, imageUrl,initValue, callback) { var editorName = window.editormd(id, { width: width, height: high, path: path, // "/editormd/lib/" markdown : initValue, syncScrolling: "single", tex: true, tocm: true, emoji: true, taskList: true, codeFold: true, searchReplace: true, htmlDecode: "style,script,iframe", sequenceDiagram: true, autoFocus: false, placeholder: placeholder, toolbarIcons: function () { // Or return editormd.toolbarModes[name]; // full, simple, mini // Using "||" set icons align right. return ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "|", "testIcon", "testIcon1", '|', "image", "table", '|', "watch", "clear"] }, toolbarCustomIcons: { testIcon: "", testIcon1: "" }, //这个配置在simple.html中并没有,但是为了能够提交表单,使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中,方便post提交表单。 saveHTMLToTextarea: true, // 用于增加自定义工具栏的功能,可以直接插入HTML标签,不使用默认的元素创建图标 dialogMaskOpacity: 0.6, imageUpload: true, imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"], imageUploadURL: imageUrl,//url onload: function () { // this.previewing(); $("#" + id + " [type=\"latex\"]").bind("click", function () { editorName.cm.replaceSelection("```latex"); editorName.cm.replaceSelection("\n"); editorName.cm.replaceSelection("\n"); editorName.cm.replaceSelection("```"); var __Cursor = editorName.cm.getDoc().getCursor(); editorName.cm.setCursor(__Cursor.line - 1, 0); }); $("#" + id + " [type=\"inline\"]").bind("click", function () { editorName.cm.replaceSelection("$$$$"); var __Cursor = editorName.cm.getDoc().getCursor(); editorName.cm.setCursor(__Cursor.line, __Cursor.ch - 2); editorName.cm.focus(); }); $("[type=\"inline\"]").attr("title", "行内公式"); $("[type=\"latex\"]").attr("title", "多行公式"); callback && callback() } }); return editorName; } function updatamakedown(id){ setTimeout(()=>{ var shixunDescr = window.editormd.markdownToHTML(id, { htmlDecode: "style,script,iframe", taskList: true, tex: true, flowChart: true, sequenceDiagram: true }); $("#"+id+" p:first").addClass("ReactMarkdown"); $('#collaborators_list_info').show() }, 200) } function range(start, end) { const result = []; for (let i = start; i < end; i++) { result.push(i); } return result; } function disabledDateTime() { return { // disabledHours: () => range(0, 24).splice(4, 20), disabledMinutes: () => range(1, 30).concat(range(31, 60)), // disabledSeconds: () => [0, 60], }; } function disabledDate(current) { return current && current < moment().endOf('day').subtract(1, 'days'); } export default class TPMsettings extends Component { constructor(props) { super(props) this.state = { fileList: [], commandLine: 0, Openpublic: 0, settingsData: undefined, webssh: 0, use_scope: 0, shixunsstatus: 0, shixunsID: undefined, exec_time: undefined, trainee: undefined, can_copy: undefined, task_pass: undefined, test_set_permission: undefined, hide_code: undefined, code_hidden: undefined, forbid_copy: undefined, vnc: undefined, name: undefined, scope_partment: undefined, scopetype: false, departmentslist: undefined, description: '', evaluate_script:undefined, standard_scripts: undefined, choice_main_type: "", choice_small_type: [], choice_standard_scripts:undefined, editordescriptios: undefined, editorevaluate_scripts: undefined, choice_standard_scriptssum: undefined, visibleTemplate: false, Executiveordervalue: "", Compilecommandvalue: "", Executivetyoe: false, postapplyvisible: false, sendsure_applyvalue: undefined, postapplytitle: false, shixunnametype: false, shixunmaintype: false, evaluate_scripttype: false, exec_timetype: false, traineetype: false, standard_scriptsModal:false, standard_scriptsModals:false, SelectTheCommandtype:false, multi_webssh:false, status:0, opers:false, operss:false, testscripttiptype:false, opersss:false, operateshixunstype:false, opening_time:"", opensmail:false, scope_partmenttype:false, newuse_scope:undefined, scope_partments:0, shixun_service_configs:undefined, shixun_service_configlist:undefined, pod_exist_time: undefined, pod_exist_timetype: false, shixunmemoMDvalue:"", language:"", deleteisnot:true } } descriptionMD=(initValue, id)=> { this.contentChanged = false; const placeholder = ""; // amp; // 编辑时要传memoId const imageUrl = `/api/attachments.json`; // 创建editorMd const description_editormd =create_editorMD(id, '100%', 400, placeholder, imageUrl, initValue,()=> { setTimeout(() => { description_editormd.resize() description_editormd.cm && description_editormd.cm.refresh() }, 500) if (initValue != undefined) { description_editormd.setValue(initValue) } description_editormd.cm.on("change", (_cm, changeObj) => { console.log('....contentChanged') this.contentChanged = true; }) }); md_elocalStorage(description_editormd, `MemoQuestion_${id}`, `${id}Question`); this.description_editormd = description_editormd; window.description_editormd = description_editormd; } evaluate_scriptMD=(initValue, id)=> { this.contentChanged = false; const placeholder = ""; // amp; // 编辑时要传memoId const imageUrl = `/api/attachments.json`; // 创建editorMd const evaluate_script_editormd =create_editorMD(id, '100%', 400, placeholder, imageUrl, initValue,()=> { setTimeout(() => { evaluate_script_editormd.resize() evaluate_script_editormd.cm && evaluate_script_editormd.cm.refresh() }, 500) if (initValue != undefined) { evaluate_script_editormd.setValue(initValue) } evaluate_script_editormd.cm.on("change", (_cm, changeObj) => { console.log('....contentChanged') this.contentChanged = true; }) }); md_elocalStorage(evaluate_script_editormd, `MemoQuestion_${id}`, `${id}Question`); this.evaluate_script_editormd = evaluate_script_editormd; window.evaluate_script_editormd = evaluate_script_editormd; } componentDidMount() { let id=this.props.match.params.shixunId; let Url=`/shixuns/`+id+`/settings.json`; axios.get(Url).then((response)=> { // alert(response.data.shixun.choice_standard_scripts) if(response.status===200){ this.setState({ shixunsID: id, settingsData: response.data, webssh: response.data.shixun.webssh, use_scope: response.data.shixun.use_scope, shixunsstatus: response.data.shixun.status, exec_time: response.data.shixun.exec_time, trainee: response.data.shixun.trainee, can_copy: response.data.shixun.can_copy, task_pass: response.data.shixun.task_pass, test_set_permission: response.data.shixun.test_set_permission, hide_code: response.data.shixun.hide_code, code_hidden: response.data.shixun.code_hidden, forbid_copy: response.data.shixun.forbid_copy, vnc: response.data.shixun.vnc, name: response.data.shixun.name, scope_partment: response.data.shixun.scope_partment, description: response.data.shixun.description, evaluate_script: response.data.shixun.evaluate_script, choice_main_type: response.data.shixun.choice_main_type, choice_small_type: response.data.shixun.choice_small_type, choice_standard_scripts: response.data.shixun.choice_standard_scripts, standard_scripts:response.data.shixun.standard_scripts, multi_webssh:response.data.shixun.multi_webssh, status:response.data.shixun.status, opening_time:response.data.shixun.opening_time, newuse_scope:response.data.shixun.use_scope, scope_partments: response.data.shixun.scope_partment.length, shixunmemoMDvalue:response.data.shixun.evaluate_script, shixun_service_configs:response.data.shixun.shixun_service_configs, shixun_service_configlist:response.data.shixun.shixun_service_configs, }) // if(response.data.status===403){ // message: "您没有权限进行该操作" // this.setState({ // :true // message403:response.data.message // }) // } if(response.data.shixun.multi_webssh===true){ this.setState({ SelectTheCommandtype:true }) }else{ this.setState({ SelectTheCommandtype:false }) } if (response.data.shixun.scope_partment.length > 0) { this.setState({ scopetype: true }) } // console.log(response.data.shixun.description) // console.log(response.data.shixun.evaluate_script) // console.log(response.data.shixun.description) // this.props.identity<4&&this.props.status==0||this.props.identity===1&&this.props.status==2 // this.evaluate_scriptMD(response.data.shixun.evaluate_script, "shixunmemoMD"); this.descriptionMD(response.data.shixun.description, "shixundescription"); // this.bigClass() // if (response.data.shixun.status === 2) { // // } else if (response.data.shixun.status === 1) { // this.props.showSnackbar("这个实训已发布不能修改!"); // } else if (response.data.shixun.status === 3) { // this.props.showSnackbar("这个实训已关闭不能修改!"); // } } }); let departmentsUrl = `/shixuns/departments.json`; axios.get(departmentsUrl).then((response) => { if (response.status === 200) { if (response.data.message === undefined) { this.setState({ departmentslist: response.data.shools_name }); } } }).catch((error) => { console.log(error) }); } SelectshixunCommand=(e)=>{ // console.log( e.target.value) this.setState({ webssh: e.target.value, }); if(e.target.value===2){ this.setState({ SelectTheCommandtype: true, multi_webssh:false }); }else{ this.setState({ SelectTheCommandtype: false, multi_webssh:false }); } } SelectOpenpublic=(e)=>{ this.setState({ Openpublic: e.target.value }); } can_copy=(e)=>{ let sum = "" if (e.target.checked === false) { sum = 0 } else if (e.target.checked === true) { sum = 1 } this.setState({ can_copy: sum, }); } task_pass=(e)=>{ let sum = "" if (e.target.checked === false) { sum = 0 } else if (e.target.checked === true) { sum = 1 } this.setState({ task_pass: sum, }); } test_set_permission=(e)=>{ let sum = "" if (e.target.checked === false) { sum = 0 } else if (e.target.checked === true) { sum = 1 } this.setState({ test_set_permission: sum, }); } hide_code=(e)=>{ let sum = "" if (e.target.checked === false) { sum = 0 } else if (e.target.checked === true) { sum = 1 } this.setState({ hide_code: sum, }); } code_hidden=(e)=>{ let sum = "" if (e.target.checked === false) { sum = 0 } else if (e.target.checked === true) { sum = 1 } this.setState({ code_hidden: sum, }); } forbid_copy = (e) => { let sum = "" if (e.target.checked === false) { sum = 0 } else if (e.target.checked === true) { sum = 1 } this.setState({ forbid_copy: sum, }); } shixun_vnc=(e)=>{ // let sum = "" // if (e.target.checked === false) { // sum = 0 // } else if (e.target.checked === true) { // sum = 1 // } this.setState({ vnc: e.target.checked, }); } shixunsname = (e) => { // let {shixunsstatus}=this.state; // if(shixunsstatus>0){ // return // } this.setState({ name: e.target.value, shixunnametype:false }) } bigClass = (value) => { let {settingsData,shixun_service_configs}=this.state; let newshixun_service_configs=shixun_service_configs; settingsData.shixun.main_type.some((item,key)=> { if (item.id === value) { newshixun_service_configs[0]={ mirror_repository_id:value, name:item.type_name, cpu_limit:1, lower_cpu_limit:0.1, memory_limit:1024, request_limit:10 } return true } } ) let url = `/shixuns/get_mirror_script.json?mirror_id=`+value; axios.get(url).then((response) => { if (response.status === 200) { // console.log(response.data) this.setState({ choice_main_type: value, standard_scripts:response.data, choice_standard_scripts:null, shixun_service_configs:newshixun_service_configs, shixun_service_configlist:newshixun_service_configs, }) } }).catch((error) => { console.log(error) }); } Deselectlittle=(value)=>{ let {shixun_service_configs,choice_small_type}=this.state; let newshixun_service_configs=shixun_service_configs; let newchoice_small_type=choice_small_type; newshixun_service_configs.some((item,key)=> { if (item.mirror_repository_id === value) { newshixun_service_configs.splice(key, 1) return true } } ) newchoice_small_type.some((item,key)=> { if (item === value) { newchoice_small_type.splice(key, 1) return true } } ) this.setState({ choice_small_type: newchoice_small_type, shixun_service_configs:newshixun_service_configs, shixun_service_configlist:newshixun_service_configs, }) } littleClass = (value) => { let {settingsData,shixun_service_configs,choice_small_type}=this.state; let newshixun_service_configs=shixun_service_configs; let newchoice_small_type=choice_small_type; // if(Array.isArray(value)===true){ // value.map((item,key)=>{ // settingsData.shixun.small_type.some((items,keys)=> { // if (items.id === item) { // newshixun_service_configs.push({ // mirror_repository_id:value, // name:items.type_name, // cpu_limit:1, // lower_cpu_limit:0.1, // memory_limit:1024, // request_limit:10 // }) // return true // } // } // ) // }) // } settingsData.shixun.small_type.some((items,keys)=> { if (items.id === value) { newshixun_service_configs.push({ mirror_repository_id:value, name:items.type_name, cpu_limit:1, lower_cpu_limit:0.1, memory_limit:1024, request_limit:10 }) return true } } ) newchoice_small_type.push(value) this.setState({ choice_small_type: newchoice_small_type, shixun_service_configs:newshixun_service_configs, shixun_service_configlist:newshixun_service_configs, }) } onPodExistTimeChange = (e) => { this.setState({ pod_exist_time: e.target.value, pod_exist_timetype: false, }) } Timevalue = (e) => { this.setState({ exec_time: e.target.value }) } SelectOpenpublic = (e) => { this.setState({ scopetype: false, use_scope: e.target.value, }); if (e.target.value === 1) { this.setState({ scopetype: true }); } } deleteScopeInput = (key) => { let {scope_partment} = this.state; let datalist = scope_partment; datalist.splice(key, 1); this.setState({ scope_partment: datalist }); } shixunScopeInput = (e) => { let {scope_partment} = this.state; let datalist = scope_partment; if (datalist===undefined) { datalist=[] } datalist.push(e) // else { // datalist[id] = e // } this.setState({ scope_partment: datalist }); } // adduse_scopeinput = () => { // let {scope_partment} = this.state; // let array = scope_partment; // let newarray = "" // array.push(newarray) // this.setState({ // scope_partment: array, // }); // } submit_edit_shixun = () => { if(this.state.status===-1){ this.props.showSnackbar("该实训已被删除,保存失败!"); return } let { name, choice_main_type, choice_small_type, choice_standard_scripts, scope_partment, choice_standard_scriptssum, evaluate_script, webssh, use_scope, trainee, can_copy, task_pass, test_set_permission, hide_code, code_hidden, forbid_copy, vnc,multi_webssh, opening_time,shixunmemoMDvalue,shixun_service_configlist } = this.state; let newshixun_service_configlist = shixun_service_configlist.map(v => { let v1 = Object.assign({},v); delete v1.name; return v1 }); // let operateauthority= // this.props.identity===1?true:this.props.identity<5&&this.state.status==0?true:false; // this.props.identity<5&&this.state.status==0||this.props.identity===1&&this.state.status==2||this.props.identity===1&&this.state.status==1; const description_editormd = this.description_editormd.getValue(); let evaluate_script_editormd; if(this.state.status==0||this.state.status==1||this.state.status==2&&this.props.identity===1){ // evaluate_script_editormd = this.evaluate_script_editormd.getValue(); evaluate_script_editormd = shixunmemoMDvalue }else{ evaluate_script_editormd = evaluate_script; } if (name === "") { this.setState({ shixunnametype: true }) $('html').animate({ scrollTop: 10 }, 1000); return } if (choice_main_type === "") { this.setState({ shixunmaintype: true }) $('html').animate({ scrollTop: 800 }, 1000); return } if (evaluate_script_editormd === "") { this.setState({ evaluate_scripttype: true }) $('html').animate({ scrollTop: 1200 }, 1000); return } if(use_scope===1){ if(scope_partment===undefined||scope_partment.length===0){ this.setState({ scope_partmenttype: true }) $('html').animate({ scrollTop: 2500 }, 1000); this.props.showSnackbar("公开程度,指定单位为空"); return } } // if (exec_time === "") { // this.setState({ // exec_timetype: true // }) // $('html').animate({ // scrollTop: 1500 // }, 1000); // return // } // if (!pod_exist_time) { // this.setState({ // pod_exist_timetype: true // }) // $("html, body").animate({ scrollTop: $('#pod_exist_time').offset().top - 100 }, 1000) // return // } if (trainee === "") { this.setState({ traineetype: true }) return } let id = this.props.match.params.shixunId; let newmulti_webssh=multi_webssh; if(newmulti_webssh===null){ newmulti_webssh=false } //exec_time: exec_time, let Url = `/shixuns/` + id + `.json`; let data = { shixun:{ name: name, webssh: webssh, use_scope: use_scope, can_copy: can_copy, vnc: vnc===null?undefined:vnc, test_set_permission: test_set_permission, code_hidden: code_hidden, trainee: trainee, task_pass: task_pass, hide_code: hide_code, forbid_copy: forbid_copy, multi_webssh:newmulti_webssh, opening_time:opening_time, mirror_script_id:choice_standard_scriptssum===undefined?choice_standard_scripts:choice_standard_scriptssum, }, shixun_info:{ description: description_editormd, evaluate_script: evaluate_script_editormd, }, main_type: choice_main_type, small_type: choice_small_type, scope_partment: scope_partment, shixun_service_configs:newshixun_service_configlist } axios.put(Url, data).then((response) => { // console.log(response) if(response.status){ if (response.data.status === -1) { this.props.showSnackbar(response.data.message); return } else { window.location.href = "/shixuns/" + response.data.shixun_identifier + "/challenges"; } } }).catch((error) => { console.log(error) }) } shixunsfetch = (value, callback) => { if (timeout) { clearTimeout(timeout); timeout = null; } currentValue = value; function fake() { let departmentsUrl = `/shixuns/departments.json?q=` + currentValue; axios.get(departmentsUrl).then((response) => { callback(response.data.shools_name); }).catch((error) => { console.log(error) }); } timeout = setTimeout(fake, 300); } shixunHandleSearch = (value) => { this.shixunsfetch(value, departmentslist => this.setState({departmentslist})); } shixunsclose = () => { let id = this.props.match.params.shixunId; let cul = `/shixuns/` + id + `/close.json`; axios.post(cul).then((response) => { if(response.data.status===1){ this.props.showSnackbar("操作成功"); this.setState({ operateshixunstype: false, }); window.location.href = "/shixuns/" + id + "/challenges"; } }).catch((error) => { console.log(error) }) } shixunsdel= () => { let id = this.props.match.params.shixunId; let cul = `/shixuns/` + id +`.json`; axios.delete(cul).then((response) => { if(response.data.status===1){ this.props.showSnackbar("操作成功"); this.setState({ operateshixunstype: false, }); window.location.href = "/shixuns"; } }).catch((error) => { console.log(error) }) } Executiveorder = (e) => { this.setState({ Executiveordervalue: e.target.value }) } Compilecommand = (e) => { this.setState({ Compilecommandvalue: e.target.value }) } handleCancelTemplate = (e) => { this.setState({ Executiveordervalue: "", Compilecommandvalue: "", visibleTemplate: false }) } hideModalTemplate = (e) => { let id = this.props.match.params.shixunId; let {Executiveordervalue, Compilecommandvalue} = this.state; if (Executiveordervalue === "") { this.setState({ Executivetyoe: true, }); return } // Executiveordervalue=String(Executiveordervalue); // Compilecommandvalue=String(Compilecommandvalue); let trl = `/shixuns/${id}/get_custom_script.json?compile=${Executiveordervalue}&excutive=${Compilecommandvalue}` axios.get(trl).then((response) => { // this.evaluate_scriptMD(response.data.shixun_script, "shixunmemoMD"); this.setState({ shixunmemoMDvalue:response.data.shixun_script }) }).catch((error) => { console.log(error) }); this.setState({ visibleTemplate: false }) } showModal = () => { this.setState({ visibleTemplate: true, }); } Selecttrainee = (value) => { this.setState({ trainee: value, }); } post_apply = () => { this.setState({ postapplyvisible: true }) } sendsure_applyvalues = (e) => { this.setState({ sendsure_applyvalue: e.target.value }) } setlanguagewrite = (e)=>{ this.setState({ languagewrite: e.target.value }) } setsystemenvironment = (e) => { this.setState({ systemenvironment: e.target.value }) } settestcoderunmode = (e) => { this.setState({ testcoderunmode: e.target.value }) } sendsure_apply = () => { let {languagewrite,systemenvironment,testcoderunmode} = this.state; // console.log("点击确定") // console.log("languagewrite"+languagewrite); // console.log("systemenvironment"+systemenvironment); // console.log("testcoderunmode"+testcoderunmode); // let attachment_ids = undefined // if (this.state.fileList) { // attachment_ids = this.state.fileList.map(item => { // return item.response ? item.response.id : item.id // }) // } if(languagewrite === undefined || languagewrite === "" ){ // this.props.showNotification(`请填写该镜像是基于什么语言`); this.setState({ languagewritetype:true }) return } if(systemenvironment === undefined || systemenvironment === ""){ // this.props.showNotification(`请填写该镜像是基于什么语言系统环境`); this.setState({ systemenvironmenttype:true }) return; } if(testcoderunmode === undefined || testcoderunmode === "") { // this.props.showNotification(`请填写该镜像中测试代码运行方式`); this.setState({ testcoderunmodetype:true }) return; } var attachment_ids=undefined; if (this.state.fileList) { attachment_ids = this.state.fileList.map(item => { return item.response ? item.response.id : item.id }) } if( attachment_ids === undefined || attachment_ids.length===0){ // notification.open( // { // message: '提示', // description: // '请上传附件!', // // } // ) this.setState({ attachmentidstype:true }) return; } // console.log("attachment_ids"+attachment_ids); // alert(languagewrite +" "+systemenvironment +" "+testcoderunmode + " "+attachment_ids); var data={ language:languagewrite, runtime:systemenvironment, run_method:testcoderunmode, attachment_id:attachment_ids[0], } var url =`/shixuns/apply_shixun_mirror.json`; axios.post(url,data ).then((response) => { try { if (response.data) { // const { id } = response.data; // if (id) { if(this.state.file !== undefined){ console.log("549"); // this.deleteAttachment(this.state.file); this.setState({ file:undefined, deleteisnot:true, languagewrite:"", systemenvironment:"", testcoderunmode:"", fileList:[] }) }else { this.setState({ file:undefined, deleteisnot:true, languagewrite:"", systemenvironment:"", testcoderunmode:"", fileList:[] }) } // this.props.showNotification('提交成功!'); notification.open( { message: '提示', description: '提交成功!', } ) this.sendhideModaly() // this.props.history.push(`/courses/${cid}/graduation_topics`); // } } }catch (e) { } }) } sendhideModaly = () => { this.setState({ postapplyvisible: false, }) if(this.state.file !== undefined){ console.log("580"); // this.deleteAttachment(this.state.file); this.setState({ file:undefined, deleteisnot:true, languagewrite:"", systemenvironment:"", testcoderunmode:"", fileList:[] }) }else { this.setState({ file:undefined, deleteisnot:true, languagewrite:"", systemenvironment:"", testcoderunmode:"", fileList:[] }) } } yeshidemodel = () => { this.setState({ postapplytitle: false }) } SelectScput = (value, e) => { this.setState({ choice_standard_scriptssum: value, language:e.props.name, choice_standard_scripts: {id:e.props.value,value:""}, standard_scriptsModal:true }) } hidestandard_scriptsModal=()=>{ this.setState({ standard_scriptsModal:false, standard_scriptsModals:false }) } get_mirror_script=()=>{ let {choice_standard_scriptssum}=this.state; let id = this.props.match.params.shixunId; let pul = "/shixuns/" + id + "/get_script_contents.json?script_id=" + choice_standard_scriptssum; axios.get(pul).then((response) => { if(response.status===200){ // this.evaluate_scriptMD(response.data.content, "shixunmemoMD"); this.setState({ standard_scriptsModal:false, standard_scriptsModals:true, shixunmemoMDvalue:response.data.content }) } }).catch((error) => { console.log(error) }) } SelectTheCommandonChange=(e)=>{ this.setState({ multi_webssh:e.target.checked }) } bigopen=()=>{ this.setState({ opers:true }) } bigopens=()=>{ this.setState({ opers:false, operss:false, opersss:false, opensmail:false }) } bigopensmal=(e)=>{ this.setState({ opensmail:true }) } sbigopen=(e)=>{ this.setState({ operss:true }) } sbigopens=()=>{ this.setState({ operss:false }) } sbigopenss=(e)=>{ this.setState({ opersss:true }) } sbigopensss=()=>{ this.setState({ opersss:false }) } testscripttip=(val)=>{ if(val===0){ this.setState({ testscripttiptype:true }) }else if(val===1){ this.setState({ testscripttiptype:false }) } } operateshixuns=(value)=>{ this.setState({ operateshixunstype:true, delType:value }) } hideoperateshixuns=()=>{ this.setState({ operateshixunstype:false }) } onChangeTimePicker =(value, dateString)=> { this.setState({ opening_time: dateString=== ""?"":moment(handleDateStrings(dateString)) }) } getshixunmemoMDvalue=(value, e)=>{ this.setState({ shixunmemoMDvalue:value }) } setConfigsInputs=(e,keys,str)=>{ let {shixun_service_configs}=this.state; let newshixun_service_configs=shixun_service_configs; newshixun_service_configs.map((item,key)=>{ if(key===keys){ switch (str) { case 1: item.cpu_limit=e.target.value break; case 2: item.lower_cpu_limit=e.target.value break; case 3: item.memory_limit=e.target.value break; case 4: item.request_limit=e.target.value break; } } }) this.setState({ shixun_service_configs:newshixun_service_configs, shixun_service_configlist:newshixun_service_configs, }) } handleChange = (info) => { console.log("handleChange1"); let {fileList}=this.state; if(fileList.length===0){ let fileLists = info.fileList; this.setState({ fileList:fileLists, deleteisnot:false}); } } onAttachmentRemove = (file) => { confirm({ title: '确定要删除这个附件吗?', okText: '确定', cancelText: '取消', // content: 'Some descriptions', onOk: () => { console.log("665") this.deleteAttachment(file) }, onCancel() { console.log('Cancel'); }, }); return false; } deleteAttachment = (file) => { console.log(file); let id=file.response ==undefined ? file.id : file.response.id const url = `/attachments/${id}.json` axios.delete(url, { }) .then((response) => { if (response.data) { const { status } = response.data; if (status == 0) { // console.log('--- success') this.setState((state) => { const index = state.fileList.indexOf(file); const newFileList = state.fileList.slice(); newFileList.splice(index, 1); return { fileList: newFileList, deleteisnot:true }; }); } } }) .catch(function (error) { console.log(error); }); } render() { let { postapplyvisible, postapplytitle, shixunnametype, shixunmaintype, evaluate_scripttype, traineetype, standard_scripts, name, settingsData, webssh, use_scope, shixunsID, can_copy, choice_standard_scripts, Executiveordervalue, Executivetyoe, Compilecommandvalue, task_pass, test_set_permission, hide_code, forbid_copy, code_hidden, vnc, scopetype, scope_partment, departmentslist, trainee, choice_main_type, choice_small_type, standard_scriptsModal, standard_scriptsModals, SelectTheCommandtype, testscripttiptype, operateshixunstype, opening_time, scope_partmenttype, newuse_scope, scope_partments, shixunmemoMDvalue,delType, shixun_service_configs, fileList, } = this.state; let options; if (departmentslist != undefined) { options = this.state.departmentslist.map((d, k) => { return ( ) }) } const uploadProps = { width: 600, fileList, multiple: true, // https://github.com/ant-design/ant-design/issues/15505 // showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。 // showUploadList: false, action: `${getUrl()}/api/attachments.json`, onChange: this.handleChange, onRemove: this.onAttachmentRemove, beforeUpload: (file) => { // console.log('beforeUpload', file.name); const isLt150M = file.size / 1024 / 1024 < 50; if (!isLt150M) { // this.props.showNotification(`文件大小必须小于50MB`); notification.open( { message: '提示', description: '文件大小必须小于50MB', } ) } if(this.state.file !== undefined){ console.log("763") this.setState({ file:file }) }else { this.setState({ file:file }) } console.log("handleChange2"); return isLt150M; }, } const dateFormat = 'YYYY-MM-DD HH:mm:ss'; let operateauthority=this.props.identity===1?true:this.props.identity<5&&this.state.status==0?true:false; return (
是否确认删除 ?
:关闭后,
用户不能再开始挑战了是否确认关闭 ?
实训名称
简介
技术平台
列表中没有? 申请新建
新建申请已提交,请等待管理员的审核
请在配置页面完成后续的评测脚本设置操作
*/}评测脚本
原有脚本将被新的脚本覆盖,无法撤销
是否确认执行覆盖操作
评测脚本生成成功!
使用自定义模板,平台无法自动更新脚本,
请在关卡创建完后手动更新脚本中的必填参
数和以下2个数组元素:
challengeProgramNames
sourceClassNames
示例:有2个关卡的实训
各关卡的待编译文件为:
src/step1/HelloWorld.java
src/step2/Other.java
各关卡的编译后生成的执行文件为:
step1.HelloWorld
step2.Other
则数组元素更新如下:
challengeProgramNames=("src/step1/
HelloWorld.java" "src/step2/Other.java")
sourceClassNames=("step1.HelloWorld
" "step2.Other")
其它参数可按实际需求定制
执行命令不能为空
程序最大执行时间
*/} {/* 秒*/} {/*Pod存活时间
秒命令行
公开程度
发布信息
服务配置
{ shixun_service_configs&&shixun_service_configs.map((item,key)=>{ return({item.name}
{ // this.props.identity<4&&this.props.status==0? this.props.identity<5?
:"" }