Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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