diff --git a/src/forge/Head/Header.js b/src/forge/Head/Header.js
new file mode 100644
index 00000000..e7880362
--- /dev/null
+++ b/src/forge/Head/Header.js
@@ -0,0 +1,731 @@
+import React, { Component } from 'react';
+import AccountProfile from "../../modules/user/AccountProfile";
+import { getImageUrl } from 'educoder'
+import axios from 'axios';
+import { Modal, Input, message, notification , Dropdown , Menu ,Divider } from 'antd';
+
+import LoginDialog from '../../modules/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 '../../modules/tpm/TPMIndex.css';
+import logo from '../../modules/tpm/images/logo.png';
+import './header.scss';
+const $ = window.$
+// TODO 这部分脚本从公共脚本中直接调用
+const { Search } = Input;
+let old_url;
+
+window._header_componentHandler = null;
+// 非trustie链接则新开页跳转
+const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net']
+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: "/",
+ settings: null,
+ goshowqqgtounp: false,
+ visiblemyss: false,
+ openSearch: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) {}
+ }
+
+ SearchInput = (open,item)=>{
+ if(open){
+ return(
+
{
+ setTimeout(() => {
+ this.setState({
+ openSearch:false
+ })
+ }, 300)
+ }}
+ >
+ this.onGlobalSearch(value,item)}
+ autoFocus={true}
+ />
+
+ )
+ }else{
+ return {
+ this.setState({openSearch:true})
+ }} />
+ }
+ }
+
+ onGlobalSearch=(value,item)=>{
+ window.location.href=`${item && item.url}?value=` + value;
+ }
+
+ 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
+ })
+ }
+
+ // 关闭
+ cancelModulationModels = () => {
+ this.setState({ isRenders: false })
+ }
+
+
+ setevaluatinghides = () => {
+ this.setState({
+ setevaluatinghides: true
+ })
+ }
+ //修改登录方法
+ Modifyloginvalue = () => {
+ this.setState({
+ isRender: false,
+ })
+ }
+
+ hideAccountProfile = () => {
+ this.setState({
+ AccountProfiletype: false
+ })
+ };
+ headtypesonClick = (url, bool) => {
+ this.setState({
+ headtypess: url,
+ headtypesonClickbool: bool,
+ })
+ }
+ //获取数据为空的时候
+ gettablogourlnull = () => {
+ this.setState({
+ settings: 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({
+ settings: 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({ settings: response.data.setting });
+ // localStorage.setItem('chromesetting', JSON.stringify(response.data.setting));
+ // localStorage.setItem('chromesettingresponse', JSON.stringify(response));
+ 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 (match.path.indexOf(url) > -1) {
+ return true
+ }else {
+ return false
+ }
+ }
+ }
+
+
+ // 处理弹框
+ setgoshowqqgtounp = (bool) => {
+ this.setState({
+ goshowqqgtounp: bool
+ })
+ }
+
+ addMenu=(list)=>{
+ return(
+ list && list.length >0 &&
+
+
+
+ )
+ }
+
+ render() {
+ const { match} = this.props;
+ let current_user = this.props.user;
+ let { Addcoursestypes,
+ tojoinitemtype,
+ tojoinclasstitle,
+ code_notice,
+ checked_notice,
+ AccountProfiletype,
+ submitapplications,
+ submitapplicationsvalue,
+ user,
+ isRender,
+ showSearchOpentype,
+ headtypesonClickbool,
+ headtypess,
+ settings,
+ goshowqqgtounp,
+ openSearch,
+ } = 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 (settings) {
+ if (settings.navbar) {
+ if (settings.navbar.length > 0) {
+ if (match.path === '/') {
+ if (headtypesonClickbool === false) {
+ headtypes = undefined;
+ } else {
+ headtypes = headtypess;
+ }
+ } else {
+ for (var i = 0; i < settings.navbar.length; i++) {
+ if (match.path === settings.navbar[i].link) {
+ headtypes = settings.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
+ }
+ }
+ })
+ }
+
+ let search_url = settings && settings.common && settings.common.length> 0 && settings.common.filter(item=>item.name==="搜索");
+ let notice_url = settings && settings.common && settings.common.length> 0 && settings.common.filter(item=>item.name==="通知");
+ return (
+
+ );
+ }
+}
+
+export default NewHeader;
diff --git a/src/forge/Head/header.scss b/src/forge/Head/header.scss
new file mode 100644
index 00000000..3cde4d8f
--- /dev/null
+++ b/src/forge/Head/header.scss
@@ -0,0 +1,10 @@
+
+.dropdownFlex{
+ display:flex;
+ padding:5px;
+ background:#fff;
+ border-radius: 3px;
+ .ant-menu-vertical > .ant-menu-item{
+ border:none
+ }
+}
\ No newline at end of file
diff --git a/src/modules/tpm/TPMIndex.css b/src/modules/tpm/TPMIndex.css
index 262996b3..47696ec9 100644
--- a/src/modules/tpm/TPMIndex.css
+++ b/src/modules/tpm/TPMIndex.css
@@ -28,7 +28,7 @@ body>.-task-title {
width: 100%;
height:70px;
min-width: 1200px;
- z-index: 10000;
+ z-index: 1000;
background:rgba(255,255,255,1);
position: fixed;
box-shadow: 0px 0px 14px rgb(0 0 0 / 10%);
diff --git a/src/modules/tpm/TPMIndexHOC.js b/src/modules/tpm/TPMIndexHOC.js
index 0084c333..0a1d1c48 100644
--- a/src/modules/tpm/TPMIndexHOC.js
+++ b/src/modules/tpm/TPMIndexHOC.js
@@ -1,5 +1,5 @@
import React from 'react';
-import NewHeader from './NewHeader'
+import Header from '../../forge/Head/Header'
import NewFooter from './NewFooter'
import { downloadFile } from 'educoder'
import axios from 'axios';
@@ -391,7 +391,7 @@ export function TPMIndexHOC(WrappedComponent) {
{...this.state}
{...this.dialogObj}
/> : ""}
-
+