選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

208 行
8.6 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. import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst";
  24. import {ThemeProvider} from "@emotion/react";
  25. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  26. const PublicNotice = () => {
  27. const [submittedList, setSubmittedList] = useState([]);
  28. const [pendingPaymentList, setPendingPaymentList] = useState([]);
  29. const [pendingPublishList, setPendingPublishList] = useState([]);
  30. const [isLoading, setLoding] = useState(true);
  31. const [selectedTab, setSelectedTab] = useState("1");
  32. const navigate = useNavigate();
  33. const _sx = {
  34. padding: "4 2 4 2",
  35. boxShadow: 1,
  36. border: 1,
  37. borderColor: '#DDD',
  38. '& .MuiDataGrid-cell': {
  39. borderTop: 1,
  40. borderBottom: 1,
  41. borderColor: "#EEE"
  42. },
  43. '& .MuiDataGrid-footerContainer': {
  44. border: 1,
  45. borderColor: "#EEE"
  46. },
  47. '& .MuiTabPanel-root': {
  48. padding: '0px',
  49. }
  50. }
  51. const BackgroundHead = {
  52. backgroundImage: `url(${titleBackgroundImg})`,
  53. width: '100%',
  54. height: '100%',
  55. backgroundSize: 'contain',
  56. backgroundRepeat: 'no-repeat',
  57. backgroundColor: '#0C489E',
  58. backgroundPosition: 'right'
  59. }
  60. useEffect(() => {
  61. loadData();
  62. }, []);
  63. const reloadPage = () => {
  64. window.location.reload(false);
  65. }
  66. const loadData = () => {
  67. setLoding(true);
  68. HttpUtils.get({
  69. url: `${UrlUtils.GET_PUBLIC_NOTICE_LIST_ListByStatus}`,
  70. onSuccess: function (response) {
  71. setSubmittedList(response["submitted"]);
  72. setPendingPaymentList(response["pendingPayment"]);
  73. setPendingPublishList(response["pendingPublish"]);
  74. }
  75. });
  76. };
  77. useEffect(() => {
  78. setLoding(false);
  79. }, [submittedList]);
  80. const handleChange = (event, newValue) => {
  81. setSelectedTab(newValue);
  82. }
  83. const onBtnClick = () => {
  84. navigate('/publicNotice/apply')
  85. }
  86. return (
  87. isLoading ?
  88. <LoadingComponent />
  89. :
  90. <Grid container>
  91. <Grid item xs={12}>
  92. <div style={BackgroundHead}>
  93. <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center">
  94. <Typography ml={15} color='#FFF' variant="h4">我的公共啟事</Typography>
  95. </Stack>
  96. </div>
  97. </Grid>
  98. <Grid item xs={12} mt={1} sx={{ mt: 3}} >
  99. <Stack direction="row" justifyContent="flex-end" alignItems="center">
  100. <ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}>
  101. <Box sx={{ mr: { md: "47px" } }}>
  102. <Button variant="contained" onClick={() => { onBtnClick() }}><Typography variant="pnspsButtonText">申請公共啟事</Typography></Button>
  103. </Box>
  104. </ThemeProvider>
  105. </Stack>
  106. </Grid>
  107. {/*col 2*/}
  108. {
  109. JSON.parse(localStorage.getItem('userData')).creditor ? (
  110. <Grid item xs={12} sx={{ minHeight: '75vh', maxWidth: '1%', backgroundColor: "#fff", mt: 3, mr: 3, ml: 3, mb: 3, ..._sx }}>
  111. <TabContext value={selectedTab}>
  112. <Box sx={{ borderBottom: 1, borderColor: 'divider', overflowX: 'auto' }}>
  113. <TabList onChange={handleChange} aria-label="lab API tabs example" sx={{ display: 'flex', flexDirection: 'row' }}>
  114. <Tab label={"處理中 (" + submittedList?.length + ")"} value="1" />
  115. <Tab label={"待發布 (" + pendingPublishList?.length + ")"} value="3" />
  116. <Tab label={"待付款 (" + pendingPaymentList?.length + ")"} value="4" />
  117. <Tab label="搜尋申請記錄" value="5" />
  118. </TabList>
  119. </Box>
  120. <TabPanel value="1">
  121. <BaseGrid
  122. rows={submittedList}
  123. reloadFunction={reloadPage}
  124. />
  125. </TabPanel>
  126. <TabPanel value="3">
  127. <BaseGrid
  128. rows={pendingPublishList}
  129. reloadFunction={reloadPage}
  130. />
  131. </TabPanel>
  132. <TabPanel value="4">
  133. <BaseGrid
  134. rows={pendingPaymentList}
  135. reloadFunction={reloadPage}
  136. />
  137. </TabPanel>
  138. <TabPanel value="5">
  139. <SearchTab
  140. rows={pendingPublishList}
  141. reloadFunction={reloadPage}
  142. />
  143. </TabPanel>
  144. </TabContext>
  145. </Grid>
  146. ) : (
  147. <Grid item xs={12} sx={{ minHeight: '75vh', maxWidth: '95%',backgroundColor: "#fff", mt: 3, mr: 3, ml: 3, mb: 3, ..._sx }}>
  148. <TabContext value={selectedTab}>
  149. <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
  150. <TabList onChange={handleChange} aria-label="lab API tabs example">
  151. <Tab label={"處理中 (" + submittedList.length + ")"} value="1" />
  152. <Tab label={"待付款 (" + pendingPaymentList.length + ")"} value="3" />
  153. <Tab label={"待發布 (" + pendingPublishList.length + ")"} value="4" />
  154. <Tab label="搜尋申請記錄" value="5" />
  155. </TabList>
  156. </Box>
  157. <TabPanel value="1">
  158. <BaseGrid
  159. rows={submittedList}
  160. reloadFunction={reloadPage}
  161. />
  162. </TabPanel>
  163. <TabPanel value="3">
  164. <PendingPaymentTab
  165. rows={pendingPaymentList}
  166. reloadFunction={reloadPage}
  167. />
  168. </TabPanel>
  169. <TabPanel value="4">
  170. <BaseGrid
  171. rows={pendingPublishList}
  172. reloadFunction={reloadPage}
  173. />
  174. </TabPanel>
  175. <TabPanel value="5">
  176. <SearchTab
  177. rows={pendingPublishList}
  178. reloadFunction={reloadPage}
  179. />
  180. </TabPanel>
  181. </TabContext>
  182. </Grid>
  183. )
  184. }
  185. </Grid>
  186. );
  187. };
  188. export default PublicNotice;