import React, {Component} from 'react'; import {Link} from "react-router-dom"; import {Rating, Progress} from "@icedesign/base"; import {Modal, Input, Radio, Pagination, message, Spin, Icon, Tooltip, Button,Popover} from 'antd'; import AccountProfile from "../user/AccountProfile"; import 'antd/lib/pagination/style/index.css'; import axios from 'axios' import Modals from '../modals/Modals'; import './shixuns/css/TPMBanner.css'; let $ = window.$; const Search = Input.Search; const RadioGroup = Radio.Group; class TPMBanner extends Component { constructor(props) { super(props) this.state = { Forkvisible: false, Senttothetype: false, Senttothevcalue: undefined, courses_count: 1, course_list: [], pagenum: 1, publishbox: "", publishboxstatus: 0, pages: 1, Issuevisible: false, evaluation_set_position: [], tag_position: [], Forkauthentication: false, can_fork: undefined, certi_url: undefined, showradios: false, startbtn: false, Searchvalue: "", startshixunCombattype: false, shixunsmessage: "", shixunsreplace: false, hidestartshixunsreplacevalue: "", isIE: false, Forkvisibletype: false, isSpin: false, Senttothevcaluetype: false, jupyterbool: false, openknow:false, openshowpublictype:false } } IEVersion = () => { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器 var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器 var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1; if (isIE) { var reIE = new RegExp("MSIE (\\d+\\.\\d+);"); reIE.test(userAgent); var fIEVersion = parseFloat(RegExp["$1"]); if (fIEVersion == 7) { return 7; } else if (fIEVersion == 8) { return 8; } else if (fIEVersion == 9) { return 9; } else if (fIEVersion == 10) { return 10; } else { return 6;//IE版本<=7 } } else if (isEdge) { return 'edge';//edge } else if (isIE11) { return 11; //IE11 } else { return -1;//不是ie浏览器 } } openknow=()=>{ let storage=window.localStorage; this.setState({ openknow:false }) storage.setItem("shixunopenprocess",true); } openshowpublic=()=>{ let storage=window.localStorage; this.setState({ openshowpublictype:false }) storage.setItem("openopenpublictype",true); } componentDidUpdate(prevProps, prevState) { if (prevProps != this.props) { let shixunopenprocess=window.localStorage.shixunopenprocess; let openopenpublictype=window.localStorage.openopenpublictype; if(this.props.status===0&&this.props.openknows===false){ if(this.props.shixunsDetails&&this.props.shixunsDetails.shixun_status === 0 && this.props.identity < 5){ if(shixunopenprocess===undefined||shixunopenprocess===false){ this.setState({ openknow:true }) }else{ this.setState({ openknow:false }) } } }else{ this.setState({ openknow:false }) } if(this.props.public===0&&this.props.status>1&&this.props.openknows===false){ if(this.props.shixunsDetails&&this.props.shixunsDetails.shixun_status === 2 && this.props.shixunsDetails&&this.props.shixunsDetails.public===0 && this.props.identity < 5){ if(openopenpublictype===undefined||openopenpublictype===false){ this.setState({ openshowpublictype:true }) }else{ this.setState({ openshowpublictype:false }) } } }else{ this.setState({ openshowpublictype:false }) } } } componentDidMount() { let thiisie = this.IEVersion(); if (thiisie != -1) { this.setState({ isIE: true }) } else { this.setState({ isIE: false }) } } /* * Fork * */ copyForkvisible = () => { let {shixunsDetails} = this.props; if (shixunsDetails.can_fork === null) { this.setState({ Forkvisible: true }) } else { this.setState({ Forkvisible: false, Forkauthentication: true, can_fork: shixunsDetails.can_fork.can_fork, certi_url: shixunsDetails.can_fork.certi_url, }) } } hideForkvisible = () => { this.setState({ Forkvisible: false, Forkauthentication: false }) } addForkvisible = () => { this.setState({ Forkvisibletype: true, }) let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/copy.json"; axios.post(url).then((response) => { if (response.data.status === 401) { } else { this.setState({ Forkvisible: false, Forkauthentication: false, // Forkvisibletype:false }) window.location.href = "/shixuns/" + response.data.shixun + "/challenges"; } }).catch((error) => { console.log(error) }); } /* * 发送至按钮 * */ Senttothe = () => { if (this.props.checkIfLogin() === false) { this.props.showLoginDialog() return } // if(this.props.checkIfProfileCompleted()===false){ // this.setState({ // AccountProfiletype:true // }) // return // } // // if(this.props.checkIfProfessionalCertification()===false){ // this.setState({ // AccountProfiletype:true // }) // return // } let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/search_user_courses.json"; this.setState({ Senttothetype: true }) axios.get(url, { params: { page: 1, limit: 10 } }).then((response) => { this.setState({ courses_count: response.data.courses_count, course_list: response.data.course_list }) }).catch((error) => { console.log(error) }); } SenttotheSearch = (value) => { let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/search_user_courses.json?search=" + value; axios.get(encodeURI(url), { params: { page: 1, limit: 10 } }).then((response) => { this.setState({ courses_count: response.data.courses_count, course_list: response.data.course_list, pages: 1, Searchvalue: value }) }).catch((error) => { console.log(error) }); } onChangeSenttothevcalue = (e) => { this.setState({ Senttothevcalue: e.target.value }) } onChangesendeSenttothe = (pageNumber) => { let {Searchvalue} = this.state; let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/search_user_courses.json?search=" + Searchvalue; axios.get(url, { params: { page: pageNumber, limit: 10 } }).then((response) => { this.setState({ courses_count: response.data.courses_count, course_list: response.data.course_list, pagenum: pageNumber, pages: pageNumber }) }).catch((error) => { console.log(error) }); } sendeSenttothevcalue = () => { let {Senttothevcalue} = this.state; if (Senttothevcalue === undefined) { this.setState({ Senttothevcaluetype: true }) return } let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/send_to_course.json"; axios.post(url, { course_id: Senttothevcalue }).then((response) => { this.props.showSnackbar(response.data.message); this.setState({ Senttothetype: false, Searchvalue: "", pages: 1 }) // window.location.href = response.data.url; // response.data.course_id this.props.history.replace(response.data.first_category_url); }).catch((error) => { console.log(error) }); } hideSenttothevcalue = () => { this.setState({ Senttothetype: false, Searchvalue: "", pages: 1 }) } /* * 撤销发布按钮 * */ ModalCancel = () => { this.setState({ Modalstype: false, Modalstopval: "", modalsMidval:undefined, ModalsBottomval:"", modalstyles:"", }) } ModalSave = () => { let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/cancel_publish.json"; axios.get(url).then((response) => { this.props.showSnackbar(response.data.message); window.location.reload() }).catch((error) => { console.log(error) }); } cancel_publish = () => { this.setState({ Modalstype: true, Modalstopval: "是否确认撤销发布?", modalsMidval:"撤销发布后,学员将无法进行练习,若您新增关", ModalsBottomval:"卡,学员需要重新体验实训", ModalCancel: this.ModalCancel, ModalSave: this.ModalSave, modalstyles:"848282" }) } ModalSaveopenpublic= () => { this.setState({ Modalstype: true, Modalstopval: "公开申请已提交,请等待管理员的审核", modalsMidval:"• 我们将在1-2个工作日内完成审核", ModalCancel: this.eopenpublicupdatadata, ModalSave: this.eopenpublicupdatadata, modalstyles:"848282" }) } eopenpublicupdatadata=()=>{ window.location.reload() } openpublic=()=>{ let id = this.props.match.params.shixunId; let url = `/shixuns/${id}/apply_public.json`; axios.get(url).then((response) => { if(response.data.status===0){ this.ModalSaveopenpublic() } }).catch((error) => { console.log(error) }); } ModalhidenpublicSave=()=>{ let id = this.props.match.params.shixunId; let url = `/shixuns/${id}/cancel_apply_public.json`; axios.get(url).then((response) => { if(response.data.status===0){ window.location.reload() } }).catch((error) => { console.log(error) }); } hidenpublic=()=>{ this.setState({ Modalstype: true, Modalstopval: "是否确认撤销申请公开?", modalsMidval:" ", ModalsBottomval:" ", ModalCancel: this.ModalCancel, ModalSave: this.ModalhidenpublicSave, }) } /* * 申请发布按钮 * */ applyrelease = () => { let id = this.props.match.params.shixunId; let url = "/shixuns/" + id + "/publish.json"; axios.get(url).then((response) => { let evaluation_set_position if (response.data.evaluation_set_position === null) { evaluation_set_position = [] } else { evaluation_set_position = response.data.evaluation_set_position } if(response.data.status===0){ window.location.reload() }else{ this.setState({ Issuevisible: true, tag_position: response.data.tag_position, evaluation_set_position: evaluation_set_position, publishboxstatus: response.data.status, }) } }).catch((error) => { console.log(error) }); }; hiddenIssuevisible = (val) => { this.setState({ Issuevisible: false }) if (val === 0 || val === 1) { window.location.reload() } } //重置按钮 // resetshixunCombat=(id)=>{ // let zrl="/myshixuns/"+id+"/reset_my_game.json"; // axios.get(zrl).then((response) => { // window.location.href = "/shixuns/" + response.data.shixun_identifier + "/challenges"; // message.success('重置成功'); // }).catch((error) => { // console.log(error) // }); // } // reset_my_game hidestartshixunsreplace = (url) => { this.setState({ isSpin: true, }) axios.get(url).then((response) => { if (response.status === 200) { // let path="/shixuns/"+response.data.shixun_identifier+"/challenges"; // this.props.history.push(path); message.success('重置成功,正在进入实训!'); this.startshixunCombat(response.data.shixun_identifier, 1); this.setState({ shixunsreplace: false, isSpin: false, }) // message.success('重置成功,正在进入实训!'); // this.startshixunCombat(); } } ).catch((error) => { this.setState({ startbtn: false, shixunsreplace: false, isSpin: false }) }); } //开始实战按钮 startshixunCombat = (id, reset) => { if(this.props.shixunsDetails&&this.props.shixunsDetails.is_jupyter===true){ if (this.props.checkIfLogin() === false) { this.props.showLoginDialog() return } if (this.props.checkIfProfileCompleted() === false) { this.setState({ AccountProfiletype: true }) return } // if(this.props.checkIfProfessionalCertification()===false){ // this.setState({ // AccountProfiletype:true // }) // return // } let {shixunsDetails} = this.props if (shixunsDetails.shixun_status > 1) { this.setState({ startbtn: true, hidestartshixunsreplacevalue: "" }) } else { this.setState({ hidestartshixunsreplacevalue: "" }) } let url = "/shixuns/" + id + "/jupyter_exec.json"; if (reset) { url += '?reset=' + reset } axios.get(url).then((response) => { if (response.status === 200) { if (response.data.status === -2) { // this.resetshixunCombat(response.data.message); this.setState({ startbtn: false, shixunsreplace: true, hidestartshixunsreplacevalue: response.data.message + ".json" }) // this.shixunexec(response.data.message+".json") } else if (response.data.status === -1) { } else if (response.data.status === -3) { this.setState({ shixunsmessage: response.data.message, startshixunCombattype: true, startbtn: false }) } else { // let path="/tasks/"+response.data.game_identifier; // this.props.history.push(path); // this.context.router.history.push(path); if (response.data.status != 401) { window.location.href = "/tasks/" + response.data.identifier+`/jupyter`; } } } }).catch((error) => { this.setState({ startbtn: false }) }); }else{ if (this.props.checkIfLogin() === false) { this.props.showLoginDialog() return } if (this.props.checkIfProfileCompleted() === false) { this.setState({ AccountProfiletype: true }) return } // if(this.props.checkIfProfessionalCertification()===false){ // this.setState({ // AccountProfiletype:true // }) // return // } let {shixunsDetails} = this.props if (shixunsDetails.shixun_status > 1) { this.setState({ startbtn: true, hidestartshixunsreplacevalue: "" }) } else { this.setState({ hidestartshixunsreplacevalue: "" }) } let url = "/shixuns/" + id + "/shixun_exec.json"; if (reset) { url += '?reset=' + reset } axios.get(url).then((response) => { if (response.status === 200) { if (response.data.status === -2) { // this.resetshixunCombat(response.data.message); this.setState({ startbtn: false, shixunsreplace: true, hidestartshixunsreplacevalue: response.data.message + ".json" }) // this.shixunexec(response.data.message+".json") } else if (response.data.status === -1) { } else if (response.data.status === -3) { this.setState({ shixunsmessage: response.data.message, startshixunCombattype: true, startbtn: false }) } else { // let path="/tasks/"+response.data.game_identifier; // this.props.history.push(path); // this.context.router.history.push(path); if (response.data.status != 401) { window.location.href = "/tasks/" + response.data.game_identifier; } } } }).catch((error) => { this.setState({ startbtn: false }) }); } } tocertification = () => { let {certi_url} = this.state; this.setState({ Forkauthentication: false }) window.location.href = certi_url; } SenttotheValue = (e) => { this.setState({ Searchvalue: e.target.value }) } hidestartshixunCombattype = () => { this.setState({ startshixunCombattype: false }) } hideAccountProfile = () => { this.setState({ AccountProfiletype: false }) } showonMouseOver = () => { $("#ratePanel").show(); this.setState({ showradios: true }) } hideonMouseOut = () => { $("#ratePanel").hide(); this.setState({ showradios: false }) } render() { let { Forkvisible, Senttothetype, Senttothevcalue, evaluation_set_position, Forkauthentication, can_fork, certi_url, tag_position, courses_count, course_list, Issuevisible, publishboxstatus, showradios, startbtn, Searchvalue, startshixunCombattype, shixunsmessage, pages, shixunsreplace, hidestartshixunsreplacevalue, Forkvisibletype, AccountProfiletype, isIE } = this.state; let {shixunsDetails, shixunId, star_info, star_infos} = this.props; let challengeBtnTipText = ''; let challengeBtnText = '模拟实战'; // let star_info=[] // if (shixunsDetails.status === 0) { // // } else if (shixunsDetails.status === 1) { // // } else if (shixunsDetails.status === 2) { // challengeBtnTipText = '开始学习并完成实战任务' // // } if (shixunsDetails != undefined) { if (shixunsDetails.shixun_status === 0) { challengeBtnText = '继续实战' } else if (shixunsDetails.shixun_status === 1) { challengeBtnText = '查看实战' } else if (shixunsDetails.shixun_status === 3) { challengeBtnText = '继续实战' } else { challengeBtnText = "开始实战" } } // let list=shixunsDetails.task_operation; // if(list!=undefined){ // if (shixunsDetails.status === 0 ) { // for(var i=0; i; const MyRate = ({defaultValue, ...rest}) => { let myValue = defaultValue; // console.log(myValue-Math.floor(myValue)) // if (myValue < Math.ceil(myValue)) { // myValue = Math.floor(myValue) + 0.5; // } return ; }; // // console.log(this.props.shixunsDetails&&this.props.shixunsDetails.is_jupyter) // console.log(this.props) // console.log(this.state) return ( shixunsDetails === undefined ? "" :
{AccountProfiletype === true ? this.hideAccountProfile()} {...this.props} {...this.state} /> : ""} {this.state.Modalstype === true ? : ""}

{shixunsDetails.name} { shixunsDetails.fork_from === undefined || shixunsDetails.fork_from === null ? "" : }

    {shixunsDetails&&shixunsDetails.stu_num===0?"":
  • 学习人数 {shixunsDetails.stu_num}
  • } {/*
  • */} {/*经验值*/} {/*{shixunsDetails.experience}*/} {/*
  • */}
  • 难度级别 {shixunsDetails.diffcult}
{ this.props.is_jupyter===true?"":
{star_infos[0]}分 总评分
{star_infos[1]}%
{star_infos[2]}%
{star_infos[3]}%
{star_infos[4]}%
{star_infos[5]}%
}>
学员评分
} { startbtn === false && shixunsDetails.shixun_status != -1 ? this.startshixunCombat(this.props.match.params.shixunId)} className="fr user_default_btn task-btn-orange font-18" id="shixun_operation" data-remote="true" > {shixunsDetails.task_operation === undefined ? "" : shixunsDetails.shixun_status > 1 ? shixunsDetails.task_operation[0] : "模拟实战"} : "" }

目前该实训项目尚在内测中,将于{shixunsmessage}之后开放,谢谢!

{/*

*/} {/*知道了*/} {/*

*/}

实训已经更新了,正在为您重置!

{ startbtn === true ? 开启中 : "" } {/*{*/} {/*shixunsDetails.status=== 3 && shixunsDetails.task_operation[0]==="开始实战"?*/} {/*{shixunsDetails.task_operation===undefined?"":shixunsDetails.task_operation[0]}:""*/} {/*}*/} {shixunsDetails.shixun_status === 0 && this.props.identity < 5 ?
点击发布后,可以马上应用到自
己的课堂和课程
} trigger="click" placement="bottom" visible={this.state.openknow} > 发布
: "" } { publishboxstatus === 0 ?

发布申请已提交,请等待管理员的审核

: publishboxstatus === 1 ?

发布申请已提交,请等待管理员的审核
• 我们将在1-2个工作日内完成审核

: publishboxstatus === 2 ?

第 { evaluation_set_position.map((item, key) => { return ( {item}, ) }) } 关评测设置尚未完成,无法申请发布

: publishboxstatus === 3 ?

每一个关卡至少需要一个技能标签
第 { tag_position.map((item, key) => { return ( {item}, ) }) } 关尚未设置技能标签,请补充

:

尚未创建任务的实训,不能申请发布

}
{shixunsDetails.shixun_status === 2 && shixunsDetails.public===0 && this.props.identity < 5 ?
平台审核完成后,您的实训将会录入到平台的公共实训项目列表
您将获得实训对应的经验值和金币
} trigger="click" placement="bottom" visible={this.state.openshowpublictype} >
: "" } {shixunsDetails.shixun_status === 2 && shixunsDetails.public===1 && this.props.identity < 5 ? : "" } {shixunsDetails.shixun_status === 2 && shixunsDetails.public===0 && this.props.identity < 5 ? 撤销发布 : "" } { 发送至 }
选择的实训将会发送到指定课堂
this.SenttotheSearch(value)} style={{width: '100%'}} />
12 ? "cdefault " : "cdefault "}>
    { course_list === undefined ? "" : course_list.map((item, key) => { return ( {item.name} ) }) }
{this.state.Senttothevcaluetype === true ?
请选择你要发送的课堂
: ""}
12 ? "block" : "none"}}>
{shixunsDetails.shixun_status === 3 && 已关闭 } {shixunsDetails.shixun_status === -1 && 已删除 } {this.props.identity < 8 && shixunsDetails.shixun_status != -1 && shixunsDetails.shixun_status != 0?
Fork {Forkvisibletype === true ? :

复制将在后台执行,平台将为你创建
一个新的同名实训和内容,请问是否继续?

}

{can_fork}
请问是否前往进行认证?

{!!shixunsDetails.fork_num && {shixunsDetails.fork_num} }
: ""}
正在等待管理员的审核。在审核通过前,可以随时撤销发布
); } } export default TPMBanner;