diff --git a/public/react/src/modules/tpm/TPMsettings/TPMsettings.js b/public/react/src/modules/tpm/TPMsettings/TPMsettings.js
index e2d14127e..351a461f4 100644
--- a/public/react/src/modules/tpm/TPMsettings/TPMsettings.js
+++ b/public/react/src/modules/tpm/TPMsettings/TPMsettings.js
@@ -1,1733 +1,1736 @@
-import React, { Component } from 'react';
-
-import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal,Icon,DatePicker} 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 } from 'educoder';
-
-let origin = getUrl();
-
-let path = getUrl("/editormd/lib/")
-
-const $ = window.$;
-
-let timeout;
-
-let currentValue;
-
-const Option = Select.Option;
-
-const RadioGroup = Radio.Group;
-
-// 恢复数据
-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)
-}
-
-
-export default class TPMsettings extends Component {
- constructor(props) {
- super(props)
- this.state = {
- 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,
-
- pod_exist_time: undefined,
- pod_exist_timetype: false,
- shixunmemoMDvalue:""
- }
- }
- 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
- })
-
- // 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");
- // 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) {
- 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: sum,
- });
-
- }
- shixunsname = (e) => {
- // let {shixunsstatus}=this.state;
- // if(shixunsstatus>0){
- // return
- // }
- this.setState({
- name: e.target.value,
- shixunnametype:false
- })
- }
-
- bigClass = (value) => {
- 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
- })
- }
- }).catch((error) => {
- console.log(error)
- });
-
-
-
- }
-
- littleClass = (value) => {
- this.setState({
- choice_small_type: value
- })
- }
- 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 = () => {
- let {
- name, description, choice_main_type, choice_small_type, choice_standard_scripts, scope_partment, choice_standard_scriptssum,
- evaluate_script, exec_time, webssh, use_scope, trainee, can_copy, task_pass, test_set_permission, hide_code, code_hidden, forbid_copy, vnc,multi_webssh,
- opening_time, pod_exist_time,shixunmemoMDvalue
- } = this.state;
- let operateauthority=this.props.identity<4&&this.props.status==0||this.props.identity===1&&this.props.status==2||this.props.identity===1&&this.props.status==1;
-
- const description_editormd = this.description_editormd.getValue();
-
- let evaluate_script_editormd;
-
- if(operateauthority===true){
- // 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===true){
- newmulti_webssh=1
- }else{
- newmulti_webssh=0
- }
-
- if(newmulti_webssh===null){
- newmulti_webssh=0
- }
-
- let Url = `/shixuns/` + id + `.json`;
- let data = {
- name: name,
- description: description_editormd,
- main_type: choice_main_type,
- small_type: choice_small_type,
- webssh: webssh,
- user_scope: use_scope,
- scope_partment: scope_partment,
- can_copy: can_copy,
- vnc: vnc,
- test_set_permission: test_set_permission,
- code_hidden: code_hidden,
- trainee: trainee,
- task_pass: task_pass,
- standard_scripts: choice_standard_scripts,
- hide_code: hide_code,
- forbid_copy: forbid_copy,
- exec_time: exec_time,
- evaluate_script: evaluate_script_editormd,
- multi_webssh:newmulti_webssh,
- opening_time:opening_time,
- mirror_script_id:choice_standard_scriptssum,
- delType:1
- }
-
- 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
- })
- }
-
- sendsure_apply = () => {
- let {sendsure_applyvalue} = this.state;
- let url = "/shixuns/apply_shixun_mirror.json";
- axios.post(url, {
- note: sendsure_applyvalue
- }).then((response) => {
- if (response.status === 200) {
- if (response.data.status == 1) {
- this.setState({
- postapplyvisible: false,
- postapplytitle: true
- })
- }
-
- }
- }).catch((error) => {
- console.log(error)
- });
-
- }
-
- sendhideModaly = () => {
- this.setState({
- postapplyvisible: false
- })
- }
-
- yeshidemodel = () => {
- this.setState({
- postapplytitle: false
- })
- }
-
- SelectScput = (value, e) => {
- this.setState({
- choice_standard_scriptssum: value,
- 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=()=>{
- this.setState({
- opensmail:true
- })
- }
- sbigopen=()=>{
- this.setState({
- operss:true
- })
- }
-
- sbigopens=()=>{
- this.setState({
- operss:false
- })
- }
- sbigopenss=()=>{
- 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
- })
- }
-
- getshixunmemoMDvalue=(e)=>{
- this.setState({
- shixunmemoMDvalue:e.target.value
- })
- }
- render() {
- let {
- postapplyvisible,
- sendsure_applyvalue,
- postapplytitle,
- shixunnametype,
- shixunmaintype,
- evaluate_scripttype,
- exec_timetype,
- traineetype,
- standard_scripts,
- description,
- evaluate_script,
- name,
- settingsData,
- webssh,
- use_scope,
- shixunsstatus,
- shixunsID,
- exec_time,
- pod_exist_time,
- pod_exist_timetype,
- 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,
- status,
- opers,
- operss,
- opersss,
- testscripttiptype,
- operateshixunstype,
- opening_time,
- opensmail,
- scope_partmenttype,
- newuse_scope,
- scope_partments,
- shixunmemoMDvalue,delType
- } = this.state;
-
- let options;
-
- if (departmentslist != undefined) {
- options = this.state.departmentslist.map((d, k) => {
- return (
-
- )
- })
- }
-
- const dateFormat = 'YYYY-MM-DD HH:mm:ss';
- let operateauthority=this.props.identity<4&&this.props.status==0||this.props.identity===1&&this.props.status==2||this.props.identity===1&&this.props.status==1;
-
- return (
-
-
-
-
-
-
-
实训名称
-
-
-
*
-
-
- {settingsData === undefined ? "" :
- }
-
-
- 必填项
-
-
-
-
-
-
-
-
-
-
-
-
-
-
技术平台
-
-
-
-
*
-
-
-
- 列表中没有?
- 申请新建
-
-
-
-
-
-
-
-
-
新建申请已提交,请等待管理员的审核
-
我们将在1-2个工作日内与您联系
-
-
-
-
-
-
-
-
-
-
-
- 必填项
-
- {/*
请在配置页面完成后续的评测脚本设置操作
*/}
-
-
-
-
-
-
-
评测脚本
-
-
-
-
-
原有脚本将被新的脚本覆盖,无法撤销
-
是否确认执行覆盖操作
-
-
-
-
-
-
-
-
-
-
- {
- this.props.identity<4||this.props.power==true?
-
使用自定义脚本 : ""
- }
-
-
-
-
-
-
-
- 执行命令不能为空
-
-
-
-
-
-
-
-
-
-
-
-
-
-
*
-
-
-
-
-
-
-
-
- {/*
*/}
- {/*{evaluate_script===undefined?"":evaluate_script}*/}
-
- {/*
*/}
-
-
-
-
this.testscripttip(0)}>
-
-
-
-
- 使用自定义模板,平台无法自动更新脚本,
- 请在关卡创建完后手动更新脚本中的必填参
- 数和以下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")
- 其它参数可按实际需求定制
-
-
-
- this.testscripttip(1)}>知道了
-
-
-
-
-
-
-
-
-
-
-
*
-
-
程序最大执行时间
-
-
秒
-
-
- 必填项
-
-
-
- {/*
-
*
-
-
Pod存活时间
-
-
秒
-
-
- 必填项
-
-
*/}
-
-
-
-
命令行
-
- 无命令行窗口 (选中则不给学员的实践任务提供命令窗口)
- 命令行练习窗口 (选中则给学员提供用于练习操作的命令行窗口)
- 命令行评测窗口 (选中则给学员提供用于关卡评测的命令行窗口)
-
- 多个命令行窗口(选中则允许学员同时开启多个命令行窗口)
-
-
-
-
-
-
公开程度
-
- 对所有公开 (选中则所有已被试用授权的用户可以学习)
- 对指定单位公开 (选中则下方指定单位的已被试用授权的用户可以学习)
-
-
-
-
-
-
-
-
- {/*{*/}
- {/*scope_partment===undefined?"":scope_partment.map((item,key)=>{*/}
- {/*return(*/}
- {/*
*/}
- {/*this.deleteScopeInput(key)} style={{ color: 'rgba(0,0,0,.25)' }} />}*/}
- {/*value={item}*/}
- {/*/>*/}
- {/*
*/}
-
- {/*)*/}
- {/*})*/}
- {/*}*/}
-
-
-
- 请选择需要公开的单位
-
-
-
-
-
-
-
发布信息
-
-
-
*
-
面向学员:
-
-
-
-
-
实训难易度定位,不限定用户群体
-
- 必填项
-
-
-
-
- 复制:
-
-
-
-
-
-
-
- 跳关:
-
-
-
-
-
-
- 测试集解锁:
-
-
-
-
-
-
-
- 隐藏代码窗口:
-
-
-
-
-
-
-
- 代码目录隐藏:
-
-
-
-
-
-
-
- 禁用复制粘贴:
-
-
-
-
-
-
-
- 开启时间:
-
-
-
-
-
- {/*
*/}
- {/*VNC图形化:*/}
- {/**/}
- {/**/}
- {/**/}
- {/**/}
- {/*
*/}
-
-
-
-
- {
- // this.props.identity<4&&this.props.status==0?
- this.props.identity<4?
-
:""
- }
- {/*{*/}
- {/*this.props.identity===1&&this.props.status==2?*/}
- {/*
:""*/}
- {/*}*/}
-
-
-
-
- {/*{*/}
- {/*this.props.identity===1||this.props.power==true?*/}
- {/*
:""*/}
-
- {/*}*/}
- {/*
*/}
- {/*
保存*/}
- {/*
取消*/}
- {/*
*/}
-
-
-
- );
- }
-}
-
-
+import React, { Component } from 'react';
+
+import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal,Icon,DatePicker} 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 } from 'educoder';
+
+let origin = getUrl();
+
+let path = getUrl("/editormd/lib/")
+
+const $ = window.$;
+
+let timeout;
+
+let currentValue;
+
+const Option = Select.Option;
+
+const RadioGroup = Radio.Group;
+
+// 恢复数据
+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)
+}
+
+
+export default class TPMsettings extends Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ 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,
+
+ pod_exist_time: undefined,
+ pod_exist_timetype: false,
+ shixunmemoMDvalue:""
+ }
+ }
+ 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
+ })
+
+ // 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) {
+ 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: sum,
+ });
+
+ }
+ shixunsname = (e) => {
+ // let {shixunsstatus}=this.state;
+ // if(shixunsstatus>0){
+ // return
+ // }
+ this.setState({
+ name: e.target.value,
+ shixunnametype:false
+ })
+ }
+
+ bigClass = (value) => {
+
+ 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
+ })
+ }
+ }).catch((error) => {
+ console.log(error)
+ });
+
+
+
+ }
+
+ littleClass = (value) => {
+ this.setState({
+ choice_small_type: value
+ })
+ }
+ 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 = () => {
+ let {
+ name, description, choice_main_type, choice_small_type, choice_standard_scripts, scope_partment, choice_standard_scriptssum,
+ evaluate_script, exec_time, webssh, use_scope, trainee, can_copy, task_pass, test_set_permission, hide_code, code_hidden, forbid_copy, vnc,multi_webssh,
+ opening_time, pod_exist_time,shixunmemoMDvalue
+ } = this.state;
+ let operateauthority=this.props.identity<4&&this.props.status==0||this.props.identity===1&&this.props.status==2||this.props.identity===1&&this.props.status==1;
+
+ const description_editormd = this.description_editormd.getValue();
+
+ let evaluate_script_editormd;
+
+ if(operateauthority===true){
+ // 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===true){
+ newmulti_webssh=1
+ }else{
+ newmulti_webssh=0
+ }
+
+ if(newmulti_webssh===null){
+ newmulti_webssh=0
+ }
+
+ let Url = `/shixuns/` + id + `.json`;
+ let data = {
+ name: name,
+ description: description_editormd,
+ main_type: choice_main_type,
+ small_type: choice_small_type,
+ webssh: webssh,
+ user_scope: use_scope,
+ scope_partment: scope_partment,
+ can_copy: can_copy,
+ vnc: vnc,
+ test_set_permission: test_set_permission,
+ code_hidden: code_hidden,
+ trainee: trainee,
+ task_pass: task_pass,
+ standard_scripts: choice_standard_scripts,
+ hide_code: hide_code,
+ forbid_copy: forbid_copy,
+ exec_time: exec_time,
+ evaluate_script: evaluate_script_editormd,
+ multi_webssh:newmulti_webssh,
+ opening_time:opening_time,
+ mirror_script_id:choice_standard_scriptssum,
+ delType:1
+ }
+
+ 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
+ })
+ }
+
+ sendsure_apply = () => {
+ let {sendsure_applyvalue} = this.state;
+ let url = "/shixuns/apply_shixun_mirror.json";
+ axios.post(url, {
+ note: sendsure_applyvalue
+ }).then((response) => {
+ if (response.status === 200) {
+ if (response.data.status == 1) {
+ this.setState({
+ postapplyvisible: false,
+ postapplytitle: true
+ })
+ }
+
+ }
+ }).catch((error) => {
+ console.log(error)
+ });
+
+ }
+
+ sendhideModaly = () => {
+ this.setState({
+ postapplyvisible: false
+ })
+ }
+
+ yeshidemodel = () => {
+ this.setState({
+ postapplytitle: false
+ })
+ }
+
+ SelectScput = (value, e) => {
+ this.setState({
+ choice_standard_scriptssum: value,
+ 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=()=>{
+ this.setState({
+ opensmail:true
+ })
+ }
+ sbigopen=()=>{
+ this.setState({
+ operss:true
+ })
+ }
+
+ sbigopens=()=>{
+ this.setState({
+ operss:false
+ })
+ }
+ sbigopenss=()=>{
+ 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
+ })
+ }
+
+ getshixunmemoMDvalue=(e)=>{
+ this.setState({
+ shixunmemoMDvalue:e.target.value
+ })
+ }
+ render() {
+ let {
+ postapplyvisible,
+ sendsure_applyvalue,
+ postapplytitle,
+ shixunnametype,
+ shixunmaintype,
+ evaluate_scripttype,
+ exec_timetype,
+ traineetype,
+ standard_scripts,
+ description,
+ evaluate_script,
+ name,
+ settingsData,
+ webssh,
+ use_scope,
+ shixunsstatus,
+ shixunsID,
+ exec_time,
+ pod_exist_time,
+ pod_exist_timetype,
+ 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,
+ status,
+ opers,
+ operss,
+ opersss,
+ testscripttiptype,
+ operateshixunstype,
+ opening_time,
+ opensmail,
+ scope_partmenttype,
+ newuse_scope,
+ scope_partments,
+ shixunmemoMDvalue,delType
+ } = this.state;
+
+ let options;
+
+ if (departmentslist != undefined) {
+ options = this.state.departmentslist.map((d, k) => {
+ return (
+
+ )
+ })
+ }
+
+ const dateFormat = 'YYYY-MM-DD HH:mm:ss';
+ let operateauthority=this.props.identity===1?true:this.props.identity<4&&this.props.status==0;
+
+ return (
+
+
+
+
+
+
+
实训名称
+
+
+
*
+
+
+ {settingsData === undefined ? "" :
+ }
+
+
+ 必填项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
技术平台
+
+
+
+
*
+
+
+
+ 列表中没有?
+ 申请新建
+
+
+
+
+
+
+
+
+
新建申请已提交,请等待管理员的审核
+
我们将在1-2个工作日内与您联系
+
+
+
+
+
+
+
+
+
+
+
+ 必填项
+
+ {/*
请在配置页面完成后续的评测脚本设置操作
*/}
+
+
+
+
+
+
+
评测脚本
+
+
+
+
+
原有脚本将被新的脚本覆盖,无法撤销
+
是否确认执行覆盖操作
+
+
+
+
+
+
+
+
+
+
+ {
+ this.props.identity<4||this.props.power==true?
+
使用自定义脚本 : ""
+ }
+
+
+
+
+
+
+
+ 执行命令不能为空
+
+
+
+
+
+
+
+
+
+
+
+
+
+
*
+
+
+
+
+
+
+
+
+ {/*
*/}
+ {/*{evaluate_script===undefined?"":evaluate_script}*/}
+
+ {/*
*/}
+
+
+
+
this.testscripttip(0)}>
+
+
+
+
+ 使用自定义模板,平台无法自动更新脚本,
+ 请在关卡创建完后手动更新脚本中的必填参
+ 数和以下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")
+ 其它参数可按实际需求定制
+
+
+
+ this.testscripttip(1)}>知道了
+
+
+
+
+
+
+
+
+
+
+
*
+
+
程序最大执行时间
+
+
秒
+
+
+ 必填项
+
+
+
+ {/*
+
*
+
+
Pod存活时间
+
+
秒
+
+
+ 必填项
+
+
*/}
+
+
+
+
命令行
+
+ 无命令行窗口 (选中则不给学员的实践任务提供命令窗口)
+ 命令行练习窗口 (选中则给学员提供用于练习操作的命令行窗口)
+ 命令行评测窗口 (选中则给学员提供用于关卡评测的命令行窗口)
+
+ 多个命令行窗口(选中则允许学员同时开启多个命令行窗口)
+
+
+
+
+
+
公开程度
+
+ 对所有公开 (选中则所有已被试用授权的用户可以学习)
+ 对指定单位公开 (选中则下方指定单位的已被试用授权的用户可以学习)
+
+
+
+
+
+
+
+
+ {/*{*/}
+ {/*scope_partment===undefined?"":scope_partment.map((item,key)=>{*/}
+ {/*return(*/}
+ {/*
*/}
+ {/*this.deleteScopeInput(key)} style={{ color: 'rgba(0,0,0,.25)' }} />}*/}
+ {/*value={item}*/}
+ {/*/>*/}
+ {/*
*/}
+
+ {/*)*/}
+ {/*})*/}
+ {/*}*/}
+
+
+
+ 请选择需要公开的单位
+
+
+
+
+
+
+
发布信息
+
+
+
*
+
面向学员:
+
+
+
+
+
实训难易度定位,不限定用户群体
+
+ 必填项
+
+
+
+
+ 复制:
+
+
+
+
+
+
+
+ 跳关:
+
+
+
+
+
+
+ 测试集解锁:
+
+
+
+
+
+
+
+ 隐藏代码窗口:
+
+
+
+
+
+
+
+ 代码目录隐藏:
+
+
+
+
+
+
+
+ 禁用复制粘贴:
+
+
+
+
+
+
+
+ 开启时间:
+
+
+
+
+
+ {/*
*/}
+ {/*VNC图形化:*/}
+ {/**/}
+ {/**/}
+ {/**/}
+ {/**/}
+ {/*
*/}
+
+
+
+
+ {
+ // this.props.identity<4&&this.props.status==0?
+ this.props.identity<4?
+
:""
+ }
+ {/*{*/}
+ {/*this.props.identity===1&&this.props.status==2?*/}
+ {/*
:""*/}
+ {/*}*/}
+
+
+
+
+ {/*{*/}
+ {/*this.props.identity===1||this.props.power==true?*/}
+ {/*
:""*/}
+
+ {/*}*/}
+ {/*
*/}
+ {/*
保存*/}
+ {/*
取消*/}
+ {/*
*/}
+
+
+
+ );
+ }
+}
+
+