import React, {Component} from 'react'; import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal} from 'antd'; import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom"; // import "antd/dist/antd.css"; import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor'; import axios from 'axios'; import './css/TPMchallengesnew.css'; import { getImageUrl, toPath } from 'educoder'; import {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; export default class TPMchallengesnew extends Component { constructor(props) { super(props) this.exercisememoMDRef=React.createRef(); this.state = { choice_url: undefined, practice_url: undefined, go_back_url: undefined, task_pass_default: undefined, submit_url: undefined, shixunCreatePracticeGroup: 1, optionsums:[100,200], activetype:0, setopen: false, shixunCreatePractice: undefined, onshixunsmarkvalue: 100, shixunsskillvalue: undefined, shixunsskillvaluelist: [], tab2url: "", tab3url: "", prev_challenge:undefined, next_challenge:undefined, power: false, shixunCreatePracticetype: false, shixunsskillvaluelisttype: false, marktype:false, editPracticesendtype:false, CreatePracticesendtype:false, exec_time:20, shixunExec_timeType:false } } componentDidMount() { let id = this.props.match.params.shixunId; let checkpointId=this.props.match.params.checkpointId; let newchoice_url= "/shixuns/"+id+"/challenges/newquestion"; let newpractice_url= "/shixuns/"+id+"/challenges/new"; let newgo_back_url="/shixuns/"+id+"/challenges" if(checkpointId===undefined){ //新建模式 let url = "/shixuns/" + id + "/challenges/new.json" axios.get(url).then((response) => { this.setState({ choice_url: newchoice_url, practice_url: newpractice_url, go_back_url: newgo_back_url, position: response.data.position, task_pass_default: response.data.task_pass_default, submit_url: response.data.submit_url, checkpointId:checkpointId, exercisememoMDRefval:response.data.task_pass_default }) this.exercisememoMDRef.current.setValue(response.data.task_pass_default||'') }).catch((error) => { console.log(error) }); }else{ //编辑模式 let url="/shixuns/"+id+"/challenges/"+checkpointId+".json?tab=0"; axios.get(url).then((response) => { let optionsum; if(response.data.difficulty===1){ optionsum=[100,200]; }else if(response.data.difficulty===2){ optionsum=[300,400,500,600]; }else if(response.data.difficulty===3){ optionsum=[700,800,900,1000] } let newprev_challenge=response.data.prev_challenge; let next_challenge=response.data.next_challenge; if (newprev_challenge != undefined) { if(newprev_challenge.st===0){ newprev_challenge = "/shixuns/" + id + "/challenges/" + newprev_challenge.id + "/editcheckpoint"; }else{ newprev_challenge = "/shixuns/" + id + "/challenges/" + newprev_challenge.id + "/editquestion"; } } if (next_challenge != undefined) { if(next_challenge.st===0){ next_challenge = "/shixuns/" + id + "/challenges/" + next_challenge.id+ "/editcheckpoint"; }else{ next_challenge = "/shixuns/" + id + "/challenges/" + next_challenge.id+ "/editquestion"; } } this.setState({ power: response.data.power, prev_challenge:newprev_challenge, next_challenge:next_challenge, choice_url: newchoice_url, practice_url: newpractice_url, go_back_url: newgo_back_url, shixunCreatePractice:response.data.subject, position:response.data.position, shixunCreatePracticeGroup:response.data.difficulty, optionsums:optionsum, onshixunsmarkvalue:response.data.score, shixunsskillvaluelist:response.data.tags, checkpointId:checkpointId, exec_time:response.data.exec_time, tab2url: "/shixuns/" + id + "/challenges/"+checkpointId+"/tab=2", tab3url: "/shixuns/" + id + "/challenges/"+checkpointId+"/tab=3", exercisememoMDRefval:response.data.task_pass }) if(response.data.power===false){ this.props.showSnackbar("你没有权限修改"); } this.exercisememoMDRef.current.setValue(response.data.task_pass||'') }).catch((error) => { console.log(error) }); } } onshixunCreatePracticeChange = (e) => { let optionsum; let onshixunsmark; if(e.target.value===1){ optionsum=[100,200]; onshixunsmark=100; }else if(e.target.value===2){ optionsum=[300,400,500,600]; onshixunsmark=300; }else if(e.target.value===3){ optionsum=[700,800,900,1000] onshixunsmark=700; } this.setState({ shixunCreatePracticeGroup: e.target.value, optionsums:optionsum, onshixunsmarkvalue:onshixunsmark }) } shixunCreatePractice = (e) => { this.setState({ shixunCreatePractice: e.target.value }) } CreatePracticesend = () => { this.setState({ CreatePracticesendtype:true }) if(this.props.status===2){ this.props.showSnackbar("该实训已经发布不能新建") this.setState({ CreatePracticesendtype:false }) return } let {shixunCreatePractice, shixunCreatePracticeGroup, onshixunsmarkvalue, shixunsskillvaluelist,exec_time} = this.state; if (shixunCreatePractice === undefined||shixunCreatePractice=="") { this.setState({ shixunCreatePracticetype: true }) this.props.showSnackbar("任务名称为空") $('html').animate({ scrollTop: 10 }, 1000); this.setState({ CreatePracticesendtype:false }) return } if (shixunsskillvaluelist.length === 0) { this.setState({ shixunsskillvaluelisttype: true, CreatePracticesendtype:false }) this.props.showSnackbar("技能标签为空") return } if(exec_time===null||exec_time===undefined||exec_time===""){ this.setState({ shixunExec_timeType:false }) return } const exercise_editormdvalue = this.exercisememoMDRef.current.getValue().trim(); let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/challenges.json"; axios.post(url, { identifier:id, subject: shixunCreatePractice, task_pass: exercise_editormdvalue, difficulty: shixunCreatePracticeGroup, score: onshixunsmarkvalue, challenge_tag: shixunsskillvaluelist, st: 0, exec_time:exec_time }).then((response) => { if (response.data.status === 1) { // $("html").animate({ scrollTop: 0 }) window.location.href=`/shixuns/${id}/challenges/${response.data.challenge_id}/editcheckpoint`; // this.setState({ // setopen: true, // CreatePracticesendtype:false, // tab2url: "/shixuns/" + id + "/challenges/"+response.data.challenge_id+"/tab=2", // tab3url: "/shixuns/" + id + "/challenges/"+response.data.challenge_id+"/tab=3", // }) } // this.props.showSnackbar(response.data.messages); }).catch((error) => { console.log(error) }); } onshixunsmark = (value) => { this.setState({ onshixunsmarkvalue: value }) } shixunsskill = (e) => { this.setState({ shixunsskillvalue: e.target.value }) } clickshixunsskill = () => { let {shixunsskillvalue, shixunsskillvaluelist} = this.state; if (shixunsskillvalue === "") { return } else if (shixunsskillvalue === undefined) { return } if(shixunsskillvalue == "" || shixunsskillvalue == undefined || shixunsskillvalue == null || (shixunsskillvalue.length>0 && shixunsskillvalue.trim().length == 0)){ message.error("输入为空,不能保存!"); return } let list = shixunsskillvaluelist; list.push(shixunsskillvalue); this.setState({ shixunsskillvaluelist: list, shixunsskillvalue: "" }) } delshixunsskilllist = (key) => { let {shixunsskillvaluelist} = this.state; let newshixunsskillvaluelist = shixunsskillvaluelist; newshixunsskillvaluelist.splice(key, 1); this.setState({ shixunsskillvaluelist: newshixunsskillvaluelist }) } editPracticesend=()=>{ this.setState({ editPracticesendtype:true }) let {shixunCreatePractice, shixunCreatePracticeGroup, onshixunsmarkvalue, shixunsskillvaluelist,checkpointId,exec_time} = this.state; const exercise_editormdvalue = this.exercisememoMDRef.current.getValue().trim(); let id = this.props.match.params.shixunId; let url = "/shixuns/"+id+"/challenges/"+checkpointId+".json"; if (shixunCreatePractice === undefined||shixunCreatePractice=="") { // this.setState({ // shixunCreatePracticetype: true // }) this.props.showSnackbar("任务名称为空") $('html').animate({ scrollTop: 10 }, 1000); this.setState({ editPracticesendtype:false }) return } if (shixunsskillvaluelist.length === 0) { // this.setState({ // shixunsskillvaluelisttype: true // }) this.props.showSnackbar("技能标签为空") this.setState({ editPracticesendtype:false }) return } if(exec_time===null||exec_time===undefined||exec_time===""){ this.setState({ shixunExec_timeType:false }) return } axios.put(url, { tab:0, identifier:id, id:checkpointId, challenge:{ subject: shixunCreatePractice, task_pass: exercise_editormdvalue, difficulty: shixunCreatePracticeGroup, score: onshixunsmarkvalue, exec_time:exec_time }, challenge_tag:shixunsskillvaluelist }).then((response) => { this.props.showSnackbar(response.data.messages); if (response.data.status === 1) { this.setState({ setopen: true, editPracticesendtype:false, tab2url: "/shixuns/" + id + "/challenges/"+checkpointId+"/tab=2", tab3url: "/shixuns/" + id + "/challenges/"+checkpointId+"/tab=3", }) // window.location.href = "/shixuns/" + id + "/challenges/"+response.data.challenge_id+"/tab=2" } }).catch((error) => { console.log(error) }); } onshixunsmarks=()=> { this.setState({ marktype:true }) } onshixunsmarkss=()=> { this.setState({ marktype:false }) } setexec_time=(e)=>{ this.setState({ exec_time:e.target.value }) } render() { let shixuntype = this.props.match.params.type; let {marktype, shixunCreatePracticetype, shixunsskillvaluelisttype, choice_url, practice_url, go_back_url, position, task_pass_default, submit_url, setopen,checkpointId,prev_challenge,next_challenge,power, shixunCreatePractice, shixunCreatePracticeGroup, onshixunsmarkvalue, shixunsskillvalue, shixunsskillvaluelist, tab2url, tab3url,optionsums, CreatePracticesendtype,editPracticesendtype } = this.state; let options; if(optionsums!=undefined){ options = optionsums.map((d, k) => { return ( ) }) } return (
第{position}关 返回 { next_challenge===undefined?"": 下一关 } { prev_challenge===undefined?"": 上一关 } 4||this.props.identity===undefined||this.props.status===2||this.props.status===1?"none":'block'}} data-tip-down="新增代码编辑类型的任务">+ 实践类型 4||this.props.identity===undefined||this.props.status===2||this.props.status===1?"none":'block'}} data-tip-down="新增选择题类型的任务">+ 选择题类型
  • 本关任务
  • {tab2url === "" ? 评测设置 : 评测设置}
  • {tab3url === "" ? 参考答案 : 参考答案}
  • 任务名称

    *
    必填项

    过关任务

    难度系数

    简单 中等 困难

    奖励经验值

    *

    如果学员答题错误,则不能得到相应的经验值
    如果学员成功得到经验值,那么将同时获得等值的金币奖励,如:+10经验值、+10金币

    必填项

    技能标签

    *
    {/*+ 添加*/}
    学员答题正确将获得技能,否则不能获得技能
    { shixunsskillvaluelist===undefined?"":shixunsskillvaluelist.length === 0 ? "" : shixunsskillvaluelist.map((itme, key) => { return (
  • {itme} this.delshixunsskilllist(key)}>×
  • ) }) }
    必填项

    服务配置

    *
    必填项
    4||this.props.identity===undefined?"none":'block'}} > {checkpointId===undefined?提交: 提交} 取消
    ) } }