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

309 lines
9.4 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 { connect } from 'react-redux';
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 NewsDetail from './Pages/newsDetail'
import HeaderPage from './Pages/headerPage'
import HeaderPageZone1 from './Pages/headerPageZone1'
import HeaderPageCCF from './Pages/headerPagebyCCF'
import { setZoneDetail, setNewsDetail } from '../../redux/actions/server';
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 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 ProjectSource = Loadable({
loader: () => import("./Pages/projectSource"),
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,
});
function Index(props){
const [ data , setData ] = useState( props.zoneDetail || undefined);
const [ adminUrl , setAdminUrl ] = useState(undefined);
const { deptId } = props.match.params;
const [ id , setId ] = useState(undefined);
const [ temp , setTemp ] = useState( props.zoneDetail ? props.zoneDetail.template : tempEnum.zone);
const [ role , setRole ] = useState(undefined);
const { pathname } = props.history.location;
const sourcedetail = pathname.indexOf(`/zone/${deptId}/newdetail/`)>-1 && isPhone();
const {current_user} = props;
if (__SERVER__ && data) {
setSeoMeta(`${data.name}`, data.name, data.subTitle, `/zone/${deptId}`)
}
useEffect(()=>{
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;
setId(data.id);
if(data.id){
getAdminUrl(data.id);
getRole(data.id)
}
// 存储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">
{ (!sourcedetail && deptId!=="apply") && (id ? <PublicBanner {...props} data={data} temp={ temp } adminUrl={adminUrl}/> : <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/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"
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}/>:
temp === tempEnum.zone ? <HeaderPage {...props} {...p} data={data} id={id} temp={ temp }/>:
<HeaderPageZone1 {...props} {...p} data={data} id={id} temp={ temp }/>
)}
></Route>
</Switch>
</div>
)
}
const mapStateToProps = (state) => {
const {
zoneDetail,
newsDetail
} = state.zoneReducer;
return {
zoneDetail,
newsDetail
};
}
const mapDispatchToProps = (dispatch) => ({
clearProject: (type) => dispatch(actions.clearProject(type)),
});
const newIndex = (CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((Index)))))
newIndex.preFetch = ({ store, match, query }) => {
return new Promise(async function(resolve, reject) {
let { dispatch } = store;
// const { owner,projectsId } = match.params
const promises = [
dispatch(setZoneDetail(match.params)),
dispatch(setNewsDetail(match.params)),
];
const data = await Promise.all(promises);
resolve({
code: 200,
});
});
};
export default withRouter((connect(mapStateToProps, mapDispatchToProps)(newIndex)));