Alex Cheung 1 рік тому
джерело
коміт
94502f8405
11 змінених файлів з 131 додано та 71 видалено
  1. +44
    -2
      src/components/FiDataGrid.js
  2. +51
    -46
      src/pages/Organization/DetailPage/OrganizationCard.js
  3. +2
    -2
      src/pages/authentication/Verify.js
  4. +8
    -5
      src/pages/authentication/auth-forms/BusCustomFormWizard.js
  5. +5
    -3
      src/pages/authentication/auth-forms/CustomFormWizard.js
  6. +5
    -3
      src/pages/authentication/auth-forms/IAmSmartFormWizard.js
  7. +3
    -2
      src/themes/themeConst.js
  8. +4
    -1
      src/translations/en.json
  9. +4
    -1
      src/translations/zh-CN.json
  10. +5
    -2
      src/translations/zh-HK.json
  11. +0
    -4
      src/utils/FieldUtils.js

+ 44
- 2
src/components/FiDataGrid.js Переглянути файл

@@ -1,8 +1,10 @@
// material-ui
import * as React from 'react';
import {
DataGrid,
DataGrid, GridOverlay,
} from "@mui/x-data-grid";
import {FormattedMessage, useIntl} from "react-intl";
import {Typography} from '@mui/material';

// ==============================|| EVENT TABLE ||============================== //

@@ -10,6 +12,7 @@ export function FiDataGrid({ rows, columns, sx, autoHeight,
hideFooterSelectedRowCount, rowModesModel, editMode,
pageSizeOptions, filterItems,
...props }) {
const intl = useIntl();
const [_rows, set_rows] = React.useState([]);
const [_columns, set_columns] = React.useState([]);
const [_rowModesModel, set_rowModesModel] = React.useState({});
@@ -116,12 +119,38 @@ export function FiDataGrid({ rows, columns, sx, autoHeight,
set_filterItems(filterItems);
}
}, [filterItems]);

function CustomNoRowsOverlay() {
return (
<GridOverlay>
<Typography variant="body1">
<FormattedMessage id="rowsPerPage" />
</Typography>
</GridOverlay>
);
}

const CustomPagination = (props) => {
const { pagination } = props;
const { page, pageSize, rowCount } = pagination;

const startIndex = page * pageSize + 1;
const endIndex = Math.min((page + 1) * pageSize, rowCount);

return (
<div>
<div>{`${startIndex}-${endIndex} YES ${rowCount}`}</div>
{/* Render other pagination controls */}
</div>
);
};

return (
<DataGrid
{...props}
rows={_rows}
columns={_columns}
disableColumnMenu
rowModesModel={_rowModesModel}
pageSizeOptions={_pageSizeOptions}
editMode={_editMode}
@@ -129,6 +158,19 @@ export function FiDataGrid({ rows, columns, sx, autoHeight,
hideFooterSelectedRowCount={myHideFooterSelectedRowCount}
filterModel={{items:_filterItems}}
sx={_sx}
slots={{
noRowsOverlay: () => (
CustomNoRowsOverlay()
)
}}
components={{
Pagination: CustomPagination,
}}
componentsProps={{
pagination: {
labelRowsPerPage: intl.formatMessage({id: 'rowsPerPage'}),
}
}}
/>
);
}

+ 51
- 46
src/pages/Organization/DetailPage/OrganizationCard.js Переглянути файл

@@ -17,7 +17,7 @@ const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingCo
import Loadable from 'components/Loadable';
import { lazy } from 'react';
import { notifySaveSuccess } from 'utils/CommonFunction';
import {useIntl} from "react-intl";
import { useIntl } from "react-intl";

// ==============================|| DASHBOARD - DEFAULT ||============================== //

@@ -48,17 +48,17 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
enableReinitialize: true,
initialValues: currentUserData,
validationSchema: yup.object().shape({
enCompanyName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))),
chCompanyName: yup.string().max(255, displayErrorMsg(intl.formatMessage({id: 'userRequireChineseName'}))).nullable(),
addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))),
addressLine2: yup.string().max(255, displayErrorMsg(intl.formatMessage({id: 'noMoreThen255Words'}))),
addressLine3: yup.string().max(255, displayErrorMsg(intl.formatMessage({id: 'noMoreThen255Words'}))),
fax_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))).nullable(),
tel_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))),
phoneNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'requiredValidNumber'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireContactNumber'}))),
faxNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'require8Number'}))).nullable(),
brExpiryDate: yup.string().min(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertValidityDate'}))),
brNo: yup.string().required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertNumber'}))).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInValidBusinessRegCertNumber'}))), function (value) {
enCompanyName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({ id: 'userRequireEnglishName' }))),
chCompanyName: yup.string().max(255, displayErrorMsg(intl.formatMessage({ id: 'userRequireChineseName' }))).nullable(),
addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({ id: 'validateAddressLine1' }))),
addressLine2: yup.string().max(255, displayErrorMsg(intl.formatMessage({ id: 'noMoreThen255Words' }))),
addressLine3: yup.string().max(255, displayErrorMsg(intl.formatMessage({ id: 'noMoreThen255Words' }))),
fax_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({ id: 'requireDialingCode' }))).nullable(),
tel_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({ id: 'requireDialingCode' }))),
phoneNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'requiredValidNumber' }))).required(displayErrorMsg(intl.formatMessage({ id: 'requireContactNumber' }))),
faxNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'require8Number' }))).nullable(),
brExpiryDate: yup.string().min(8).required(displayErrorMsg(intl.formatMessage({ id: 'pleaseFillInBusinessRegCertValidityDate' }))),
brNo: yup.string().required(displayErrorMsg(intl.formatMessage({ id: 'pleaseFillInBusinessRegCertNumber' }))).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(intl.formatMessage({ id: 'pleaseFillInValidBusinessRegCertNumber' }))), function (value) {
var brNo_pattern = /[0-9]{8}/
if (value !== undefined) {
if (value.match(brNo_pattern)) {
@@ -109,9 +109,9 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
}
});

