|
|
import React, { Component } from 'react';
|
|
|
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
|
|
|
import { Redirect } from 'react-router';
|
|
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
|
// import searchImg from '../../../../images/educoder/icon/search.svg'
|
|
|
|
|
|
// /images/educoder/icon/search.svg
|
|
|
|
|
|
import { getImageUrl, toPath } from 'educoder'
|
|
|
|
|
|
import axios from 'axios';
|
|
|
|
|
|
import { Modal,Checkbox ,Radio,Input,message } from 'antd';
|
|
|
|
|
|
import Addcourses from '../courses/coursesPublic/Addcourses';
|
|
|
|
|
|
import LoginDialog from '../login/LoginDialog';
|
|
|
|
|
|
import Trialapplication from '../login/Trialapplication'
|
|
|
|
|
|
import 'antd/lib/modal/style/index.css';
|
|
|
|
|
|
import 'antd/lib/checkbox/style/index.css';
|
|
|
|
|
|
import 'antd/lib/radio/style/index.css';
|
|
|
|
|
|
import 'antd/lib/input/style/index.css';
|
|
|
|
|
|
import './TPMIndex.css'
|
|
|
|
|
|
import { trigger, broadcastChannelPostMessage } from 'educoder';
|
|
|
|
|
|
const $ = window.$
|
|
|
// TODO 这部分脚本从公共脚本中直接调用
|
|
|
|
|
|
const RadioGroup = Radio.Group;
|
|
|
const Search = Input.Search;
|
|
|
let old_url;
|
|
|
function loadHeader(){
|
|
|
//头部导航条的----------显示搜索框
|
|
|
$("#search-open").on("click",function(e){
|
|
|
$(this).hide();
|
|
|
// $("#header-nav").animate({opacity:"0"},1000);
|
|
|
$(".posi-search").show() // animate({opacity:"1"},1000);
|
|
|
$("#header-nav").css("z-index","2");
|
|
|
$(".posi-search").css("z-index","3");
|
|
|
$(".HeaderSearch").show();
|
|
|
$(".HeaderSearch").val("");
|
|
|
$(".search-input").focus();
|
|
|
$(".search-all .search-content").hide();
|
|
|
e.stopPropagation();//阻止冒泡
|
|
|
});
|
|
|
$(".HeaderSearch").on("click",function(e){
|
|
|
e.stopPropagation();//阻止冒泡
|
|
|
});
|
|
|
//搜索框输入内容
|
|
|
$(".HeaderSearch").on("input",function(e){
|
|
|
if($(".HeaderSearch").val()==""){
|
|
|
$(".search-all .search-content").hide();
|
|
|
}else{
|
|
|
$(".search-all .search-content").show();
|
|
|
}
|
|
|
e.stopPropagation();//阻止冒泡
|
|
|
});
|
|
|
//搜索
|
|
|
// $("#header_keyword_search").on("click", header_search);
|
|
|
// $("input[name='search_keyword']").on("keydown", function(event){
|
|
|
// var code;
|
|
|
// if (!event) {
|
|
|
// event = window.event; //针对ie浏览器
|
|
|
// code = event.keyCode;
|
|
|
// }
|
|
|
// else {
|
|
|
// code = event.keyCode;
|
|
|
// }
|
|
|
// if(code == 13) {
|
|
|
// header_search();
|
|
|
// return false;
|
|
|
// }
|
|
|
// });
|
|
|
$(".search-clear").click(function(e){e.stopPropagation();});
|
|
|
//切换搜索条件
|
|
|
$("#searchkey li").click(function(e){
|
|
|
var key=$($(this).children("a")[0]).html();
|
|
|
switch (key){
|
|
|
case '实训':
|
|
|
$("#search_type").val('1');
|
|
|
break;
|
|
|
case '课堂':
|
|
|
$("#search_type").val('2');
|
|
|
break;
|
|
|
case '用户':
|
|
|
$("#search_type").val('3');
|
|
|
break;
|
|
|
}
|
|
|
$("#searchkey").siblings(".searchkey").html(key);
|
|
|
$("#searchkey").hide();
|
|
|
e.stopPropagation();//阻止冒泡
|
|
|
});
|
|
|
//切换选择导航条
|
|
|
$("#header-nav li").click(function(){
|
|
|
$("#header-nav li").removeClass("active");
|
|
|
$(this).addClass("active");
|
|
|
});
|
|
|
//点击页面其它(与搜索框无关的地方)都会将搜索框隐藏,所以与搜索框有关的地方需要阻止冒泡
|
|
|
$("body").on("click",function(){
|
|
|
closeSearch();
|
|
|
});
|
|
|
|
|
|
$(".search_history").on("click", function(){
|
|
|
$("input[name='search_keyword']").val($(this).html());
|
|
|
header_search();
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function header_search(reactHeaderComponnet){
|
|
|
console.log(old_url)
|
|
|
var keyword = $("input[name='search_keyword']").val(); // 搜索关键字
|
|
|
if (!reactHeaderComponnet) {
|
|
|
reactHeaderComponnet = window._header_componentHandler
|
|
|
}
|
|
|
if (!reactHeaderComponnet) {
|
|
|
var index = $("#search_type").val(); // 搜索课程/项目
|
|
|
keyword = encodeURIComponent(keyword);
|
|
|
// $.get('/users/search_shixuns_or_course',
|
|
|
// { search: keyword,
|
|
|
// index: index});
|
|
|
window.location.href = old_url+"/users/search_shixuns_or_courses" + "?search=" + keyword + "&index=" + index;
|
|
|
//e.stopPropagation();//阻止冒泡
|
|
|
} else {
|
|
|
window.__headSearchKeyword = keyword
|
|
|
reactHeaderComponnet.props.history.push(`/shixuns`)
|
|
|
trigger('searchKeywordChange', keyword)
|
|
|
}
|
|
|
}
|
|
|
//头部导航条的隐藏
|
|
|
function closeSearch(){
|
|
|
$('#posi-search').hide();
|
|
|
$("#search-open").show();
|
|
|
// $(".posi-search").animate({opacity:"0"},800);
|
|
|
$(".HeaderSearch").hide();
|
|
|
$("#header-nav").animate({opacity:"1"},1000);
|
|
|
$(".posi-search").css("z-index","2");
|
|
|
$("#header-nav").css("z-index","3");
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
_logined_header.html.erb
|
|
|
_unlogin_header.html.erb
|
|
|
*/
|
|
|
window._header_componentHandler = null;
|
|
|
class NewHeader extends Component {
|
|
|
constructor(props) {
|
|
|
super(props)
|
|
|
this.state={
|
|
|
Addcoursestypes:false,
|
|
|
tojoinitemtype:false,
|
|
|
tojoinclasstitle:undefined,
|
|
|
rolearr:["",""],
|
|
|
Checkboxteacherchecked:false,
|
|
|
Checkboxstudentchecked:false,
|
|
|
Checkboxteachingchecked:false,
|
|
|
Checkboxteachertype:false,
|
|
|
Checkboxteachingtype:false,
|
|
|
code_notice:false,
|
|
|
checked_notice:false,
|
|
|
RadioGroupvalue:undefined,
|
|
|
submitapplications:false,
|
|
|
isRender:false,
|
|
|
isRenders:false,
|
|
|
showTrial:false,
|
|
|
}
|
|
|
// console.log("176")
|
|
|
// console.log(props);
|
|
|
}
|
|
|
|
|
|
componentDidMount() {
|
|
|
window._header_componentHandler = this;
|
|
|
|
|
|
loadHeader();
|
|
|
|
|
|
//下拉框的显示隐藏
|
|
|
var hoverTimeout;
|
|
|
var hoveredPanel;
|
|
|
$(".edu-menu-panel").hover(function(){
|
|
|
if (hoverTimeout) { // 一次只显示一个panel
|
|
|
if (hoveredPanel && hoveredPanel != this) {
|
|
|
$(hoveredPanel).find(".edu-menu-list").hide()
|
|
|
}
|
|
|
clearTimeout(hoverTimeout);
|
|
|
hoverTimeout = null;
|
|
|
}
|
|
|
hoveredPanel = this;
|
|
|
$(this).find(".edu-menu-list").show();
|
|
|
},function(){
|
|
|
var that =this;
|
|
|
// 延迟hide
|
|
|
hoverTimeout = setTimeout(function() {
|
|
|
$(that).find(".edu-menu-list").hide();
|
|
|
}, 800)
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
componentDidUpdate = (prevProps) => {
|
|
|
// if(prevProps.user!=this.props.user){
|
|
|
// // console.log("216")
|
|
|
// // console.log(prevProps.user);
|
|
|
// // console.log(this.props.user);
|
|
|
// if(this.props.user !== undefined){
|
|
|
// this.setState({
|
|
|
// user_phone_binded :this.props.user.user_phone_binded,
|
|
|
// })
|
|
|
// }
|
|
|
//
|
|
|
//
|
|
|
// }
|
|
|
}
|
|
|
componentWillReceiveProps(newProps, oldProps) {
|
|
|
this.setState({
|
|
|
user:newProps.user
|
|
|
})
|
|
|
if(newProps.Headertop!=undefined){
|
|
|
old_url=newProps.Headertop.old_url
|
|
|
}
|
|
|
|
|
|
}
|
|
|
getCookie=(key)=>{
|
|
|
var arr,reg = RegExp('(^| )'+key+'=([^;]+)(;|$)');
|
|
|
if (arr = document.cookie.match(reg)) //["username=liuwei;", "", "liuwei", ";"]
|
|
|
return decodeURIComponent(arr[2]);
|
|
|
else
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
delCookie=(name)=>{
|
|
|
var exp = new Date();
|
|
|
exp.setTime(exp.getTime() - 1);
|
|
|
var cval=this.getCookie(name);
|
|
|
if(cval!=null){
|
|
|
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
|
|
|
}
|
|
|
}
|
|
|
onLogout = () => {
|
|
|
const url = `/accounts/logout.json`
|
|
|
this.delCookie("autologin_trustie")
|
|
|
axios.get(url, {
|
|
|
})
|
|
|
.then((response) => {
|
|
|
if(response.data.status===1){
|
|
|
this.setState({
|
|
|
user:undefined
|
|
|
})
|
|
|
// let path="/";
|
|
|
// this.props.history.push(path);
|
|
|
broadcastChannelPostMessage('refreshPage')
|
|
|
window.location.href ="/login"
|
|
|
message.success('退出成功');
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
tojoinclass=()=>{
|
|
|
this.setState({
|
|
|
Addcoursestypes:true,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
tojoinitem=()=>{
|
|
|
this.setState({
|
|
|
tojoinitemtype:true
|
|
|
})
|
|
|
}
|
|
|
|
|
|
|
|
|
submitstatevalue=(sum,value,data)=>{
|
|
|
this.setState({
|
|
|
Addcoursestypes:false,
|
|
|
tojoinitemtype:false,
|
|
|
tojoinclasstitle:undefined,
|
|
|
rolearr:["",""],
|
|
|
Checkboxteacherchecked:false,
|
|
|
Checkboxstudentchecked:false,
|
|
|
Checkboxteachingchecked:false,
|
|
|
Checkboxteachertype:false,
|
|
|
Checkboxteachingtype:false,
|
|
|
code_notice:false,
|
|
|
checked_notice:false,
|
|
|
submitapplicationssum:sum,
|
|
|
submitapplications:true,
|
|
|
submitapplicationsvalue:value,
|
|
|
submitapplicationsvaluedata:data,
|
|
|
RadioGroupvalue:undefined
|
|
|
})
|
|
|
}
|
|
|
|
|
|
onChangeRadioGroup = (e) => {
|
|
|
this.setState({
|
|
|
RadioGroupvalue: e.target.value,
|
|
|
});
|
|
|
}
|
|
|
|
|
|
submitsubmitapplications=()=>{
|
|
|
let {
|
|
|
submitapplicationssum,
|
|
|
submitapplicationsvaluedata
|
|
|
}=this.state;
|
|
|
this.setState({
|
|
|
submitapplications:false,
|
|
|
RadioGroupvalue:undefined
|
|
|
})
|
|
|
if(submitapplicationssum===0){
|
|
|
if(submitapplicationsvaluedata!=undefined){
|
|
|
window.location.href = "https://www.educoder.net/courses/"+submitapplicationsvaluedata;
|
|
|
}
|
|
|
}else if(submitapplicationssum===1){
|
|
|
if(submitapplicationsvaluedata!=undefined){
|
|
|
window.location.href = "https://www.educoder.net/projects/"+submitapplicationsvaluedata;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
hidesubmitapplications=()=>{
|
|
|
this.setState({
|
|
|
Addcoursestypes:false,
|
|
|
tojoinitemtype:false,
|
|
|
tojoinclasstitle:undefined,
|
|
|
rolearr:["",""],
|
|
|
Checkboxteacherchecked:false,
|
|
|
Checkboxstudentchecked:false,
|
|
|
Checkboxteachingchecked:false,
|
|
|
Checkboxteachertype:false,
|
|
|
Checkboxteachingtype:false,
|
|
|
code_notice:false,
|
|
|
checked_notice:false,
|
|
|
submitapplications:false,
|
|
|
RadioGroupvalue:undefined
|
|
|
})
|
|
|
}
|
|
|
educoderlogin=()=>{
|
|
|
//退出账号
|
|
|
this.setState({
|
|
|
isRender:true
|
|
|
})
|
|
|
// var url = `/accounts/logout.json`;
|
|
|
//
|
|
|
// axios.get((url)).then((result) => {
|
|
|
// if(result!==undefined){
|
|
|
// // this.setState({
|
|
|
// // isRender:true
|
|
|
// // })
|
|
|
// window.location.href = "/";
|
|
|
// }
|
|
|
// }).catch((error) => {
|
|
|
// console.log(error);
|
|
|
// })
|
|
|
}
|
|
|
educoderloginysl=()=>{
|
|
|
//退出账号
|
|
|
// this.setState({
|
|
|
// isRender:true
|
|
|
// })
|
|
|
var url = `/accounts/logout.json`;
|
|
|
|
|
|
axios.get((url)).then((result) => {
|
|
|
if(result!==undefined){
|
|
|
// this.setState({
|
|
|
// isRender:true
|
|
|
// })
|
|
|
window.location.href = "/";
|
|
|
}
|
|
|
}).catch((error) => {
|
|
|
console.log(error);
|
|
|
})
|
|
|
}
|
|
|
onKeywordSearch = () => {
|
|
|
header_search(this)
|
|
|
}
|
|
|
onKeywordSearchKeyDown = (e) => {
|
|
|
let code = e.keyCode;
|
|
|
|
|
|
if(code == 13) {
|
|
|
header_search(this);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
hideAddcoursestypes=()=>{
|
|
|
|
|
|
this.setState({
|
|
|
Addcoursestypes:false
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
hidetojoinclass=()=>{
|
|
|
this.setState({
|
|
|
tojoinclasstype:false,
|
|
|
tojoinitemtype:false,
|
|
|
tojoinclasstitle:undefined,
|
|
|
rolearr:["",""],
|
|
|
Checkboxteacherchecked:false,
|
|
|
Checkboxstudentchecked:false,
|
|
|
Checkboxteachingchecked:false,
|
|
|
Checkboxteachertype:false,
|
|
|
Checkboxteachingtype:false,
|
|
|
code_notice:false,
|
|
|
checked_notice:false,
|
|
|
RadioGroupvalue:undefined
|
|
|
})
|
|
|
}
|
|
|
|
|
|
submittojoinclass=(value)=>{
|
|
|
let {tojoinclasstitle,rolearr,RadioGroupvalue}=this.state;
|
|
|
|
|
|
if(tojoinclasstitle===undefined){
|
|
|
this.setState({
|
|
|
code_notice:true
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
let newrolearr=rolearr;
|
|
|
if(value===1){
|
|
|
if(tojoinclasstitle.length<6){
|
|
|
this.setState({
|
|
|
code_notice:true
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
}else if(value===0){
|
|
|
if(tojoinclasstitle.length<5){
|
|
|
this.setState({
|
|
|
code_notice:true
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
if(tojoinclasstitle===""||tojoinclasstitle===undefined){
|
|
|
this.setState({
|
|
|
code_notice:true
|
|
|
})
|
|
|
return
|
|
|
}else{
|
|
|
this.setState({
|
|
|
code_notice:false
|
|
|
})
|
|
|
}
|
|
|
|
|
|
let pamst=[];
|
|
|
let num=0;
|
|
|
for(var i = 0 ; i<newrolearr.length;i++){
|
|
|
if(newrolearr[i]!=""){
|
|
|
pamst.push(newrolearr[i])
|
|
|
}else{
|
|
|
num=num+1
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(num===2&&value===0){
|
|
|
this.setState({
|
|
|
checked_notice:true
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if(value===1&&RadioGroupvalue===undefined){
|
|
|
this.setState({
|
|
|
checked_notice:true
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if(value===0){
|
|
|
let url="https://www.educoder.net/courses/join_course_multi_role.json"
|
|
|
const form = new FormData();
|
|
|
form.append('invite_code', tojoinclasstitle);
|
|
|
form.append('role', pamst);
|
|
|
form.append('type', 1);
|
|
|
axios.post(url,form,[true]
|
|
|
).then((response) => {
|
|
|
if( response.data.state===0){
|
|
|
this.submitstatevalue(0,"加入成功",response.data.course_id)
|
|
|
}else if( response.data.state===1){
|
|
|
}else if( response.data.state===2){
|
|
|
this.submitstatevalue( 0,"课堂已过期! 请联系课堂管理员重启课堂。(在配置课堂处)")
|
|
|
}else if( response.data.state===3){
|
|
|
this.submitstatevalue( 0,"您已是课堂成员)",response.data.course_id)
|
|
|
}else if( response.data.state===4){
|
|
|
this.submitstatevalue( 0,"您输入的邀请码错误)")
|
|
|
}else if( response.data.state===5){
|
|
|
this.submitstatevalue( 0,"您还未登录")
|
|
|
}else if( response.data.state===6){
|
|
|
this.submitstatevalue( 0,"申请已提交,请等待审核")
|
|
|
}else if( response.data.state===7){
|
|
|
this.submitstatevalue( 0," 您已经发送过申请了,请耐心等待")
|
|
|
}else if( response.data.state===8){
|
|
|
this.submitstatevalue( 0,"您已经是该课堂的教师了",response.data.course_id)
|
|
|
}else if( response.data.state==9){
|
|
|
this.submitstatevalue( 0,"您已经是该课堂的教辅了",response.data.course_id)
|
|
|
}else if( response.data.state==10){
|
|
|
this.submitstatevalue(0,"您已经是该课堂的管理员了",response.data.course_id)
|
|
|
}else if( response.data.state==11){
|
|
|
this.submitstatevalue(0," 该课堂已归档,请联系老师")
|
|
|
}else if( response.data.state==12){
|
|
|
this.submitstatevalue(0,"您已经发送过申请了,请耐心等待师")
|
|
|
}else if( response.data.state==13){
|
|
|
this.submitstatevalue(0,"您申请已提交,请等待审核")
|
|
|
}else if( response.data.state==14){
|
|
|
this.submitstatevalue("此邀请码已停用,请与老师联系")
|
|
|
}else if( response.data.state==15){
|
|
|
this.submitstatevalue(0,"您已是课堂成员! 加入分班请在课堂具体分班页面进行")
|
|
|
}else {
|
|
|
this.submitstatevalue(0," 未知错误,请稍后再试")
|
|
|
}
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
if(value===1){
|
|
|
let url="https://www.educoder.net/applied_project/applied_project_info.json"
|
|
|
const form = new FormData();
|
|
|
form.append('invite_code', tojoinclasstitle);
|
|
|
form.append('member', RadioGroupvalue);
|
|
|
form.append('type', 1);
|
|
|
axios.post(url,form,[true]
|
|
|
).then((response) => {
|
|
|
if( response.data.status===1){
|
|
|
this.submitstatevalue(1,"您输入的邀请码错误")
|
|
|
}else if( response.data.status===2){
|
|
|
this.submitstatevalue( 1,"您已经是该项目成员",response.data.project)
|
|
|
}else if( response.data.status===3){
|
|
|
this.submitstatevalue( 1,"请选择一个角色")
|
|
|
}else if( response.data.status===4){
|
|
|
this.submitstatevalue( 1,"您的申请已提交,请等待项目管理员审批")
|
|
|
}else if( response.data.status===5){
|
|
|
this.submitstatevalue( 1,"您已经申请加入该项目了,请耐心等待")
|
|
|
}else if( response.data.status===6){
|
|
|
this.submitstatevalue( 1,"您已成功加入项目",response.data.project)
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// trialapplications =()=>{
|
|
|
// console.log("点击了")
|
|
|
// this.setState({
|
|
|
// isRenders: true,
|
|
|
// showTrial:true,
|
|
|
// })
|
|
|
// }
|
|
|
|
|
|
// 关闭
|
|
|
cancelModulationModels = () => {
|
|
|
this.setState({isRenders: false})
|
|
|
}
|
|
|
|
|
|
render() {
|
|
|
const isLogin = true; // 这里不会出现未登录的情况,服务端在服务端路由时发现如果是未登录,则跳转到登录页了。
|
|
|
const {match ,} = this.props;
|
|
|
|
|
|
let {Addcoursestypes,
|
|
|
tojoinitemtype,
|
|
|
tojoinclasstitle,
|
|
|
Checkboxteacherchecked,
|
|
|
Checkboxstudentchecked,
|
|
|
Checkboxteachingchecked,
|
|
|
Checkboxteachertype,
|
|
|
Checkboxteachingtype,
|
|
|
code_notice,
|
|
|
checked_notice,
|
|
|
RadioGroupvalue,
|
|
|
submitapplications,
|
|
|
submitapplicationsvalue,
|
|
|
user,
|
|
|
isRender,
|
|
|
isRenders,
|
|
|
}=this.state;
|
|
|
/*
|
|
|
用户名称 用户头像url
|
|
|
*/
|
|
|
let activeIndex = false;
|
|
|
let activeForums = false;
|
|
|
let activeShixuns = false;
|
|
|
let activePaths = false;
|
|
|
let coursestype=false;
|
|
|
|
|
|
if (match.path === '/forums') {
|
|
|
activeForums = true;
|
|
|
} else if (match.path.startsWith('/shixuns')) {
|
|
|
activeShixuns = true;
|
|
|
}else if (match.path.startsWith('/paths')) {
|
|
|
activePaths = true;
|
|
|
} else if (match.path.startsWith('/courses')) {
|
|
|
coursestype = true;
|
|
|
}else {
|
|
|
activeIndex = true;
|
|
|
}
|
|
|
// join_course_url: "https://www.educoder.net/courses/join_course_multi_role"
|
|
|
// join_project_url: "https://www.educoder.net/applied_project/applied_project_info"
|
|
|
// rolearr:["",""],
|
|
|
// console.log("618");
|
|
|
// console.log(user_phone_binded);
|
|
|
return (
|
|
|
|
|
|
<div className="newHeader" id="nHeader">
|
|
|
{/*{*/}
|
|
|
{/* isRender&& isRender === true?*/}
|
|
|
<LoginDialog
|
|
|
{...this.state}
|
|
|
/>
|
|
|
{/* :""*/}
|
|
|
{/*}*/}
|
|
|
|
|
|
{/*{*/}
|
|
|
{/* isRenders&&isRenders===true?*/}
|
|
|
{/* <Trialapplication*/}
|
|
|
{/* {...this.state}*/}
|
|
|
{/* Cancel={() => this.cancelModulationModels()}*/}
|
|
|
{/* />*/}
|
|
|
{/* :""*/}
|
|
|
{/*}*/}
|
|
|
<Trialapplication {...this.state} Cancel={() => this.cancelModulationModels()} ></Trialapplication>
|
|
|
<div className="educontent clearfix">
|
|
|
{/*<%= link_to image_tag("/images/educoder/logo.png", alt:"高校智能化教学与实训平台", className:"logoimg"), home_path %>*/}
|
|
|
<a href="/">
|
|
|
<img alt="高校智能化教学与实训平台" className="logoimg" src={getImageUrl("images/educoder/headNavLogo.png?1526520218")}></img>
|
|
|
</a>
|
|
|
<div className="head-nav pr" style={{width:'716px'}}>
|
|
|
|
|
|
<ul id="header-nav">
|
|
|
{/*<li className={`${activeIndex === true ? 'active' : ''}`}><a href="/">首页</a></li>*/}
|
|
|
|
|
|
{/*<li><a href={this.props.Headertop===undefined?"":this.props.Headertop.shixun_paths_url}>实训路径</a></li>*/}
|
|
|
<li className={`${activePaths === true ? 'pr active' : 'pr'}`}>
|
|
|
<a href={this.props.Headertop===undefined?"":'/paths'}>实训课程</a></li>
|
|
|
|
|
|
{/*<li><a href={this.props.Headertop===undefined?"":'/courses'}>课堂</a></li>*/}
|
|
|
<li className={`${coursestype === true ? 'pr active' : 'pr'}`}>
|
|
|
{/*<a href={this.props.Headertop===undefined?"":this.props.Headertop.course_url}>课堂</a>*/}
|
|
|
<a href={this.props.Headertop===undefined?"":'/courses'}>翻转课堂</a>
|
|
|
</li>
|
|
|
|
|
|
<li className={`${activeShixuns === true ? 'pr active' : 'pr'}`}>
|
|
|
<a href="/shixuns">开发社区</a>
|
|
|
<img src={getImageUrl("images/educoder/hot-h.png")} className="nav-img">
|
|
|
</img>
|
|
|
</li>
|
|
|
|
|
|
<li className="fl edu-menu-panel careershover "
|
|
|
style={{display: this.props.Headertop === undefined ?'none' : this.props.Headertop.career_url.length > 0 ? 'block' : 'none'}}>
|
|
|
<a>职业路径</a>
|
|
|
<div
|
|
|
style={{display: this.props.Headertop === undefined ?'none' : this.props.Headertop.career_url.length > 0 ? 'block' : 'none'}}>
|
|
|
<ul className="edu-menu-list edu-menu-listnew " style={{top:'60px'}}>
|
|
|
{this.props.Headertop === undefined ? "" : this.props.Headertop.career_url.map((item, key) => {
|
|
|
return(
|
|
|
<li key={key}><i className="iconfont icon-java left careersiconfont"
|
|
|
style={{color: '#000 important'}}
|
|
|
></i><a style={{width: '83%'}}
|
|
|
href={item.url}>{item.name}</a></li>
|
|
|
)
|
|
|
})
|
|
|
}
|
|
|
</ul>
|
|
|
</div>
|
|
|
</li>
|
|
|
|
|
|
|
|
|
<li className=""><a href={this.props.Headertop===undefined?"":this.props.Headertop.competitions_url}>竞赛</a></li>
|
|
|
|
|
|
<li className={`${activeForums === true ? 'active' : ''}`}><a href={this.props.Headertop===undefined?"":this.props.Headertop.topic_url}>问答</a></li>
|
|
|
<li
|
|
|
style={{display: this.props.Headertop === undefined ? 'none' : this.props.Headertop.auth===null? 'none' : 'block'}}
|
|
|
><a href={this.props.Headertop===undefined?"":this.props.Headertop.auth}>认证</a></li>
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
<div className="posi-search" id="posi-search">
|
|
|
<div className="search-all clearfix">
|
|
|
{/*<!--<a href="javascript:void(0)" className="search-clear fl" onclick="closeSearch();">×</a>-->*/}
|
|
|
<div className="fl pr search-clear edu-menu-panel" style={{display: 'none'}}>
|
|
|
<input type="hidden" id="search_type" value="1"></input>
|
|
|
<span className="searchkey">实训</span>
|
|
|
<i className="fa fa-angle-down ml5 font-16"></i>
|
|
|
<ul id="searchkey" className="edu-menu-list edu-txt-center" style={{minWidth: '80px',right: '-10px',top: '50px'}}>
|
|
|
<li><a>实训</a></li>
|
|
|
<li><a>课堂</a></li>
|
|
|
<li><a>用户</a></li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
{/*<input type="text" className="search-input fl" id="search-input" */}
|
|
|
{/*onKeyDown={this.onKeywordSearchKeyDown} name="search_keyword" placeholder="搜索实训项目"/>*/}
|
|
|
|
|
|
<div
|
|
|
className={"HeaderSearch"}
|
|
|
style={{display: 'none'}}
|
|
|
>
|
|
|
<Search
|
|
|
placeholder="搜索"
|
|
|
// onSearch={value => console.log(value)}
|
|
|
onPressEnter={this.onKeywordSearchKeyDown}
|
|
|
style={{ width: 258 }}
|
|
|
/>
|
|
|
</div>
|
|
|
|
|
|
{/*<a className="search-icon fl" id="header_keyword_search" onClick={this.onKeywordSearch}>*/}
|
|
|
{/*/!*<i className="fa fa-search font-16 mt23 color-grey-6"></i>*!/*/}
|
|
|
{/*<i className="iconfont icon-sousuo color-blue"></i>*/}
|
|
|
|
|
|
{/*</a>*/}
|
|
|
{/* TODO 需要服务端接口提供最近搜索
|
|
|
<div className="search-content none" style="width: 86%;left: 0px;">
|
|
|
<div className="search-title">最近搜索</div>
|
|
|
<div><a href="javascript:void(0)" className="search_history">绿盟</a></div>
|
|
|
<div><a href="javascript:void(0)" className="search_history">qwe</a></div>
|
|
|
</div>*/}
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
{/*<span className="font-15 fr mt17">
|
|
|
<%= link_to '登录', signin_path, :className => "mr5" %>
|
|
|
<em className="vertical-line"></em>
|
|
|
<%= link_to '注册', user_join_path, :className => "ml5" %>
|
|
|
</span>*/}
|
|
|
{ user===undefined?
|
|
|
<span className="font-15 fr mt17">
|
|
|
<a onClick={()=>this.educoderlogin()} className="mr5 color-white">登录</a>
|
|
|
<em className="vertical-line"></em>
|
|
|
<a href={"/register"} className="mr5 color-white">注册</a>
|
|
|
</span> :user.login===""?<span className="font-15 fr mt17">
|
|
|
<a onClick={()=>this.educoderlogin()} className="mr5 color-white">登录</a>
|
|
|
<em className="vertical-line"></em>
|
|
|
<a href={"/register"} className="mr5 color-white">注册</a>
|
|
|
</span>:
|
|
|
<div className="fr edu-menu-panel" style={{height:'60px'}}>
|
|
|
<a href={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/courses`} className="fl ml15">
|
|
|
<img alt="头像" className="radius mt13" height="34" id="nh_user_logo" name="avatar_image"
|
|
|
src={getImageUrl(`images/`+user.image_url)} width="34">
|
|
|
</img>
|
|
|
</a>
|
|
|
<ul className="edu-menu-list" style={{top:'60px'}}>
|
|
|
<span className="bor-bottom-greyE currentName task-hide">{user.username}</span>
|
|
|
<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/courses`}>我的课堂</Link></li>
|
|
|
{/* p 老师 l 学生 */}
|
|
|
<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/shixuns`}>我的实训</Link></li>
|
|
|
<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/paths`}>我的实训课程</Link></li>
|
|
|
<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/projects`}>我的项目</Link></li>
|
|
|
<li><a href={this.props.Headertop===undefined?"":this.props.Headertop.account_manager_url}>账号管理</a></li>
|
|
|
{/*<li><a onClick={()=>this.educoderlogin()} >登入测试接口</a></li>*/}
|
|
|
{/*<li><a onClick={()=>this.trialapplications()} >试用申请</a> </li>*/}
|
|
|
<li className="bor-top-greyE">
|
|
|
{/*<a href={this.props.Headertop===undefined?"":this.props.Headertop.logout_url}>退出</a>*/}
|
|
|
{/*<a onClick={()=>this.educoderlogin()}>退出</a>*/}
|
|
|
<a onClick={()=>this.educoderloginysl()}>退出</a>
|
|
|
|
|
|
</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
}
|
|
|
{/*href="https://www.educoder.net/login"*/}
|
|
|
{ user===undefined?"":user.login===""?"":<div className="fr head-right">
|
|
|
{ loadHeader()}
|
|
|
<a id="search-open" className="fl mr30 headIcon">
|
|
|
{/*"/images/educoder/icon/search.svg"
|
|
|
<img src={getImageUrl(`images/educoder/icon/search.svg`)} /> */}
|
|
|
|
|
|
<i className="iconfont icon-sousuo color-white"></i>
|
|
|
</a>
|
|
|
|
|
|
{/*</div>*/}
|
|
|
<div className="fl mr30 edu-menu-panel headIcon">
|
|
|
|
|
|
|
|
|
<i className="iconfont icon-tianjiafangda color-white"></i>
|
|
|
|
|
|
<div className="edu-menu-list" style={{top: '60px',width:"240px"}}>
|
|
|
<div className="overPart"></div>
|
|
|
<ul className="fl with50 edu-txt-center pr ul-leftline">
|
|
|
<li><Link to={"/courses/new"}>新建课堂</Link></li>
|
|
|
<li><a href="/shixuns/new">新建实训</a></li>
|
|
|
<li><a href={this.props.Headertop===undefined?"":"/paths/new"}>新建实训课程</a></li>
|
|
|
<li><a href={this.props.Headertop===undefined?"":this.props.Headertop.new_project_url}>新建项目</a></li>
|
|
|
</ul>
|
|
|
<ul className="fl with50 edu-txt-center">
|
|
|
|
|
|
<li>
|
|
|
<a onClick={this.tojoinclass}>加入课堂</a>
|
|
|
</li>
|
|
|
|
|
|
{Addcoursestypes===true?<Addcourses
|
|
|
Addcoursestype={Addcoursestypes}
|
|
|
hideAddcoursestype={this.hideAddcoursestypes}
|
|
|
/>:""}
|
|
|
|
|
|
{/* /courses/join_course_multi_role */}
|
|
|
<li>
|
|
|
<a onClick={this.tojoinitem}>加入项目</a>
|
|
|
</li>
|
|
|
<Modal
|
|
|
keyboard={false}
|
|
|
title="加入项目"
|
|
|
visible={tojoinitemtype}
|
|
|
closable={false}
|
|
|
footer={null}
|
|
|
>
|
|
|
<div className="task_popup_con ml30">
|
|
|
<div className="mr15">
|
|
|
<ul>
|
|
|
<li className="clearfix mb10">
|
|
|
<label className="panel-form-label fl">项目邀请码:</label>
|
|
|
<Input type="text" className="input-60-40 fl" name="invite_code"
|
|
|
placeholder="请输入六位课堂邀请码" value={tojoinclasstitle} onInput={this.inputjoinclassvalue}/>
|
|
|
</li>
|
|
|
|
|
|
<p id="none_invite_code_notice"
|
|
|
className="color-orange none f12"
|
|
|
style={{marginLeft: '90px',display:code_notice===true?'block':"none"}}>请输入六位课堂邀请码</p>
|
|
|
|
|
|
<li className="clearfix ">
|
|
|
|
|
|
<label className="panel-form-label fl">身份:</label>
|
|
|
<RadioGroup className="mt10" onChange={this.onChangeRadioGroup}>
|
|
|
<Radio value={1}>管理人员</Radio>
|
|
|
<Radio value={2}>开发人员</Radio>
|
|
|
<Radio value={3}>报告人员</Radio>
|
|
|
</RadioGroup>
|
|
|
|
|
|
</li>
|
|
|
|
|
|
<p id="none_checked_notice" className="color-orange none f12"
|
|
|
style={{marginLeft: '90px',display:checked_notice===true?'block':"none"}}>请至少选择一个身份</p>
|
|
|
|
|
|
<li className="clearfix mt10 edu-txt-center">
|
|
|
<a className="task-btn mr10"
|
|
|
onClick={()=>this.hidetojoinclass(1)}>取消</a>
|
|
|
<a
|
|
|
className="task-btn task-btn-orange ml20"
|
|
|
onClick={()=>this.submittojoinclass(1)}>确定</a>
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
|
</Modal>
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div className="fl mr30 edu-menu-panel headIcon">
|
|
|
{ user===undefined?"":user.login===""?"": <a
|
|
|
href={this.props.Headertop===undefined?"":this.props.Headertop.message_url}
|
|
|
style={{position:'relative'}}
|
|
|
>
|
|
|
<i className="iconfont icon-xiaoxilingdang color-white"></i>
|
|
|
<span className="newslight" style={{display:this.props.Headertop===undefined?"none":this.props.Headertop.new_message===true?"block":"none"}}>
|
|
|
{/*{this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count > 99 ? '99+'*/}
|
|
|
{/*: this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count}*/}
|
|
|
</span>
|
|
|
</a>
|
|
|
}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<Modal
|
|
|
keyboard={false}
|
|
|
title="提示"
|
|
|
visible={submitapplications}
|
|
|
closable={false}
|
|
|
footer={null}
|
|
|
>
|
|
|
<div className="task_popup_con ml30">
|
|
|
<div className="mr15">
|
|
|
<ul>
|
|
|
<div className="task-popup-content">
|
|
|
<p className="task-popup-text-center font-16">
|
|
|
{submitapplicationsvalue}
|
|
|
</p>
|
|
|
</div>
|
|
|
<li className="clearfix mt10 edu-txt-center">
|
|
|
<a className="task-btn mr10"
|
|
|
onClick={this.hidesubmitapplications}>取消</a>
|
|
|
<a
|
|
|
className="task-btn task-btn-orange ml20"
|
|
|
onClick={this.submitsubmitapplications}>确定</a>
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
|
</Modal>
|
|
|
|
|
|
</div>}
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
export default NewHeader;
|
|
|
|
|
|
|
|
|
|
|
|
// <ul id="header-nav">
|
|
|
// <li className="active">1{/*<%= link_to "首页", home_path %>*/}</li>
|
|
|
// <li>2{/*<%= link_to "精选实训", shixuns_path %>*/}</li>
|
|
|
// <li>3{/*<%= link_to "实训路径", subjects_path %>*/}</li>
|
|
|
// <li>4{/*<%= link_to "在线课堂", courses_path %>*/}</li>
|
|
|
// <li>5{/*<%= link_to "讨论组", forums_path %>*/}</li>
|
|
|
// </ul>
|
|
|
|
|
|
|
|
|
|
|
|
{/*{*/}
|
|
|
{/*<a href={this.props.Headertop===undefined?"":this.props.Headertop.message_url}*/}
|
|
|
{/*style={{display:this.props.Headertop===undefined?"none":this.props.Headertop.new_message===true?"block":"none",position:'relative'}}*/}
|
|
|
{/*>*/}
|
|
|
{/*<span className="newslight" style={{display:user!=undefined&&user.login!=""?"block":"none"}}>*/}
|
|
|
{/*/!*{this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count > 99 ? '99+'*!/*/}
|
|
|
{/*/!*: this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count}*!/*/}
|
|
|
{/*</span>*/}
|
|
|
{/*</a>*/}
|
|
|
{/*}*/}
|
|
|
{/*{ this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count>0 &&*/}
|
|
|
{/*<a href={this.props.Headertop===undefined?"":this.props.Headertop.message_url}>*/}
|
|
|
{/*<span className="newslight" style={{display:user!=undefined&&user.login!=""?"block":"none"}}>*/}
|
|
|
{/*/!*{this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count > 99 ? '99+'*!/*/}
|
|
|
{/*/!*: this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count}*!/*/}
|
|
|
{/*</span>*/}
|
|
|
{/*</a>}*/}
|
|
|
{/*{ this.props.Headertop===undefined?"":user && this.props.Headertop.unread_message_count>0 &&*/}
|
|
|
{/*<span style={{display:user!=undefined&&user.login!=""?"block":"none"}}>*/}
|
|
|
{/*<div className="edu-menu-list edu-txt-center" style={{width: '220px', top: '60px'}}>*/}
|
|
|
{/*<a className="font-14 padding10" style={{lineHeight: '35px'}} href={this.props.Headertop===undefined?"":this.props.Headertop.message_url} >您有*/}
|
|
|
{/*<span className="color-orange">{this.props.Headertop===undefined?"":this.props.Headertop.unread_message_count}</span>*/}
|
|
|
{/*条新消息,点击查看</a>*/}
|
|
|
{/*</div>*/}
|
|
|
{/*</span>*/}
|
|
|
{/*}*/}
|
|
|
|
|
|
|
|
|
|
|
|
{/*
|
|
|
需求:消息数量
|
|
|
<div className="fl mr30 edu-menu-panel headIcon">
|
|
|
<a href={`/users/${user.login}/user_tidings`}><img src={getImageUrl(`images/educoder/icon/bell.svg`}></a>
|
|
|
|
|
|
<em className="newslight"></em>
|
|
|
<div className="edu-menu-list edu-txt-center" style="width:220px;top:60px">
|
|
|
<a className="font-14 padding10" style="line-height: 35px;" href={`/users/${user.login}/user_tidings`}>
|
|
|
您有<span className="color-orange">30</span>条新消息,点击查看
|
|
|
</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
*/}
|