diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js index 740392885..d8ff0de3c 100644 --- a/public/react/src/modules/tpm/TPMIndexHOC.js +++ b/public/react/src/modules/tpm/TPMIndexHOC.js @@ -1,40 +1,35 @@ -import React from 'react'; - +import React, { Component } from 'react'; import NewHeader from './NewHeader' import NewFooter from './NewFooter' import SiderBar from './SiderBar' -import { downloadFile } from 'educoder' +import { getUrl, downloadFile } from 'educoder' import axios from 'axios'; +import { Spin } from 'antd'; import './TPMIndex.css'; import LoginDialog from '../login/LoginDialog'; import AccountProfile from '../user/AccountProfile'; import AccountPhoneemail from '../user/AccountPhoneemail'; -import Loading from '../../Loading'; const $ = window.$; - -let _url_origin = ''; -if (window.location.port === "3007") { - _url_origin = "https://test-newweb.educoder.net"; +let _url_origin=''; +if(window.location.port === "3007"){ + _url_origin="https://test-newweb.educoder.net"; } - if (!window['indexHOCLoaded']) { - window.indexHOCLoaded = true; - //解决首屏加载问题 + window.indexHOCLoaded = true; - $('head').append($('') - .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?3`)); + $('head').append($('') + .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?3`)); - $('head').append($('') - .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?3`)); + $('head').append($('') + .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?3`)); - // index.html有加载 + // index.html有加载 $('head').append($('') .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?3`)); } -// TODO css加载完成后再打开页面,行为和tpm其他页面一致 export default function TPMIndexHOC(WrappedComponent) { // 这里如果extends WrappedComponent 会出现 WrappedComponent mount twice的问题 return class II extends React.Component { @@ -178,62 +173,66 @@ export default function TPMIndexHOC(WrappedComponent) { }); }else{ this.setState({ - watched: !watched - }) + dataquerys:foqus, + }); + dataqueryss=foqus; } - }).catch((error) => { - console.log(error) - }) - } - - keyupListener = (e) => { - if (e.key === "Escape") { - this.setState({ globalLoading: false }) - } - } - componentWillUnmount() { - window.removeEventListener('keyup', this.keyupListener) - } - - componentDidMount() { - window.addEventListener('keyup', this.keyupListener) - - if (this.props.match.path === "/") { - } 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 - }); - - //帮助后台传参数 - const query = this.props.location.search; - var dataqueryss = {} - try { - var foqus = this.foo(query); - if (JSON.stringify(foqus) === "{}") { - this.setState({ - dataquerys: {}, - }); - } else { + }catch (e) { this.setState({ - dataquerys: foqus, - }); - dataqueryss = foqus; + dataquerys:{}, + }) } - } catch (e) { - this.setState({ - dataquerys: {}, - }) + this.fetchUsers(dataqueryss); + + let url=`/users/get_navigation_info.json`; + axios.get(url, { + + }).then((response) => { + // console.log("开始请求/get_navigation_info.json"); + // console.log(response); + if(response!=undefined){ + if(response.status===200){ + this.setState({ + Headertop:response.data.top, + Footerdown:response.data.down + }) + } + } + }); + ///请求定制化的信息 + this.getAppdata(); + } + /** + 课堂权限相关方法,暂时写这里了 ----------------------------------------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 # 普未登录 + */ + //超管0 + isSuperAdmin = () => { + // return false + return this.state.coursedata&&this.state.coursedata.course_identity === 0 + } + isCourseAdmin = () => { + return this.state.coursedata&&this.state.coursedata.course_identity === 2 + } + //超管、运维0-1 + isClassManagement = () => { + return this.state.coursedata&&this.state.coursedata.course_identity < 2 } //超管、运维、课堂管理0-2 isAdminOrCreator = () => { @@ -278,55 +277,95 @@ export default function TPMIndexHOC(WrappedComponent) { //获取数据为空的时候 gettablogourlnull = () => { this.setState({ - mygetHelmetapi: chromesettingArray + mygetHelmetapi: undefined }); - if (chromesettingArray.tab_logo_url) { - this.gettablogourldata(chromesettingresponseArray); - } else { - this.gettablogourlnull(); + document.title = "EduCoder"; + 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); } - } catch (e) { - console.log("hoc获取游览器配置失败 重新请求开始读取配置"); - this.getAppdatausr(); + document.head.appendChild(link); } - - }; - getAppdatausr = () => { - let url = "/setting.json"; - axios.get(url).then((response) => { - // console.log("app.js开始请求/setting.json"); - // console.log("获取当前定制信息"); - if (response) { - if (response.data) { + //获取当前定制信息 + getAppdata = () => { + try { + var chromesettingArray = JSON.parse(localStorage.getItem('chromesetting')); + var chromesettingresponseArray = JSON.parse(localStorage.getItem('chromesettingresponse')); + // console.log("TPMLNdexHOC"); + // console.log(chromesettingArray); + // console.log(chromesettingresponseArray); this.setState({ - mygetHelmetapi: response.data.setting + mygetHelmetapi:chromesettingArray }); - 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); + if (chromesettingArray.tab_logo_url) { + this.gettablogourldata(chromesettingresponseArray); } else { this.gettablogourlnull(); } - } catch (e) { + }catch (e) { + console.log("hoc获取游览器配置失败 重新请求开始读取配置"); + this.getAppdatausr(); + } + + }; + getAppdatausr=()=>{ + let url = "/setting.json"; + axios.get(url).then((response) => { + // console.log("app.js开始请求/setting.json"); + // console.log("获取当前定制信息"); + if (response) { + if (response.data) { + this.setState({ + mygetHelmetapi: 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(); - } + } } else { - this.gettablogourlnull(); } - } else { + }).catch((error) => { this.gettablogourlnull(); - } + }); - }).catch((error) => { - this.gettablogourlnull(); + } fetchUser = () => { let url = `/users/get_user_info.json` @@ -401,263 +440,236 @@ export default function TPMIndexHOC(WrappedComponent) { courseId = parseInt(type[2]) // url += `?course_id=${courseId}` } - } else { - datay = { - course_id: isNaN(courseId) ? undefined : courseId, - school: 1, - chinaoocTimestamp: this.state.dataquerys.chinaoocTimestamp, - websiteName: this.state.dataquerys.websiteName, - chinaoocKey: this.state.dataquerys.chinaoocKey, + var datay={}; + if(JSON.stringify(yslurlobject) ==="{}"){ + datay={ + course_id:isNaN(courseId)?undefined:courseId, + school:1 + } + }else{ + datay={ + course_id:isNaN(courseId)?undefined:courseId, + school:1, + chinaoocTimestamp:yslurlobject.chinaoocTimestamp, + websiteName:yslurlobject.websiteName, + chinaoocKey:yslurlobject.chinaoocKey, + } } - } - axios.get(url, { - params: - datay - }).then((response) => { - /* + axios.get(url,{params: + datay + }, { - "username": "黄井泉", - "login": "Hjqreturn", - "user_id": 12, - "image_url": "avatar/User/12", - "admin": true, - "is_teacher": false, - "tidding_count": 0 + // withCredentials: true } - */ - 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 - }, + ).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) - }) - }; - //截取url 数据的 - foo = (url) => { - var json = {}; - var regExp = /[\?\&](\w+)(=?)(\w*)/g; - var arr; - do { - arr = regExp.exec(url); - if (arr) { - var key = arr[1]; - var value = arr[3]; - if (!arr[2]) - value = undefined; - - json[key] = value; - } - } while (arr); - - return json; - }; - hideLoginDialog = () => { - this.setState({ - isRender: false, - isloginCancel: undefined - }) - } - showLoginDialog = () => { - this.setState({ - isRender: true, - isloginCancel: "iscancel" - }) - } - //验证登录是否成功方法 - checkIfLogin = () => { - return this.state.current_user && this.state.current_user.login != '' - } - - hideAccountProfile = () => { - this.setState({ - AccountProfiletype: false - }) - } - showProfileCompleteDialog = () => { - this.dialogObj = {} - this.setState({ - AccountProfiletype: true - }) - } - showhideAccountPhoneemailDialog = () => { - this.dialogObj = {} - this.setState({ - AccountPhoneemailtype: true - }) - } - hideAccountPhoneemailtype = () => { - this.setState({ - AccountPhoneemailtype: false - }) - } - //验证是否完善资料 - checkIfProfileCompleted = () => { - return this.state.current_user && this.state.current_user.profile_completed - } - - showaccountprofileDialog = () => { - this.dialogObj = { - content: '您需要去完成您的个人资料,才能使用此功能', - okText: '立即完成', - okHref: '/account/profile' + }).catch((error) => { + console.log(error) + }) + }; + //截取url 数据的 + foo=(url)=> { + var json = {}; + var regExp = /[\?\&](\w+)(=?)(\w*)/g; + var arr; + do { + arr = regExp.exec(url); + // console.log(arr); // arr = [完整的字符串, key, 等号或'', value或''] + + if (arr) { + var key = arr[1]; + var value = arr[3]; + // arr[2] === ''时, value = undefined + if (!arr[2]) + value = undefined; + + json[key] = value; + } + } while (arr); + + return json; + }; + hideLoginDialog = () => { + this.setState({ + isRender: false, + isloginCancel:undefined + }) + } + showLoginDialog = () => { + this.setState({ + isRender: true, + isloginCancel:"iscancel" + }) + } + //验证登录是否成功方法 + checkIfLogin = () => { + return this.state.current_user && this.state.current_user.login != '' + } + + hideAccountProfile = () => { + this.setState({ + AccountProfiletype: false + }) + } + showProfileCompleteDialog = () => { + this.dialogObj = {} + this.setState({ + AccountProfiletype: true + }) + } + showhideAccountPhoneemailDialog = () => { + this.dialogObj = {} + this.setState({ + AccountPhoneemailtype: true + }) } - this.setState({ - AccountProfiletype: true, - }) - } - showProfessionalCertificationDialog = () => { - this.dialogObj = { - content: '您需要去完成您的职业认证,才能使用此功能', - okText: '立即完成', - okHref: '/account/certification' + hideAccountPhoneemailtype=()=>{ + this.setState({ + AccountPhoneemailtype:false + }) } - 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; - } - slowDownload = (url, tip) => { - this._gLoadingTip = tip || '正在生成文件,请稍后...'; - this.setState({ globalLoading: true }) - const fileUrl = url; - downloadFile({ - url: fileUrl, - successCallback: (url) => { - this.setState({ globalLoading: false }) - console.log('successCallback') - }, - failCallback: (responseHtml, url) => { - this.setState({ globalLoading: false }) - console.log('failCallback') + //验证是否完善资料 + checkIfProfileCompleted = () => { + return this.state.current_user && this.state.current_user.profile_completed + } + + showaccountprofileDialog = () => { + this.dialogObj = { + content: '您需要去完成您的个人资料,才能使用此功能', + okText: '立即完成', + okHref: '/account/profile' } - }) - } - yslslowCheckresults = (tip) => { - this._gLoadingTip = tip || '成绩计算中,请稍候...'; - this.setState({ globalLoading: true }) - } - yslslowCheckresultsNo = () => { - this.setState({ globalLoading: false }) - } - - showGlobalLoading = (tip) => { - this._gLoadingTip = tip || '加载中,请稍后...'; - this.setState({ globalLoading: true }) - } - hideGlobalLoading = () => { - this.setState({ globalLoading: false }) - } - - MdifHasAnchorJustScorll = () => { - //mdhash滚动 - let anchor = decodeURI(this.props.location.hash).replace('#', ''); - // 对应id的话, 滚动到相应位置 - if (!!anchor) { - let anchorElement = document.getElementsByName(anchor); - if (anchorElement) { - if (anchorElement.length > 0) { - anchorElement[anchorElement.length - 1].scrollIntoView(); + this.setState({ + AccountProfiletype: true, + }) + } + 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; + } + slowDownload = (url, tip) => { + this._gLoadingTip = tip || '正在生成文件,请稍后...'; + this.setState({ globalLoading: true }) + const fileUrl = url; + downloadFile({ + url: fileUrl, + successCallback: (url) => { + this.setState({ globalLoading: false }) + console.log('successCallback') + }, + failCallback: (responseHtml, url) => { + this.setState({ globalLoading: false }) + console.log('failCallback') + } + }) + } + yslslowCheckresults =(tip) =>{ + this._gLoadingTip = tip || '成绩计算中,请稍候...'; + this.setState({ globalLoading: true }) + } + yslslowCheckresultsNo =() =>{ + this.setState({ globalLoading: false }) + } + + showGlobalLoading = (tip) => { + this._gLoadingTip = tip || '加载中,请稍后...'; + this.setState({ globalLoading: true }) + } + hideGlobalLoading = () => { + this.setState({ globalLoading: false }) + } + + MdifHasAnchorJustScorll=()=>{ + //mdhash滚动 + let anchor = decodeURI(this.props.location.hash).replace('#', ''); + // 对应id的话, 滚动到相应位置 + if (!!anchor) { + let anchorElement = document.getElementsByName(anchor); + if (anchorElement) { + if (anchorElement.length>0){ + anchorElement[anchorElement.length-1].scrollIntoView(); + } } } } - } - - //跳转道描点的地方 - scrollToAnchor = (anchorName) => { - if (anchorName) { - // 找到锚点 - let anchorElement = document.getElementById(anchorName); - // 如果对应id的锚点存在,就跳转到锚点 - if (anchorElement) { - anchorElement.scrollIntoView(); + + //跳转道描点的地方 + scrollToAnchor = (anchorName) => { + if (anchorName) { + // 找到锚点 + let anchorElement = document.getElementById(anchorName); + // 如果对应id的锚点存在,就跳转到锚点 + if (anchorElement) { + anchorElement.scrollIntoView(); + } } } - } - - render() { - let { Headertop, Footerdown, isRender, AccountProfiletype, AccountPhoneemailtype } = this.state; - const common = { - isSuperAdmin: this.isSuperAdmin, - isAdminOrCreator: this.isAdminOrCreator, - isClassManagement: this.isClassManagement, - isCourseAdmin: this.isCourseAdmin, - - isAdmin: this.isAdmin, - isAdminOrTeacher: this.isAdminOrTeacher, - isStudent: this.isStudent, - isAdminOrStudent: this.isAdminOrStudent, - isNotMember: this.isNotMember, - isCourseEnd: this.isCourseEnd, - - isUserid: this.state.coursedata && this.state.coursedata.userid, - fetchUser: this.fetchUser, - - showLoginDialog: this.showLoginDialog, - checkIfLogin: this.checkIfLogin, - showProfileCompleteDialog: this.showProfileCompleteDialog, - showhideAccountPhoneemailDialog: this.showhideAccountPhoneemailDialog, - checkIfProfileCompleted: this.checkIfProfileCompleted, - showaccountprofileDialog: this.showaccountprofileDialog, - 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), - - slowDownload: this.slowDownload, - showGlobalLoading: this.showGlobalLoading, - hideGlobalLoading: this.hideGlobalLoading, - yslslowCheckresults: this.yslslowCheckresults, - yslslowCheckresultsNo: this.yslslowCheckresultsNo, - MdifHasAnchorJustScorll: this.MdifHasAnchorJustScorll, - scrollToAnchor: this.scrollToAnchor render() { let{Headertop,Footerdown, isRender, AccountProfiletype,AccountPhoneemailtype}=this.state; @@ -738,17 +750,18 @@ export default function TPMIndexHOC(WrappedComponent) { } - {/* 注释掉了1440 影响到了手机屏幕的展示 */} - + } - {this.state.globalLoading ? : - - -
- this.initCommonState(user)} + + +
+ this.initCommonState(user)} {...this.props} {...this.state} showShixun={this.showShixun} aboutFocus={this.aboutFocus} {...common} > - + + +
-
- + + -
- } + /> - - ); - } + + ); + } } } -