useEffect(()=>{
useEffect(() => {
setEditModeFun(editMode);
},[editMode]);
}, [editMode]);

useEffect(() => {
if (Object.keys(userData).length > 0) {
@@ -230,34 +230,39 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
<Typography variant="h5">Edit</Typography>
</Button>
</Grid>
<Grid item sx={{ ml: 3, mr: 3 }}>
<Button
size="large"
variant="contained"
color="orange"
onClick={()=>setCreditorConfirmPopUp(true)}
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
>
<Typography variant="h5">Mark as Creditor</Typography>
</Button>
</Grid>
<Grid item sx={{ ml: 3, mr: 3 }}>
<Button
size="large"
variant="contained"
color="error"
onClick={()=>setNonCreditorConfirmPopUp(true)}
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
>
<Typography variant="h5">Mark as Non-Creditor</Typography>
</Button>
</Grid>

{
currentUserData.creditor ?
<Grid item sx={{ ml: 3, mr: 3 }}>
<Button
size="large"
variant="contained"
color="error"
onClick={() => setNonCreditorConfirmPopUp(true)}
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
>
<Typography variant="h5">Mark as Non-Creditor</Typography>
</Button>
</Grid>
:
<Grid item sx={{ ml: 3, mr: 3 }}>
<Button
size="large"
variant="contained"
color="orange"
onClick={() => setCreditorConfirmPopUp(true)}
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
>
<Typography variant="h5">Mark as Creditor</Typography>
</Button>
</Grid>
}
</>
}
</Grid>
@@ -363,7 +368,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
valueName: "country",
disabled: (!editMode && !createMode),
dataList: ComboData.country,
getOptionLabel: (option) => option.type? intl.formatMessage({ id: option.type }) : "",
getOptionLabel: (option) => option.type ? intl.formatMessage({ id: option.type }) : "",
form: formik
})}
</Grid>
@@ -374,7 +379,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
valueName: "district",
disabled: (!editMode && !createMode),
dataList: ComboData.district,
getOptionLabel: (option) => option.type? intl.formatMessage({ id: option.type }) : "",
getOptionLabel: (option) => option.type ? intl.formatMessage({ id: option.type }) : "",
form: formik
})}
</Grid>
@@ -401,7 +406,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
<Typography variant="h4" style={{ padding: '16px' }}>Are you sure mark as Creditor?</Typography>
</DialogContent>
<DialogActions>
<Button onClick={() => setCreditorConfirmPopUp(false)}><Typography variant="h5">Cancel</Typography></Button>
<Button onClick={() => setCreditorConfirmPopUp(false)}><Typography variant="h5">Cancel</Typography></Button>
<Button onClick={() => markAsCreditor()}><Typography variant="h5">Confirm</Typography></Button>
</DialogActions>
</Dialog>
@@ -413,7 +418,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
<Typography variant="h4" style={{ padding: '16px' }}>Are you sure mark as Non-Creditor?</Typography>
</DialogContent>
<DialogActions>
<Button onClick={() => setNonCreditorConfirmPopUp(false)}><Typography variant="h5">Cancel</Typography></Button>
<Button onClick={() => setNonCreditorConfirmPopUp(false)}><Typography variant="h5">Cancel</Typography></Button>
<Button onClick={() => markAsNonCreditor()}><Typography variant="h5">Confirm</Typography></Button>
</DialogActions>
</Dialog>


