Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

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