forked from Gitlink/forgeplus-react
309 lines
9.4 KiB
JavaScript
309 lines
9.4 KiB
JavaScript
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))); |