diff --git a/src/pages/OrganizationDetailPage/OrganizationCard_loadFromUser.js b/src/pages/OrganizationDetailPage_FromUser/OrganizationCard_loadFromUser.js similarity index 93% rename from src/pages/OrganizationDetailPage/OrganizationCard_loadFromUser.js rename to src/pages/OrganizationDetailPage_FromUser/OrganizationCard_loadFromUser.js index 090d822..119b705 100644 --- a/src/pages/OrganizationDetailPage/OrganizationCard_loadFromUser.js +++ b/src/pages/OrganizationDetailPage_FromUser/OrganizationCard_loadFromUser.js @@ -17,11 +17,11 @@ import {useNavigate} from "react-router-dom"; // ==============================|| DASHBOARD - DEFAULT ||============================== // -const OrganizationCard = ({userData, id}) => { +const OrganizationCard_loadFromUser = ({userData, id}) => { const [currentUserData, setCurrentUserData] = useState(userData); - const from = useForm({defaultValues: userData}); - const {register,reset, handleSubmit} = from; + const form = useForm({defaultValues: userData}); + const {register,reset, handleSubmit} = form; const navigate = useNavigate(); @@ -57,7 +57,8 @@ const OrganizationCard = ({userData, id}) => { }, [currentUserData]); - function onSubmitForm(_formData) { + const onSubmitForm=(_formData)=>{ + console.log(_formData); HttpUtils.post({ url: UrlUtils.POST_ORG_SAVE_PATH, params: { @@ -101,10 +102,29 @@ const OrganizationCard = ({userData, id}) => { Information -
- + + {/*bottom top*/} + + + + + + + + + {/*bottom top*/} { - {/*bottom button*/} - - - - - - - - - + ); }; -export default OrganizationCard; +export default OrganizationCard_loadFromUser; diff --git a/src/pages/OrganizationDetailPage/index_loadFormUser.js b/src/pages/OrganizationDetailPage_FromUser/index.js similarity index 93% rename from src/pages/OrganizationDetailPage/index_loadFormUser.js rename to src/pages/OrganizationDetailPage_FromUser/index.js index 3632d53..96e17cc 100644 --- a/src/pages/OrganizationDetailPage/index_loadFormUser.js +++ b/src/pages/OrganizationDetailPage_FromUser/index.js @@ -12,7 +12,7 @@ import * as UrlUtils from "../../utils/ApiPathConst"; // ==============================|| DASHBOARD - DEFAULT ||============================== // -const OrganizationDetailPage = () => { +const OrganizationDetailPage_FromUser = () => { const params = useParams(); const [formData, setFormData] = useState({}) const [isLoading, setLoding] = useState(true); @@ -57,7 +57,6 @@ const OrganizationDetailPage = () => { @@ -70,4 +69,4 @@ const OrganizationDetailPage = () => { }; -export default OrganizationDetailPage; +export default OrganizationDetailPage_FromUser; diff --git a/src/pages/OrganizationSearchPage/OrganizationTable.js b/src/pages/OrganizationSearchPage/OrganizationTable.js index 5f82703..bc120a8 100644 --- a/src/pages/OrganizationSearchPage/OrganizationTable.js +++ b/src/pages/OrganizationSearchPage/OrganizationTable.js @@ -19,7 +19,7 @@ export default function OrganizationTable({recordList}) { }, [recordList]); const handleActionClick = (id) => () => { - navigate('/orgUser/'+ id); + navigate('/org/'+ id); }; const columns = [ diff --git a/src/pages/pnspsUserDetailPage_Individual/UserInformationCard_Individual.js b/src/pages/pnspsUserDetailPage_Individual/UserInformationCard_Individual.js index 11ac6cc..a686f87 100644 --- a/src/pages/pnspsUserDetailPage_Individual/UserInformationCard_Individual.js +++ b/src/pages/pnspsUserDetailPage_Individual/UserInformationCard_Individual.js @@ -79,6 +79,8 @@ const UserInformationCard_Individual = ({userData,userFile, loadDataFun}) => { userData["faxNumber"] = userData.faxNo?.faxNumber; userData["fax_countryCode"] = userData.faxNo?.countryCode; + userData["lastLoginDate"] = userData.lastLogin?DateUtils.datetimeStr(userData.lastLogin):""; + setIdDocType(userData.idDocType); setDistrict(userData.district); setCountry(userData.country); @@ -92,31 +94,32 @@ const UserInformationCard_Individual = ({userData,userFile, loadDataFun}) => { }, [currentUserData]); - function onSubmitForm() { + function onSubmitForm(_data) { + HttpUtils.post({ url: UrlUtils.POST_IND_USER+"/"+userData.id, params: { - prefix: formik.values.prefix, + prefix: _data.prefix, enName: formik.values.enName, - chName: formik.values.chName, + chName: _data.chName, idDocType: idDocType, contactTel: { - countryCode: formik.values.tel_countryCode, - phoneNumber: formik.values.phoneNumber + countryCode: _data.tel_countryCode, + phoneNumber: _data.phoneNumber }, identification: formik.values.identification, checkDigit: formik.values.checkDigit, faxNo:{ - countryCode: formik.values.fax_countryCode, - faxNumber: formik.values.faxNumber + countryCode: _data.fax_countryCode, + faxNumber: _data.faxNumber }, - emailAddress:formik.values.emailAddress, + emailAddress:_data.emailAddress, address:{ country:country, district:district, - addressLine1: formik.values.addressLine1, - addressLine2: formik.values.addressLine2, - addressLine3: formik.values.addressLine3, + addressLine1: _data.addressLine1, + addressLine2: _data.addressLine2, + addressLine3: _data.addressLine3, }, }, onSuccess: function(){ @@ -645,11 +648,8 @@ const UserInformationCard_Individual = ({userData,userFile, loadDataFun}) => { diff --git a/src/pages/pnspsUserDetailPage_Individual/index.js b/src/pages/pnspsUserDetailPage_Individual/index.js index e2927bd..6d2a4a4 100644 --- a/src/pages/pnspsUserDetailPage_Individual/index.js +++ b/src/pages/pnspsUserDetailPage_Individual/index.js @@ -20,7 +20,6 @@ const UserMaintainPage_Individual = () => { useEffect(()=>{ - console.log(userData); loadData(); },[]); diff --git a/src/pages/pnspsUserDetailPage_Organization/UserInformationCard_Organization.js b/src/pages/pnspsUserDetailPage_Organization/UserInformationCard_Organization.js index 5ea7a8f..ad56319 100644 --- a/src/pages/pnspsUserDetailPage_Organization/UserInformationCard_Organization.js +++ b/src/pages/pnspsUserDetailPage_Organization/UserInformationCard_Organization.js @@ -1,6 +1,7 @@ // material-ui import { - Grid, TextField, Typography, Button + Grid, TextField, Typography, Button, + OutlinedInput, FormHelperText, Autocomplete } from '@mui/material'; import MainCard from "../../components/MainCard"; import * as React from "react"; @@ -9,6 +10,10 @@ import {useEffect, useState} from "react"; import * as DateUtils from '../../utils/DateUtils'; import * as HttpUtils from '../../utils/HttpUtils'; import * as UrlUtils from "../../utils/ApiPathConst"; +import * as ComboData from "../../utils/ComboData"; + +import { useFormik,FormikProvider } from 'formik'; +import * as yup from 'yup'; // ==============================|| DASHBOARD - DEFAULT ||============================== // @@ -19,28 +24,62 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { const [editMode, setEditMode] = useState(false); const [locked, setLocked] = useState(false); + const [district, setDistrict] = useState(null); + const [country, setCountry] = useState(ComboData.country[0]); const from = useForm({defaultValues: userData}); const {register,reset, handleSubmit} = from; + + const formik = useFormik({ + initialValues:(currentUserData), + validationSchema:yup.object().shape({ + + enName: yup.string().max(255).required('請輸入英文姓名'), + enCompanyName: yup.string().max(255).required('請輸入英文名稱'), + chName: yup.string().max(255).required('請輸入中文姓名'), + address1: yup.string().max(255).required('請輸入第一行地址'), + address2: yup.string().max(255).required('請輸入第二行地址'), + address3: yup.string().max(255).required('請輸入第三行地址'), + email: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵'), + emailConfirm: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵').oneOf([yup.ref('email'), null], '請輸入相同電郵'), + phoneCountryCode: yup.string().min(3,'請輸入3位數字').required('請輸入國際區號'), + faxCountryCode: yup.string().min(3,'請輸入3位數字'), + phone: yup.string().min(8,'請輸入8位數字').required('請輸入聯絡電話'), + fax: yup.string().min(8,'請輸入8位數字'), + brExpiryDate: yup.string().min(8,'請輸入商業登記證有效日期'), + brNo: yup.string().min(8,'請輸入商業登記證號碼'), + }) + + }); + + useEffect(() => { let createDate = DateUtils.datetimeStr(userData.created); let modifiedBy = DateUtils.datetimeStr(userData.modified)+", "+userData.modifiedBy; userData["createDate"] = createDate; userData["modifieDate"] = modifiedBy; - userData["verifiedStatus"] = userData.verifiedBy? "Not verify yet":DateUtils.datetimeStr(userData.verifiedDate)+", "+userData.verifiedByName; + userData["verifiedStatus"] = userData.verifiedBy? DateUtils.datetimeStr(userData.verifiedDate)+", "+userData.verifiedByName: "Not verify yet"; + + userData["lastLoginDate"] = userData.lastLogin?DateUtils.datetimeStr(lastLoginDate):""; - userData["country"] = userData.address?.country; - userData["district"] = userData.address?.district; - userData["addressLine1"] = userData.address?.addressLine1; - userData["addressLine2"] = userData.address?.addressLine2; - userData["addressLine3"] = userData.address?.addressLine3; + userData["country"] = userData.addressBus?.country; + userData["district"] = userData.addressBus?.district; + userData["addressLine1"] = userData.addressBus?.addressLine1; + userData["addressLine2"] = userData.addressBus?.addressLine2; + userData["addressLine3"] = userData.addressBus?.addressLine3; userData["phoneNumber"] = userData.contactTel?.phoneNumber; userData["tel_countryCode"] = userData.contactTel?.countryCode; userData["faxNumber"] = userData.faxNo?.faxNumber; userData["fax_countryCode"] = userData.faxNo?.countryCode; + + userData["brExpiryDate"] = userData.brExpiryDate?DateUtils.convertToDate(brExpiryDate):""; + + + setDistrict(userData.district); + setCountry(userData.country); setCurrentUserData(userData); }, [userData]); @@ -51,29 +90,36 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { }, [currentUserData]); - function onSubmitForm(_formData) { + + function onSubmitForm(_data) { HttpUtils.post({ url: UrlUtils.POST_IND_USER+"/"+userData.id, params: { - chName: _formData.chName, - enName: _formData.enName, + chName: _data.chName, + enName: _data.enName, contactTel: { - countryCode: _formData.tel_countryCode, - phoneNumber: _formData.phoneNumber + countryCode: _data.tel_countryCode, + phoneNumber: _data.phoneNumber }, faxNo: { - countryCode: _formData.fax_countryCode, - faxNumber: _formData.faxNumber + countryCode: _data.fax_countryCode, + faxNumber: _data.faxNumber }, addressBus: { - country: _formData.country, - district: _formData.district, - addressLine1: _formData.addressLine1, - addressLine2: _formData.addressLine2, - addressLine3: _formData.addressLine3, + country: country, + district: district, + addressLine1: _data.addressLine1, + addressLine2: _data.addressLine2, + addressLine3: _data.addressLine3, }, - identification: _formData.identification, - emailBus:_formData.emailBus, + identification: _data.identification, + emailBus:_data.emailBus, + contactPerson: _data.contactPerson, + enCompanyName: _data.enCompanyName, + chCompanyName: _data.chCompanyName, + brNo: _data.brNo, + brExpiryDate: formik.values.brExpiryDate, + }, onSuccess: function(){ loadDataFun(); @@ -89,6 +135,15 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { window.open("/org/fromUser/"+userData.id, "_blank", "noreferrer"); }; + const onVerifiedClick = () => { + HttpUtils.get({ + url: UrlUtils.GET_IND_USER_VERIFY+"/"+userData.id, + onSuccess: function(){ + loadDataFun(); + } + }); + }; + const doLock = () => { HttpUtils.get({ url: UrlUtils.GET_USER_LOCK+"/"+userData.id, @@ -107,6 +162,7 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { }); }; + return ( { Information +
+ + {/*top button*/} + + + + {editMode? + <> + + + + + + + + + : + <> + + + + + + } + + + + + {/*end top button*/} @@ -243,10 +359,7 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { @@ -266,8 +379,8 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { @@ -282,8 +395,9 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { Verified: + { - currentUserData.verified || editMode? + currentUserData.verifiedBy || editMode? { textTransform: 'capitalize', alignItems: 'end' }} + onClick={onVerifiedClick} > - Verified + Verify } + + { @@ -352,106 +466,69 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> Status: + { + editMode? + + + + : + <> + + + + + {locked? + + + + : + + + + } + + + } + + - - - - {/*bottom button*/} - - - - {editMode? - <> - - - - - - - - : - <> - {locked? - - - - : - - - - } - - - - - } - - - - @@ -500,7 +577,7 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { fullWidth {...register("chCompanyName")} id='chCompanyName' - disabled + disabled={!editMode} /> @@ -535,7 +612,7 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { @@ -575,12 +652,31 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { - + { + if (e.key === 'Enter') { + e.preventDefault(); + } + }, + }} + /> + {formik.touched.brExpiryDate && formik.errors.brExpiryDate && ( + + {formik.errors.brExpiryDate} + + )} @@ -595,28 +691,19 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { @@ -624,7 +711,7 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { - + @@ -632,17 +719,25 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { - + { + setDistrict(newValue); + }} + disabled={!editMode} + sx={{"& .MuiInputBase-root": { height: "41px" },"#district":{padding: "0px 0px 0px 0px"}, "& .MuiAutocomplete-endAdornment": { top: "auto" },}} + renderInput={(params) => } + /> + - - + @@ -650,19 +745,31 @@ const UserInformationCard_Organization = ({userData, loadDataFun}) => { - { + setCountry(newValue); + }} + + sx={{"& .MuiInputBase-root": { height: "41px" },"#country":{padding: "0px 0px 0px 0px"}, "& .MuiAutocomplete-endAdornment": { top: "auto" },}} + renderInput={(params) => } /> + + - + +
); }; diff --git a/src/pages/pnspsUserDetailPage_Organization/index.js b/src/pages/pnspsUserDetailPage_Organization/index.js index 32b2d1d..b3041e0 100644 --- a/src/pages/pnspsUserDetailPage_Organization/index.js +++ b/src/pages/pnspsUserDetailPage_Organization/index.js @@ -4,7 +4,6 @@ import {useEffect, useState} from "react"; import * as React from "react"; //import axios from "axios"; import * as HttpUtils from "../../utils/HttpUtils"; -import {apiPath} from "../../auth/utils"; import {useParams} from "react-router-dom"; import FileList from "../../components/FileList" import MainCard from "../../components/MainCard"; @@ -29,8 +28,11 @@ const UserMaintainPage_Organization = () => { const loadData = ()=>{ setLoding(true); HttpUtils.get({ - url: `${apiPath}${UrlUtils.GET_USER_PATH}/${params.id}`, + url: `${UrlUtils.GET_ORG_USER_PATH}/${params.id}`, onSuccess: function(response){ + response.data["addressBus"] = JSON.parse(response.data["addressBus"]); + response.data["contactTel"] = JSON.parse(response.data["contactTel"]); + response.data["faxNo"] = JSON.parse(response.data["faxNo"]); setUserData(response.data) } }); diff --git a/src/pages/pnspsUserSearchPage_Individual/UserSearchForm_Individual.js b/src/pages/pnspsUserSearchPage_Individual/UserSearchForm_Individual.js index ca0d9ff..07c5876 100644 --- a/src/pages/pnspsUserSearchPage_Individual/UserSearchForm_Individual.js +++ b/src/pages/pnspsUserSearchPage_Individual/UserSearchForm_Individual.js @@ -1,15 +1,13 @@ // material-ui import { Button, - CardContent, FormControlLabel, + CardContent, Grid, TextField, - Typography + Autocomplete } from '@mui/material'; import MainCard from "../../components/MainCard"; import {useForm} from "react-hook-form"; - import { useState} from "react"; -import Checkbox from "@mui/material/Checkbox"; import * as React from "react"; // ==============================|| DASHBOARD - DEFAULT ||============================== // @@ -17,8 +15,7 @@ import * as React from "react"; const UserSearchForm_Individual = ({applySearch}) => { const [type, setType] = useState([]); - const [locked, setLocked] = useState(false); - + const [accountFilter, setAccountFilter] = useState("Active"); const { reset, register, handleSubmit } = useForm() const onSubmit = (data) => { @@ -34,14 +31,13 @@ const UserSearchForm_Individual = ({applySearch}) => { fullName: data.fullName, email: data.email, phone: data.phone, - locked: locked, + accountFilter: accountFilter, }; applySearch(temp); }; function resetForm(){ setType([]); - setLocked(false); reset(); } @@ -97,18 +93,23 @@ const UserSearchForm_Individual = ({applySearch}) => {
- setLocked(event.target.checked)} - name="checked" - color="primary" - size="small" + { + if (newValue !== null){ + setAccountFilter(newValue); + } + }} + renderInput={(params) => ( + + )} /> - } - label={Locked} - /> {/**/} {/* { + if(params.value){ + let tel = JSON.parse(params.value); + return "+"+tel.countryCode+ " "+tel.phoneNumber; + } + + } + }, + { + id: 'emailAddress', + field: 'emailAddress', headerName: 'Email', flex: 1, }, + { + id: 'lastLogin', + field: 'lastLogin', + headerName: 'Last Login', + flex: 1, + valueGetter:(params)=>{ + if(params.value){ + return DateUtils.datetimeStr(params.value); + } + + } + }, { id: 'locked', field: 'locked', - type: 'bool', - headerName: 'Locked', + headerName: 'Status', flex: 1, - renderCell: (params) => { - return ( - - ); + valueGetter:(params)=>{ + if(params.value){ + return "Locked"; + }else{ + return "Active"; + } + + } + }, + { + field: 'verifiedDate', + type: 'actions', + headerName: 'Verified', + width: 100, + cellClassName: 'actions', + getActions: (params) => { + if(params.row.verifiedDate) + return [ + } + color="success" + />]; + return [ + } + color="error" + />]; }, }, ]; diff --git a/src/pages/pnspsUserSearchPage_Organization/UserSearchForm_Organization.js b/src/pages/pnspsUserSearchPage_Organization/UserSearchForm_Organization.js index 2a6505f..a17e3e6 100644 --- a/src/pages/pnspsUserSearchPage_Organization/UserSearchForm_Organization.js +++ b/src/pages/pnspsUserSearchPage_Organization/UserSearchForm_Organization.js @@ -1,15 +1,13 @@ // material-ui import { Button, - CardContent, FormControlLabel, - Grid, TextField, - Typography + CardContent, Autocomplete, + Grid, TextField } from '@mui/material'; import MainCard from "../../components/MainCard"; import {useForm} from "react-hook-form"; import { useState} from "react"; -import Checkbox from "@mui/material/Checkbox"; import * as React from "react"; // ==============================|| DASHBOARD - DEFAULT ||============================== // @@ -17,7 +15,7 @@ import * as React from "react"; const UserSearchForm_Organization = ({applySearch}) => { const [type, setType] = useState([]); - const [locked, setLocked] = useState(false); + const [accountFilter, setAccountFilter] = useState("Active"); const { reset, register, handleSubmit } = useForm() @@ -34,14 +32,15 @@ const UserSearchForm_Organization = ({applySearch}) => { fullName: data.fullName, email: data.email, phone: data.phone, - locked: locked, + brNoStr: data.brNoStr, + orgName: data.orgName, + accountFilter: accountFilter, }; applySearch(temp); }; function resetForm(){ setType([]); - setLocked(false); reset(); } @@ -60,6 +59,25 @@ const UserSearchForm_Organization = ({applySearch}) => { {/*row 2*/} + + + + + + + + + { - setLocked(event.target.checked)} - name="checked" - color="primary" - size="small" + { + if (newValue !== null){ + setAccountFilter(newValue); + } + }} + renderInput={(params) => ( + + )} /> - } - label={Locked} - /> {/**/} {/* { + if(params.value){ + return DateUtils.datetimeStr(params.value); + } + + } + }, { id: 'locked', field: 'locked', - type: 'bool', - headerName: 'Locked', + headerName: 'Status', flex: 1, - renderCell: (params) => { - return ( - - ); + valueGetter:(params)=>{ + if(params.value){ + return "Locked"; + }else{ + return "Active"; + } + + } + }, + { + field: 'verifiedDate', + type: 'actions', + headerName: 'Verified', + width: 100, + cellClassName: 'actions', + getActions: (params) => { + if(params.row.verifiedDate) + return [ + } + color="success" + />]; + return [ + } + color="error" + />]; }, }, ]; diff --git a/src/routes/SettingRoutes.js b/src/routes/SettingRoutes.js index 7cafcfc..2e8fbb4 100644 --- a/src/routes/SettingRoutes.js +++ b/src/routes/SettingRoutes.js @@ -17,7 +17,7 @@ const UserGroupSearchPage = Loadable(lazy(() => import('pages/pnspsUserGroupSear const UserGroupDetailPage = Loadable(lazy(() => import('pages/pnspsUserGroupDetailPage'))); const OrganizationSearchPage = Loadable(lazy(() => import('pages/OrganizationSearchPage'))); const OrganizationDetailPage = Loadable(lazy(() => import('pages/OrganizationDetailPage'))); -const OrganizationDetailPage_fromUser = Loadable(lazy(() => import('pages/OrganizationDetailPage/index_loadFormUser'))); +const OrganizationDetailPage_fromUser = Loadable(lazy(() => import('pages/OrganizationDetailPage_FromUser'))); // ==============================|| AUTH ROUTING ||============================== // diff --git a/src/utils/ComboData.js b/src/utils/ComboData.js index f4dd515..00e4525 100644 --- a/src/utils/ComboData.js +++ b/src/utils/ComboData.js @@ -1,32 +1,7 @@ -import * as yup from 'yup'; export const idDocType = ["passport","HKID","CNID","BR","otherCert"]; export const district = ["北區","長洲區","大埔區","大嶼山區","東區","觀塘區","黃大仙區","九龍城區","葵青區","南區","南丫島區", "坪洲區","荃灣區","沙田區","深水埗區","屯門區","灣仔區","西貢區","油尖旺區","元朗區","中西區"]; export const country = ["中國香港","中國","中國澳門"]; -export const validationSchema = ()=>{ - return yup.object().shape({ - username: yup.string().min(8,"用戶名稱最少8位").required('請輸入用戶名稱'), - password: yup.string().min(8,'請輸入最少8位密碼').required('請輸入密碼') - .matches(/^(?=.*[a-z])/, '請包括最少1個小寫字母') - .matches(/^(?=.*[A-Z])/, '請包括最少1個大寫字母') - .matches(/^(?=.*[0-9])/, '請包括最少1個數字') - .matches(/^(?=.*[!@#%&])/, '請包括最少1個特殊字符'), - confirmPassword: yup.string().min(8,'請最少輸入8位密碼').required('請確認密碼').oneOf([yup.ref('password'), null], '請輸入相同密碼'), - enName: yup.string().max(255).required('請輸入英文姓名'), - chName: yup.string().max(255).required('請輸入中文姓名'), - address1: yup.string().max(255).required('請輸入第一行地址'), - address2: yup.string().max(255).required('請輸入第二行地址'), - address3: yup.string().max(255).required('請輸入第三行地址'), - email: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵'), - emailConfirm: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵').oneOf([yup.ref('email'), null], '請輸入相同電郵'), - idNo: yup.string().min(7,"請輸入證件號碼").required('請輸入證件號碼'), - checkDigit:yup.string().max(1).required('請輸入括號內的數字或字母'), - idDocType: yup.string().max(255).required('請輸入證件類別'), - phoneCountryCode: yup.string().min(3,'請輸入3位數字').required('請輸入國際區號'), - faxCountryCode: yup.string().min(3,'請輸入3位數字'), - phone: yup.string().min(8,'請輸入8位數字').required('請輸入聯絡電話'), - fax: yup.string().min(8,'請輸入8位數字'), - }); -} \ No newline at end of file +export const accountFilter = [{display:"Active", value:"active"},{display:"Locked", value:"locked"},{display:"Not verified", value:"notVerified"}]; diff --git a/src/utils/DateUtils.js b/src/utils/DateUtils.js index caccb2a..0009fef 100644 --- a/src/utils/DateUtils.js +++ b/src/utils/DateUtils.js @@ -10,9 +10,12 @@ export const dateStr = (date) =>{ return dayjs(date).format("DD-MM-YYYY") }; -const convertToDate = (date)=>{ +export const convertToDate = (date)=>{ if(Array.isArray(date)){ return new Date(date[0],date[1],date[2],date[3],date[4],date[5]); } + if(typeof date == 'number'){ + return new Date(date); + } return date; } \ No newline at end of file diff --git a/src/utils/IconUtils.js b/src/utils/IconUtils.js index f8b633c..0226144 100644 --- a/src/utils/IconUtils.js +++ b/src/utils/IconUtils.js @@ -3,8 +3,12 @@ import DeleteIcon from '@mui/icons-material/DeleteForever'; import EditIcon from '@mui/icons-material/Edit'; import ViewIcon from '@mui/icons-material/Visibility'; import DownloadICon from '@mui/icons-material/Download'; +import VaildIcon from '@mui/icons-material/CheckCircleOutline'; +import InVaildIcon from '@mui/icons-material/HighlightOff'; export const Delete = DeleteIcon; export const Edit = EditIcon; export const View = ViewIcon; -export const Download = DownloadICon; \ No newline at end of file +export const Download = DownloadICon; +export const Vaild = VaildIcon; +export const Invaild = InVaildIcon; \ No newline at end of file