|
|
import React, { Component } from 'react';
|
|
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
|
import NewHeader from './NewHeader'
|
|
|
import NewFooter from './NewFooter'
|
|
|
import SiderBar from './SiderBar'
|
|
|
import { getUrl } from 'educoder'
|
|
|
import axios from 'axios';
|
|
|
|
|
|
import './TPMIndex.css'
|
|
|
import LoginDialog from '../login/LoginDialog';
|
|
|
import AccountProfile from '../user/AccountProfile';
|
|
|
|
|
|
import Trialapplication from "../login/Trialapplication";
|
|
|
// import "antd/dist/antd.css";
|
|
|
// import '../../css/educoder/edu-common.css'
|
|
|
// import '../../css/educoder/edu-all.css'
|
|
|
// import '../../css/educoder/edu-main.css'
|
|
|
|
|
|
const $ = window.$;
|
|
|
const versionNum = '0001';
|
|
|
// let _url_origin = getUrl()
|
|
|
let _url_origin='';
|
|
|
if(window.location.port === "3007"){
|
|
|
_url_origin="http://pre-newweb.educoder.net";
|
|
|
}
|
|
|
|
|
|
// let _url_origin=`https://www.educoder.net`;
|
|
|
|
|
|
if (!window['indexHOCLoaded']) {
|
|
|
window.indexHOCLoaded = true;
|
|
|
//解决首屏加载问题
|
|
|
|
|
|
// $('head').append($('<link rel="stylesheet" type="text/css" />')
|
|
|
// .attr('href', `${_url_origin}/stylesheets/educoder/antd.min.css?1525440977`));
|
|
|
$('head').append($('<link rel="stylesheet" type="text/css" />')
|
|
|
.attr('href', `${_url_origin}/stylesheets/css/edu-common.css?8`));
|
|
|
|
|
|
$('head').append($('<link rel="stylesheet" type="text/css" />')
|
|
|
.attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?8`));
|
|
|
|
|
|
// index.html有加载
|
|
|
$('head').append($('<link rel="stylesheet" type="text/css" />')
|
|
|
.attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?8`));
|
|
|
|
|
|
|
|
|
// $('head').append($('<link rel="stylesheet" type="text/css" />')
|
|
|
// .attr('href', `${_url_origin}/stylesheets/educoder/css_min_all.css?1525440977`));
|
|
|
// 加timeout 为了覆盖掉antd的样式
|
|
|
// setTimeout(() => {
|
|
|
// $('head').append( $('<link rel="stylesheet" type="text/css" />')
|
|
|
// .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?1525440977`) );
|
|
|
|
|
|
// $('head').append( $('<link rel="stylesheet" type="text/css" />')
|
|
|
// .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?1525440977`) );
|
|
|
// $('head').append( $('<link rel="stylesheet" type="text/css" />')
|
|
|
// .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?1525440977`) );
|
|
|
// }, 1000);
|
|
|
|
|
|
$("script").append('<script></script>')
|
|
|
.attr('src', `${_url_origin}/javascripts/jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js?_t=${versionNum}`);
|
|
|
|
|
|
}
|
|
|
// `${_url_origin}/javascripts/jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js?_t=${versionNum}`
|
|
|
// TODO css加载完成后再打开页面,行为和tpm其他页面一致
|
|
|
export function TPMIndexHOC(WrappedComponent) {
|
|
|
// 这里如果extends WrappedComponent 会出现 WrappedComponent mount twice的问题
|
|
|
return class II extends React.Component {
|
|
|
constructor(props) {
|
|
|
super(props)
|
|
|
window.$('#root').css('position', 'relative')
|
|
|
|
|
|
this.state = {
|
|
|
tpmLoading: true,
|
|
|
resLoading: true,
|
|
|
Headertop:undefined,
|
|
|
Footerdown:undefined,
|
|
|
coursedata: {},
|
|
|
|
|
|
isRender: false,
|
|
|
AccountProfiletype: false
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// header里面需要有user
|
|
|
initCommonState(user) {
|
|
|
// 更新头像后,需要改变参数,不然会被图片缓存影响到
|
|
|
const newUser = Object.assign({}, {...user}, { image_url: `${user.image_url}?t=${new Date().getTime()}`});
|
|
|
this.setState({
|
|
|
user: newUser,
|
|
|
current_user: newUser
|
|
|
})
|
|
|
}
|
|
|
showShixun = () => {
|
|
|
const { shixunId } = this.props.match.params
|
|
|
const url = `/api/v1/shixuns/${shixunId}/show_shixun`
|
|
|
|
|
|
this.setState({ tpmLoading: true })
|
|
|
axios.get(url,
|
|
|
{
|
|
|
withCredentials: true
|
|
|
}
|
|
|
).then((response) => {
|
|
|
if (response.data && response.data.shixun) {
|
|
|
this.initCommonState(response.data.current_user)
|
|
|
response.data.tpmLoading = false;
|
|
|
this.setState(response.data);
|
|
|
}
|
|
|
|
|
|
}).catch((error) => {
|
|
|
console.log(error)
|
|
|
})
|
|
|
}
|
|
|
aboutFocus = () => {
|
|
|
const { creator, watched } = this.state
|
|
|
/*http://localhost:3000/api/v1/users/155/watch?object_id=156&object_type=user*/
|
|
|
|
|
|
const focusUrl = `/api/v1/users/${creator.owner_id}/${watched ? 'unwatch' : 'watch'}?object_id=${creator.owner_id}&object_type=user`
|
|
|
|
|
|
axios.get(focusUrl,{
|
|
|
})
|
|
|
.then((response) => {
|
|
|
const status = response.data.status;
|
|
|
if(status == 1){
|
|
|
const new_author_info = Object.assign({}, creator)
|
|
|
this.setState({
|
|
|
watched: !watched
|
|
|
})
|
|
|
}
|
|
|
}).catch((error) => {
|
|
|
console.log(error)
|
|
|
})
|
|
|
}
|
|
|
|
|
|
componentDidMount() {
|
|
|
if(this.props.match.path==="/"){
|
|
|
document.title="创新源于实践";
|
|
|
}else if(this.props.match.path==="/403"){
|
|
|
document.title="你没有权限访问";
|
|
|
}else if(this.props.match.path==="/nopage"){
|
|
|
document.title="没有找到该页面";
|
|
|
}else if(this.props.match.path==="/shixuns"){
|
|
|
document.title="实训项目";
|
|
|
}else if(this.props.match.path==="/paths"){
|
|
|
document.title="实践课程";
|
|
|
}else if(this.props.match.path==="/courses"){
|
|
|
document.title="翻转课堂";
|
|
|
}
|
|
|
|
|
|
|
|
|
$.ajaxSetup({
|
|
|
cache: true
|
|
|
});
|
|
|
this.fetchUser();
|
|
|
|
|
|
let url=`/users/get_navigation_info.json`;
|
|
|
axios.get(url, {
|
|
|
|
|
|
}).then((response) => {
|
|
|
if(response!=undefined){
|
|
|
if(response.status===200){
|
|
|
this.setState({
|
|
|
Headertop:response.data.top,
|
|
|
Footerdown:response.data.down
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
/**
|
|
|
课堂权限相关方法,暂时写这里了 ----------------------------------------START
|
|
|
ADMIN = 0 # 超级管理员
|
|
|
CREATOR = 1 # 课程创建者
|
|
|
PROFESSOR = 2 # 课程老师
|
|
|
ASSISTANT_PROFESSOR = 3 # 课程助教
|
|
|
STUDENT = 4 # 学生
|
|
|
NORMAL = 5 # 普通用户
|
|
|
|
|
|
v2
|
|
|
# 课程权限判断
|
|
|
ADMIN = 0 # 超级管理员
|
|
|
BUSINESS = 1 # 运营人员
|
|
|
CREATOR = 2 # 课程创建者
|
|
|
PROFESSOR = 3 # 课程老师
|
|
|
ASSISTANT_PROFESSOR = 4 # 课程助教
|
|
|
STUDENT = 5 # 学生
|
|
|
NORMAL = 6 # 普通用户
|
|
|
Anonymous = 7 # 普未登录
|
|
|
*/
|
|
|
//超管
|
|
|
isSuperAdmin = () => {
|
|
|
// return false
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity === 0
|
|
|
}
|
|
|
// 课堂管理等
|
|
|
isClassManagement = () => {
|
|
|
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity < 2
|
|
|
}
|
|
|
//老师等
|
|
|
isAdminOrCreator = () => {
|
|
|
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity < 3
|
|
|
}
|
|
|
// 助教等
|
|
|
isAdminOrTeacher = () => {
|
|
|
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity < 4
|
|
|
}
|
|
|
// 老师、管理员等
|
|
|
isAdmin = () => {
|
|
|
// return false
|
|
|
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity < 5
|
|
|
}
|
|
|
// 学生
|
|
|
isStudent = () => {
|
|
|
// return true
|
|
|
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity === 5
|
|
|
}
|
|
|
isAdminOrStudent = () => {
|
|
|
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity <= 5
|
|
|
}
|
|
|
// 非课堂成员
|
|
|
isNotMember = () => {
|
|
|
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
|
|
|
return this.state.coursedata&&this.state.coursedata.course_identity >= 6
|
|
|
}
|
|
|
|
|
|
// setTrialapplication = ()=>{
|
|
|
// this.setState({
|
|
|
// isRenders:true
|
|
|
// })
|
|
|
//
|
|
|
// }
|
|
|
|
|
|
|
|
|
/**
|
|
|
课堂权限相关方法,暂时写这里了 ----------------------------------------END
|
|
|
*/
|
|
|
fetchUser = () => {
|
|
|
let url = `/users/get_user_info.json`
|
|
|
let courseId;
|
|
|
let query = this.props.location.pathname;
|
|
|
const type = query.split('/');
|
|
|
if (type[1] == 'courses' && type[2]) {
|
|
|
courseId = parseInt(type[2])
|
|
|
// url += `?course_id=${courseId}`
|
|
|
}
|
|
|
axios.get(url,{params:{
|
|
|
course_id:isNaN(courseId)?undefined:courseId,
|
|
|
school:1
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
// withCredentials: true
|
|
|
}
|
|
|
).then((response) => {
|
|
|
/*
|
|
|
{
|
|
|
"username": "黄井泉",
|
|
|
"login": "Hjqreturn",
|
|
|
"user_id": 12,
|
|
|
"image_url": "avatar/User/12",
|
|
|
"admin": true,
|
|
|
"is_teacher": false,
|
|
|
"tidding_count": 0
|
|
|
}
|
|
|
*/
|
|
|
if(response=== undefined){
|
|
|
return
|
|
|
}
|
|
|
if (response.data) {
|
|
|
this.initCommonState(response.data)
|
|
|
this.setState({
|
|
|
tpmLoading: false,
|
|
|
coursedata: {
|
|
|
course_identity: response.data.course_identity >= 0 ? response.data.course_identity : undefined,
|
|
|
course_public: response.data.course_public,
|
|
|
name: response.data.course_name,
|
|
|
userid:response.data.user_id
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}).catch((error) => {
|
|
|
console.log(error)
|
|
|
})
|
|
|
}
|
|
|
hideLoginDialog = () => {
|
|
|
this.setState({
|
|
|
isRender: false
|
|
|
})
|
|
|
}
|
|
|
showLoginDialog = () => {
|
|
|
this.setState({
|
|
|
isRender: true
|
|
|
})
|
|
|
}
|
|
|
|
|
|
checkIfLogin = () => {
|
|
|
return this.state.current_user && this.state.current_user.login != ''
|
|
|
}
|
|
|
|
|
|
hideAccountProfile = () => {
|
|
|
this.setState({
|
|
|
AccountProfiletype: false
|
|
|
})
|
|
|
}
|
|
|
showProfileCompleteDialog = () => {
|
|
|
this.dialogObj = {}
|
|
|
this.setState({
|
|
|
AccountProfiletype: true
|
|
|
})
|
|
|
}
|
|
|
checkIfProfileCompleted = () => {
|
|
|
return this.state.current_user && this.state.current_user.profile_completed
|
|
|
}
|
|
|
showProfessionalCertificationDialog = () => {
|
|
|
this.dialogObj = {
|
|
|
content: '您需要去完成您的职业认证,才能使用此功能',
|
|
|
okText: '立即完成',
|
|
|
okHref: '/account/certification'
|
|
|
}
|
|
|
this.setState({
|
|
|
AccountProfiletype: true,
|
|
|
})
|
|
|
}
|
|
|
checkIfProfessionalCertification = () => {
|
|
|
return this.state.current_user && this.state.current_user.professional_certification
|
|
|
}
|
|
|
|
|
|
|
|
|
ShowOnlinePdf = (url) => {
|
|
|
return axios({
|
|
|
method:'get',
|
|
|
url:url,
|
|
|
responseType: 'arraybuffer',
|
|
|
}).then((result)=>{
|
|
|
var binaryData = [];
|
|
|
binaryData.push(result.data);
|
|
|
this.url =window.URL.createObjectURL(new Blob(binaryData, {type:"application/pdf"}));
|
|
|
window.open(this.url);
|
|
|
})
|
|
|
}
|
|
|
DownloadFileA=(title,url)=>{
|
|
|
let link = document.createElement('a');
|
|
|
document.body.appendChild(link);
|
|
|
link.href =url;
|
|
|
link.download = title;
|
|
|
//兼容火狐浏览器
|
|
|
let evt = document.createEvent("MouseEvents");
|
|
|
evt.initEvent("click", false, false);
|
|
|
link.dispatchEvent(evt);
|
|
|
document.body.removeChild(link);
|
|
|
}
|
|
|
|
|
|
DownloadOpenPdf=(type,url)=>{
|
|
|
type===true?window.open(url):window.location.href=url;
|
|
|
}
|
|
|
render() {
|
|
|
let{Headertop,Footerdown, isRender, AccountProfiletype}=this.state;
|
|
|
const common = {
|
|
|
isSuperAdmin:this.isSuperAdmin,
|
|
|
isAdminOrCreator:this.isAdminOrCreator,
|
|
|
isClassManagement:this.isClassManagement,
|
|
|
isAdmin: this.isAdmin,
|
|
|
isAdminOrTeacher: this.isAdminOrTeacher,
|
|
|
isStudent: this.isStudent,
|
|
|
isAdminOrStudent: this.isAdminOrStudent,
|
|
|
isNotMember: this.isNotMember,
|
|
|
isUserid:this.state.coursedata&&this.state.coursedata.userid,
|
|
|
fetchUser: this.fetchUser,
|
|
|
|
|
|
showLoginDialog: this.showLoginDialog,
|
|
|
checkIfLogin: this.checkIfLogin,
|
|
|
showProfileCompleteDialog: this.showProfileCompleteDialog,
|
|
|
checkIfProfileCompleted: this.checkIfProfileCompleted,
|
|
|
checkIfProfessionalCertification: this.checkIfProfessionalCertification,
|
|
|
showProfessionalCertificationDialog: this.showProfessionalCertificationDialog,
|
|
|
|
|
|
ShowOnlinePdf:(url)=>this.ShowOnlinePdf(url),
|
|
|
DownloadFileA:(title,url)=>this.DownloadFileA(title,url),
|
|
|
DownloadOpenPdf:(type,url)=>this.DownloadOpenPdf(type,url)
|
|
|
}
|
|
|
return (
|
|
|
<div>
|
|
|
{isRender===true ? <LoginDialog
|
|
|
Modifyloginvalue={()=>this.hideLoginDialog()}
|
|
|
{...this.props}
|
|
|
{...this.state}
|
|
|
/> : ""}
|
|
|
{/* AccountProfile 也用作职业认证 */}
|
|
|
{AccountProfiletype===true ? <AccountProfile
|
|
|
hideAccountProfile={()=>this.hideAccountProfile()}
|
|
|
{...this.props}
|
|
|
{...this.state}
|
|
|
{...this.dialogObj}
|
|
|
/>:""}
|
|
|
<SiderBar Headertop={Headertop}/>
|
|
|
{/* 注释掉了1440 影响到了手机屏幕的展示 */}
|
|
|
<style>{
|
|
|
`
|
|
|
.newContainers{
|
|
|
min-width: 1200px;
|
|
|
max-width: unset;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
.newHeaders{
|
|
|
// position: fixed;
|
|
|
max-width: unset;
|
|
|
background: #24292D !important;
|
|
|
width: 100%;
|
|
|
height: 60px !important;
|
|
|
min-width: 1200px;
|
|
|
z-index: 1000;
|
|
|
-moz-box-shadow: 0px 0px 12px rgba(0,0,0,0.1);
|
|
|
box-shadow: 0px 0px 12px rgba(0,0,0,0.1);
|
|
|
}
|
|
|
`
|
|
|
}</style>
|
|
|
<NewHeader {...this.state} {...this.props}></NewHeader>
|
|
|
<div className="newContainer newContainers">
|
|
|
<WrappedComponent initCommonState={(user)=>this.initCommonState(user)}
|
|
|
{...this.props} {...this.state}
|
|
|
showShixun={this.showShixun} aboutFocus={this.aboutFocus}
|
|
|
{...common}
|
|
|
>
|
|
|
</WrappedComponent>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
<NewFooter
|
|
|
Footerdown={Footerdown}
|
|
|
/>
|
|
|
</div>
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
} |