import React, {Component} from 'react'; import { Input, Select, Radio, Checkbox, Popconfirm, message, Modal, Icon, DatePicker, Breadcrumb, Upload, Button, notification, Tooltip, Tabs } from 'antd'; import Shixuninformation from './Shixuninformation'; import Configuration from './Configuration'; import LearningSettings from './LearningSettings'; import moment from 'moment'; import axios from 'axios'; import './css/TPMsettings.css'; import {getImageUrl, toPath, getUrl, appendFileSizeToUploadFileAll, getUploadActionUrl} from 'educoder'; let path = getUrl("/editormd/lib/") const $ = window.$; const {TabPane} = Tabs; let timeout; let currentValue; const Option = Select.Option; 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 - 3); 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, code_edit_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_edit_permission: response.data.shixun.code_edit_permission, code_hidden: response.data.shixun.code_hidden, is_secret_repository: response.data.shixun.is_secret_repository, init_is_secret_repository: response.data.shixun.is_secret_repository, forbid_copy: response.data.shixun.forbid_copy, vnc: response.data.shixun.vnc, vnc_evaluate: response.data.shixun.vnc_evaluate, 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) const webssh = e.target.value if (webssh == 2) { this.setState({ webssh: webssh, SelectTheCommandtype: true, multi_webssh: false }); } else { if (this.state.init_is_secret_repository && !this.state.vnc && this.state.is_secret_repository == true) { this.confirmDeleteSecretRepo({ onOk: () => { this.setState({ webssh: webssh, SelectTheCommandtype: false, multi_webssh: false }); } }) } else { if (!this.state.vnc) { this.setState({ is_secret_repository: false, }) } this.setState({ webssh: webssh, SelectTheCommandtype: false, multi_webssh: false }); } } // this.setState({ // webssh: webssh, // }); // if(webssh===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_edit_permission = (e) => { this.setState({ code_edit_permission: e.target.checked }) } 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, }); } confirmDeleteSecretRepo = ({title, onOk}) => { confirm({ title: title ||
已创建的私密版本库及其内容,将在“保存”时被删除。
是否确认取消勾选?
, okText: '确定', cancelText: '取消', onOk: () => { this.setState({is_secret_repository: false}) onOk && onOk() }, onCancel() { }, }); } is_secret_repository = (e) => { const checked = e.target.checked if (!checked) { if (this.state.init_is_secret_repository) { this.confirmDeleteSecretRepo({}) } else { this.setState({is_secret_repository: false}) } } else { this.setState({is_secret_repository: true}) } } 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_evaluate = (e) => { this.setState({ vnc_evaluate: e.target.checked, }); } shixun_vnc = (e) => { // let sum = "" // if (e.target.checked === false) { // sum = 0 // } else if (e.target.checked === true) { // sum = 1 // } const vnc = e.target.checked; if (!vnc) { if (this.state.init_is_secret_repository && this.state.webssh != 2 && this.state.is_secret_repository == true) { this.confirmDeleteSecretRepo({ onOk: () => { this.setState({ vnc: e.target.checked, vnc_evaluate: false, }); } }) } else { if (this.state.webssh != 2) { this.setState({ is_secret_repository: false }) } this.setState({ vnc: e.target.checked, vnc_evaluate: false, }); } } else { this.setState({ vnc: e.target.checked, vnc_evaluate: false, }); } } shixunsname = (e) => { // let {shixunsstatus}=this.state; // if(shixunsstatus>0){ // return // } this.setState({ name: e.target.value, shixunnametype: false }) } bigClass = (value) => { // choice_main_type // choice_small_type let {settingsData, shixun_service_configs, choice_main_type, choice_small_type} = this.state; let list = [] list.push(choice_main_type) choice_small_type.map((item, key) => { list.push(item) }) let newshixun_service_configs = shixun_service_configs; let newshixun_service_configsagin = [] newshixun_service_configs.map((item, key) => { list.map((its, index) => { if (item.mirror_repository_id === its) { newshixun_service_configsagin.push(item) } }) }) settingsData.shixun.main_type.some((item, key) => { if (item.id === value) { newshixun_service_configsagin[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_configsagin, shixun_service_configlist: newshixun_service_configsagin, }) } }).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, choice_main_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 // } // } // ) // }) // } let list = [] list.push(choice_main_type) choice_small_type.map((item, key) => { list.push(item) }) let newshixun_service_configsagin = [] newshixun_service_configs.map((item, key) => { list.map((its, index) => { if (item.mirror_repository_id === its) { newshixun_service_configsagin.push(item) } }) }) settingsData.shixun.small_type.some((items, keys) => { if (items.id === value) { newshixun_service_configsagin.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_configsagin, shixun_service_configlist: newshixun_service_configsagin, }) } 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.saving == true) return; this.saving = true; 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, vnc_evaluate, 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, is_secret_repository, code_edit_permission } = 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, vnc_evaluate: vnc_evaluate === null ? undefined : vnc_evaluate, test_set_permission: test_set_permission, code_hidden: code_hidden, code_edit_permission: code_edit_permission, 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, }, is_secret_repository: is_secret_repository, 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) this.saving = false; 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) this.saving = false; }) } 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) => { let {fileList} = this.state; if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') { console.log("handleChange1"); // if(fileList.length===0){ let fileLists = info.fileList; this.setState({ fileList: fileLists, deleteisnot: false }); // } } } onAttachmentRemove = (file) => { if (!file.percent || file.percent == 100) { 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, is_secret_repository, use_scope, shixunsID, can_copy, choice_standard_scripts, Executiveordervalue, Executivetyoe, Compilecommandvalue, task_pass, test_set_permission, hide_code, forbid_copy, code_edit_permission, code_hidden, vnc, vnc_evaluate, 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: `${getUploadActionUrl()}`, onChange: this.handleChange, onRemove: this.onAttachmentRemove, beforeUpload: (file, fileList) => { if (this.state.fileList.length >= 1) { return false } // 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; const operations = ; return (
); } }