diff --git a/src/apis/parking.js b/src/apis/parking.js
index c1e3114..8910659 100644
--- a/src/apis/parking.js
+++ b/src/apis/parking.js
@@ -3,7 +3,14 @@
//----------------------------------------------------------------------------
import axios from 'utils/axios';
-import { GET_PARKING_JUDGE_TARGET_LIST, GET_PARKING_LIST, REMOVE_PARKING_JUDGE, SAVE_PARKING_JUDGE_TARGET_LIST } from 'commons/ApiUrl';
+import {
+ GET_JUDGE_LIST,
+ GET_PARKING_JUDGE_LIST,
+ GET_PARKING_JUDGE_TARGET_LIST,
+ GET_PARKING_LIST,
+ REMOVE_PARKING_JUDGE,
+ SAVE_PARKING_JUDGE_TARGET_LIST
+} from 'commons/ApiUrl';
import { setRowId } from './common';
// eslint-disable-next-line no-return-await
@@ -34,3 +41,15 @@ export async function removeParkingJudge(params) {
// eslint-disable-next-line no-return-await
return await axios.post(REMOVE_PARKING_JUDGE, params);
}
+
+//----------------------------------------------------------------
+// 심사자
+//----------------------------------------------------------------
+export async function findByUserJudges(params) {
+ const res = await axios.get(GET_PARKING_JUDGE_LIST, { params });
+ if (res.success) {
+ res.data = res.data.map((d, idx) => ({ ...d, rowId: setRowId(params, idx) }));
+ return res;
+ }
+ return res;
+}
diff --git a/src/commons/ApiUrl.js b/src/commons/ApiUrl.js
index e1e2cd0..882bdba 100644
--- a/src/commons/ApiUrl.js
+++ b/src/commons/ApiUrl.js
@@ -24,6 +24,8 @@ export const GET_PARKING_JUDGE_TARGET_LIST = '/api/v1/ctgy/parking/target';
export const SAVE_PARKING_JUDGE_TARGET_LIST = '/api/v1/ctgy/parking/target';
export const REMOVE_PARKING_JUDGE = '/api/v1/ctgy/parking/remove';
+export const GET_PARKING_JUDGE_LIST = '/api/v1/ctgy/parking/judge';
+
// 거주자/장애인 의견 진술
export const GET_ADMIN_JUDGE_DATA_LIST = '/api/v1/ctgy/admin/data';
export const SAVE_ADMIN_JUDGE_DATA = '/api/v1/ctgy/admin/data';
diff --git a/src/menu-items/judge.js b/src/menu-items/judge.js
index a466e72..55ee123 100644
--- a/src/menu-items/judge.js
+++ b/src/menu-items/judge.js
@@ -73,7 +73,7 @@ const judge = {
id: 'judge-2-1',
title: ,
type: 'item',
- url: '/parking/review',
+ url: '/judge/parking/review',
icon: icons.IconList
},
{
diff --git a/src/routes/MainRoutes.js b/src/routes/MainRoutes.js
index 5bb659d..cd45973 100755
--- a/src/routes/MainRoutes.js
+++ b/src/routes/MainRoutes.js
@@ -17,6 +17,7 @@ const Board = Loadable(lazy(() => import('views/biz/board/Board')));
// parking
const ParkingReview = Loadable(lazy(() => import('views/biz/admin/parking/ParkingReview')));
const ParkingRegister = Loadable(lazy(() => import('views/biz/admin/parking/ParkingRegister')));
+const ParkingUserByJudgeReview = Loadable(lazy(() => import('views/biz/judge/ParkingJudgeByUserReview')));
// Admin Resident /Disabled
const JudgeDataReview = Loadable(lazy(() => import('views/biz/admin/judge/JudgeDataReview')));
@@ -106,6 +107,10 @@ const MainRoutes = {
},
// ----------------------------------------
+ {
+ path: '/judge/parking/review',
+ element:
+ },
{
path: '/judge/resident/review',
element:
diff --git a/src/views/biz/board/NewBoardForm.jsx b/src/views/biz/board/NewBoardForm.jsx
index 3d05b22..803a005 100644
--- a/src/views/biz/board/NewBoardForm.jsx
+++ b/src/views/biz/board/NewBoardForm.jsx
@@ -1,11 +1,8 @@
import { useMemo, useRef, useState } from 'react';
-import { useAlert } from 'react-alert';
// material-ui
import { Button, Divider, Grid, TextField } from '@mui/material';
-// assets
-
// berry ui
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css';
diff --git a/src/views/biz/judge/JudgeByUserReview.jsx b/src/views/biz/judge/JudgeByUserReview.jsx
index 34f173b..ae60c7a 100644
--- a/src/views/biz/judge/JudgeByUserReview.jsx
+++ b/src/views/biz/judge/JudgeByUserReview.jsx
@@ -172,52 +172,51 @@ const JudgeByUserReview = ({ msDatagb, menuName }) => {
return (
-
-
-
-
- [ 심의기간 : {' '}
-
- {minSdate} ~ {maxEdate}
- {' '}
- ]
-
+ {totalCount > 0 && (
+ <>
+
+
+
+
+ [ 심의기간 : {' '}
+
+ {minSdate} ~ {maxEdate}
+ {' '}
+ ]
+
+
+
+
+ [ 접수번호 :
+
+ {' '}
+ {minSeq} ~ {maxSeq}
+ {' '}
+ ]
+
+
+
+
+
+
+ [ {user?.name} 위원 /
+ {user?.team?.substring(2)}팀 ]
+
+
+
+ } onClick={onJudge}>
+ 심사
+
+
+
-
-
- [ 접수번호 :
-
- {' '}
- {minSeq} ~ {maxSeq}
- {' '}
- ]
-
+
+
+
+
-
-
-
-
- [ {user?.name} 위원 /
- {user?.team?.substring(2)}팀 ]
-
-
-
- } onClick={onJudge}>
- 심사
-
-
-
- {/* */}
- {/* } onClick={onJudge}> */}
- {/* 심사 */}
- {/* */}
- {/* */}
-
-
-
-
-
-
+ >
+ )}
{
+ const { user } = useAuth();
+ const showAlert = useAlert();
+ const [totalCount, setTotalCount] = useState(0);
+ const [rowsState, setRowsState] = useState({
+ page: 0,
+ pageSize: 100,
+ rows: []
+ // loading: false
+ });
+ const [open, setOpen] = useState(false);
+ const [title, setTitle] = useState('');
+ const [rowDatas, setRowDatas] = useState([]);
+ const [minSdate, setMinSdate] = useState('');
+ const [maxEdate, setMaxEdate] = useState('');
+ const [minSeq, setMinSeq] = useState(0);
+ const [maxSeq, setMaxSeq] = useState(0);
+
+ const search = useCallback(() => {
+ findByUserJudges().then((res) => {
+ if (res && res.data) {
+ setTotalCount(res.count);
+ setRowsState((prevState) => ({ ...prevState, rows: res.data }));
+
+ if (res?.data?.length > 0) {
+ const arrMsSeq = res?.data?.map((r) => r.msSeq);
+ setMinSdate(_.min(res?.data?.map((r) => r.msSdate)));
+ setMaxEdate(_.max(res?.data?.map((r) => r.msEdate)));
+ setMinSeq(_.min(arrMsSeq));
+ setMaxSeq(_.max(arrMsSeq));
+ }
+ }
+ });
+ }, []);
+
+ const onJudge = () => {
+ // setRowDatas(rowsState?.rows);
+ // setTitle(`주정차 의견진술 심의 결정`);
+ // setOpen(true);
+ alert('적용예정');
+ };
+
+ const processJudge = useCallback(
+ (row) => () => {
+ // setRowDatas([row]);
+ // setTitle(`주정차 의견진술 심의 결정`);
+ // setOpen(true);
+ alert('적용예정');
+ },
+ []
+ );
+
+ const columns = [
+ // { headerName: 'rowId', field: 'rowId' },
+ {
+ headerName: '접수번호',
+ headerAlign: 'center',
+ field: 'msSeq',
+ align: 'center',
+ width: 100
+ },
+ { headerName: '심의차수', headerAlign: 'center', field: 'msChasu', align: 'center', width: 100 },
+ { headerName: '차량번호', headerAlign: 'center', field: 'msCarnum', align: 'center', width: 100 },
+ {
+ headerName: '민원결과',
+ headerAlign: 'center',
+ field: 'msResult',
+ align: 'center',
+ renderCell: (params) => {
+ switch (params.row.msResult) {
+ case '0':
+ return '심의전';
+ // break;
+ case '1':
+ return '부과';
+ // break;
+ case '2':
+ return '미부과';
+ // break;
+ default:
+ return params.row.msResult;
+ }
+ },
+ width: 100
+ },
+ {
+ headerName: '심사자심사',
+ headerAlign: 'center',
+ field: 'msuResult',
+ align: 'center',
+ renderCell: (params) => {
+ switch (params.row.msuResult) {
+ case '0':
+ return '심의전';
+ // break;
+ case '1':
+ return '부과';
+ // break;
+ case '2':
+ return '미부과';
+ // break;
+ default:
+ return params.row.msuResult;
+ }
+ },
+ width: 100
+ },
+ {
+ headerName: '심의 기간',
+ headerAlign: 'center',
+ field: 'msDate',
+ minWidth: 200,
+ width: 250,
+ description: '심사 기간',
+ valueGetter: (params) => `${params.row.msSdate} ~ ${params.row.msEdate}`,
+ align: 'center'
+ },
+ {
+ headerName: '심의 마감 일시',
+ headerAlign: 'center',
+ field: 'msCdate',
+ type: 'dateTime',
+ minWidth: 150,
+ width: 200,
+ valueGetter: (params) => `${params.row.msCdate} ${params.row.msClosesi}`,
+ align: 'center'
+ },
+ {
+ headerName: '개별심사',
+ headerAlign: 'center',
+ field: 'actions',
+ type: 'actions',
+ width: 80,
+ getActions: (params) => [
+ } label="개별심사" onClick={processJudge(params.row)} />
+ ],
+ align: 'center'
+ }
+ ];
+
+ const handleSearch = async (event) => {
+ if (event.type === 'keydown' && event.key === 'Enter') {
+ search();
+ }
+ };
+
+ useEffect(() => {
+ search();
+ // }, [rowsState.page, rowsState.pageSize, selectedYear, searchTxt]);
+ }, [search]);
+
+ return (
+
+ {totalCount > 0 && (
+ <>
+
+
+
+
+ [ 심의기간 : {' '}
+
+ {minSdate} ~ {maxEdate}
+ {' '}
+ ]
+
+
+
+
+ [ 접수번호 :
+
+ {' '}
+ {minSeq} ~ {maxSeq}
+ {' '}
+ ]
+
+
+
+
+
+
+ [ {user?.name} 위원 /
+ {user?.team?.substring(2)}팀 ]
+
+
+
+ } onClick={onJudge}>
+ 심사
+
+
+
+
+
+
+
+
+
+ >
+ )}
+
+
+
+
+
+ );
+};
+
+export default ParkingJudgeByUserReview;
diff --git a/src/views/biz/judge/ProcessJudge.jsx b/src/views/biz/judge/ProcessJudge.jsx
index f608dc8..9a4769b 100644
--- a/src/views/biz/judge/ProcessJudge.jsx
+++ b/src/views/biz/judge/ProcessJudge.jsx
@@ -68,14 +68,11 @@ const ProcessJudge = (props) => {
<>
{picadImgs?.map((img, idx) => (
-
+
@@ -85,14 +82,11 @@ const ProcessJudge = (props) => {
{frecadImgs?.map((img, idx) => (
-
+
@@ -102,14 +96,11 @@ const ProcessJudge = (props) => {
{contadImgs?.map((img, idx) => (
-
+
diff --git a/src/views/biz/judge/ProcessParkingJudge.jsx b/src/views/biz/judge/ProcessParkingJudge.jsx
new file mode 100644
index 0000000..bf15f26
--- /dev/null
+++ b/src/views/biz/judge/ProcessParkingJudge.jsx
@@ -0,0 +1,206 @@
+import { useEffect, useRef, useState } from 'react';
+import PropTypes from 'prop-types';
+
+import { Button, CardMedia, Divider, FormControl, Grid, InputLabel, MenuItem, Select, TextField } from '@mui/material';
+import { findImages, saveJudgeResult } from 'apis/judge';
+import { SkipNext, SkipPrevious, Save } from '@mui/icons-material';
+
+const ProcessParkingJudge = (props) => {
+ const { rowDatas, setOpen, showAlert } = props;
+ const pageRef = useRef(0);
+ const totalPageRef = useRef(0);
+ const curDataRef = useRef({});
+ const [picadImgs, setPicadImgs] = useState([]);
+ const [frecadImgs, setFrecadImgs] = useState([]);
+ const [contadImgs, setContadImgs] = useState([]);
+ const [reason, setReason] = useState();
+ const [selectedResult, setSelectedResult] = useState();
+
+ const getImgList = (row) => {
+ findImages(row, showAlert).then((res) => {
+ const { arrPicadImg, arrFrecadImg, arrContadImg } = res;
+ setPicadImgs(arrPicadImg);
+ setFrecadImgs(arrFrecadImg);
+ setContadImgs(arrContadImg);
+ });
+ };
+
+ const onPrev = () => {
+ pageRef.current -= 1;
+ curDataRef.current = rowDatas[pageRef.current];
+ setReason(curDataRef.current.msuReason ?? '');
+ setSelectedResult(curDataRef.current.msuResult);
+ getImgList(curDataRef.current);
+ };
+ const onNext = () => {
+ pageRef.current += 1;
+ curDataRef.current = rowDatas[pageRef.current];
+ setReason(curDataRef.current.msuReason ?? '');
+ setSelectedResult(curDataRef.current.msuResult);
+ getImgList(rowDatas[pageRef.current]);
+ };
+
+ const handleSave = () => {
+ saveJudgeResult({ msuCode: curDataRef.current.msuCode, msuResult: selectedResult, msuReason: reason }).then((res) => {
+ if (res?.success) {
+ curDataRef.current.msuResult = selectedResult;
+ curDataRef.current.msuReason = reason;
+ showAlert.show('심의처리 되었습니다');
+ } else {
+ showAlert.show(`${res?.data.message}`);
+ }
+ });
+ };
+ const handleClose = () => {
+ setOpen(false);
+ };
+
+ useEffect(() => {
+ pageRef.current = 0;
+ totalPageRef.current = rowDatas.length - 1;
+ curDataRef.current = rowDatas[pageRef.current];
+ setReason(curDataRef.current.msuReason ?? '');
+ setSelectedResult(curDataRef.current.msuResult);
+ getImgList(curDataRef.current);
+ }, []);
+
+ return (
+ <>
+
+ {picadImgs?.map((img, idx) => (
+
+
+
+ ))}
+
+
+
+ {frecadImgs?.map((img, idx) => (
+
+
+
+ ))}
+
+
+
+ {contadImgs?.map((img, idx) => (
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 심의결정
+
+
+
+
+
+
+
+ setReason(e.target.value)}
+ />
+
+
+
+
+
+
+
+
+
+ } onClick={onPrev}>
+ 이전
+
+
+
+ }
+ onClick={onNext}
+ >
+ 다음
+
+
+
+ } onClick={handleSave}>
+ 심의처리
+
+
+
+
+
+
+ >
+ );
+};
+
+ProcessParkingJudge.propTypes = {
+ rowDatas: PropTypes.array.isRequired,
+ showAlert: PropTypes.object,
+ setOpen: PropTypes.func.isRequired
+};
+
+export default ProcessParkingJudge;
diff --git a/src/views/cmm/mui-grid/MuiDataGrid.jsx b/src/views/cmm/mui-grid/MuiDataGrid.jsx
index f595922..7b6f323 100644
--- a/src/views/cmm/mui-grid/MuiDataGrid.jsx
+++ b/src/views/cmm/mui-grid/MuiDataGrid.jsx
@@ -3,9 +3,7 @@ import PropTypes from 'prop-types';
// material-ui
import { DataGrid, gridClasses } from '@mui/x-data-grid';
-// import { grey } from '@mui/material/colors';
import Box from '@mui/material/Box';
-// import { useTheme } from '@mui/material/styles';
import { useTheme } from '@mui/styles';
import dataGridKoKR from './defaultDataGridLocale';
import CustomPagination from './CustomPagination';