|
|
@@ -1,4 +1,4 @@ |
|
|
|
// import { useState } from 'react'; |
|
|
|
import { useState } from 'react'; |
|
|
|
|
|
|
|
// material-ui |
|
|
|
import { |
|
|
@@ -14,8 +14,15 @@ import { FormattedMessage, useIntl } from "react-intl"; |
|
|
|
import AdsClickRoundedIcon from '@mui/icons-material/AdsClickRounded'; |
|
|
|
import * as React from "react"; |
|
|
|
import Loadable from 'components/Loadable'; |
|
|
|
import * as HttpUtils from "utils/HttpUtils"; |
|
|
|
import * as UrlUtils from "utils/ApiPathConst"; |
|
|
|
import * as DateUtils from "utils/DateUtils"; |
|
|
|
|
|
|
|
const Message = Loadable(React.lazy(() => import('./Message'))); |
|
|
|
const Notice = Loadable(React.lazy(() => import('./Notice'))); |
|
|
|
// import { lazy } from 'react'; |
|
|
|
|
|
|
|
const LoadingComponent = Loadable(React.lazy(() => import('../../extra-pages/LoadingComponent'))); |
|
|
|
|
|
|
|
import { useNavigate } from "react-router-dom"; |
|
|
|
|
|
|
@@ -37,8 +44,19 @@ const DashboardDefault = () => { |
|
|
|
} |
|
|
|
|
|
|
|
const { locale } = intl; |
|
|
|
const [messageOnReady, setMessageOnReady] = useState(false); |
|
|
|
const [onNoticeReady, setNoticeOnReady] = useState(false); |
|
|
|
const [isLoading, setLoding] = useState(true); |
|
|
|
const [itemList, setItemList] = React.useState([]); |
|
|
|
const [listData, setListData] = React.useState([]); |
|
|
|
|
|
|
|
React.useEffect(() => { |
|
|
|
loadMessageData() |
|
|
|
loadNoticeData() |
|
|
|
}, []); |
|
|
|
|
|
|
|
const getWelcomeMsg=()=>{ |
|
|
|
|
|
|
|
var current = new Date() |
|
|
|
var curHr = current.getHours() |
|
|
|
|
|
|
@@ -51,77 +69,151 @@ const DashboardDefault = () => { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
React.useEffect(() => { |
|
|
|
// console.log(messageOnReady) |
|
|
|
// console.log(onNoticeReady) |
|
|
|
if(messageOnReady&&onNoticeReady){ |
|
|
|
setLoding(false) |
|
|
|
// console.log(123) |
|
|
|
} |
|
|
|
}, [messageOnReady,onNoticeReady]); |
|
|
|
|
|
|
|
const loadMessageData = () => { |
|
|
|
HttpUtils.get({ |
|
|
|
url: UrlUtils.GET_MSG_DASHBOARD, |
|
|
|
onSuccess: function (response) { |
|
|
|
let list = [] |
|
|
|
response.map((item) => { |
|
|
|
list.push( |
|
|
|
<Button onClick={()=>{navigate("/msg/details/"+item.id);}} color={item.readTime?"gray":"black"} style={{justifyContent: "flex-start"}} sx={{p:2}}> |
|
|
|
<Stack direction="column" > |
|
|
|
<Typography variant='h4' align="justify"><b>{item.subject}</b></Typography> |
|
|
|
<Typography align="justify">{DateUtils.datetimeStr(item.sentDate)}</Typography> |
|
|
|
</Stack> |
|
|
|
</Button> |
|
|
|
) |
|
|
|
}); |
|
|
|
|
|
|
|
setItemList(list); |
|
|
|
setMessageOnReady(true); |
|
|
|
// console.log('123') |
|
|
|
}, |
|
|
|
onError: function (){ |
|
|
|
// console.log('123') |
|
|
|
setMessageOnReady(true); |
|
|
|
} |
|
|
|
}); |
|
|
|
// props.setMessageOnReady(true); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
const loadNoticeData = () => { |
|
|
|
HttpUtils.get({ |
|
|
|
url: UrlUtils.GET_ANNOUNCE_DASHBOARD, |
|
|
|
onSuccess: function (response) { |
|
|
|
setListData(response); |
|
|
|
setNoticeOnReady(true) |
|
|
|
}, |
|
|
|
onError: function () { |
|
|
|
setNoticeOnReady(true) |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
return ( |
|
|
|
<Grid container sx={{ minHeight: '87vh' }} direction="column"> |
|
|
|
<Grid item xs={12} > |
|
|
|
<div style={BackgroundHead}> |
|
|
|
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> |
|
|
|
{/* <Typography variant="h5">我的公共啟事</Typography> */} |
|
|
|
<Typography color='#FFF' variant="h5" sx={{ ml: 10, display: { xs: 'none', sm: 'none', md: 'block' } }}> |
|
|
|
{isORGLoggedIn() ? userData.fullenName: (locale === 'en' ?userData.fullenName: userData.fullchName)}, {getWelcomeMsg()} |
|
|
|
</Typography> |
|
|
|
</Stack> |
|
|
|
</div> |
|
|
|
</Grid> |
|
|
|
<Grid item xs={12} md={12} sx={{ textAlign: "center" }}> |
|
|
|
<Grid container justifyContent="center" spacing={2} sx={{ pt: 2 }} alignitems="stretch" > |
|
|
|
<Grid item xs={12} lg={5} sx={{ pt: 2 }} style={{ height: '100%' }}> |
|
|
|
<Button |
|
|
|
xs={12} onClick={() => { navigate("/publicNotice/apply"); }} |
|
|
|
style={{ justifyContent: "flex-start" }} |
|
|
|
aria-label={intl.formatMessage({ id: 'submitApplication' })} |
|
|
|
sx={{ width: "100%", p: 4, border: '3px solid #e1edfc', borderRadius: '10px', backgroundColor: "#e1edfc" }} |
|
|
|
> |
|
|
|
<Stack direction="row" spacing={2}> |
|
|
|
<AdsClickRoundedIcon /> |
|
|
|
<Stack direction="column" alignItems="start"> |
|
|
|
<Typography variant="h4" > |
|
|
|
<FormattedMessage id="submitApplication" /> |
|
|
|
</Typography> |
|
|
|
<Typography > |
|
|
|
<FormattedMessage id="applicationSubheading" /> |
|
|
|
isLoading ? |
|
|
|
<Grid container sx={{ minHeight: '87vh' }} direction="column"> |
|
|
|
<Grid item xs={12} > |
|
|
|
<div style={BackgroundHead}> |
|
|
|
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> |
|
|
|
{/* <Typography variant="h5">我的公共啟事</Typography> */} |
|
|
|
<Typography color='#FFF' variant="h5" sx={{ ml: 10, display: { xs: 'none', sm: 'none', md: 'block' } }}> |
|
|
|
{isORGLoggedIn() ? userData.fullenName: (locale === 'en' ?userData.fullenName: userData.fullchName)}, {getWelcomeMsg()} |
|
|
|
</Typography> |
|
|
|
</Stack> |
|
|
|
</div> |
|
|
|
</Grid> |
|
|
|
<Grid item xs={12} md={12} sx={{ textAlign: "center" }}> |
|
|
|
<Grid container sx={{ minHeight: '75vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center"> |
|
|
|
<Grid item> |
|
|
|
<LoadingComponent /> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
: |
|
|
|
<Grid container sx={{ minHeight: '87vh' }} direction="column"> |
|
|
|
<Grid item xs={12} > |
|
|
|
<div style={BackgroundHead}> |
|
|
|
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> |
|
|
|
{/* <Typography variant="h5">我的公共啟事</Typography> */} |
|
|
|
<Typography color='#FFF' variant="h5" sx={{ ml: 10, display: { xs: 'none', sm: 'none', md: 'block' } }}> |
|
|
|
{isORGLoggedIn() ? userData.fullenName: (locale === 'en' ?userData.fullenName: userData.fullchName)}, {getWelcomeMsg()} |
|
|
|
</Typography> |
|
|
|
</Stack> |
|
|
|
</Button> |
|
|
|
<Stack direction="row" justifyContent="space-between" sx={{ pl: 2, pr: 2, pt: 2 }} > |
|
|
|
<Typography variant="h4"> |
|
|
|
<FormattedMessage id="announcement" /> |
|
|
|
</Typography> |
|
|
|
<Button |
|
|
|
color="gray" |
|
|
|
aria-label={intl.formatMessage({ id: 'viewAllAnnouncement' })} |
|
|
|
onClick={()=>{navigate("/announcement/search")}} |
|
|
|
><u> |
|
|
|
<FormattedMessage id="viewAllAnnouncement" /> |
|
|
|
</u></Button> |
|
|
|
</Stack> |
|
|
|
<Box xs={12} md={12} sx={{ p: 1, border: '3px solid #eee', borderRadius: '10px' }} > |
|
|
|
<Notice |
|
|
|
/> |
|
|
|
</Box> |
|
|
|
</div> |
|
|
|
</Grid> |
|
|
|
<Grid item xs={12} lg={5} sx={{ pt: 2 }} style={{ height: '100%' }}> |
|
|
|
<Stack direction="row" justifyContent="space-between" sx={{ pl: 2, pr: 2, pt: 2 }} > |
|
|
|
<Typography variant="h4"> |
|
|
|
<FormattedMessage id="systemMessage" /> |
|
|
|
</Typography> |
|
|
|
<Button |
|
|
|
aria-label={intl.formatMessage({ id: 'viewAllSystemMessage' })} |
|
|
|
onClick={() => { navigate("/msg/search"); }} |
|
|
|
color="gray" |
|
|
|
><u> |
|
|
|
<FormattedMessage id="viewAllSystemMessage" /> |
|
|
|
</u></Button> |
|
|
|
</Stack> |
|
|
|
<Box xs={12} md={12} sx={{ p: 1, border: '3px solid #eee', borderRadius: '10px' }} > |
|
|
|
<Message |
|
|
|
/> |
|
|
|
</Box> |
|
|
|
<Grid item xs={12} md={12} sx={{ textAlign: "center" }}> |
|
|
|
<Grid container justifyContent="center" spacing={2} sx={{ pt: 2 }} alignitems="stretch" > |
|
|
|
<Grid item xs={12} lg={5} sx={{ pt: 2 }} style={{ height: '100%' }}> |
|
|
|
<Button |
|
|
|
xs={12} onClick={() => { navigate("/publicNotice/apply"); }} |
|
|
|
style={{ justifyContent: "flex-start" }} |
|
|
|
aria-label={intl.formatMessage({ id: 'submitApplication' })} |
|
|
|
sx={{ width: "100%", p: 4, border: '3px solid #e1edfc', borderRadius: '10px', backgroundColor: "#e1edfc" }} |
|
|
|
> |
|
|
|
<Stack direction="row" spacing={2}> |
|
|
|
<AdsClickRoundedIcon /> |
|
|
|
<Stack direction="column" alignItems="start"> |
|
|
|
<Typography variant="h4" > |
|
|
|
<FormattedMessage id="submitApplication" /> |
|
|
|
</Typography> |
|
|
|
<Typography > |
|
|
|
<FormattedMessage id="applicationSubheading" /> |
|
|
|
</Typography> |
|
|
|
</Stack> |
|
|
|
</Stack> |
|
|
|
</Button> |
|
|
|
<Stack direction="row" justifyContent="space-between" sx={{ pl: 2, pr: 2, pt: 2 }} > |
|
|
|
<Typography variant="h4"> |
|
|
|
<FormattedMessage id="announcement" /> |
|
|
|
</Typography> |
|
|
|
<Button |
|
|
|
color="gray" |
|
|
|
aria-label={intl.formatMessage({ id: 'viewAllAnnouncement' })} |
|
|
|
onClick={()=>{navigate("/announcement/search")}} |
|
|
|
><u> |
|
|
|
<FormattedMessage id="viewAllAnnouncement" /> |
|
|
|
</u></Button> |
|
|
|
</Stack> |
|
|
|
<Box xs={12} md={12} sx={{ p: 1, border: '3px solid #eee', borderRadius: '10px' }} > |
|
|
|
<Notice |
|
|
|
listData = {listData} |
|
|
|
/> |
|
|
|
</Box> |
|
|
|
</Grid> |
|
|
|
<Grid item xs={12} lg={5} sx={{ pt: 2 }} style={{ height: '100%' }}> |
|
|
|
<Stack direction="row" justifyContent="space-between" sx={{ pl: 2, pr: 2, pt: 2 }} > |
|
|
|
<Typography variant="h4"> |
|
|
|
<FormattedMessage id="systemMessage" /> |
|
|
|
</Typography> |
|
|
|
<Button |
|
|
|
aria-label={intl.formatMessage({ id: 'viewAllSystemMessage' })} |
|
|
|
onClick={() => { navigate("/msg/search"); }} |
|
|
|
color="gray" |
|
|
|
><u> |
|
|
|
<FormattedMessage id="viewAllSystemMessage" /> |
|
|
|
</u></Button> |
|
|
|
</Stack> |
|
|
|
<Box xs={12} md={12} sx={{ p: 1, border: '3px solid #eee', borderRadius: '10px' }} > |
|
|
|
<Message |
|
|
|
itemList = {itemList} |
|
|
|
/> |
|
|
|
</Box> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
</Grid> |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|