|
|
|
@ -14,6 +14,8 @@ import {
|
|
|
|
|
import { useDispatch, useSelector } from 'react-redux'; |
|
|
|
|
import { drawTypeChangeAction } from '../../modules/control/map/actions/controlMapActions'; |
|
|
|
|
import * as LaancAction from '../../modules/laanc/actions/laancActions'; |
|
|
|
|
import * as AreaAction from '../../modules/basis/flight/actions/basisFlightAction'; |
|
|
|
|
import axios from '../../modules/utils/customAxiosUtil'; |
|
|
|
|
|
|
|
|
|
export default function LaancPlanContainer({ |
|
|
|
|
currentParm, |
|
|
|
@ -30,7 +32,6 @@ export default function LaancPlanContainer({
|
|
|
|
|
const [detailData, setDetailData] = useState(initFlightBas.initDetail); |
|
|
|
|
const [finalDetailData, setFinalDetailData] = useState({}); |
|
|
|
|
const [centeredModal, setCenteredModal] = useState(false); |
|
|
|
|
const [formModal, setFormModal] = useState(false); |
|
|
|
|
const [isErrorModal, setIsErrorModal] = useState({ |
|
|
|
|
isOpen: false, |
|
|
|
|
title: '', |
|
|
|
@ -57,6 +58,43 @@ export default function LaancPlanContainer({
|
|
|
|
|
}; |
|
|
|
|
}, []); |
|
|
|
|
|
|
|
|
|
// 적용 버튼 Reducer 업데이트 될때마다 검사 로직
|
|
|
|
|
useEffect(() => { |
|
|
|
|
if (detailData.areaList[0].fltElev != 0) { |
|
|
|
|
const maxElev = 150; |
|
|
|
|
const controlledAltitudeExceededWarning = |
|
|
|
|
laancArea?.duplicated && |
|
|
|
|
parseInt( |
|
|
|
|
detailData.areaList[0].fltElev.replace('/^0+/', 'm', ''), |
|
|
|
|
10 |
|
|
|
|
) >= laancElev && |
|
|
|
|
parseInt(detailData.areaList[0].fltElev.replace('/^0+/', 'm', ''), 10) < |
|
|
|
|
maxElev; |
|
|
|
|
|
|
|
|
|
if (controlledAltitudeExceededWarning) { |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
|
title: '검토 결과 사전안내', |
|
|
|
|
desc: ( |
|
|
|
|
<> |
|
|
|
|
유효성 검사에 실패하여 미 승인 대상입니다. |
|
|
|
|
<br /> |
|
|
|
|
제출하신 비행계획서의 고도는 {laancElev}m이하에서만 비행이 |
|
|
|
|
가능합니다. |
|
|
|
|
<br /> |
|
|
|
|
고도 설정을 다시 확인해주시기 바랍니다. |
|
|
|
|
</> |
|
|
|
|
) |
|
|
|
|
}); |
|
|
|
|
handleChange({ |
|
|
|
|
type: 'area', |
|
|
|
|
name: 'fltElev', |
|
|
|
|
value: 0 |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}, [laancElev]); |
|
|
|
|
|
|
|
|
|
//비행 방식 직접 입력칸 작성 시 api 호출 부분
|
|
|
|
|
useEffect(() => { |
|
|
|
|
if (Object.getOwnPropertyNames(finalDetailData).length != 0) { |
|
|
|
@ -65,33 +103,16 @@ export default function LaancPlanContainer({
|
|
|
|
|
}, [finalDetailData]); |
|
|
|
|
|
|
|
|
|
// laanc 승인 api 200 시 step 이동
|
|
|
|
|
const handlerLaanc = () => { |
|
|
|
|
// laanc 필요 없이 날 수 있음
|
|
|
|
|
|
|
|
|
|
const handlerLaanc = async () => { |
|
|
|
|
if (laancArea && laancElev) { |
|
|
|
|
// laanc 필요 없이 날 수 있음
|
|
|
|
|
const laancNotRequired = |
|
|
|
|
!laancArea.duplicated && |
|
|
|
|
detailData.fltType != 'COMMERCIAL' && |
|
|
|
|
detailData.arcrftList[0].arcrftWghtCd != '11'; |
|
|
|
|
|
|
|
|
|
const maxElev = 150; |
|
|
|
|
if (detailData.arcrftList[0].idntfNum === 'PA0002') { |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
|
title: '검토 결과 사전안내', |
|
|
|
|
desc: ( |
|
|
|
|
<> |
|
|
|
|
유효성 검사에 실패하여 미 승인 대상입니다. |
|
|
|
|
<p> |
|
|
|
|
기체가 보험에 가입되어 있지 않거나 유효기간이 만료되었습니다. |
|
|
|
|
<br /> |
|
|
|
|
기체 번호를 다시 확인해주시기 바랍니다. |
|
|
|
|
</p> |
|
|
|
|
</> |
|
|
|
|
) |
|
|
|
|
}); |
|
|
|
|
return; |
|
|
|
|
} else if (laancNotRequired) { |
|
|
|
|
|
|
|
|
|
if (laancNotRequired) { |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
|
title: '검토 결과 사전안내', |
|
|
|
@ -129,8 +150,39 @@ export default function LaancPlanContainer({
|
|
|
|
|
parseInt(detailData.areaList[0].fltElev) <= laancElev && |
|
|
|
|
parseInt(detailData.areaList[0].fltElev) < maxElev |
|
|
|
|
) { |
|
|
|
|
try { |
|
|
|
|
// 성공적으로 응답 받았을 때 처리할 내용 추가
|
|
|
|
|
const tsData = await axios.post(`api/bas/laanc/valid/ts/pilot`, [ |
|
|
|
|
detailData.arcrftList[0].idntfNum |
|
|
|
|
]); |
|
|
|
|
if (!tsData.data.valid) { |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
|
title: '검토 결과 사전안내', |
|
|
|
|
desc: ( |
|
|
|
|
<> |
|
|
|
|
유효성 검사에 실패하여 미 승인 대상입니다. |
|
|
|
|
<p> |
|
|
|
|
기체가 보험에 가입되어 있지 않거나 유효기간이 |
|
|
|
|
만료되었습니다. |
|
|
|
|
<br /> |
|
|
|
|
기체 번호를 다시 확인해주시기 바랍니다. |
|
|
|
|
</p> |
|
|
|
|
</> |
|
|
|
|
) |
|
|
|
|
}); |
|
|
|
|
return; |
|
|
|
|
} else { |
|
|
|
|
setStep(2); |
|
|
|
|
} |
|
|
|
|
} catch (error) { |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
|
title: '오류', |
|
|
|
|
desc: <>처리중 오류가 발생하였습니다</> |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -178,12 +230,17 @@ export default function LaancPlanContainer({
|
|
|
|
|
[arrName]: arr |
|
|
|
|
}; |
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
} else if ( |
|
|
|
|
detailData.areaList[0].areaType === 'LINE' || |
|
|
|
|
name === 'bufferZone' |
|
|
|
|
) { |
|
|
|
|
setDetailData(prevState => { |
|
|
|
|
const arr = [...prevState[arrName]]; |
|
|
|
|
const prevBufferZone = prevState[arrName][0].bufferZone; |
|
|
|
|
const updateData = { |
|
|
|
|
...prevState[arrName][0], |
|
|
|
|
[name]: value |
|
|
|
|
[name]: value, |
|
|
|
|
concatBufferZone: prevBufferZone |
|
|
|
|
}; |
|
|
|
|
arr[0] = updateData; |
|
|
|
|
return { |
|
|
|
@ -191,16 +248,12 @@ export default function LaancPlanContainer({
|
|
|
|
|
[arrName]: arr |
|
|
|
|
}; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case 'pilot': |
|
|
|
|
case 'arcrft': |
|
|
|
|
if (name === 'bufferZone') { |
|
|
|
|
} else { |
|
|
|
|
setDetailData(prevState => { |
|
|
|
|
const arr = [...prevState[arrName]]; |
|
|
|
|
const updateData = { |
|
|
|
|
...prevState[arrName][0], |
|
|
|
|
[name]: newValue |
|
|
|
|
[name]: value |
|
|
|
|
}; |
|
|
|
|
arr[0] = updateData; |
|
|
|
|
return { |
|
|
|
@ -208,7 +261,11 @@ export default function LaancPlanContainer({
|
|
|
|
|
[arrName]: arr |
|
|
|
|
}; |
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case 'pilot': |
|
|
|
|
case 'arcrft': |
|
|
|
|
{ |
|
|
|
|
setDetailData(prevState => { |
|
|
|
|
const arr = [...prevState[arrName]]; |
|
|
|
|
const updateData = { |
|
|
|
@ -332,6 +389,21 @@ export default function LaancPlanContainer({
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} else if ( |
|
|
|
|
detailData.areaList[0].concatBufferZone != |
|
|
|
|
detailData.areaList[0].bufferZone && |
|
|
|
|
detailData.areaList[0].areaType === 'LINE' |
|
|
|
|
) { |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
|
title: '필수값 입력 오류', |
|
|
|
|
desc: <>적용 버튼을 누르지 않고 값을 변경 할 수 없습니다.</> |
|
|
|
|
}); |
|
|
|
|
// handleChange({
|
|
|
|
|
// type: 'area',
|
|
|
|
|
// name: 'bufferZone',
|
|
|
|
|
// value: detailData.areaList[0].concatBufferZone
|
|
|
|
|
// });
|
|
|
|
|
} else if (!detailData.areaList[0].fltMethod) { |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
@ -371,25 +443,54 @@ export default function LaancPlanContainer({
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const handlerBufferApply = () => { |
|
|
|
|
const handlerBufferApply = async () => { |
|
|
|
|
if (areaCoordList) { |
|
|
|
|
if (areaCoordList[0].coordList.length > 0) { |
|
|
|
|
dispatch(LaancAction.LAANC_ALTITUDE.request(detailData.areaList)); |
|
|
|
|
// dispatch(LaancAction.LAANC_ALTITUDE.request(detailData.areaList));
|
|
|
|
|
dispatch(LaancAction.LAANC_VALID_AREA.request(detailData.areaList)); |
|
|
|
|
|
|
|
|
|
const array = []; |
|
|
|
|
const copy = { ...areaCoordList[0] }; |
|
|
|
|
copy.bufferZone = detailData.areaList[0].bufferZone; |
|
|
|
|
array.push(copy); |
|
|
|
|
|
|
|
|
|
dispatch(FLIGHT_PLAN_AREA_BUFFER_LIST.request(array)); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
const elev = await axios.post( |
|
|
|
|
`api/bas/laanc/valid/elev`, |
|
|
|
|
detailData.areaList |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (elev.data[0] === 0) { |
|
|
|
|
// dispatch(AREA_DETAIL_INIT());
|
|
|
|
|
// dispatch(AreaAction.AREA_DETAIL_INIT());
|
|
|
|
|
// dispatch(drawTypeChangeAction(''));
|
|
|
|
|
// dispatch(LaancAction.LAANC_APPROVAL_INIT());
|
|
|
|
|
setIsErrorModal({ |
|
|
|
|
title: '비행 불가 지역', |
|
|
|
|
desc: ( |
|
|
|
|
<> |
|
|
|
|
설정하신 비행구역 중 허용고도가 0m인 구역이 있습니다. |
|
|
|
|
<br /> |
|
|
|
|
버퍼존을 다시 확인해주시기 바랍니다. |
|
|
|
|
</> |
|
|
|
|
), |
|
|
|
|
isOpen: true |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
dispatch(LaancAction.LAANC_ALTITUDE.success(elev.data)); |
|
|
|
|
} catch (error) { |
|
|
|
|
{ |
|
|
|
|
setIsErrorModal({ |
|
|
|
|
isOpen: true, |
|
|
|
|
title: '필수값 입력 오류', |
|
|
|
|
desc: '비행 구역을 설정해 주세요.' |
|
|
|
|
title: '오류', |
|
|
|
|
desc: '처리중 오류가 발생하였습니다' |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const handlerLaancClose = () => { |
|
|
|
|