| @@ -0,0 +1,126 @@ | |||||
| // material-ui | |||||
| import { | |||||
| Grid, | |||||
| Typography, | |||||
| Stack, | |||||
| Button, | |||||
| } from '@mui/material'; | |||||
| import * as UrlUtils from "utils/ApiPathConst"; | |||||
| import * as React from "react"; | |||||
| import * as HttpUtils from "utils/HttpUtils"; | |||||
| import { useParams } from "react-router-dom"; | |||||
| import { useNavigate } from "react-router-dom"; | |||||
| import * as DateUtils from "utils/DateUtils" | |||||
| import Loadable from 'components/Loadable'; | |||||
| const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||||
| const BackgroundHead = { | |||||
| backgroundImage: `url(${titleBackgroundImg})`, | |||||
| width: '100%', | |||||
| height: '100%', | |||||
| backgroundSize: 'contain', | |||||
| backgroundRepeat: 'no-repeat', | |||||
| backgroundColor: '#0C489E', | |||||
| backgroundPosition: 'right' | |||||
| } | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||||
| const Index = () => { | |||||
| const params = useParams(); | |||||
| const navigate = useNavigate() | |||||
| const [record, setRecord] = React.useState(); | |||||
| const [onReady, setOnReady] = React.useState(false); | |||||
| React.useEffect(() => { | |||||
| loadForm(); | |||||
| }, []); | |||||
| React.useEffect(() => { | |||||
| setOnReady(true); | |||||
| }, [record]); | |||||
| const loadForm = () => { | |||||
| if (params.id > 0) { | |||||
| HttpUtils.get({ | |||||
| url: UrlUtils.GET_PROOF_PAY + "/" + params.id, | |||||
| onSuccess: (responseData) => { | |||||
| if (!responseData.data?.id) { | |||||
| navigate("/proof/search"); | |||||
| } | |||||
| setRecord(responseData.data); | |||||
| } | |||||
| }); | |||||
| } | |||||
| } | |||||
| return ( | |||||
| !onReady ? | |||||
| <LoadingComponent /> | |||||
| : | |||||
| ( | |||||
| <Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||||
| <Grid item xs={12} width="100%"> | |||||
| <div style={BackgroundHead} width="100%"> | |||||
| <Stack direction="row" height='70px'> | |||||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>校對記錄</Typography> | |||||
| </Stack> | |||||
| </div> | |||||
| </Grid> | |||||
| {/*row 1*/} | |||||
| <Grid item xs={12} md={12} > | |||||
| <Grid container justifyContent="flex-start" alignItems="center" > | |||||
| <center> | |||||
| <Grid item xs={12} md={8} > | |||||
| <Typography variant="h2" sx={{ textAlign: "left", ml: 4, mr: 4, mt: 4, borderBottom: "1px solid black" }}> | |||||
| 公共啟事:交對完成及付款 | |||||
| </Typography> | |||||
| <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | |||||
| 我們已收到申請編號: {record?.appNo} 的稿件交對確定及可付印的指示。 | |||||
| <br /><br /> | |||||
| 請於 <span style={{ color: "red" }}>{DateUtils.dateStr_Cht(record?.returnBeforeDate)} 下午 2:00 前</span> 完成繳費,我們將於收到繳費確認後處理刊出事宜。 | |||||
| <br /><br /> | |||||
| 如你在憲報期數 {record?.issueYear} 年 {record?.issueVolume} 卷, 第 {record?.issueNo} 期內有多於一個公共啟事的申請,你可選擇完成所有此期所有稿件交對確定後,於繳費期限前在「我的公共啟事」內合併付款。 | |||||
| </Typography> | |||||
| <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | |||||
| 請按以下完成繳費: | |||||
| <Button | |||||
| component="span" | |||||
| variant="contained" | |||||
| size="large" | |||||
| sx={{ m: 4}} | |||||
| >繼續:網上繳費</Button> | |||||
| 或 | |||||
| <Button | |||||
| component="span" | |||||
| variant="contained" | |||||
| size="large" | |||||
| sx={{ m: 4}} | |||||
| onClick={()=>{ | |||||
| navigate("/publicNotice"); | |||||
| }} | |||||
| >返回「我的公共啟事」</Button> | |||||
| </Typography> | |||||
| </Grid> | |||||
| </center> | |||||
| </Grid> | |||||
| </Grid> | |||||
| {/*row 2*/} | |||||
| </Grid > | |||||
| ) | |||||
| ); | |||||
| }; | |||||
| export default Index; | |||||
| @@ -0,0 +1,115 @@ | |||||
| // material-ui | |||||
| import { | |||||
| Grid, | |||||
| Typography, | |||||
| Stack, | |||||
| Button, | |||||
| } from '@mui/material'; | |||||
| import * as UrlUtils from "utils/ApiPathConst"; | |||||
| import * as React from "react"; | |||||
| import * as HttpUtils from "utils/HttpUtils"; | |||||
| import { useParams } from "react-router-dom"; | |||||
| import { useNavigate } from "react-router-dom"; | |||||
| import Loadable from 'components/Loadable'; | |||||
| const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||||
| const BackgroundHead = { | |||||
| backgroundImage: `url(${titleBackgroundImg})`, | |||||
| width: '100%', | |||||
| height: '100%', | |||||
| backgroundSize: 'contain', | |||||
| backgroundRepeat: 'no-repeat', | |||||
| backgroundColor: '#0C489E', | |||||
| backgroundPosition: 'right' | |||||
| } | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||||
| const Index = () => { | |||||
| const params = useParams(); | |||||
| const navigate = useNavigate() | |||||
| const [record, setRecord] = React.useState(); | |||||
| const [onReady, setOnReady] = React.useState(false); | |||||
| React.useEffect(() => { | |||||
| loadForm(); | |||||
| }, []); | |||||
| React.useEffect(() => { | |||||
| setOnReady(true); | |||||
| }, [record]); | |||||
| const loadForm = () => { | |||||
| if (params.id > 0) { | |||||
| HttpUtils.get({ | |||||
| url: UrlUtils.GET_PROOF_PAY + "/" + params.id, | |||||
| onSuccess: (responseData) => { | |||||
| if (!responseData.data?.id) { | |||||
| navigate("/proof/search"); | |||||
| } | |||||
| setRecord(responseData.data); | |||||
| } | |||||
| }); | |||||
| } | |||||
| } | |||||
| return ( | |||||
| !onReady ? | |||||
| <LoadingComponent /> | |||||
| : | |||||
| ( | |||||
| <Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" > | |||||
| <Grid item xs={12} width="100%"> | |||||
| <div style={BackgroundHead} width="100%"> | |||||
| <Stack direction="row" height='70px'> | |||||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>校對記錄</Typography> | |||||
| </Stack> | |||||
| </div> | |||||
| </Grid> | |||||
| {/*row 1*/} | |||||
| <Grid item xs={12} md={12} > | |||||
| <Grid container justifyContent="flex-start" alignItems="center" > | |||||
| <center> | |||||
| <Grid item xs={12} md={8} > | |||||
| <Typography variant="h2" sx={{ textAlign: "left", ml: 4, mr: 4, mt: 4, borderBottom: "1px solid black" }}> | |||||
| 公共啟事:交對完成 | |||||
| </Typography> | |||||
| <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | |||||
| 我們已收到你已確定申請編號: {record?.appNo} 的稿件交對確定及可付印的指示,並將安排刊登於憲報 | |||||
| 期數 {record?.appNo} 年 {record?.issueVolume} 卷 第 {record?.issueNo} 期內。 | |||||
| <br/><br/> | |||||
| 此公共啟事申請的費用將於下期發出的繳費發票時收取,請依時繳費。 | |||||
| </Typography> | |||||
| <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> | |||||
| <Button | |||||
| component="span" | |||||
| variant="contained" | |||||
| size="large" | |||||
| sx={{ m: 4}} | |||||
| onClick={()=>{ | |||||
| navigate("/publicNotice"); | |||||
| }} | |||||
| >返回「我的公共啟事」</Button> | |||||
| </Typography> | |||||
| </Grid> | |||||
| </center> | |||||
| </Grid> | |||||
| </Grid> | |||||
| {/*row 2*/} | |||||
| </Grid > | |||||
| ) | |||||
| ); | |||||
| }; | |||||
| export default Index; | |||||
| @@ -0,0 +1,16 @@ | |||||
| import * as React from "react"; | |||||
| import Loadable from 'components/Loadable'; | |||||
| const Pay = Loadable(React.lazy(() => import('./Pay'))); | |||||
| const Pay_Creditor = Loadable(React.lazy(() => import('./Pay_Creditor'))); | |||||
| const Index = () => { | |||||
| return ( | |||||
| JSON.parse(localStorage.getItem('userData')).creditor? | |||||
| <Pay_Creditor/> | |||||
| : | |||||
| <Pay/> | |||||
| ); | |||||
| } | |||||
| export default Index; | |||||
| @@ -60,7 +60,7 @@ const FormPanel = ({ formData }) => { | |||||
| } | } | ||||
| } | } | ||||
| if(isOverTime()){ | |||||
| if (isOverTime()) { | |||||
| setWarningText("回覆逾時,請重新申請。"); | setWarningText("回覆逾時,請重新申請。"); | ||||
| setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
| return; | return; | ||||
| @@ -75,7 +75,11 @@ const FormPanel = ({ formData }) => { | |||||
| }, | }, | ||||
| files: attachments ? attachments : [], | files: attachments ? attachments : [], | ||||
| onSuccess: function () { | onSuccess: function () { | ||||
| navigate("/proof/search"); | |||||
| if (actionValue) { | |||||
| navigate("/proof/pay/"+params.id); | |||||
| } else { | |||||
| navigate("/proof/search"); | |||||
| } | |||||
| }, | }, | ||||
| onFail: function (response) { | onFail: function (response) { | ||||
| setWarningText("行動失敗: 請檢查內容並再次提交回覆"); | setWarningText("行動失敗: 請檢查內容並再次提交回覆"); | ||||
| @@ -183,8 +187,8 @@ const FormPanel = ({ formData }) => { | |||||
| id="action" | id="action" | ||||
| name="action" | name="action" | ||||
| defaultValue={true} | defaultValue={true} | ||||
| onChange={(event)=>{ | |||||
| setActionValue(event.target.value=="true"?true:false); | |||||
| onChange={(event) => { | |||||
| setActionValue(event.target.value == "true" ? true : false); | |||||
| }} | }} | ||||
| > | > | ||||
| <FormControlLabel value={true} control={<Radio />} label="可以付印(稿件正確)" /> | <FormControlLabel value={true} control={<Radio />} label="可以付印(稿件正確)" /> | ||||
| @@ -13,6 +13,7 @@ const PublicNoticeApplyForm = Loadable(lazy(() => import('pages/PublicNotice/App | |||||
| const PublicNoticeDetail = Loadable(lazy(() => import('pages/PublicNoticeDetail'))); | const PublicNoticeDetail = Loadable(lazy(() => import('pages/PublicNoticeDetail'))); | ||||
| const ProofReply = Loadable(lazy(() => import('pages/ProofReply_Public'))); | const ProofReply = Loadable(lazy(() => import('pages/ProofReply_Public'))); | ||||
| const ProofSearch = Loadable(lazy(() => import('pages/ProofSearch_Public'))); | const ProofSearch = Loadable(lazy(() => import('pages/ProofSearch_Public'))); | ||||
| const ProofPayment = Loadable(lazy(() => import('pages/ProofPayment'))); | |||||
| // ==============================|| MAIN ROUTING ||============================== // | // ==============================|| MAIN ROUTING ||============================== // | ||||
| @@ -55,6 +56,10 @@ const PublicDashboard = { | |||||
| path: 'proof/search', | path: 'proof/search', | ||||
| element: <ProofSearch/> | element: <ProofSearch/> | ||||
| }, | }, | ||||
| { | |||||
| path: 'proof/pay/:id', | |||||
| element: <ProofPayment/> | |||||
| }, | |||||
| ] | ] | ||||
| }, | }, | ||||
| ] | ] | ||||
| @@ -75,6 +75,8 @@ export const CREATE_PROOF = apiPath+'/proof/create';//POST | |||||
| export const GET_PROOF = apiPath+'/proof/details';//GET | export const GET_PROOF = apiPath+'/proof/details';//GET | ||||
| export const REPLY_PROOF = apiPath+'/proof/reply';//GET | export const REPLY_PROOF = apiPath+'/proof/reply';//GET | ||||
| export const PROOF_CHECK_PRICE = apiPath+'/proof/check-price';//GET | export const PROOF_CHECK_PRICE = apiPath+'/proof/check-price';//GET | ||||
| export const GET_PROOF_PAY = apiPath+'/proof/pay-details';//GET | |||||
| //User Group | //User Group | ||||
| export const POST_AND_UPDATE_USER_GROUP = apiPath+'/group/save'; | export const POST_AND_UPDATE_USER_GROUP = apiPath+'/group/save'; | ||||