Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 

508 rindas
20 KiB

  1. // material-ui
  2. import {
  3. Grid, Typography, Button,
  4. } from '@mui/material';
  5. import MainCard from "../../components/MainCard";
  6. import * as React from "react";
  7. import {useEffect, useState} from "react";
  8. import * as FieldUtils from "../../utils/FieldUtils";
  9. import * as HttpUtils from '../../utils/HttpUtils';
  10. import * as UrlUtils from "../../utils/ApiPathConst";
  11. import * as ComboData from "../../utils/ComboData";
  12. import { useFormik } from 'formik';
  13. import * as yup from 'yup';
  14. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  15. const UserInformationCard_Organization = ({userData, loadDataFun, orgData}) => {
  16. const [currentUserData, setCurrentUserData] = useState(userData);
  17. const [editMode, setEditMode] = useState(false);
  18. const formik = useFormik({
  19. enableReinitialize:true,
  20. initialValues:currentUserData,
  21. validationSchema:yup.object().shape({
  22. enName: yup.string().max(255).required('請輸入英文姓名'),
  23. chName: yup.string().max(255),
  24. enCompanyName: yup.string().max(255),
  25. chCompanyName: yup.string().max(255),
  26. addressLine1: yup.string().max(255).required('請輸入第一行地址'),
  27. addressLine2: yup.string().max(255),
  28. addressLine3: yup.string().max(255),
  29. emailBus: yup.string().max(255).required('請輸入電郵'),
  30. tel_countryCode: yup.string().min(3,'請輸入3位數字').required('請輸入國際區號'),
  31. fax_countryCode: yup.string().min(3,'請輸入3位數字'),
  32. phoneNumber: yup.string().min(8,'請輸入8位數字').required('請輸入聯絡電話'),
  33. faxNumber: yup.string().min(8,'請輸入8位數字'),
  34. brExpiryDate: yup.string().min(8,'請輸入商業登記證有效日期'),
  35. brNo: yup.string().min(8,'請輸入商業登記證號碼'),
  36. }),
  37. onSubmit:(values)=>{
  38. HttpUtils.post({
  39. url: UrlUtils.POST_IND_USER+"/"+userData.id,
  40. params: {
  41. chName: values.chName,
  42. enName: values.enName,
  43. contactTel: {
  44. countryCode: values.tel_countryCode,
  45. phoneNumber: values.phoneNumber
  46. },
  47. faxNo: {
  48. countryCode: values.fax_countryCode,
  49. faxNumber: values.faxNumber
  50. },
  51. addressBus: {
  52. country: values.country,
  53. district: values.district,
  54. addressLine1: values.addressLine1,
  55. addressLine2: values.addressLine2,
  56. addressLine3: values.addressLine3,
  57. },
  58. identification: values.identification,
  59. emailBus:values.emailBus,
  60. contactPerson: values.contactPerson,
  61. enCompanyName: values.enCompanyName,
  62. chCompanyName: values.chCompanyName,
  63. orgId: values.orgId,
  64. brNo: values.brNo,
  65. brExpiryDate: values.brExpiryDate,
  66. },
  67. onSuccess: function(){
  68. loadDataFun();
  69. }
  70. });
  71. }
  72. });
  73. useEffect(() => {
  74. setCurrentUserData(userData);
  75. }, [userData]);
  76. const onEditClick = () => {
  77. setEditMode(true);
  78. };
  79. const createOrgClick = () => {
  80. window.open("/org/fromUser/"+userData.id, "_blank", "noreferrer");
  81. window.addEventListener("focus", onFocus)
  82. };
  83. const onFocus=()=>{
  84. loadDataFun();
  85. window.removeEventListener("focus", onFocus)
  86. }
  87. const onVerifiedClick = () => {
  88. HttpUtils.get({
  89. url: UrlUtils.GET_IND_USER_VERIFY+"/"+userData.id,
  90. onSuccess: function(){
  91. loadDataFun();
  92. }
  93. });
  94. };
  95. const doLock = () => {
  96. HttpUtils.get({
  97. url: UrlUtils.GET_USER_LOCK+"/"+userData.id,
  98. onSuccess: function(){
  99. loadDataFun();
  100. }
  101. });
  102. };
  103. const doUnlock = () => {
  104. HttpUtils.get({
  105. url: UrlUtils.GET_USER_UNLOCK+"/"+userData.id,
  106. onSuccess: function(){
  107. loadDataFun();
  108. }
  109. });
  110. };
  111. return (
  112. <MainCard elevation={0}
  113. border={false}
  114. content={false}
  115. >
  116. <Typography variant="h5" sx={{mt: 3, ml: 3, mb: 1}}>
  117. Information
  118. </Typography>
  119. <form onSubmit={formik.handleSubmit}>
  120. {/*top button*/}
  121. <Grid item s={12} md={12} lg={12} sx={{mb: 3}} alignItems={"start"} justifyContent="center">
  122. <Grid container maxWidth justifyContent="flex-start">
  123. {editMode?
  124. <>
  125. <Grid item sx={{ml: 3, mr: 3}}>
  126. <Button
  127. size="large"
  128. variant="contained"
  129. onClick={loadDataFun}
  130. sx={{
  131. textTransform: 'capitalize',
  132. alignItems: 'end'
  133. }}
  134. >
  135. Cancel Edit
  136. </Button>
  137. </Grid>
  138. <Grid item sx={{ml: 3, mr: 3}}>
  139. <Button
  140. size="large"
  141. variant="contained"
  142. type="submit"
  143. color="success"
  144. sx={{
  145. textTransform: 'capitalize',
  146. alignItems: 'end'
  147. }}
  148. >
  149. Save
  150. </Button>
  151. </Grid>
  152. </>
  153. :
  154. <>
  155. <Grid item sx={{ml: 3, mr: 3}}>
  156. <Button
  157. size="large"
  158. variant="contained"
  159. sx={{
  160. textTransform: 'capitalize',
  161. alignItems: 'end'
  162. }}
  163. onClick={onEditClick}
  164. >
  165. Edit
  166. </Button>
  167. </Grid>
  168. </>
  169. }
  170. </Grid>
  171. </Grid>
  172. {/*end top button*/}
  173. <Grid container spacing={1}>
  174. {FieldUtils.getTextField({
  175. label:"Username:",
  176. valueName:"username",
  177. disabled:true,
  178. form: formik
  179. })}
  180. {FieldUtils.getTextField({
  181. label:"English Name:",
  182. valueName:"enName",
  183. disabled:(!editMode),
  184. form: formik
  185. })}
  186. {FieldUtils.getTextField({
  187. label:"Created Date:",
  188. valueName:"createDate",
  189. disabled:true,
  190. form: formik
  191. })}
  192. {FieldUtils.getTextField({
  193. label:"Chinese Name:",
  194. valueName:"chName",
  195. disabled:(!editMode),
  196. form: formik
  197. })}
  198. {FieldUtils.getPhoneField({
  199. label:"Contact Tel:",
  200. valueName:{
  201. code: "tel_countryCode",
  202. num:"phoneNumber"
  203. },
  204. disabled:(!editMode),
  205. form: formik
  206. })}
  207. {FieldUtils.getTextField({
  208. label:"Last Updated:",
  209. valueName:"modifieDate",
  210. disabled:true,
  211. form: formik
  212. })}
  213. {FieldUtils.getComboField({
  214. label:"Organization:",
  215. valueName:"orgId",
  216. disabled:(!editMode),
  217. dataList: orgData,
  218. filterOptions:(options, state)=>{
  219. if(!state || !state.inputValue) return options;
  220. let searchStr = state.inputValue.toLowerCase().toLowerCase().trim();
  221. const displayOptions = options.filter((option) =>{
  222. let brNo=option.brNo.toLowerCase().trim();
  223. let enCompanyName=option.enCompanyName?option.enCompanyName.toLowerCase().trim():"";
  224. let chCompanyName=option.chCompanyName?option.chCompanyName.toLowerCase().trim():"";
  225. return brNo.includes(searchStr) || enCompanyName.includes(searchStr)|| chCompanyName.includes(searchStr);
  226. },
  227. );
  228. return displayOptions;
  229. },
  230. getOptionLabel:(item) => item?typeof item==='number'?item+"":(item["brNo"]?item["brNo"]+"-"+item["enCompanyName"]:""):"",
  231. isOptionEqualToValue:(option, newValue, setValue, setInputValue) => {
  232. if(option.id == newValue){
  233. setValue(option);
  234. setInputValue(option["brNo"]+"-"+option["enCompanyName"]);
  235. return true;
  236. }
  237. return option == newValue;
  238. },
  239. onInputChange:(event, newValue, setInputValue)=>{
  240. if(newValue != null){
  241. setInputValue(newValue);
  242. }
  243. },
  244. onChange:(event, newValue)=>{
  245. if(newValue == null){
  246. formik.setFieldValue("orgId","");
  247. return;
  248. }
  249. formik.setFieldValue("orgId",newValue.id);
  250. },
  251. form: formik
  252. })}
  253. {FieldUtils.getTextField({
  254. label:"Email:",
  255. valueName:"emailBus",
  256. disabled:(!editMode),
  257. form: formik
  258. })}
  259. <Grid item lg={4}>
  260. <Grid container alignItems={"center"}>
  261. <Grid item xs={4} s={4} md={4} lg={4}
  262. sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}>
  263. Verified:
  264. </Grid>
  265. {
  266. currentUserData.verifiedBy || editMode?
  267. <Grid item xs={6}>
  268. {FieldUtils.initField({
  269. valueName:"verifiedStatus",
  270. disabled:true,
  271. form: formik,
  272. })}
  273. </Grid>
  274. :
  275. <>
  276. <Grid item xs={4}>
  277. {FieldUtils.initField({
  278. valueName:"verifiedStatus",
  279. disabled:true,
  280. form: formik,
  281. })}
  282. </Grid>
  283. <Grid item xs={1}>
  284. <Button
  285. size="large"
  286. variant="contained"
  287. sx={{
  288. textTransform: 'capitalize',
  289. alignItems: 'end'
  290. }}
  291. onClick={onVerifiedClick}
  292. >
  293. Verify
  294. </Button>
  295. </Grid>
  296. </>
  297. }
  298. </Grid>
  299. </Grid>
  300. {FieldUtils.getTextField({
  301. label:"Last Login:",
  302. valueName:"lastLoginDate",
  303. disabled:true,
  304. form: formik
  305. })}
  306. <Grid item lg={4}>
  307. <Grid container alignItems={"center"}>
  308. <Grid item xs={4} s={4} md={4} lg={4}
  309. sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}>
  310. Status:
  311. </Grid>
  312. {
  313. editMode?
  314. <Grid item xs={7} s={7} md={7} lg={6}>
  315. {FieldUtils.initField({
  316. valueName:"status",
  317. disabled:true,
  318. form: formik,
  319. })}
  320. </Grid>
  321. :
  322. <>
  323. <Grid item lg={4}>
  324. {FieldUtils.initField({
  325. valueName:"status",
  326. disabled:true,
  327. form: formik,
  328. })}
  329. </Grid>
  330. {formik.values.locked?
  331. <Grid lg={1}>
  332. <Button
  333. size="large"
  334. variant="contained"
  335. color="success"
  336. sx={{
  337. textTransform: 'capitalize',
  338. alignItems: 'end'
  339. }}
  340. onClick={doUnlock}
  341. >
  342. Active
  343. </Button>
  344. </Grid>
  345. :
  346. <Grid item lg={1}>
  347. <Button
  348. size="large"
  349. variant="contained"
  350. color="error"
  351. sx={{
  352. textTransform: 'capitalize',
  353. alignItems: 'end'
  354. }}
  355. onClick={doLock}
  356. >
  357. Lock
  358. </Button>
  359. </Grid>
  360. }
  361. </>
  362. }
  363. </Grid>
  364. </Grid>
  365. <Grid container spacing={1}>
  366. <Grid item lg={1} >
  367. <Typography variant="h5" sx={{mt: 3, ml: 3, mb: 1}}>
  368. Organization
  369. </Typography>
  370. </Grid>
  371. <Grid item lg={2}>
  372. <Button variant="contained"
  373. onClick={createOrgClick}
  374. >
  375. Create Organization
  376. </Button>
  377. </Grid>
  378. </Grid>
  379. <Grid container spacing={1}>
  380. {FieldUtils.getTextField({
  381. label:"Org.Name (English):",
  382. valueName:"enCompanyName",
  383. disabled:(!editMode),
  384. form: formik
  385. })}
  386. {FieldUtils.getTextField({
  387. label:"Org.Name (Chinese):",
  388. valueName:"chCompanyName",
  389. disabled:(!editMode),
  390. form: formik
  391. })}
  392. {FieldUtils.getTextField({
  393. label:"BR No.:",
  394. valueName:"brNo",
  395. disabled:(!editMode),
  396. form: formik
  397. })}
  398. {FieldUtils.getTextField({
  399. label:"Contact Person:",
  400. valueName:"contactPerson",
  401. disabled:(!editMode),
  402. form: formik
  403. })}
  404. {FieldUtils.getPhoneField({
  405. label:"Fax No.:",
  406. valueName:{
  407. code: "fax_countryCode",
  408. num:"faxNumber"
  409. },
  410. disabled:(!editMode),
  411. form: formik
  412. })}
  413. {FieldUtils.getDateField({
  414. label:"BR Expiry Date.:",
  415. valueName:"brExpiryDate",
  416. disabled:(!editMode),
  417. form: formik
  418. })}
  419. {FieldUtils.getAddressField({
  420. label:"Address:",
  421. valueName:["addressLine1","addressLine2","addressLine3"],
  422. disabled:(!editMode),
  423. form: formik})}
  424. {FieldUtils.getComboField({
  425. label:"District:",
  426. valueName:"district",
  427. dataList: ComboData.district,
  428. disabled:(!editMode),
  429. form: formik})}
  430. {FieldUtils.getComboField({
  431. label:"Country:",
  432. valueName:"country",
  433. dataList: ComboData.country,
  434. disabled:(!editMode),
  435. form: formik
  436. })}
  437. </Grid>
  438. </Grid>
  439. </form>
  440. </MainCard>
  441. );
  442. };
  443. export default UserInformationCard_Organization;