+ 2
- 2
src/pages/authentication/Verify.js Переглянути файл

@@ -63,7 +63,7 @@ export default function Verify() {
<Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}>
<CheckCircleOutlineIcon color="success" sx={{ width: "200px", height: "200px" }} />
<Typography display="inline" variant="h4">帳戶已成功驗證。</Typography>
<Button variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="h5">
<Button variant="outlined" component={Link} to="/login"><Typography variant="h5">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>
@@ -73,7 +73,7 @@ export default function Verify() {
{/* <Button disabled={true} hidden={true} variant="contained" type="submit" sx={{ fontSize: 12,height:'25px'}}>Submit</Button> */}
<CancelOutlinedIcon color="error" sx={{ width: "200px", height: "200px" }} />
<Typography display="inline" variant="h4">驗證失敗,請聯絡相關的系統管理員協助。</Typography>
<Button color="error" variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="h5">
<Button color="error" variant="outlined" component={Link} to="/login"><Typography variant="h5">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>


+ 8
- 5
src/pages/authentication/auth-forms/BusCustomFormWizard.js Переглянути файл

@@ -323,8 +323,8 @@ const BusCustomFormWizard = (props) => {
const { handleSubmit } = useForm({})
const _onSubmit = () => {
setLoding(true);
values.address4 = selectedAddress4
values.address5 = selectedAddress5
values.address4 = selectedAddress4.key
values.address5 = selectedAddress5.key
// console.log(values)
const busUserAddress = {
"addressLine1": "",
@@ -1637,7 +1637,8 @@ const BusCustomFormWizard = (props) => {
<Typography display="inline" variant="h4">
<FormattedMessage id="emailSent"/>
</Typography>
<Button variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="pnspsFormHeader">
<Button variant="outlined" component={Link} to="/login" >
<Typography variant="pnspsFormHeader">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>
@@ -1646,8 +1647,10 @@ const BusCustomFormWizard = (props) => {
<Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}>
{/* <Button disabled={true} hidden={true} variant="contained" type="submit" sx={{ fontSize: 12,height:'25px'}}>Submit</Button> */}
<CancelOutlinedIcon color="error" sx={{ width: "200px", height: "200px" }} />
<Typography display="inline" variant="h4">申請失敗,請稍後嘗試</Typography>
<Button color="error" variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="pnspsFormHeader">
<Typography display="inline" variant="h4">
<FormattedMessage id="registerFail" />
</Typography>
<Button color="error" variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>


+ 5
- 3
src/pages/authentication/auth-forms/CustomFormWizard.js Переглянути файл

@@ -1801,7 +1801,7 @@ const CustomFormWizard = (props) => {
<Typography display="inline" variant="h4">
<FormattedMessage id="emailSent"/>
</Typography>
<Button variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="pnspsFormHeader">
<Button variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>
@@ -1810,8 +1810,10 @@ const CustomFormWizard = (props) => {
<Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}>
{/* <Button disabled={true} hidden={true} variant="contained" type="submit" sx={{ fontSize: 12,height:'25px'}}>Submit</Button> */}
<CancelOutlinedIcon color="error" sx={{ width: "200px", height: "200px" }} />
<Typography display="inline" variant="h4">申請失敗,請稍後嘗試</Typography>
<Button color="error" variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="pnspsFormHeader">
<Typography display="inline" variant="h4">
<FormattedMessage id="registerFail" />
</Typography>
<Button color="error" variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>


+ 5
- 3
src/pages/authentication/auth-forms/IAmSmartFormWizard.js Переглянути файл

@@ -1041,7 +1041,7 @@ const CustomFormWizard = (props) => {
<Typography display="inline" variant="h4">
<FormattedMessage id="emailSent"/>
</Typography>
<Button variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="h5">
<Button variant="outlined" component={Link} to="/login" ><Typography variant="h5">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>
@@ -1050,8 +1050,10 @@ const CustomFormWizard = (props) => {
<Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}>
{/* <Button disabled={true} hidden={true} variant="contained" type="submit" sx={{ fontSize: 12,height:'25px'}}>Submit</Button> */}
<CancelOutlinedIcon color="error" sx={{ width: "200px", height: "200px" }} />
<Typography display="inline" variant="h4">申請失敗,請稍後嘗試</Typography>
<Button color="error" variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="h5">
<Typography display="inline" variant="h4">
<FormattedMessage id="registerFail" />
</Typography>
<Button color="error" variant="outlined" component={Link} to="/login" ><Typography variant="h5">
<FormattedMessage id="backToLogin"/>
</Typography></Button>
</Stack>


+ 3
- 2
src/themes/themeConst.js Переглянути файл

@@ -182,7 +182,7 @@ export const PNSPS_THEME = createTheme({
input: {
padding: '10.5px 14px 10.5px 12px',
'&.MuiOutlinedInput-input.Mui-disabled': {
WebkitTextFillColor: '#888888',
WebkitTextFillColor: 'rgba(0, 0, 0, 1)',
},
color: 'rgba(0, 0, 0, 0.85)'
},
@@ -239,7 +239,8 @@ export const PNSPS_THEME = createTheme({
//padding: '1px', // Adjust the padding as needed
},
'& .MuiInputBase-input:disabled': {
color: 'rgba(0, 0, 0, 0.8)',
color: 'rgba(0, 0, 0, 1)',
backgroundColor: "#f8f8f8",
//backgroundColor: '#777777', // Set background color to #777777 for disabled state
//color: '#010101', // Set text color to #111111 for disabled state
},


+ 4
- 1
src/translations/en.json Переглянути файл

@@ -39,6 +39,7 @@
"submit": "Submit",
"backToLogin": "Return to login page",
"registerSubmitted": "Account application submitted successfully.",
"registerFail": "Application failed, please try again later",

"mainPage": "Main Page",
"myPublicNotice": "My Public Notice",
@@ -69,7 +70,7 @@
"userPassword": "Password",
"forgotUserPassword": "Forgot Password",
"learnMore": "Learn More",
"createOrReActivate": "Create/reactivate account",
"createOrReActivate": "Create account",
"usernameTaken": "This user login name has been registered, please use another user login name",
"userRegistered": "This user has already registered. Please return to the login page and proceed with the login process.",

@@ -352,6 +353,8 @@
"idNo": "ID No.",
"country": "Country",
"district": "District",
"noRecordFound": "No record found",
"rowsPerPage": "Rows Per Page",

"Dashboard": "Dashboard",
"event": "Event"

+ 4
- 1
src/translations/zh-CN.json Переглянути файл

@@ -39,6 +39,7 @@
"submit": "提交",
"backToLogin": "返回登入页面",
"registerSubmitted": "帐户申请已成功提交。",
"registerFail": "申请失败,请稍后尝试",

"mainPage": "主页",
"myPublicNotice": "我的公共启事",
@@ -69,7 +70,7 @@
"userPassword": "密码",
"forgotUserPassword": "忘记密码",
"learnMore": "了解更多",
"createOrReActivate": "建立/重新启动帐户",
"createOrReActivate": "建立帐户",
"usernameTaken": "此用户登入名称已被注册,请使用其他用户登入名称",
"userRegistered": "此用户已注册,请返回登入页面并进行登入流程。",

@@ -352,6 +353,8 @@
"idNo": "身份证号码",
"country": "国家",
"district": "区",
"noRecordFound": "找不到記錄",
"rowsPerPage": "每页项数",

"Dashboard": "仪表板",
"event": "活动"

+ 5
- 2
src/translations/zh-HK.json Переглянути файл

@@ -39,6 +39,7 @@
"submit": "提交",
"backToLogin": "返回登入頁面",
"registerSubmitted": "帳戶申請已成功提交。",
"registerFail": "申請失敗,請稍後嘗試",

"mainPage": "主頁",
"myPublicNotice": "我的公共啟事",
@@ -69,7 +70,7 @@
"userPassword": "密碼",
"forgotUserPassword": "忘記密碼",
"learnMore": "了解更多",
"createOrReActivate": "建立/重新啟動帳戶",
"createOrReActivate": "建立帳戶",
"usernameTaken": "此用戶登入名稱已被注冊,請使用其他用戶登入名稱",
"userRegistered": "此用戶已注冊,請返回登入頁面並進行登入流程。",

@@ -332,7 +333,7 @@
"unlock": "解鎖",
"pendingFor": "待批核",
"active": "生效中",
"primary": "源自",
"primary": "主要帳戶",

"submitApplication": "提交公共啟事申請",
"applicationSubheading": "提供你的啟事內容作排版,校對及計價。",
@@ -352,6 +353,8 @@
"idNo": "身分證號碼",
"country": "國家",
"district": "區",
"noRecordFound": "找不到記錄",
"rowsPerPage": "每頁項數",

"Dashboard": "儀表板",
"event": "活動"

+ 0
- 4
src/utils/FieldUtils.js Переглянути файл

@@ -191,10 +191,6 @@ export const initField = ({ type, valueName, form, disabled, multiline, handleCh
value={form.values[valueName]}
disabled={disabled}
sx={{
"& .MuiInputBase-input.Mui-disabled": {
WebkitTextFillColor: "#000000",
background: "#f8f8f8",
},
width: width ? width : '100%'
}}
{...props}


Завантаження…
Відмінити
Зберегти