diff --git a/src/pages/ProofReply_GLD/ApplicationDetails.js b/src/pages/ProofReply_GLD/ApplicationDetails.js
new file mode 100644
index 0000000..2e10973
--- /dev/null
+++ b/src/pages/ProofReply_GLD/ApplicationDetails.js
@@ -0,0 +1,244 @@
+// material-ui
+import {
+ FormControl,
+ Grid,
+ Typography,
+ FormLabel,
+ TextField,
+} from '@mui/material';
+
+import { useFormik } from 'formik';
+import * as React from "react";
+import * as DateUtils from "utils/DateUtils"
+import { useParams } from "react-router-dom";
+import Loadable from 'components/Loadable';
+const MainCard = Loadable(React.lazy(() => import('components/MainCard')));
+import * as StatusUtils from "../PublicNotice/ListPanel/PublicNoteStatusUtils";
+import FileList from "components/FileList"
+// ==============================|| DASHBOARD - DEFAULT ||============================== //
+const ApplicationDetailCard = ({ formData, }) => {
+
+ const params = useParams();
+
+ const [data, setData] = React.useState({});
+ //const [proofId, setProofId] = React.useState();
+
+ React.useEffect(() => {
+ if (formData) {
+ setData(formData);
+ //setProofId(formData.id);
+ }
+ }, [formData]);
+
+ const formik = useFormik({
+ enableReinitialize: true,
+ initialValues: data,
+ });
+
+ const DisplayField = ({ name, width }) => {
+ return ;
+ }
+
+ function currencyFormat(num) {
+ let val = num ? num : 0;
+ return val.toLocaleString('en-US', {
+ minimumFractionDigits: 2
+ });
+ }
+
+
+ return (
+
+
+ Public Notice: Proofreading Reply
+
+
+
+ );
+};
+
+export default ApplicationDetailCard;
diff --git a/src/pages/ProofReply_GLD/ProofForm.js b/src/pages/ProofReply_GLD/ProofForm.js
new file mode 100644
index 0000000..0164783
--- /dev/null
+++ b/src/pages/ProofReply_GLD/ProofForm.js
@@ -0,0 +1,108 @@
+// material-ui
+import {
+ Typography,
+ Grid,
+} from '@mui/material';
+import FileList from "components/FileList"
+import MainCard from "components/MainCard";
+import * as React from "react";
+import { useParams } from "react-router-dom";
+import { useFormik } from 'formik';
+import * as DateUtils from "utils/DateUtils"
+
+
+// ==============================|| DASHBOARD - DEFAULT ||============================== //
+
+
+const FormPanel = ({ formData }) => {
+
+ const [data, setData] = React.useState({});
+ const params = useParams();
+
+ React.useEffect(() => {
+ if (formData) {
+ setData(formData);
+ }
+ }, [formData]);
+
+ const formik = useFormik({
+ enableReinitialize: true,
+ initialValues: data,
+ });
+
+
+
+ const isOverTime = () => {
+ let returnBeforeDate = DateUtils.convertToDate(formik.values?.returnBeforeDate);
+ if (!returnBeforeDate) return true;
+ returnBeforeDate = returnBeforeDate.setHours(14, 0, 0, 0);
+
+ let current = new Date();
+ return current.getTime() > returnBeforeDate;
+ }
+
+
+
+ return (
+
+
+
+ Public Notice: Proofreading Reply
+
+
+
+
+ );
+};
+
+export default FormPanel;
diff --git a/src/pages/ProofReply_GLD/UploadFileTable.js b/src/pages/ProofReply_GLD/UploadFileTable.js
new file mode 100644
index 0000000..9090721
--- /dev/null
+++ b/src/pages/ProofReply_GLD/UploadFileTable.js
@@ -0,0 +1,111 @@
+// material-ui
+import * as React from 'react';
+import {
+ DataGrid,
+ GridActionsCellItem,
+ GridRowModes
+} from "@mui/x-data-grid";
+import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';
+import {useEffect} from "react";
+// import {useNavigate} from "react-router-dom";
+// import { useTheme } from '@mui/material/styles';
+import {
+ Box,
+ Stack
+} from '@mui/material';
+// ==============================|| EVENT TABLE ||============================== //
+
+export default function UploadFileTable({recordList, setRecordList,}) {
+
+ const [rows, setRows] = React.useState(recordList);
+ const [rowModesModel,setRowModesModel] = React.useState({});
+ // const theme = useTheme();
+
+ // const navigate = useNavigate()
+
+ useEffect(() => {
+ setRows(recordList);
+ // console.log(disableDelete);
+ }, [recordList]);
+
+ function NoRowsOverlay() {
+ return (
+
+ No File Record
+ {/* (rows={[]})
*/}
+
+ );
+ }
+
+ const handleCancelClick = (id) => () => {
+ setRowModesModel({
+ ...rowModesModel,
+ [id]: { mode: GridRowModes.View, ignoreModifications: true },
+ });
+ console.log("Starting Delete")
+ const editedRow = rows.find((row) => row.id === id);
+ console.log(editedRow)
+ console.log(editedRow.isNew)
+ setRecordList(rows.filter((row) => row.id !== id));
+ setRows(rows.filter((row) => row.id !== id));
+ }
+
+ const columns = [
+ {
+ field: 'actions',
+ type: 'actions',
+ headerName: '',
+ width: 30,
+ cellClassName: 'actions',
+ // hide:true,
+ getActions: ({id}) => {
+ return [
+ }
+ label="delete"
+ className="textPrimary"
+ onClick={handleCancelClick(id)}
+ color="error"
+ />]
+ },
+ },
+ {
+ id: 'name',
+ field: 'name',
+ headerName: '檔案名稱',
+ flex: 1,
+ },
+ {
+ id: 'size',
+ field: 'size',
+ headerName: '檔案大小',
+ valueGetter: (params) => {
+ // console.log(params)
+ return Math.ceil(params.value/1024)+" KB";
+ },
+ flex: 1,
+ },
+ ];
+
+ return (
+
+
+
+ );
+}
diff --git a/src/pages/ProofReply_GLD/index.js b/src/pages/ProofReply_GLD/index.js
new file mode 100644
index 0000000..d2604d4
--- /dev/null
+++ b/src/pages/ProofReply_GLD/index.js
@@ -0,0 +1,133 @@
+// material-ui
+import {
+ Grid,
+ Typography,
+ Stack,
+ Box
+} from '@mui/material';
+import * as UrlUtils from "utils/ApiPathConst";
+import * as React from "react";
+import * as HttpUtils from "utils/HttpUtils";
+import * as DateUtils from "utils/DateUtils";
+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')));
+const ApplicationDetails = Loadable(React.lazy(() => import('./ApplicationDetails')));
+const ProofForm = Loadable(React.lazy(() => import('./ProofForm')));
+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 + "/" + params.id,
+ onSuccess: (responseData) => {
+ if(!responseData.data?.id){
+ navigate("/proof/search");
+ }
+ responseData.data["phoneNumber"] = JSON.parse(responseData.data.contactTelNo).phoneNumber;
+ responseData.data["tel_countryCode"] = JSON.parse(responseData.data.contactTelNo).countryCode;
+
+ responseData.data["faxNumber"] = JSON.parse(responseData.data.contactFaxNo).faxNumber;
+ responseData.data["fax_countryCode"] = JSON.parse(responseData.data.contactFaxNo).countryCode;
+
+ responseData.data["issueNoStr"] = responseData.data.issueYear
+ + " Vol. " + zeroPad(responseData.data.issueVolume, 3)
+ + ", No. " + zeroPad(responseData.data.issueNo, 2);
+
+ responseData.data["issueDateStr"] = DateUtils.dateFormat(responseData.data.issueDate, "D MMM YYYY (ddd)");
+
+ responseData.data["groupType"] = responseData.data.groupNo.charAt(0);
+ responseData.data["action"] = responseData.data.replyDate ? responseData.data.action : true;
+ setRecord(responseData.data);
+ }
+ });
+ }
+ }
+
+ function zeroPad(num, places) {
+ num = num ? num : 0;
+ var zero = places - num.toString().length + 1;
+ return Array(+(zero > 0 && zero)).join("0") + num;
+ }
+
+
+ return (
+ !onReady ?
+
+ :
+ (
+
+
+
+
+ 校對記錄
+
+
+
+ {/*row 1*/}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/*row 2*/}
+
+
+
+ )
+
+
+ );
+};
+
+export default Index;
diff --git a/src/pages/ProofReply_Public/ProofForm.js b/src/pages/ProofReply_Public/ProofForm.js
index b96612b..53d9e03 100644
--- a/src/pages/ProofReply_Public/ProofForm.js
+++ b/src/pages/ProofReply_Public/ProofForm.js
@@ -148,7 +148,7 @@ const FormPanel = ({ formData }) => {
校對回覆日期: {DateUtils.datetimeStr_Cht(formik.values.replyDate)}
- 校對回覆: {formik.values.action ? "可以付印(稿件正確)" : "未能付印(需要修改)"}
+ 校對回覆: {formik.values.action ? (可以付印(稿件正確)): (未能付印(需要修改))}
{
formik.values.action ?
diff --git a/src/pages/ProofSearch/DataGrid.js b/src/pages/ProofSearch/DataGrid.js
index e71453e..cf2819c 100644
--- a/src/pages/ProofSearch/DataGrid.js
+++ b/src/pages/ProofSearch/DataGrid.js
@@ -17,7 +17,7 @@ export default function SearchPublicNoticeTable({ recordList }) {
}, [recordList]);
const handleEditClick = (params) => () => {
- navigate('/application/'+ params.row.appId);
+ navigate('/proof/reply/'+ params.row.id);
};
diff --git a/src/routes/GLDUserRoutes.js b/src/routes/GLDUserRoutes.js
index 33ab5b3..44d748c 100644
--- a/src/routes/GLDUserRoutes.js
+++ b/src/routes/GLDUserRoutes.js
@@ -11,6 +11,7 @@ const ApplicationDetail = Loadable(lazy(() => import('pages/PublicNoticeDetail_G
const ApplicationSearch = Loadable(lazy(() => import('pages/PublicNoticeSearch_GLD')));
const ProofSearch = Loadable(lazy(() => import('pages/ProofSearch')));
const ProofCreate_FromApp = Loadable(lazy(() => import('pages/ProofCreate_FromApp')));
+const ProofReply_GLD = Loadable(lazy(() => import('pages/ProofReply_GLD')));
// ==============================|| MAIN ROUTING ||============================== //
const GLDUserRoutes = {
@@ -43,6 +44,10 @@ const GLDUserRoutes = {
{
path: '/proof/create/:id',
element:
+ },
+ {
+ path: '/proof/reply/:id',
+ element:
}
]
},