forgeplus-react/src/modules/tpm/NewHeader_backup.js

1053 lines
29 KiB
JavaScript

import React, { Component } from "react";
import { Link } from "react-router-dom";
import AccountProfile from "../user/AccountProfile";
import { getImageUrl } from "educoder";
import axios from "axios";
import { Modal, Input, message, notification } from "antd";
import LoginDialog from "../login/LoginDialog";
import GotoQQgroup from "../../modal/GotoQQgroup";
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";
const $ = window.$;
// TODO 这部分脚本从公共脚本中直接调用
const { Search } = Input;
let old_url;
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,
showSearchOpentype: false,
showTrial: false,
setevaluatinghides: false,
occupation: 0,
mydisplay: false,
headtypesonClickbool: false,
headtypess: "/",
mygetHelmetapi2: null,
goshowqqgtounp: false,
visiblemyss: false,
};
}
componentDidMount() {
// this.getAppdata();
this.geturlsdata();
window._header_componentHandler = this;
//下拉框的显示隐藏
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);
}
);
//获取游览器地址
try {
window.sessionStorage.setItem(
"yslgeturls",
JSON.stringify(window.location.href)
);
} catch (e) {}
}
openNotification = (messge) => {
notification.open({
message: "提示",
description: messge,
});
};
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)) 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,
});
window.location.href = "/login";
message.success("退出成功");
}
});
};
tojoinclass = () => {
let { user } = this.state;
if (user === undefined) {
this.setState({
isRender: true,
});
return;
}
if (user && user.login === "") {
this.setState({
isRender: true,
});
return;
}
if (user && user.profile_completed === false) {
this.setState({
AccountProfiletype: true,
});
return;
}
this.setState({
Addcoursestypes: true,
});
};
tojoinitem = () => {
if (
(this.props.user && this.props.user.email === undefined) ||
(this.props.user && this.props.user.email === null) ||
(this.props.user && this.props.user.email === "")
) {
this.openNotification("请先绑定邮箱,谢谢");
return;
}
let { user } = this.state;
if (user === undefined) {
this.setState({
isRender: true,
});
return;
}
if (user && user.login === "") {
this.setState({
isRender: true,
});
return;
}
if (user && user.profile_completed === false) {
this.setState({
AccountProfiletype: true,
});
return;
}
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 = "/courses/" + submitapplicationsvaluedata;
}
} else if (submitapplicationssum === 1) {
if (submitapplicationsvaluedata !== undefined) {
window.location.href = "/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,
});
};
educoderloginysl = () => {
//退出账号
var url = `/accounts/logout.json`;
axios
.get(url)
.then((result) => {
if (result !== undefined) {
window.location.href = "/";
}
})
.catch((error) => {
console.log(error);
});
};
hideAddcoursestypes = () => {
this.setState({
Addcoursestypes: false,
});
};
HideAddcoursestypess = (i) => {
console.log("调用了");
this.setState({
Addcoursestypes: false,
mydisplay: true,
occupation: i,
});
};
ModalCancelsy = () => {
this.setState({
mydisplay: 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 (tojoinclasstitle.length < 6) {
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 === 1) {
let url = "/project_applies.json";
axios
.post(url, {
code: tojoinclasstitle,
role: RadioGroupvalue,
})
.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);
} else if (response.data.status === 0) {
if (RadioGroupvalue === "reporter") {
this.openNotification("您加入项目成功!");
window.location.href = `/projects/${response.data.project_id}`;
} else {
this.openNotification("您的申请已提交,请等待项目管理员审批!");
}
}
});
}
this.hidetojoinclass();
};
// 关闭
cancelModulationModels = () => {
this.setState({ isRenders: false });
};
inputjoinclassvalue = (e) => {
console.log(e.target.value.length);
if (e.target.value.length >= 7) {
this.openNotification("请输入6位项目邀请码!");
return;
}
this.setState({
tojoinclasstitle: e.target.value,
});
};
showSearchOpen = (e) => {
this.setState({
showSearchOpentype: true,
});
};
hideshowSearchOpen = (e) => {
let { setevaluatinghides } = this.state;
if (setevaluatinghides === true) {
this.setState({
showSearchOpentype: false,
setevaluatinghides: false,
});
}
};
onKeywordSearchKeyDown = (value) => {
let url = `/search?value=${value}`;
this.props.history.push(url);
};
onKeywordSearchKeyDowns = () => {
this.setState({
setevaluatinghides: false,
});
};
setevaluatinghides = () => {
this.setState({
setevaluatinghides: true,
});
};
//头部获取是否已经登录了
getUser = (url, type) => {
if (type === "projects") {
if (
(this.props.user && this.props.user.email === undefined) ||
(this.props.user && this.props.user.email === null) ||
(this.props.user && this.props.user.email === "")
) {
this.openNotification("请先绑定邮箱,谢谢");
return;
}
}
let { user } = this.state;
if (user === undefined) {
this.setState({
isRender: true,
});
return;
}
if (user && user.login === "") {
this.setState({
isRender: true,
});
return;
}
if (user && user.profile_completed === false) {
this.setState({
AccountProfiletype: true,
});
return;
}
if (type === "newshixuns") {
if (
this.props &&
this.props.current_user &&
this.props.current_user.is_shixun_marker === false
) {
this.setgoshowqqgtounp(true);
return;
}
}
if (url !== undefined || url !== "") {
window.location.href = url;
}
};
//修改登录方法
Modifyloginvalue = () => {
this.setState({
isRender: false,
});
};
hideAccountProfile = () => {
this.setState({
AccountProfiletype: false,
});
};
headtypesonClick = (url, bool) => {
this.setState({
headtypess: url,
headtypesonClickbool: bool,
});
};
//获取数据为空的时候
gettablogourlnull = () => {
this.setState({
mygetHelmetapi2: undefined,
});
var link = document.createElement("link"),
oldLink = document.getElementById("dynamic-favicon");
link.id = "dynamic-favicon";
link.rel = "shortcut icon";
link.href = "/react/build/./favicon.ico";
if (oldLink) {
document.head.removeChild(oldLink);
}
document.head.appendChild(link);
};
//获取数据的时候
gettablogourldata = (response) => {
document.title = response.data.setting.name;
var link = document.createElement("link"),
oldLink = document.getElementById("dynamic-favicon");
link.id = "dynamic-favicon";
link.rel = "shortcut icon";
link.href = "/" + response.data.setting.tab_logo_url;
if (oldLink) {
document.head.removeChild(oldLink);
}
document.head.appendChild(link);
};
handleVisibleChanges = (boll) => {
this.setState({
visiblemyss: boll,
});
};
getAppdata = () => {
try {
var chromesettingArray = JSON.parse(
localStorage.getItem("chromesetting")
);
var chromesettingresponseArray = JSON.parse(
localStorage.getItem("chromesettingresponse")
);
this.setState({
mygetHelmetapi2: chromesettingArray,
});
if (chromesettingArray.tab_logo_url) {
this.gettablogourldata(chromesettingresponseArray);
} else {
this.gettablogourlnull();
}
} catch (e) {
this.geturlsdata();
}
};
geturlsdata = () => {
let url = "/setting.json";
axios
.get(url)
.then((response) => {
if (response && response.data) {
this.setState({
mygetHelmetapi2: response.data.setting,
});
try {
if (response.data.setting.tab_logo_url) {
this.gettablogourldata(response);
} else {
this.gettablogourlnull();
}
} catch (e) {
this.gettablogourlnull();
}
} else {
this.gettablogourlnull();
}
})
.catch((error) => {
this.gettablogourlnull();
});
};
matchpaths = (url) => {
const { match } = this.props;
if (url) {
if (url === "/forums" && match.path === "/forums") {
return true;
} else if (
url.startsWith("/projects") &&
match.path.startsWith("/projects")
) {
return true;
} else if (url.startsWith("/paths") && match.path.startsWith("/paths")) {
return true;
} else if (
url.startsWith("/courses") &&
match.path.startsWith("/courses")
) {
return true;
} else if (
url.startsWith("/competitions") &&
match.path.startsWith("/competitions")
) {
return true;
} else if (
url.startsWith("/statistics") &&
match.path.startsWith("/statistics")
) {
return true;
} else if (url.startsWith("/users") && match.path.startsWith("/users")) {
return true;
} else {
return false;
}
}
};
// 处理弹框
setgoshowqqgtounp = (bool) => {
this.setState({
goshowqqgtounp: bool,
});
};
render() {
const isLogin = true; // 这里不会出现未登录的情况,服务端在服务端路由时发现如果是未登录,则跳转到登录页了。
const { match } = this.props;
let {
Addcoursestypes,
tojoinitemtype,
tojoinclasstitle,
code_notice,
checked_notice,
AccountProfiletype,
submitapplications,
submitapplicationsvalue,
user,
isRender,
showSearchOpentype,
headtypesonClickbool,
headtypess,
mygetHelmetapi2,
goshowqqgtounp,
} = this.state;
/*
用户名称 用户头像url
*/
let activeIndex = false;
let activeForums = false;
let activeShixuns = false;
let activePaths = false;
let coursestype = false;
let activePackages = false;
let activeMoopCases = false;
let activeCompetitions = 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 if (match.path.startsWith("/crowdsourcing")) {
activePackages = true;
} else if (match.path.startsWith("/moop_cases")) {
activeMoopCases = true;
} else if (match.path.startsWith("/competitions")) {
activeCompetitions = true;
} else {
activeIndex = true;
}
let headtypes = "/";
if (mygetHelmetapi2) {
if (mygetHelmetapi2.navbar) {
if (mygetHelmetapi2.navbar.length > 0) {
if (match.path === "/") {
if (headtypesonClickbool === false) {
headtypes = undefined;
} else {
headtypes = headtypess;
}
} else {
for (var i = 0; i < mygetHelmetapi2.navbar.length; i++) {
if (match.path === mygetHelmetapi2.navbar[i].link) {
headtypes = mygetHelmetapi2.navbar[i].link;
break;
}
}
}
}
}
}
let shixuntype = false;
let pathstype = false;
let coursestypes = false;
if (this.props && this.props.mygetHelmetapi != null) {
let shixun = "/shixuns";
let paths = "/paths";
let courses = "/courses";
this.props.mygetHelmetapi.navbar.map((item, key) => {
var reg = RegExp(item.link);
if (shixun.match(reg)) {
if (item.hidden === true) {
shixuntype = true;
}
}
if (paths.match(reg)) {
if (item.hidden === true) {
pathstype = true;
}
}
if (courses.match(reg)) {
if (item.hidden === true) {
coursestypes = true;
}
}
});
}
return (
<div className="newHeader" id="nHeader">
<div className="head-nav pr head-navnew">
{isRender === true ? (
<LoginDialog
{...this.props}
{...this.state}
Modifyloginvalue={() => this.Modifyloginvalue()}
/>
) : (
""
)}
{AccountProfiletype === true ? (
<AccountProfile
hideAccountProfile={() => this.hideAccountProfile()}
{...this.props}
{...this.state}
/>
) : (
""
)}
{goshowqqgtounp === true ? (
<GotoQQgroup
{...this.state}
{...this.props}
setgoshowqqgtounp={(bool) => this.setgoshowqqgtounp(bool)}
></GotoQQgroup>
) : (
""
)}
<a
href={"http://39.105.176.215/"}
onClick={() => this.headtypesonClick("/", false)}
className={"fl mr30"}
>
{mygetHelmetapi2 &&
mygetHelmetapi2.nav_logo_url &&
mygetHelmetapi2.nav_logo_url ? (
<img
alt="红山开源社区"
className="logoimg"
style={{ heigth: "40px" }}
src={getImageUrl(mygetHelmetapi2.nav_logo_url)}
></img>
) : (
<img
alt="红山开源社区"
className="logoimg"
style={{ heigth: "40px" }}
src={getImageUrl("images/educoder/headNavLogo.png?1526520218")}
></img>
)}
</a>
{mygetHelmetapi2 &&
mygetHelmetapi2.navbar &&
mygetHelmetapi2.navbar.length > 0 ? (
<div className="headerLeft" id={"head-navpre1"}>
<ul id="header-nav">
{mygetHelmetapi2.navbar &&
mygetHelmetapi2.navbar.map((item, key) => {
var new_link = item.link;
var user_login = this.props.user && this.props.user.login;
var is_hidden = item.hidden;
if (
new_link &&
(new_link.indexOf("courses") > -1 ||
new_link.indexOf("contests") > -1)
) {
if (user_login) {
if (new_link.indexOf("courses") > -1) {
new_link = new_link.replace(
/courses/g,
"users/" + user_login + "/courses"
);
} else if (new_link.indexOf("contests") > -1) {
new_link = new_link.replace(
/contests/g,
"users/" + user_login + "/contests"
);
}
} else {
is_hidden = true;
}
}
if (
user_login &&
new_link &&
new_link.indexOf("homes") > -1
) {
new_link = new_link.replace(
/homes/g,
"users/" + user_login + "/user_activities"
);
}
return (
<li
key={key}
onClick={() => this.headtypesonClick(item.link, true)}
className={`${
this.matchpaths(item.link) === true ? "active" : ""
}`}
style={
!is_hidden ? { display: "" } : { display: "none" }
}
>
<a href={new_link}>{item.name}</a>
</li>
);
})}
</ul>
</div>
) : (
""
)}
<div className="head-right">
{this.props.user && this.props.user.login ? (
<div className="edu-menu-panel">
<i className="iconfont icon-tianjiafangda color-grey-3"></i>
<div className="edu-menu-list" style={{ top: "46px" }}>
<div className="overPart"></div>
{coursestypes === true &&
this.props.user &&
this.props.user.main_site === false ? (
""
) : (
<ul className="fl edu-txt-center">
<li>
<Link to={"/projects/mirror/new"}>新建镜像项目</Link>
</li>
<li>
<Link to={"/projects/deposit/new"}>新建托管项目</Link>
</li>
</ul>
)}
</div>
</div>
) : (
""
)}
{this.props.user && this.props.user.login ? (
<div className="ml30 edu-menu-panel">
{user && user.login && (
<a
href={`${
mygetHelmetapi2 &&
mygetHelmetapi2.new_course &&
mygetHelmetapi2.new_course.tiding_url
}`}
style={{ position: "relative" }}
target="_blank"
>
<i className="iconfont icon-xiaoxilingdang color-grey-3"></i>
<span
className="newslight"
style={{
display:
this.props.Headertop === undefined
? "none"
: this.props.Headertop.new_message === true
? "block"
: "none",
}}
></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>
{user === undefined ? (
<span className="font-15">
<a
onClick={() => this.educoderlogin()}
className="mr5 color-grey-3"
>
登录
</a>
{mygetHelmetapi2 &&
mygetHelmetapi2.new_course &&
mygetHelmetapi2.new_course.register_url && (
<span>
<em className="vertical-line"></em>
<a
className="ml5 color-grey-3"
href={`${mygetHelmetapi2.new_course.register_url}`}
target="_blank"
>
注册
</a>
</span>
)}
</span>
) : user.login === "" ? (
<span className="font-15">
<a
onClick={() => this.educoderlogin()}
className="mr5 color-grey-3"
>
登录
</a>
{mygetHelmetapi2 &&
mygetHelmetapi2.new_course &&
mygetHelmetapi2.new_course.register_url && (
<span>
<em className="vertical-line"></em>
<a
className="color-grey-3 ml5"
href={`${mygetHelmetapi2.new_course.register_url}`}
target="_blank"
>
注册
</a>
</span>
)}
</span>
) : (
<div
className="ml30 edu-menu-panel"
style={{ height: "60px", lineHeight: "54px" }}
>
<a
href={`/users/${
this.props.current_user === undefined
? ""
: this.props.current_user.login
}/courses`}
>
<img
alt="头像"
className="radius"
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: "46px", textAlign: "center" }}
>
<li className="bor-bottom-greyE">
{this.props.current_user.username}
</li>
<li>
<Link to={`/users/${this.props.current_user.login}`}>
个人中心
</Link>
</li>
<li>
<a href={`http://39.105.176.215/users/${this.props.current_user.login}/profiles`}>
账户管理
</a>
</li>
<li>
<a href={`http://39.105.176.215/users/${this.props.current_user.login}/user_tidings`}>
我的消息
</a>
</li>
<li>
<a href={`http://39.105.176.215/my/accounts`}>
账户安全
</a>
</li>
<li>
<a href={`http://39.105.176.215/tasks/my_tasks`}>
创客管理
</a>
</li>
<li className="bor-top-greyE">
<a onClick={() => this.educoderloginysl()}>退出</a>
</li>
</ul>
</div>
)}
</div>
</div>
);
}
}
export default NewHeader;