forgeplus-react/src/forge/Information/index.jsx

350 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React ,{ useEffect , useState } from "react";
import { Route, Switch } from "react-router-dom";
import { withRouter } from "react-router";
import { SnackbarHOC } from "educoder";
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
import Loadable from "react-loadable";
import Loading from "../../Loading";
import { getMainInfos , getCheckZoneRole, getCurrentRole } from './api';
import PublicBanner from "./Component/publicBanner";
import './index.scss';
import { isPhone } from 'educoder';
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import { tempEnum } from "./tempInfo";
import { ImageLayerOfCommentHOC } from "../../modules/page/layers/ImageLayerOfCommentHOC";
import { setSeoMeta } from 'educoder';
import { configShareForCustom } from 'educoder';
const SourceDetail = Loadable({
loader: () => import("./Pages/sourceDetail"),
loading: Loading,
});
const SourceCreate = Loadable({
loader: () => import("./Pages/sourceCreate"),
loading: Loading,
});
const VIP = Loadable({
loader: () => import("./Pages/zoneVIP"),
loading: Loading,
});
const Apply = Loadable({
loader: () => import("./Pages/apply"),
loading: Loading,
});
const Lessons = Loadable({
loader: () => import("./Pages/lessons"),
loading: Loading,
});
const Source = Loadable({
loader: () => import("./Pages/source"),
loading: Loading,
});
const SourceSelfList = Loadable({
loader: () => import("./Pages/selfList"),
loading: Loading,
});
const HeaderPage = Loadable({
loader: () => import("./Pages/headerPage"),
loading: Loading,
});
const HeaderPageZone1 = Loadable({
loader: () => import("./Pages/headerPageZone1"),
loading: Loading,
});
const HeaderPageCCF = Loadable({
loader : () => import("./Pages/headerPagebyCCF"),
loading : Loading,
});
const HeaderPageKyzx = Loadable({
loader : () => import("./Pages/headerPagebyKyzx"),
loading : Loading,
});
const ProjectSource = Loadable({
loader: () => import("./Pages/projectSource"),
loading: Loading,
});
const ProjectCateDetail = Loadable({
loader: () => import("./Pages/project/cateDetail"),
loading: Loading,
});
const ProjectCateList = Loadable({
loader: () => import("./Pages/project/cateList"),
loading: Loading,
});
const NewsDetail = Loadable({
loader: () => import("./Pages/newsDetail"),
loading: Loading,
});
const NewsList = Loadable({
loader: () => import("./Pages/newsList"),
loading: Loading,
});
const NewsCreate = Loadable({
loader: () => import("./Pages/newsCreate"),
loading: Loading,
});
const Main = Loadable({
loader: () => import("./Pages/main"),
loading: Loading,
});
const Help = Loadable({
loader: () => import("./Pages/help"),
loading: Loading,
});
const HomePageByJCC = Loadable({
loader : () => import("./Pages/JCC/homePage"),
loading : Loading,
});
const HomePageByUos = Loadable({
loader : () => import("./Pages/homepage/uos"),
loading : Loading,
});
const HomePageByNSCC = Loadable({
loader : () => import("./Pages/homepage/nscc"),
loading : Loading,
});
const DatasetFileList = Loadable({
loader : () => import("./Pages/dataset/fileList"),
loading : Loading,
});
const DataSetList = Loadable({
loader : () => import("./Pages/dataset/index"),
loading : Loading,
});
function Index(props){
const [ data , setData ] = useState(undefined);
const [ adminUrl , setAdminUrl ] = useState(undefined);
const { deptId } = props.match.params;
const [ id , setId ] = useState(undefined);
const [ temp , setTemp ] = useState(tempEnum.zone);
const [ role , setRole ] = useState(undefined);
const { pathname } = props.history.location;
const sourcedetail = pathname.indexOf(`/zone/${deptId}/newdetail/`)>-1 && isPhone();
const projectCateDetail = pathname.indexOf(`/zone/${deptId}/projects/`)>-1;
const {current_user} = props;
useEffect(()=>{
if(deptId && deptId === "KYDS7th"){
window.location.href = 'https://gitlink.org.cn/competitions/2024';
}
if(deptId && deptId!=="apply"){
getDetail();
}
},[deptId])
useEffect(() => {
setTheme()
}, [temp])
function setTheme() {
document.getElementsByTagName("html")[0].dataset.theme = temp;
}
setTheme()
function getDetail(){
getMainInfos(deptId).then(result=>{
if(result){
if (result.data.code === 404) {
props.history.push('/nopage');
return
}
let data = result.data.data || {};
if (data && data.template) {
setTemp( data.template )
}
setData(data);
document.title= data && data.mainTitle;
if(data && data.id){
setId(data.id);
getAdminUrl(data.id);
getRole(data.id)
}
configShareForCustom(data.mainTitle, data.subTitle, data.introductionImage)
// 存储deptId所有专区接口header带上
sessionStorage.setItem('deptId', data.deptId)
setSeoMeta(`${data.name},`, data.name, data.subTitle, `/zone/${deptId}`)
}
}).catch(console.error())
}
function getAdminUrl(id){
getCheckZoneRole(id).then(response=>{
if(response && response.data.data){
setAdminUrl(response.data.data);
}else{
setAdminUrl(undefined);
}
}).catch(error=>{})
}
function getRole(id){
if(current_user && current_user.login){
getCurrentRole(id).then(res=>{
setRole(res.data.data);
}).catch(error=>{})
}
}
return(
<div className="information_main">
{ (!projectCateDetail && !sourcedetail && deptId!=="apply") && (id ? <PublicBanner {...props} data={data} temp={ temp } adminUrl={adminUrl} id={id}/> : <div style={{ width: '100%', height: '450px' }}></div>)}
<Switch>
<Route
path="/zone/:deptId/news/self"
render={(p) => (
<SourceSelfList {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route
path="/zone/:deptId/news/add"
render={(p) => (
<NewsCreate {...props} {...p} id={id} temp={ temp } data={data} role={role}/>
)}
></Route>
<Route
path="/zone/:deptId/news/:id/edit"
render={(p) => (
<NewsCreate {...props} {...p} id={id} temp={ temp } data={data} role={role}/>
)}
></Route>
<Route
path="/zone/:deptId/news/:cateId"
render={(p) => (
<Main {...props} {...p} id={id} temp={ temp } role={role} sectionCmsTitle={data && data.sectionCmsTitle}/>
)}
></Route>
<Route
path="/zone/:deptId/newdetail/:id"
render={(p) => (
<NewsDetail {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route
path="/zone/:deptId/source/self"
render={(p) => (
<SourceSelfList {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route
path="/zone/:deptId/source/add"
render={(p) => (
<SourceCreate {...props} {...p} id={id} temp={ temp } data={data} role={role}/>
)}
></Route>
<Route
path="/zone/:deptId/source/:sourceid/edit"
render={(p) => (
<SourceCreate {...props} {...p} id={id} temp={ temp } role={role}/>
)}
></Route>
<Route
path="/zone/:deptId/source/:sourceid"
render={(p) => (
<SourceDetail {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route
path="/zone/:deptId/dataset/:datasetId"
render={(p) => (
<DatasetFileList {...props} {...p} id={id} temp={ temp } role={role} sectionResourceTitle={data && data.sectionResourceTitle}/>
)}
></Route>
<Route
path="/zone/:deptId/lessons"
render={(p) => (
<Lessons {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route
path="/zone/:deptId/dataset"
render={(p) => (
<DataSetList {...props} {...p} id={id} temp={ temp } role={role} sectionResourceTitle={data && data.sectionResourceTitle}/>
)}
></Route>
<Route
path="/zone/:deptId/source"
render={(p) => (
<Source {...props} {...p} id={id} temp={ temp } role={role} sectionResourceTitle={data && data.sectionResourceTitle}/>
)}
></Route>
<Route
path="/zone/:deptId/VIP"
render={(p) => (
<VIP {...props} {...p} id={id} temp={ temp } sectionMemberTitle={data && data.sectionMemberTitle}/>
)}
></Route>
<Route
path="/zone/:deptId/projects/:cateId"
render={(p) => (
<ProjectCateDetail {...props} {...p} id={id} temp={ temp } sectionProjectTitle={data && data.sectionProjectTitle}/>
)}
></Route>
<Route
path="/zone/NSCC/projects"
render={(p) => (
<ProjectCateList {...props} {...p} id={id} temp={ temp } data={data}/>
)}
></Route>
<Route
path="/zone/:deptId/projects"
render={(p) => (
<ProjectSource {...props} {...p} id={id} temp={ temp } sectionProjectTitle={data && data.sectionProjectTitle}/>
)}
></Route>
<Route
path="/zone/:deptId/news"
render={(p) => (
<Main {...props} {...p} id={id} temp={ temp } role={role} sectionCmsTitle={data && data.sectionCmsTitle}/>
)}
></Route>
<Route
path="/zone/:deptId/help"
render={(p) => (
<Help {...props} {...p} id={id} temp={ temp } data={data} adminUrl={adminUrl}/>
)}
></Route>
<Route
path="/zone/apply"
render={(p) => (
<Apply {...props} {...p} id={id} temp={ temp }/>
)}
></Route>
<Route
path="/zone/:deptId"
render={(p) => (
deptId==="CCF-ODC" ? <HeaderPageCCF {...props} {...p} data={data} id={id} temp={ temp } />:
deptId === "JCC" ? <HomePageByJCC {...props} {...p} data={data} id={id}/>:
deptId === "uos" ? <HomePageByUos {...props} {...p} data={data} id={id}/>:
deptId==="xjykyzx" ? <HeaderPageKyzx {...props} {...p} data={data} id={id} temp={ temp } />:
deptId.toLocaleUpperCase()==="NSCC" ? <HomePageByNSCC {...props} {...p} data={data} id={id} temp={ temp } />:
temp === tempEnum.zone ? <HeaderPage {...props} {...p} data={data} id={id} temp={ temp }/>:
<HeaderPageZone1 {...props} {...p} data={data} id={id} temp={ temp }/>
)}
></Route>
</Switch>
</div>
)
}
export default withRouter((CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(ImageLayerOfCommentHOC({
imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
parentSelector: ".newContainer",
})(Index)))))
);