| @@ -300,8 +300,11 @@ function Header(props) { | |||
| <Stack direction="row" justifyContent="flex-start" alignItems="center"> | |||
| <Logo /> | |||
| <Stack justifyContent="flex-start" alignItems="center"> | |||
| <span id="systemTitle">公共啟事提交</span> | |||
| <span id="systemTitle">及繳費系統</span> | |||
| {/*<span id="systemTitle">公共啟事提交</span>*/} | |||
| {/*<span id="systemTitle">及繳費系統</span>*/} | |||
| <span id="systemTitle"> | |||
| <FormattedMessage id="PNSPS" /> | |||
| </span> | |||
| </Stack> | |||
| </Stack> | |||
| </Box> | |||
| @@ -24,7 +24,7 @@ import Loadable from 'components/Loadable'; | |||
| import { notifyActionSuccess } from 'utils/CommonFunction'; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| import {useIntl} from "react-intl"; | |||
| import {FormattedMessage, useIntl} from "react-intl"; | |||
| const UploadFileTable = Loadable(React.lazy(() => import('./UploadFileTable'))); | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -299,7 +299,9 @@ const FormPanel = ({ formData }) => { | |||
| </form> | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <DialogTitle>注意</DialogTitle> | |||
| <DialogTitle> | |||
| <FormattedMessage id="attention"/> | |||
| </DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h3" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| </DialogContent> | |||
| @@ -23,7 +23,7 @@ import { useNavigate } from "react-router-dom"; | |||
| import { notifyActionSuccess } from 'utils/CommonFunction'; | |||
| import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| import {useIntl} from "react-intl"; | |||
| import {FormattedMessage, useIntl} from "react-intl"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -132,7 +132,9 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| <Grid item xs={12} md={12} width="100%" > | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4">申請公共啟事</Typography> | |||
| <Typography ml={15} color='#FFF' variant="h4"> | |||
| <FormattedMessage id="applyPublicNotice"/> | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| @@ -256,7 +258,9 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| <Button | |||
| variant="contained" | |||
| type="submit" | |||
| >申請公共啟事</Button> | |||
| > | |||
| <FormattedMessage id="applyPublicNotice"/> | |||
| </Button> | |||
| </ThemeProvider> | |||
| </center> | |||
| </Grid> | |||
| @@ -266,7 +270,9 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
| </Grid> | |||
| <div> | |||
| <Dialog open={isWarningPopUp} onClose={() => setIsWarningPopUp(false)} > | |||
| <DialogTitle>注意</DialogTitle> | |||
| <DialogTitle> | |||
| <FormattedMessage id="attention"/> | |||
| </DialogTitle> | |||
| <DialogContent style={{ display: 'flex', }}> | |||
| <Typography variant="h3" style={{ padding: '16px' }}>{warningText}</Typography> | |||
| </DialogContent> | |||
| @@ -6,18 +6,20 @@ import { | |||
| Typography, useMediaQuery | |||
| } from '@mui/material'; | |||
| import * as DateUtils from "utils/DateUtils" | |||
| import * as StatusUtils from "utils/statusUtils/PublicNoteStatusUtils"; | |||
| import {useNavigate} from "react-router-dom"; | |||
| import { | |||
| isORGLoggedIn, | |||
| } from "utils/Utils"; | |||
| import {useTheme} from "@emotion/react"; | |||
| import {getStatusIntl} from "utils/statusUtils/PublicNoteStatusUtils"; | |||
| import {useIntl} from "react-intl"; | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| export default function BaseGrid({rows}) { | |||
| const navigate = useNavigate() | |||
| const theme = useTheme(); | |||
| const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||
| const intl = useIntl(); | |||
| const handleDetailClick = (params) => () => { | |||
| navigate('/publicNotice/'+ params.id); | |||
| @@ -93,7 +95,7 @@ export default function BaseGrid({rows}) { | |||
| width: isMdOrLg ? 'auto' : 160, | |||
| flex: isMdOrLg ? 1 : undefined, | |||
| renderCell: (params) => { | |||
| return [StatusUtils.getStatus(params)] | |||
| return [getStatusIntl(params,intl)] | |||
| }, | |||
| }, | |||
| { | |||
| @@ -15,14 +15,14 @@ import { | |||
| } from "utils/Utils"; | |||
| import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| import {FormattedMessage} from "react-intl"; | |||
| import {FormattedMessage, useIntl} from "react-intl"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| const intl = useIntl(); | |||
| const [type, setType] = React.useState([]); | |||
| const [status, setStatus] = React.useState([{ key: 0, label: 'All', labelCht: "全部", type: 'all' }]); | |||
| const [status, setStatus] = React.useState([{ key: 0, label: 'all', type: 'all' }]); | |||
| const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | |||
| const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | |||
| @@ -160,7 +160,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| } | |||
| value={status} | |||
| // inputValue={status?.labelCht} | |||
| getOptionLabel={(option) => option.labelCht} | |||
| getOptionLabel={(option) => intl.formatMessage({id: option.label})} | |||
| onChange={(event, newValue) => { | |||
| console.log(newValue) | |||
| const findAllIndex = newValue.findIndex((ele) => { | |||
| @@ -25,7 +25,7 @@ const SearchTab = Loadable(lazy(() => import('./SearchPublicNoticeTab'))); | |||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||
| import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
| import {ThemeProvider} from "@emotion/react"; | |||
| import {FormattedMessage} from "react-intl"; | |||
| import {FormattedMessage, useIntl} from "react-intl"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -37,6 +37,7 @@ const PublicNotice = () => { | |||
| const [isLoading, setLoding] = useState(true); | |||
| const [selectedTab, setSelectedTab] = useState("1"); | |||
| const navigate = useNavigate(); | |||
| const intl = useIntl(); | |||
| const _sx = { | |||
| padding: "4 2 4 2", | |||
| @@ -118,7 +119,7 @@ const PublicNotice = () => { | |||
| <ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | |||
| <Box sx={{ mr: { md: "47px" } }}> | |||
| <Button variant="contained" onClick={() => { onBtnClick() }}> | |||
| 申請公共啟事 | |||
| <FormattedMessage id="applyPublicNotice"/> | |||
| </Button> | |||
| </Box> | |||
| </ThemeProvider> | |||
| @@ -132,10 +133,10 @@ const PublicNotice = () => { | |||
| <TabContext value={selectedTab}> | |||
| <Box sx={{ borderBottom: 1, borderColor: 'divider', overflowX: 'auto', }}> | |||
| <TabList onChange={handleChange} aria-label="lab API tabs example" sx={{ display: 'flex', flexDirection: 'row' }}> | |||
| <Tab label={"處理中 (" + submittedList?.length + ")"} value="1" /> | |||
| <Tab label={"待發布 (" + pendingPublishList?.length + ")"} value="3" /> | |||
| <Tab label={"待付款 (" + pendingPaymentList?.length + ")"} value="4" /> | |||
| <Tab label="搜尋申請記錄" value="5" /> | |||
| <Tab label={intl.formatMessage({id: 'processing'}) + " (" + submittedList?.length + ")"} value="1" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPublish'}) + " (" + pendingPublishList?.length + ")"} value="3" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPayment'}) + " (" + pendingPaymentList?.length + ")"} value="4" /> | |||
| <Tab label={intl.formatMessage({id: 'searchApplyRecord'})} value="5" /> | |||
| </TabList> | |||
| </Box> | |||
| <TabPanel value="1"> | |||
| @@ -169,10 +170,10 @@ const PublicNotice = () => { | |||
| <TabContext value={selectedTab}> | |||
| <Box sx={{ borderBottom: 1, borderColor: 'divider' }}> | |||
| <TabList onChange={handleChange} aria-label="lab API tabs example"> | |||
| <Tab label={"處理中 (" + submittedList.length + ")"} value="1" /> | |||
| <Tab label={"待付款 (" + pendingPaymentList.length + ")"} value="3" /> | |||
| <Tab label={"待發布 (" + pendingPublishList.length + ")"} value="4" /> | |||
| <Tab label="搜尋申請記錄" value="5" /> | |||
| <Tab label={intl.formatMessage({id: 'processing'}) + " (" + submittedList.length + ")"} value="1" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPayment'}) + " (" + pendingPaymentList.length + ")"} value="3" /> | |||
| <Tab label={intl.formatMessage({id: 'pendingPublish'}) + " (" + pendingPublishList.length + ")"} value="4" /> | |||
| <Tab label={intl.formatMessage({id: 'searchApplyRecord'})} value="5" /> | |||
| </TabList> | |||
| </Box> | |||
| <TabPanel value="1"> | |||
| @@ -10,6 +10,7 @@ import { | |||
| isORGLoggedIn, | |||
| } from "utils/Utils"; | |||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||
| import {FormattedMessage} from "react-intl"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const DashboardDefault = () => { | |||
| @@ -30,7 +31,9 @@ const DashboardDefault = () => { | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| {/* <Typography variant="h5">我的公共啟事</Typography> */} | |||
| <Typography ml={10} color='#FFF' variant="h4">{isORGLoggedIn() ?userData.fullenName:userData.fullchName}, 午安! 請選擇所需服務。</Typography> | |||
| <Typography ml={10} color='#FFF' variant="h4"> | |||
| {isORGLoggedIn() ?userData.fullenName:userData.fullchName}, <FormattedMessage id="welcomeMsg"/> | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| @@ -24,6 +24,7 @@ | |||
| "onlinePaymentHistory": "Online Payment History", | |||
| "setting": "Setting", | |||
| "companyOrUserRecord": "Company/Institutional User Records", | |||
| "welcomeMsg": "Good afternoon! Please select the required service.", | |||
| "login": "Login", | |||
| "iAmSmartLogin": "iAM Smart Login", | |||
| @@ -86,7 +87,7 @@ | |||
| "businessChName": "Chinese name of Organization/Company", | |||
| "preview": "Preview", | |||
| "finishSubmission": "Finish Submission", | |||
| "reset": "reset", | |||
| "reset": "Reset", | |||
| "requireString": "Items marked with * must be filled in", | |||
| "confirmPassword": "Confirm password", | |||
| "pleaseConfirmPassword": "Please confirm password", | |||
| @@ -181,6 +182,24 @@ | |||
| "lammaIslandCombo": "Lamma Island District", | |||
| "pengChauCombo": "Peng Chau District", | |||
| "applyPublicNotice": "Apply for public notice", | |||
| "attention": "attention", | |||
| "all": "All", | |||
| "processing": "Processing", | |||
| "pendingPayment": "Pending payment", | |||
| "pendingPublish": "To be Published", | |||
| "completed": "Completed", | |||
| "notAccepted": "Not accepted", | |||
| "resubmit": "Re-submit Required", | |||
| "cancelled": "Cancelled", | |||
| "withdrawn": "Withdrawn", | |||
| "searchApplyRecord": "Search application record", | |||
| "applicationId": "Application number", | |||
| "submitDate": "submit date", | |||
| "myRemarks": "My notes", | |||
| "status": "status", | |||
| "viewDetail": "View details", | |||
| "Dashboard": "Dashboard", | |||
| "event": "Event" | |||
| } | |||
| @@ -24,6 +24,7 @@ | |||
| "onlinePaymentHistory": "网上付款记录", | |||
| "setting": "设置", | |||
| "companyOrUserRecord": "公司/机构用户记录", | |||
| "welcomeMsg": "午安! 请选择所需服务。", | |||
| "login": "登录", | |||
| "iAmSmartLogin": "智方便登录", | |||
| @@ -181,6 +182,24 @@ | |||
| "lammaIslandCombo": "南丫岛区", | |||
| "pengChauCombo": "坪洲区", | |||
| "applyPublicNotice": "申請公共啟事", | |||
| "attention": "注意", | |||
| "all": "全部", | |||
| "processing": "處理中", | |||
| "pendingPayment": "待付款", | |||
| "pendingPublish": "待發佈", | |||
| "completed": "已完成", | |||
| "notAccepted": "不接受", | |||
| "resubmit": "需重新提交", | |||
| "cancelled": "已取消", | |||
| "withdrawn": "已撤銷", | |||
| "searchApplyRecord": "搜尋申請記錄", | |||
| "applicationId": "申請編號", | |||
| "submitDate": "提交日期", | |||
| "myRemarks": "我的備註", | |||
| "status": "狀態", | |||
| "viewDetail": "查看詳細", | |||
| "Dashboard": "仪表板", | |||
| "event": "活动" | |||
| } | |||
| @@ -24,6 +24,7 @@ | |||
| "onlinePaymentHistory": "網上付款記錄", | |||
| "setting": "設定", | |||
| "companyOrUserRecord": "公司/機構用戶記錄", | |||
| "welcomeMsg": "午安! 請選擇所需服務。", | |||
| "login": "登入", | |||
| "iAmSmartLogin": "智方便登入", | |||
| @@ -181,6 +182,24 @@ | |||
| "lammaIslandCombo": "南丫島區", | |||
| "pengChauCombo": "坪洲區", | |||
| "applyPublicNotice": "申請公共啟事", | |||
| "attention": "注意", | |||
| "all": "全部", | |||
| "processing": "處理中", | |||
| "pendingPayment": "待付款", | |||
| "pendingPublish": "待發佈", | |||
| "completed": "已完成", | |||
| "notAccepted": "不接受", | |||
| "resubmit": "需重新提交", | |||
| "cancelled": "已取消", | |||
| "withdrawn": "已撤銷", | |||
| "searchApplyRecord": "搜尋申請記錄", | |||
| "applicationId": "申請編號", | |||
| "submitDate": "提交日期", | |||
| "myRemarks": "我的備註", | |||
| "status": "狀態", | |||
| "viewDetail": "查看詳細", | |||
| "Dashboard": "儀表板", | |||
| "event": "活動" | |||
| } | |||
| @@ -24,27 +24,27 @@ export const country = (intl) => { | |||
| export const accountFilter = [{ id: 1, key: 1, label: 'Active', type: 'active' }, { id: 2, key: 2, label: 'Locked', type: 'locked' }, { id: 3, key: 3, label: 'Not verified', type: 'notVerified' }]; | |||
| export const publicNoticeStatic = [ | |||
| { key: 0, labelCht: '全部', label: 'All', type: 'all' }, | |||
| { key: 1, labelCht: '處理中', label: 'Processing', type: 'processing' }, // submitted and reviewed | |||
| { key: 2, labelCht: '待付款', label: 'Pending Payment', type: 'confirmed' }, | |||
| { key: 3, labelCht: '待發布', label: 'To be published', type: 'paid' }, | |||
| { key: 4, labelCht: '已完成', label: 'Completed', type: 'completed' }, | |||
| { key: 5, labelCht: '不接受', label: 'Not accepted', type: 'notAccepted' }, | |||
| { key: 6, labelCht: '需重新提交', label: 'Re-submit Required', type: 'resubmit' }, | |||
| { key: 7, labelCht: '已取消', label: 'Cancelled', type: 'cancelled' }, | |||
| { key: 8, labelCht: '已撤銷', label: 'Withdrawn', type: 'withdrawn' }, | |||
| { key: 0, label: 'all', type: 'all' }, | |||
| { key: 1, label: 'processing', type: 'processing' }, // submitted and reviewed | |||
| { key: 2, label: 'pendingPayment', type: 'confirmed' }, | |||
| { key: 3, label: 'pendingPublish', type: 'paid' }, | |||
| { key: 4, label: 'completed', type: 'completed' }, | |||
| { key: 5, label: 'notAccepted', type: 'notAccepted' }, | |||
| { key: 6, label: 'resubmit', type: 'resubmit' }, | |||
| { key: 7, label: 'cancelled', type: 'cancelled' }, | |||
| { key: 8, label: 'withdrawn', type: 'withdrawn' }, | |||
| ]; | |||
| export const publicNoticeStatic_Creditor = [ | |||
| { key: 0, labelCht: '全部', label: 'All', type: 'all' }, | |||
| { key: 1, labelCht: '處理中', label: 'Processing', type: 'processing' }, // submitted and reviewed | |||
| { key: 2, labelCht: '待發布', label: 'To be published', type: 'confirmed' }, | |||
| { key: 3, labelCht: '待付款', label: 'Pending Payment', type: 'published' }, | |||
| { key: 4, labelCht: '已完成', label: 'Completed', type: 'completed' }, | |||
| { key: 5, labelCht: '不接受', label: 'Not accepted', type: 'notAccepted' }, | |||
| { key: 6, labelCht: '需重新提交', label: 'Re-submit Required', type: 'resubmit' }, | |||
| { key: 7, labelCht: '已取消', label: 'Cancelled', type: 'cancelled' }, | |||
| { key: 8, labelCht: '已撤銷', label: 'Withdrawn', type: 'withdrawn' }, | |||
| { key: 0, label: 'all', type: 'all' }, | |||
| { key: 1, label: 'processing', type: 'processing' }, // submitted and reviewed | |||
| { key: 2, label: 'pendingPublish', type: 'confirmed' }, | |||
| { key: 3, label: 'pendingPayment', type: 'published' }, | |||
| { key: 4, label: 'completed', type: 'completed' }, | |||
| { key: 5, label: 'notAccepted', type: 'notAccepted' }, | |||
| { key: 6, label: 'resubmit', type: 'resubmit' }, | |||
| { key: 7, label: 'cancelled', type: 'cancelled' }, | |||
| { key: 8, label: 'withdrawn', type: 'withdrawn' }, | |||
| ]; | |||
| @@ -2,6 +2,10 @@ import { Typography } from "@mui/material" | |||
| export function getStatusTag({ color = "#000", textColor = "#FFF", text = "" }) { | |||
| return ( | |||
| <div style={{ borderRadius: "25px", "background": color, "color": textColor, "padding": "5px 10px 5px 10px", margin: "6px 4px 6px 4px" }}><Typography variant="h6">{text}</Typography></div> | |||
| <div style={{ borderRadius: "25px", "background": color, "color": textColor, "padding": "5px 10px 5px 10px", margin: "6px 4px 6px 4px" }}> | |||
| <Typography variant="h6"> | |||
| {text} | |||
| </Typography> | |||
| </div> | |||
| ) | |||
| } | |||
| @@ -14,13 +14,13 @@ export function getStatusByText(status, creditor) { | |||
| return getStatusTag({ color: "#f5a83d", text: "處理中" }) | |||
| case "confirmed": | |||
| if (creditor) | |||
| return getStatusTag({ color: "#22a13f", text: "待發布" }) | |||
| return getStatusTag({ color: "#22a13f", text: "待發佈" }) | |||
| else | |||
| return getStatusTag({ color: "#22a13f", text: "待付款" }) | |||
| case "published": | |||
| return getStatusTag({ color: "#22a13f", text: "待付款" }) | |||
| case "paid": | |||
| return getStatusTag({ color: "#22a13f", text: "待發布" }) | |||
| return getStatusTag({ color: "#22a13f", text: "待發佈" }) | |||
| case "complated": | |||
| return getStatusTag({ color: "#8a8784", text: "已完成" }) | |||
| case "notAccepted": | |||
| @@ -68,3 +68,37 @@ export function getStatusByTextEng(status, creditor) { | |||
| return getStatusTag({ text: status }) | |||
| } | |||
| } | |||
| export function getStatusIntl(params, intl) { | |||
| return getStatusByTextIntl(params.row.status, params.row.creditor, intl); | |||
| } | |||
| export function getStatusByTextIntl(status, creditor, intl) { | |||
| switch (status) { | |||
| case "submitted": | |||
| return getStatusTag({ color: "#f5a83d", text: intl.formatMessage({id: 'processing'}) }) | |||
| case "reviewed": | |||
| return getStatusTag({ color: "#f5a83d", text: intl.formatMessage({id: 'processing'}) }) | |||
| case "confirmed": | |||
| if (creditor) | |||
| return getStatusTag({ color: "#22a13f", text: intl.formatMessage({id: 'pendingPublish'}) }) | |||
| else | |||
| return getStatusTag({ color: "#22a13f", text: intl.formatMessage({id: 'pendingPayment'}) }) | |||
| case "published": | |||
| return getStatusTag({ color: "#22a13f", text: intl.formatMessage({id: 'pendingPayment'}) }) | |||
| case "paid": | |||
| return getStatusTag({ color: "#22a13f", text: intl.formatMessage({id: 'pendingPublish'}) }) | |||
| case "complated": | |||
| return getStatusTag({ color: "#8a8784", text: intl.formatMessage({id: 'completed'}) }) | |||
| case "notAccepted": | |||
| return getStatusTag({ color: "#d9372b", text: intl.formatMessage({id: 'notAccepted'}) }) | |||
| case "resubmit": | |||
| return getStatusTag({ color: "#757373", text: intl.formatMessage({id: 'resubmit'}) }) | |||
| case "cancelled": | |||
| return getStatusTag({ color: "#909497", text: intl.formatMessage({id: 'cancelled'}) }) | |||
| case "withdrawn": | |||
| return getStatusTag({ color: "#909497", text: intl.formatMessage({id: 'withdrawn'}) }) | |||
| default: | |||
| return getStatusTag({ text: status }) | |||
| } | |||
| } | |||