You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
5.5 KiB

  1. // material-ui
  2. import {
  3. Grid,
  4. Typography,
  5. Tab,
  6. Box,
  7. Button,
  8. Stack
  9. } from '@mui/material';
  10. import { TabPanel, TabContext, TabList } from '@mui/lab';
  11. import { useEffect, useState } from "react";
  12. import { useNavigate } from "react-router-dom";
  13. import * as React from "react";
  14. import * as HttpUtils from "../../../utils/HttpUtils";
  15. import * as UrlUtils from "../../../utils/ApiPathConst";
  16. import Loadable from 'components/Loadable';
  17. import { lazy } from 'react';
  18. const BaseGrid = Loadable(lazy(() => import('./BaseGrid')));
  19. const PendingPaymentTab = Loadable(lazy(() => import('./PendingPaymentTab')));
  20. const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent')));
  21. const SearchTab = Loadable(lazy(() => import('./SearchPublicNoticeTab')));
  22. import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'
  23. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  24. const PublicNotice = () => {
  25. const [submittedList, setSubmittedList] = useState([]);
  26. const [inProgressList, setInProgressList] = useState([]);
  27. const [pendingPaymentList, setPendingPaymentList] = useState([]);
  28. const [pendingPublishList, setPendingPublishList] = useState([]);
  29. const [isLoading, setLoding] = useState(true);
  30. const [selectedTab, setSelectedTab] = useState("1");
  31. const navigate = useNavigate();
  32. const BackgroundHead = {
  33. backgroundImage: `url(${titleBackgroundImg})`,
  34. width: '100%',
  35. height: '100%',
  36. backgroundSize:'cover'
  37. }
  38. useEffect(() => {
  39. loadData();
  40. }, []);
  41. const reloadPage = () => {
  42. window.location.reload(false);
  43. }
  44. const loadData = () => {
  45. setLoding(true);
  46. HttpUtils.get({
  47. url: `${UrlUtils.GET_PUBLIC_NOTICE_LIST_ListByStatus}`,
  48. onSuccess: function (response) {
  49. setSubmittedList(response["submitted"]);
  50. setInProgressList(response["inProgress"]);
  51. setPendingPaymentList(response["pendingPayment"]);
  52. setPendingPublishList(response["pendingPublish"]);
  53. }
  54. });
  55. };
  56. useEffect(() => {
  57. setLoding(false);
  58. }, [submittedList]);
  59. const handleChange = (event, newValue) => {
  60. setSelectedTab(newValue);
  61. }
  62. const onBtnClick = () => {
  63. navigate('/publicNotice/apply')
  64. }
  65. return (
  66. isLoading ?
  67. <LoadingComponent />
  68. :
  69. <Grid container >
  70. <Grid item xs={12}>
  71. <div style={BackgroundHead}>
  72. <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center">
  73. <Typography ml={15} color='#FFF' variant="h4">我的公共啟事</Typography>
  74. </Stack>
  75. </div>
  76. </Grid>
  77. <Grid item xs={12} mt={1} >
  78. <Stack direction="row" justifyContent="flex-end" alignItems="center">
  79. <Box sx={{mr:{md:"47px"}}}>
  80. <Button variant="contained" onClick={() => { onBtnClick() }}>申請公共啟事</Button>
  81. </Box>
  82. </Stack>
  83. </Grid>
  84. {/*col 2*/}
  85. <Grid item xs={12} sx={{minHeight: '75vh'}}>
  86. <TabContext value={selectedTab}>
  87. <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
  88. <TabList onChange={handleChange} aria-label="lab API tabs example">
  89. <Tab label={"已提交(" + submittedList.length + ")"} value="1" />
  90. <Tab label={"處理中(" + inProgressList.length + ")"} value="2" />
  91. <Tab label={"待付款(" + pendingPaymentList.length + ")"} value="3" />
  92. <Tab label={"待發佈(" + pendingPublishList.length + ")"} value="4" />
  93. <Tab label="搜尋申請記錄" value="5" />
  94. </TabList>
  95. </Box>
  96. <TabPanel value="1">
  97. <BaseGrid
  98. rows={submittedList}
  99. reloadFunction={reloadPage}
  100. />
  101. </TabPanel>
  102. <TabPanel value="2">
  103. <BaseGrid
  104. rows={inProgressList}
  105. reloadFunction={reloadPage}
  106. />
  107. </TabPanel>
  108. <TabPanel value="3">
  109. <PendingPaymentTab
  110. rows={pendingPaymentList}
  111. reloadFunction={reloadPage}
  112. />
  113. </TabPanel>
  114. <TabPanel value="4">
  115. <BaseGrid
  116. rows={pendingPublishList}
  117. reloadFunction={reloadPage}
  118. />
  119. </TabPanel>
  120. <TabPanel value="5">
  121. <SearchTab
  122. rows={pendingPublishList}
  123. reloadFunction={reloadPage}
  124. />
  125. </TabPanel>
  126. </TabContext>
  127. </Grid>
  128. </Grid>
  129. );
  130. };
  131. export default PublicNotice;