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.
 
 

133 line
4.6 KiB

  1. // material-ui
  2. import {
  3. Grid,
  4. Typography,
  5. Tab,
  6. Box,
  7. Button
  8. } from '@mui/material';
  9. import {TabPanel, TabContext, TabList } from '@mui/lab';
  10. import {useEffect, useState} from "react";
  11. import {useNavigate} from "react-router-dom";
  12. import * as React from "react";
  13. import * as HttpUtils from "../../../utils/HttpUtils";
  14. import * as UrlUtils from "../../../utils/ApiPathConst";
  15. import Loadable from 'components/Loadable';
  16. import { lazy } from 'react';
  17. const SubmittedTab = Loadable(lazy(() => import('./SubmittedTab')));
  18. const InProgressTab = Loadable(lazy(() => import('./InProgressTab')));
  19. const PendingPaymentTab = Loadable(lazy(() => import('./PendingPaymentTab')));
  20. const PendingPublishTab = Loadable(lazy(() => import('./PendingPublishTab')));
  21. const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent')));
  22. const SearchTab = Loadable(lazy(() => import('./SearchTab')));
  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. useEffect(()=>{
  33. loadData();
  34. },[]);
  35. const reloadPage=()=>{
  36. window.location.reload(false);
  37. }
  38. const loadData = ()=>{
  39. setLoding(true);
  40. HttpUtils.get({
  41. url: `${UrlUtils.GET_PUBLIC_NOTICE_LIST_ListByStatus}`,
  42. onSuccess: function(response){
  43. setSubmittedList(response["submitted"]);
  44. setInProgressList(response["inProgress"]);
  45. setPendingPaymentList(response["pendingPayment"]);
  46. setPendingPublishList(response["pendingPublish"]);
  47. }
  48. });
  49. };
  50. useEffect(() => {
  51. setLoding(false);
  52. }, [submittedList]);
  53. const handleChange = (event, newValue)=>{
  54. setSelectedTab(newValue);
  55. }
  56. const onBtnClick=()=>{
  57. navigate('/publicNotice/apply')
  58. }
  59. return (
  60. isLoading ?
  61. <LoadingComponent/>
  62. :
  63. <Grid container rowSpacing={4.5} columnSpacing={2.75}>
  64. <Grid item xs={12} sx={{mb: -2.25}}>
  65. <Typography variant="h5">我的公共啟事</Typography>
  66. </Grid>
  67. <Grid item xs={12} sx={{mb: -2.25}}>
  68. <Button variant="contained" onClick={()=>{onBtnClick()}}>申請公共啟事</Button>
  69. </Grid>
  70. {/*col 2*/}
  71. <Grid item xs={12}>
  72. <TabContext value={selectedTab}>
  73. <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
  74. <TabList onChange={handleChange} aria-label="lab API tabs example">
  75. <Tab label={"已提交("+submittedList.length+")"} value="1" />
  76. <Tab label={"處理中("+inProgressList.length+")"} value="2" />
  77. <Tab label={"待付款("+pendingPaymentList.length+")"} value="3" />
  78. <Tab label={"待發佈("+pendingPublishList.length+")"} value="4" />
  79. <Tab label="搜尋申請記錄" value="5" />
  80. </TabList>
  81. </Box>
  82. <TabPanel value="1">
  83. <SubmittedTab
  84. rows={submittedList}
  85. reloadFunction={reloadPage}
  86. />
  87. </TabPanel>
  88. <TabPanel value="2">
  89. <InProgressTab
  90. rows={inProgressList}
  91. reloadFunction={reloadPage}
  92. />
  93. </TabPanel>
  94. <TabPanel value="3">
  95. <PendingPaymentTab
  96. rows={pendingPaymentList}
  97. reloadFunction={reloadPage}
  98. />
  99. </TabPanel>
  100. <TabPanel value="4">
  101. <PendingPublishTab
  102. rows={pendingPublishList}
  103. reloadFunction={reloadPage}
  104. />
  105. </TabPanel>
  106. <TabPanel value="5">
  107. <SearchTab
  108. rows={pendingPublishList}
  109. reloadFunction={reloadPage}
  110. />
  111. </TabPanel>
  112. </TabContext>
  113. </Grid>
  114. </Grid>
  115. );
  116. };
  117. export default PublicNotice;