Browse Source

feat/관제과 테이블 작업

master
sanguu516 4 weeks ago
parent
commit
93699e78d6
  1. 1045
      src/components/flight/ControlApprovalsTable.js
  2. 24
      src/components/flight/NewFlightApprovalsReport.js
  3. 88
      src/components/flight/OperationApprovalsTable.js
  4. 26
      src/configs/constants.ts
  5. 18
      src/containers/flight/ControlApprovalsContainer.js
  6. 32
      src/containers/flight/OperationApprovalsContainer.js
  7. 2
      src/redux/features/laanc/laancState.ts
  8. 21
      src/redux/features/laanc/laancThunk.ts

1045
src/components/flight/ControlApprovalsTable.js

File diff suppressed because it is too large Load Diff

24
src/components/flight/NewFlightApprovalsReport.js

@ -94,7 +94,7 @@ export default function NewFlightApprovalsReport(props) {
<Input
type='text'
bsSize='sm'
placeholder='신청번호 또는 검토결과를 입력해주세요.'
placeholder='신청번호를 입력해주세요.'
value={props.filterId}
onChange={e => props.setFilterId(e.target.value)}
onKeyPress={handleKeyDown}
@ -140,18 +140,18 @@ export default function NewFlightApprovalsReport(props) {
<CustomInput
type='select'
bsSize='sm'
id='reviewedType'
value={props.reviewedType}
onChange={e => props.setReviewedType(e.target.value)}
id='reviewedProcType'
value={props.reviewedProcType}
onChange={e => props.setReviewedProcType(e.target.value)}
onKeyPress={handleKeyDown}
>
{Object.values(
{Object.entries(
props.pageName === 'control'
? FlightCategory.Control
: FlightCategory.Operation
).map(item => (
<option key={item} value={item}>
{item}
).map(([key, value]) => (
<option key={key} value={key}>
{value}
</option>
))}
</CustomInput>
@ -172,13 +172,13 @@ export default function NewFlightApprovalsReport(props) {
onChange={e => props.setReviewedType(e.target.value)}
onKeyPress={handleKeyDown}
>
{Object.values(
{Object.entries(
props.pageName === 'control'
? FlightCategory.Operation
: FlightCategory.Control
).map(item => (
<option key={item} value={item}>
{item}
).map(([key, value]) => (
<option key={key} value={key}>
{value}
</option>
))}
</CustomInput>

88
src/components/flight/OperationApprovalsTable.js

@ -59,6 +59,7 @@ export default function OperationApprovalsTable(props) {
const [validData, setValidData] = useState();
const [reviewedTypeValue, setReviewedTypeValue] = useState('');
useEffect(() => {
let approvalCdValue = { S: 0, F: 0, C: 0, U: 0 };
@ -99,12 +100,6 @@ export default function OperationApprovalsTable(props) {
const save = async () => {
try {
const values = await form.validateFields();
const currentValue = form.getFieldValue(
`${record.planAreaSno}_${dataIndex}`
);
console.log('>>', record);
console.log('>>', currentValue);
handleSave({ ...record, ...values });
} catch (errInfo) {}
@ -134,50 +129,51 @@ export default function OperationApprovalsTable(props) {
if (type === 'operation') {
switch (value) {
case 'W':
text = '검토대기';
text = '대기';
break;
case 'Q':
text = '검토요청';
break;
case 'A':
text = '검토요청';
text = '검토요청';
break;
case 'R':
text = '검토완료';
case 'S':
text = '완료';
break;
case 'C':
text = '검토취소';
text = '검토요청취소';
break;
case 'U':
text = '검토불필요';
text = '불필요';
break;
case 'P':
text = '검토요청처리';
break;
default:
text = '-';
}
return text;
} else if (type === 'control') {
switch (value) {
case 'R':
text = '검토완료';
break;
case 'Q':
text = '검토요청';
text = '재검토';
break;
case 'W':
text = '-';
break;
case 'A':
text = '검토재요청';
text = '검토대기';
break;
case 'C':
text = '요청반려';
text = '검토취소';
break;
case 'U':
text = '-';
case 'P':
text = '요청처리';
break;
default:
text = '-';
}
return text;
}
};
// 데이터
const columns = [
{
@ -225,7 +221,7 @@ export default function OperationApprovalsTable(props) {
dataIndex: 'zoneNo',
align: 'center',
width: '85px',
render: zoneNo => <>{zoneNo}</>
render: zoneNo => <>{zoneNo}구역</>
},
{
title: <>신청자</>,
@ -463,7 +459,7 @@ export default function OperationApprovalsTable(props) {
type='select'
id='reviewedType'
style={{
width: 100
width: 110
}}
value={reviewedType}
onClick={handleMouseDown}
@ -481,18 +477,16 @@ export default function OperationApprovalsTable(props) {
<option key={4} value={'C'}>
검토요청취소
</option>
<option key={5} value={'S'}>
<option key={5} value={'P'}>
검토요청처리
</option>
<option key={6} value={'A'}>
<option key={6} value={'R'}>
재검토요청
</option>
<option key={7} value={'R'}>
<option key={7} value={'S'}>
완료
</option>
</Select>
{/* <>{handlerReviewed(reviewedType, 'operation')}</> */}
</>
);
}
@ -505,15 +499,11 @@ export default function OperationApprovalsTable(props) {
확인결과
</>
),
dataIndex: 'cReviewedType',
dataIndex: 'reviewedProcType',
align: 'center',
width: '130px',
render: cReviewedType => {
return (
<>
<>{handlerReviewed(cReviewedType, 'control')}</>
</>
);
render: reviewedProcType => {
return <>{handlerReviewed(reviewedProcType, 'control')}</>;
}
},
{
@ -574,9 +564,8 @@ export default function OperationApprovalsTable(props) {
};
});
// 운항과 select box 상태 변경
const updateReviewedType = async (value, planAreaSno) => {
console.log('>>', planAreaSno);
try {
await dispatch(
updateLaancAprvReview({
@ -624,15 +613,6 @@ export default function OperationApprovalsTable(props) {
} catch (errInfo) {
handlerErrorModal(ERROR_TITLE, ERROR_MESSAGE, true);
}
// const newData = [...tempDataSource];
// newData.map(item => {
// if (row.hasOwnProperty(item.planAreaSno)) {
// item.reviewedReason = row[item.planAreaSno];
// }
// });
// setTempDataSource(newData);
};
// 단순 메시지 표출 모달
@ -743,7 +723,7 @@ export default function OperationApprovalsTable(props) {
const checkCondition = {
A: item => item.reviewedType !== 'R' && item.reviewedType !== 'C',
Q: item => item.reviewedType !== 'W',
R: item => item.reviewedType !== 'U' && item.reviewedType !== 'W'
S: item => item.reviewedType !== 'U' && item.reviewedType !== 'W'
};
// 요청 실패 시 에러 메시지
@ -753,7 +733,7 @@ export default function OperationApprovalsTable(props) {
'검토결과 완료, 검토취소인 신청건만 재 요청이 가능합니다.'
],
Q: ['검토 요청 실패', '검토결과 대기인 신청건만 요청이 가능합니다.'],
R: [
S: [
'검토 완료 실패',
'검토불필요, 검토대기인 신청건만 재 요청이 가능합니다.'
]
@ -787,12 +767,12 @@ export default function OperationApprovalsTable(props) {
);
}
},
R: async () => {
S: async () => {
try {
await dispatch(
updateLaancAprvReview({
planAreaSnoList: checkList,
reviewedType: 'R'
reviewedType: 'S'
})
);
props.handlerSearch(
@ -864,7 +844,7 @@ export default function OperationApprovalsTable(props) {
</span>
</div>
<div className='download'>
<Button color='primary' size='sm' onClick={() => handleCheckbox('R')}>
<Button color='primary' size='sm' onClick={() => handleCheckbox('S')}>
검토 완료
</Button>
<Button color='primary' size='sm' onClick={() => handleCheckbox('Q')}>

26
src/configs/constants.ts

@ -237,22 +237,22 @@ export type DistrictCategory =
// 비행 확인 상태
export const FlightCategory = {
Control: {
: '완료',
: '검토완료',
: '검토대기',
: '재검토',
: '검토취소',
: '요청처리'
: '전체',
S: '완료',
W: '검토대기',
A: '재검토',
C: '검토취소',
P: '요청처리'
},
Operation: {
: '전체',
: '완료',
: '검토요청',
: '재검토요청',
: '대기',
: '불필요',
: '검토요청취소',
: '검토요청처리'
S: '완료',
Q: '검토요청',
A: '재검토요청',
W: '대기',
U: '불필요',
C: '검토요청취소',
P: '검토요청처리'
}
};

18
src/containers/flight/ControlApprovalsContainer.js

@ -60,6 +60,8 @@ export default function ControlApprovalsContainer({ mode }) {
// 검토 상태값
const [reviewedType, setReviewedType] = useState('전체');
const [reviewedProcType, setReviewedProcType] = useState('전체');
const [approvalCd, setApprovalCd] = useState([
{ name: '전체', value: '', select: false },
{ name: '승인', value: 'S', select: false },
@ -256,8 +258,9 @@ export default function ControlApprovalsContainer({ mode }) {
sig: filterArea.sig === '전체' ? '' : filterArea.sig,
address: filterArea.address,
...(search !== '' ? { applyNo: search } : {}),
...(reviewedType !== '전체'
? { reviewedType: checkSearch(reviewedType) }
...(reviewedType !== '전체' ? { reviewedType: reviewedType } : {}),
...(reviewedProcType !== '전체'
? { reviewedProcType: reviewedProcType }
: {}),
...(approvalCd.filter(i => i.select).length > 0
? { approvalCd: approvalCd.filter(i => i.select)[0].value }
@ -268,10 +271,11 @@ export default function ControlApprovalsContainer({ mode }) {
setFilter(search);
};
const handlerDetail = area => {
setSelected(area.planAreaSno);
//현재 선택한 sno 및 areacoordList 저장
const handlerDetail = async area => {
setSelected([area[0].planAreaSno]);
dispatch(clientSaveAreaCoordinateList([area]));
dispatch(clientSaveAreaCoordinateList(area));
handlerMapInit();
setMetersRadius('0m');
@ -339,6 +343,8 @@ export default function ControlApprovalsContainer({ mode }) {
controlLayer.features = [];
let fitZoomPaths = [];
if (!areaCoordList[0]?.lon) return;
const bufferCoordList = areas?.bufferCoordList.map(coord => {
return [coord.lon, coord.lat];
});
@ -815,6 +821,8 @@ export default function ControlApprovalsContainer({ mode }) {
setFilterArea={setFilterArea}
setReviewedType={setReviewedType}
reviewedType={reviewedType}
reviewedProcType={reviewedProcType}
setReviewedProcType={setReviewedProcType}
approvalCd={approvalCd}
handlerApprovalCd={handlerApprovalCd}
pageName='control'

32
src/containers/flight/OperationApprovalsContainer.js

@ -63,8 +63,11 @@ export default function OperationApprovalsContainer({ mode }) {
// 식별번호
const [filterId, setFilterId] = useState('');
// 검토 상태값
// 운항과 검토 상태값
const [reviewedType, setReviewedType] = useState('전체');
// 관제과 검토 상태값
const [reviewedProcType, setReviewedProcType] = useState('전체');
// laanc 검토 상태값
const [approvalCd, setApprovalCd] = useState([
{ name: '전체', value: '', select: false },
@ -273,24 +276,6 @@ export default function OperationApprovalsContainer({ mode }) {
setPopup(popupRef.current);
};
const checkSearch = text => {
switch (text) {
case '완료':
return 'R';
case '재검토요청':
return 'A';
case '대기':
return 'W';
case '불필요':
return 'U';
case '검토요청':
return 'Q';
case '검토요청취소':
return 'C';
case '검토요청처리':
return 'S';
}
};
const handlerSearch = (search, searchDate, filterArea) => {
setStartDate(searchDate.startDate);
setEndDate(searchDate.endDate);
@ -303,22 +288,21 @@ export default function OperationApprovalsContainer({ mode }) {
sig: filterArea.sig === '전체' ? '' : filterArea.sig,
address: filterArea.address,
...(search !== '' ? { applyNo: search } : {}),
...(reviewedType !== '전체'
? { reviewedType: checkSearch(reviewedType) }
...(reviewedType !== '전체' ? { reviewedType: reviewedType } : {}),
...(reviewedProcType !== '전체'
? { reviewedProcType: reviewedProcType }
: {}),
...(approvalCd.filter(i => i.select).length > 0
? { approvalCd: approvalCd.filter(i => i.select)[0].value }
: {})
})
);
// );
setFilter(search);
};
//현재 선택한 sno 및 areacoordList 저장
const handlerDetail = async area => {
console.log('>>', area);
setSelected([area[0].planAreaSno]);
dispatch(clientSaveAreaCoordinateList(area));
@ -959,6 +943,8 @@ export default function OperationApprovalsContainer({ mode }) {
setReviewedType={setReviewedType}
reviewedType={reviewedType}
approvalCd={approvalCd}
reviewedProcType={reviewedProcType}
setReviewedProcType={setReviewedProcType}
handlerApprovalCd={handlerApprovalCd}
pageName='operation'
/>

2
src/redux/features/laanc/laancState.ts

@ -647,6 +647,7 @@ export interface ILaancAprvListRs {
fltElevMax: number;
schFltEndDt: string;
updateDt: string;
reviewedProcType: string;
planAreaSno: number;
createDt: string;
purpose: string;
@ -665,6 +666,7 @@ export interface ILaancAprvListRs {
areaList: {
planAreaSno: number;
planSno: number;
reviewedProcType: string;
reviewedType: string;
reviewedReason: string;
limitZoneNm: string;

21
src/redux/features/laanc/laancThunk.ts

@ -342,7 +342,7 @@ export const updateLaancAprv = createAsyncThunk(
}
);
// 검토 수정 API
// 운항과 검토 수정 API
export const updateLaancAprvReview = createAsyncThunk(
'laanc/updateLaancAprvReview',
async (rq: ILaancApprovalReviewdRq, thunkAPI) => {
@ -360,3 +360,22 @@ export const updateLaancAprvReview = createAsyncThunk(
}
}
);
// 관제과 검토 수정 API
export const updateLaancCAprvReview = createAsyncThunk(
'laanc/updateLaancCAprvReview',
async (rq: ILaancApprovalReviewdRq, thunkAPI) => {
try {
const data: { undefined } = await axios.patch(
`api/bas/dos/plan/reviewed/proc`,
rq
);
return data;
} catch (error) {
openModal({
header: ERROR_TITLE,
body: ERROR_MESSAGE
});
}
}
);

Loading…
Cancel
Save