Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

315 linhas
15 KiB

  1. // material-ui
  2. import { Grid, Typography, Stack, Box, Button, Tab } from '@mui/material';
  3. import { TabPanel, TabContext, TabList } from '@mui/lab';
  4. import { useEffect, useState } from "react";
  5. import * as React from "react";
  6. //import axios from "axios";
  7. import * as HttpUtils from "utils/HttpUtils";
  8. import { useParams } from "react-router-dom";
  9. import FileList from "components/FileList"
  10. import MainCard from "components/MainCard";
  11. import * as UrlUtils from "utils/ApiPathConst";
  12. import * as DateUtils from 'utils/DateUtils';
  13. import Loadable from 'components/Loadable';
  14. import { lazy } from 'react';
  15. const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent')));
  16. const UserInformationCard = Loadable(lazy(() => import('./UserInformationCard_Organization')));
  17. const UserInformationPubCard = Loadable(lazy(() => import('./UserInformationCard_Organization_Pub')));
  18. import ForwardIcon from '@mui/icons-material/Forward';
  19. import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'
  20. import { useNavigate } from 'react-router-dom';
  21. import * as ComboData from "utils/ComboData";
  22. import {getObjectByType} from "utils/CommonFunction";
  23. const LoginGrid = Loadable(React.lazy(() => import('./LoginGrid')));
  24. const BackgroundHead = {
  25. backgroundImage: `url(${titleBackgroundImg})`,
  26. width: '100%',
  27. height: '100%',
  28. backgroundSize: 'contain',
  29. backgroundRepeat: 'no-repeat',
  30. backgroundColor: '#0C489E',
  31. backgroundPosition: 'right'
  32. }
  33. import {
  34. isGLDLoggedIn,
  35. isORGLoggedIn,
  36. isINDLoggedIn
  37. } from "utils/Utils";
  38. import {FormattedMessage, useIntl} from "react-intl";
  39. import usePageTitle from "components/usePageTitle";
  40. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  41. const UserMaintainPage_Organization = () => {
  42. usePageTitle("userProfile");
  43. const params = useParams();
  44. const navigate = useNavigate();
  45. const [userData, setUserData] = useState({})
  46. const [orgData, setOrgData] = useState([])
  47. const [isLoading, setLoding] = useState(true);
  48. const intl = useIntl();
  49. const { locale } = intl;
  50. const [selectedTab, setSelectedTab] = React.useState("1");
  51. const isPrimaryLocale = locale === 'en' ?"Yes":locale === 'zh-HK' ?"是":"是";
  52. const notPrimaryLocale = locale === 'en' ?"No":locale === 'zh-HK' ?"否":"否";
  53. const reqIdRef = React.useRef(0);
  54. // const _sx = {
  55. // ml: 3,
  56. // mb: 3,
  57. // mt: 3,
  58. // mr: 6,
  59. // padding: "4 2 4 2",
  60. // boxShadow: 1,
  61. // border: 1,
  62. // borderColor: '#DDD',
  63. // '& .MuiDataGrid-cell': {
  64. // borderTop: 1,
  65. // borderBottom: 1,
  66. // borderColor: "#EEE"
  67. // },
  68. // '& .MuiDataGrid-footerContainer': {
  69. // border: 1,
  70. // borderColor: "#EEE"
  71. // }
  72. // }
  73. const handleChange = (event, newValue) => {
  74. setSelectedTab(newValue);
  75. }
  76. useEffect(() => {
  77. // console.log(userData);
  78. if (isINDLoggedIn()){
  79. navigate('/dashboard');
  80. }else{
  81. loadData();
  82. }
  83. }, []);
  84. useEffect(() => {
  85. if (!Array.isArray(orgData) || orgData.length === 0) return;
  86. setUserData(prev => {
  87. if (!prev?.orgId) return prev;
  88. // if already an object, keep it (or re-find to ensure same reference as option)
  89. const orgIdValue = typeof prev.orgId === "object" ? prev.orgId.id : prev.orgId;
  90. const found = orgData.find(o => o.id === orgIdValue);
  91. if (!found) return prev;
  92. // avoid unnecessary state updates
  93. if (prev.orgId === found) return prev;
  94. return { ...prev, orgId: found };
  95. });
  96. }, [orgData, userData?.orgId]);
  97. // useEffect(() => {
  98. // // console.log(userData);
  99. // loadData();
  100. // }, [locale]);
  101. // const reloadPage=()=>{
  102. // window.location.reload(false);
  103. // }
  104. const loadData = () => {
  105. const reqId = ++reqIdRef.current;
  106. setLoding(true);
  107. if (isGLDLoggedIn()){
  108. HttpUtils.get({
  109. url: `${UrlUtils.GET_ORG_USER_PATH}/${params.id}`,
  110. onSuccess: function (response) {
  111. // console.log(response)
  112. if (response.data.orgId != null) {
  113. // console.log("1a")
  114. response.data["addressBus"] = response.orgDetail.data["addressTemp"];
  115. response.data["orgContactTel"] = response.orgDetail.data["contactTel"];
  116. response.data["orgFaxNo"] = response.orgDetail.data["faxNo"];
  117. response.data["contactTel"] = JSON.parse(response.data["contactTel"]);
  118. response.data["faxNo"] = JSON.parse(response.data["faxNo"]);
  119. response.data["brExpiryDate"] = response.orgDetail.data.brExpiryDate ? DateUtils.dateValue(response.orgDetail.data.brExpiryDate) : "";
  120. response.data["brNo"] = response.orgDetail.data.brNo;
  121. response.data["enCompanyName"] = response.orgDetail.data.enCompanyName;
  122. response.data["chCompanyName"] = response.orgDetail.data.chCompanyName;
  123. response.data["chCompanyName"] = response.orgDetail.data.chCompanyName;
  124. } else {
  125. // console.log("1b")
  126. response.data["addressBus"] = JSON.parse(response.data["addressBus"]);
  127. response.data["contactTel"] = JSON.parse(response.data["contactTel"]);
  128. response.data["faxNo"] = JSON.parse(response.data["faxNo"]);
  129. response.data["orgContactTel"] = response.data["contactTel"];
  130. response.data["orgFaxNo"] = response.data["faxNo"];
  131. response.data["brExpiryDate"] = response.data.brExpiryDate ? DateUtils.dateValue(response.data.brExpiryDate) : "";
  132. }
  133. // console.log("2")
  134. // console.log(response.data)
  135. let createDate = DateUtils.datetimeStr(response.data.created);
  136. let modifiedBy = DateUtils.datetimeStr(response.data.modified) + ", " + response.data.modifiedBy;
  137. response.data["createDate"] = createDate;
  138. response.data["modifieDate"] = modifiedBy;
  139. response.data["verifiedStatus"] = response.data.verifiedBy ? DateUtils.datetimeStr(response.data.verifiedDate) + ", " + response.data.verifiedByName : "Not Verified";
  140. response.data["lastLoginDate"] = response.data.lastLogin ? DateUtils.datetimeStr(response.data.lastLoginDate) : "";
  141. response.data["country"] = getObjectByType(ComboData.country, "type", response.data.addressBus?.country);
  142. response.data["district"] = getObjectByType(ComboData.district, "type", response.data.addressBus?.district);
  143. response.data["addressLine1"] = response.data.addressBus?.addressLine1;
  144. response.data["addressLine2"] = response.data.addressBus?.addressLine2;
  145. response.data["addressLine3"] = response.data.addressBus?.addressLine3;
  146. response.data["phoneNumber"] = response.data.contactTel?.phoneNumber;
  147. response.data["tel_countryCode"] = response.data.contactTel?.countryCode;
  148. response.data["orgPhoneNumber"] = response.data.orgContactTel?.phoneNumber;
  149. response.data["org_tel_countryCode"] = response.data.orgContactTel?.countryCode;
  150. response.data["faxNumber"] = response.data.faxNo?.faxNumber;
  151. response.data["fax_countryCode"] = response.data.faxNo?.countryCode;
  152. response.data["orgFaxNumber"] = response.data.orgFaxNo?.faxNumber;
  153. response.data["org_fax_countryCode"] = response.data.orgFaxNo?.countryCode;
  154. // response.data["status"] = response.data?.locked?"locked":response.data?.status;
  155. response.data["preferLocale"] = getObjectByType(ComboData.Locale, "type", response.data?.preferLocale);
  156. //response.data["orgId"] = response.data.brExpiryDate?DateUtils.dateValue(response.data.brExpiryDate):"";
  157. // console.log("3")
  158. // console.log(response.data)
  159. if (reqId !== reqIdRef.current) return; // ignore stale
  160. setOrgData(response.orgList || []);
  161. setUserData(response.data);
  162. setLoding(false);
  163. }
  164. });
  165. }
  166. if (isORGLoggedIn()){
  167. HttpUtils.get({
  168. url: `${UrlUtils.GET_PUB_ORG_USER_PATH}`,
  169. onSuccess: function (response) {
  170. // console.log(response)
  171. response.data["contactTel"] = JSON.parse(response.data["contactTel"]);
  172. response.data["faxNo"] = JSON.parse(response.data["faxNo"]);
  173. response.data["primaryUser"] = response.data.primaryUser?isPrimaryLocale:notPrimaryLocale;
  174. response.data["phoneNumber"] = response.data.contactTel?.phoneNumber;
  175. response.data["tel_countryCode"] = response.data.contactTel?.countryCode;
  176. response.data["faxNumber"] = response.data.faxNo?.faxNumber;
  177. response.data["fax_countryCode"] = response.data.faxNo?.countryCode;
  178. response.data["preferLocale"] = getObjectByType(ComboData.Locale, "type", response.data?.preferLocale);
  179. //response.data["orgId"] = response.data.brExpiryDate?DateUtils.dateValue(response.data.brExpiryDate):"";
  180. setUserData(response.data);
  181. setOrgData(response.orgList || []);
  182. setLoding(false);
  183. // console.log(response.data)
  184. }
  185. });
  186. }
  187. };
  188. return (
  189. isLoading ?
  190. <Grid container sx={{ minHeight: '87vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center">
  191. <Grid item>
  192. <LoadingComponent />
  193. </Grid>
  194. </Grid>
  195. :
  196. <Grid container sx={{ minHeight: '87vh', backgroundColor: isGLDLoggedIn()?'backgroundColor.default':'#ffffff' }} direction="column">
  197. <Grid item xs={12}>
  198. <div style={BackgroundHead}>
  199. <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center">
  200. {isGLDLoggedIn()?
  201. <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}>
  202. Maintain Organisation User
  203. </Typography>
  204. :
  205. <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}>
  206. <FormattedMessage id="userProfile" />
  207. </Typography>
  208. }
  209. </Stack>
  210. </div>
  211. </Grid>
  212. <Grid item xs={12}>
  213. <Button title={intl.formatMessage({ id: "back" })} aria-label={intl.formatMessage({ id: "back" })} sx={{ ml: 3.5, mt: 2 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate(-1) }}>
  214. <ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} />
  215. </Button>
  216. </Grid>
  217. {/*col 1*/}
  218. <Grid item xs={12} >
  219. <Grid container>
  220. {isGLDLoggedIn()?
  221. <Grid item xs={12} md={12} lg={12}>
  222. <Box xs={12} ml={0} mt={-1} mr={0} sx={{ p: 1, borderRadius: '10px' }}>
  223. <UserInformationCard
  224. userData={userData}
  225. loadDataFun={loadData}
  226. orgData={orgData}
  227. />
  228. </Box>
  229. </Grid>
  230. : isORGLoggedIn()?
  231. <Grid item xs={12} md={12} lg={12}>
  232. <Box xs={12} ml={0} mt={-1} mr={0} sx={{ p: 1, borderRadius: '10px' }}>
  233. <UserInformationPubCard
  234. userData={userData}
  235. loadDataFun={loadData}
  236. orgData={orgData}
  237. />
  238. </Box>
  239. </Grid>
  240. :null
  241. }
  242. {isGLDLoggedIn()?
  243. <Grid item xs={12} md={12} lg={12}>
  244. <MainCard elevation={0} border={false} content={false} sx={{maxWidth: '100%', mr:2, width: "-webkit-fill-available"}}>
  245. <TabContext value={selectedTab}>
  246. <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
  247. <TabList variant="scrollable" onChange={handleChange} aria-label="lab API tabs example">
  248. <Tab label="Attachments" value="1" />
  249. <Tab label="Login Log" value="2" />
  250. </TabList>
  251. </Box>
  252. <TabPanel value="1">
  253. <FileList
  254. refId={params.id}
  255. refType={"identification"}
  256. />
  257. </TabPanel>
  258. <TabPanel value="2">
  259. <LoginGrid
  260. u1 = {params.id}
  261. />
  262. </TabPanel>
  263. </TabContext>
  264. </MainCard>
  265. <br />
  266. </Grid>
  267. :null
  268. }
  269. </Grid>
  270. </Grid>
  271. {/*col 2*/}
  272. </Grid>
  273. );
  274. };
  275. export default UserMaintainPage_Organization;