diff --git a/package-lock.json b/package-lock.json
index b4ba36c..675b769 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -79,6 +79,7 @@
"react-router-dom": "^6.2.1",
"react-scripts": "^4.0.3",
"react-slick": "^0.28.1",
+ "react-spinners": "^0.13.8",
"react-syntax-highlighter": "^15.4.5",
"react-timer-hook": "^3.0.5",
"react-to-print": "^2.14.4",
@@ -21456,6 +21457,15 @@
"react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0"
}
},
+ "node_modules/react-spinners": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.13.8.tgz",
+ "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==",
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/react-style-singleton": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
@@ -44239,6 +44249,12 @@
"resize-observer-polyfill": "^1.5.0"
}
},
+ "react-spinners": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.13.8.tgz",
+ "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==",
+ "requires": {}
+ },
"react-style-singleton": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
diff --git a/package.json b/package.json
index fa552d6..c0cde6b 100755
--- a/package.json
+++ b/package.json
@@ -75,6 +75,7 @@
"react-router-dom": "^6.2.1",
"react-scripts": "^4.0.3",
"react-slick": "^0.28.1",
+ "react-spinners": "^0.13.8",
"react-syntax-highlighter": "^15.4.5",
"react-timer-hook": "^3.0.5",
"react-to-print": "^2.14.4",
diff --git a/src/views/biz/admin/judge/JudgeModal.jsx b/src/views/biz/admin/judge/JudgeModal.jsx
index 8014c8b..68673c2 100644
--- a/src/views/biz/admin/judge/JudgeModal.jsx
+++ b/src/views/biz/admin/judge/JudgeModal.jsx
@@ -9,6 +9,7 @@ import Button from '@mui/material/Button';
import combo from 'commons/combo_data';
import { useState } from 'react';
import { saveJudgeStds } from 'apis/judge';
+import Loading from 'views/cmm/Loding';
const style = {
position: 'relative',
@@ -25,12 +26,14 @@ const style = {
const CmmModal = ({ isBackdrop = false, open, setOpen, title, judgeData = () => {}, dataGb, showAlert, callback }) => {
const [judgeStd, setJudgeStd] = useState('1');
+ const [loading, setLoading] = useState(false);
const handleClose = () => {
setOpen(false);
};
const handleJudge = () => {
if (window.confirm(`${judgeStd}명[부과] 기준으로 ${judgeData.length}건 심사 처리 하시겠습니까?`)) {
+ setLoading(true);
const param = {
dataGb,
judgeStdCnt: judgeStd,
@@ -38,6 +41,7 @@ const CmmModal = ({ isBackdrop = false, open, setOpen, title, judgeData = () =>
};
saveJudgeStds(param).then((res) => {
+ setLoading(false);
if (res?.success) {
showAlert.show(`${judgeData.length}건 처리되었습니다`);
setOpen(false);
@@ -87,6 +91,7 @@ const CmmModal = ({ isBackdrop = false, open, setOpen, title, judgeData = () =>
+ {loading && }
diff --git a/src/views/biz/admin/judge/JudgeTargetSaveForm.jsx b/src/views/biz/admin/judge/JudgeTargetSaveForm.jsx
index e43aaf4..57be379 100644
--- a/src/views/biz/admin/judge/JudgeTargetSaveForm.jsx
+++ b/src/views/biz/admin/judge/JudgeTargetSaveForm.jsx
@@ -3,7 +3,7 @@ import { useState } from 'react';
import NumberFormat from 'react-number-format';
import format from 'date-fns/format';
-import { Grid, TextField, MenuItem, Select, FormControl, InputLabel, Divider } from '@mui/material';
+import { Grid, TextField, MenuItem, Select, FormControl, InputLabel } from '@mui/material';
import Button from '@mui/material/Button';
import PropTypes from 'prop-types';
import { IconFileExport } from '@tabler/icons';
@@ -93,7 +93,7 @@ const JudgeTargetSaveForm = ({ handleModalSave }) => {
label="심의차수"
format="######"
fullWidth
- value={msChasu || ''}
+ value={msChasu}
onValueChange={(values) => setMsChasu(values.value)}
/>
@@ -114,11 +114,6 @@ const JudgeTargetSaveForm = ({ handleModalSave }) => {
-
-
-
-
-
} onClick={onSave}>
diff --git a/src/views/biz/admin/parking/ParkingRegister.jsx b/src/views/biz/admin/parking/ParkingRegister.jsx
index 101ca3c..c7ab2be 100644
--- a/src/views/biz/admin/parking/ParkingRegister.jsx
+++ b/src/views/biz/admin/parking/ParkingRegister.jsx
@@ -14,16 +14,29 @@ import MainCard from 'ui-component/cards/MainCard';
import MuiDataGrid from 'views/cmm/mui-grid/MuiDataGrid';
import xitCmm, { ErrorToast, saveAlert } from 'commons/XitCmm';
-import CmmModal from 'views/cmm/CmmModal';
import SaveParkingTargetForm from './SaveParkingTargetForm';
import NumberFormat from 'react-number-format';
import ExcelDownloadGrid from 'views/cmm/file-ctl/ExcelDownloadGrid';
import { findParkingJudgeTargets, saveParkingJudgeTargets } from 'apis/parking';
import getYear from 'date-fns/getYear';
import { useAlert } from 'react-alert';
+import CmmModalStyle from 'views/cmm/CmmModalStyle';
const year = getYear(new Date()).toString();
+const style = {
+ position: 'relative',
+ top: '50%',
+ left: '50%',
+ transform: 'translate(-50%, -50%)',
+ width: 500,
+ minHeight: 300,
+ bgcolor: 'background.paper',
+ border: '2px solid #000',
+ boxShadow: 24,
+ p: 3
+};
+
const ParkingRegister = () => {
const showAlert = useAlert();
const [rcIrTransfer, setRcIrTransfer] = useState('1');
@@ -227,9 +240,9 @@ const ParkingRegister = () => {
handleSelection={handleSelection}
selectionModel={selectionModel}
/>
-
+
-
+
);
};
diff --git a/src/views/biz/admin/parking/SaveParkingTargetForm.jsx b/src/views/biz/admin/parking/SaveParkingTargetForm.jsx
index 6ad2849..0506325 100644
--- a/src/views/biz/admin/parking/SaveParkingTargetForm.jsx
+++ b/src/views/biz/admin/parking/SaveParkingTargetForm.jsx
@@ -2,31 +2,27 @@ import { useState } from 'react';
import NumberFormat from 'react-number-format';
import format from 'date-fns/format';
-import getHours from 'date-fns/getHours';
-import koLocale from 'date-fns/locale/ko';
import { Grid, TextField, MenuItem, Select, FormControl, InputLabel } from '@mui/material';
-import DateAdapter from '@mui/lab/AdapterDateFns';
-import LocalizationProvider from '@mui/lab/LocalizationProvider';
-import { DatePicker, TimePicker } from '@mui/lab';
import Button from '@mui/material/Button';
import PropTypes from 'prop-types';
import { IconFileExport } from '@tabler/icons';
import combo from 'commons/combo_data';
import { useAlert } from 'react-alert';
+import { MuiXDatePicker, MuiXMobileTimePicker } from 'views/cmm/MuiXDatePicker';
const toDate = new Date();
const SaveParkingTargetForm = ({ handleModalSave }) => {
const showAlert = useAlert();
const [msuTeam, setMsuTeam] = useState(' ');
+ const [msChasu, setMsChasu] = useState();
const [msSdate, setMsSdate] = useState(format(toDate, 'yyyy-MM-dd'));
- const [msStartsi, setMsStartsi] = useState(`${format(toDate, 'yyyy-MM-dd')} 09:00`);
+ const [msStartsi, setMsStartsi] = useState('00');
const [msEdate, setMsEdate] = useState(format(toDate, 'yyyy-MM-dd'));
- const [msChasu, setMsChasu] = useState();
const [msCdate, setMsCdate] = useState(format(toDate, 'yyyy-MM-dd'));
- const [msClosesi, setMsClosesi] = useState(`${format(toDate, 'yyyy-MM-dd')} 18:00`);
+ const [msClosesi, setMsClosesi] = useState('23');
const onSave = () => {
if (!msuTeam || msuTeam.length < 3) {
@@ -44,78 +40,39 @@ const SaveParkingTargetForm = ({ handleModalSave }) => {
return;
}
- if (msEdate.toString() > msCdate.toString()) {
- showAlert.show('심의종료일과 심의마감일을 확인해 주세요');
+ if (msEdate.replace(/-/g, '') > msCdate.replace(/-/g, '')) {
+ showAlert.show('심사 종료일자가 심사 마감일자보다 클 수 없습니다.');
+ return;
+ }
+
+ if (msStartsi.length < 2) {
+ showAlert.show('심사 시작시간은 필수입니다.');
+ return;
+ }
+
+ if (msClosesi.length < 2) {
+ showAlert.show('심사 마감시간은 필수입니다.');
return;
}
handleModalSave({
msuTeam,
+ msChasu,
msSdate,
- msStartsi: getHours(new Date(msStartsi)),
+ msStartsi,
msEdate,
- msChasu,
msCdate,
- msClosesi: getHours(new Date(msClosesi))
+ msClosesi
});
};
return (
<>
-
-
- }
- label="심의시작일"
- value={msSdate}
- inputFormat="yyyy-MM-dd"
- mask="____-__-__"
- onChange={(newValue) => {
- setMsSdate(format(newValue, 'yyyy-MM-dd'));
- }}
- />
-
- {/* */}
-
-
-
- }
- label="심의시작시간"
- value={msStartsi}
- inputFormat="HH"
- mask="__"
- onChange={(newValue) => {
- // setMsStartsi(format(newValue, 'HH'));
- setMsStartsi(newValue);
- }}
- />
-
- {/* */}
-
-
-
- }
- label="심의종료일"
- value={msEdate}
- inputFormat="yyyy-MM-dd"
- mask="____-__-__"
- onChange={(newValue) => {
- setMsEdate(format(newValue, 'yyyy-MM-dd'));
- }}
- />
-
-
-
+
심의팀
-
-
+
{
onValueChange={(values) => setMsChasu(values.value)}
/>
-
-
- }
- label="심의마감일"
- value={msCdate}
- inputFormat="yyyy-MM-dd"
- mask="____-__-__"
- onChange={(newValue) => {
- setMsCdate(format(newValue, 'yyyy-MM-dd'));
- }}
- />
-
-
- {/* setMsCdate(format(e.target.value), 'yyyy-MM-dd')} */}
- {/* /> */}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- }
- renderInput={(props) => }
- label="심의마감시간"
- value={msClosesi}
- inputFormat="HH"
- mask="__"
- onChange={(newValue) => {
- setMsClosesi(newValue);
- }}
- />
-
+
+
diff --git a/src/views/cmm/Loding.jsx b/src/views/cmm/Loding.jsx
new file mode 100644
index 0000000..6f87467
--- /dev/null
+++ b/src/views/cmm/Loding.jsx
@@ -0,0 +1,31 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import { ClockLoader } from 'react-spinners';
+
+const style = {
+ borderRadius: '5%',
+ position: 'fixed',
+ top: '50%',
+ left: '50%',
+ transform: 'translate(-50%, -50%)',
+ backgroundColor: 'white',
+ width: 150,
+ height: 100,
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center',
+ color: '#36d7b7'
+};
+
+function Loading() {
+ return (
+
+
+
+ Process Loding...
+
+
+ );
+}
+
+export default Loading;