diff --git a/src/components/laanc/step/LaancStep1.js b/src/components/laanc/step/LaancStep1.js index 203b353..625cd68 100644 --- a/src/components/laanc/step/LaancStep1.js +++ b/src/components/laanc/step/LaancStep1.js @@ -88,42 +88,38 @@ export default function LaancStep1({ } }, [areaCoordList]); - useEffect(() => { - if ( - data.commercial === 'COMMERCIAL' || - data.arcrftList[0].arcrftWghtCd == '11' || - data.arcrftList[0].arcrftWghtCd == '10' || - data.arcrftList[0].arcrftWghtCd == '9' - ) { - } - }, [data]); - + // Input 요소가 포커스될 때 커서를 맨 뒤로 이동 const handleInputClick = type => { - // Input 요소가 포커스될 때 커서를 맨 뒤로 이동 - if ( - fltElevRef.current && - type === 'fltElev' && - data.areaList[0].coordList[0].lat != 0 - ) { - const input = fltElevRef.current; + switch (type) { + case 'fltElev': + const drawFlightZone = + fltElevRef.current && + type === 'fltElev' && + data.areaList[0].coordList[0].lat != 0; + if (drawFlightZone) { + const input = fltElevRef.current; - const inputValue = input.value; - input.setSelectionRange(inputValue.length - 1, inputValue.length - 1); - input.focus(); - } else if (data.areaList[0].coordList[0].lat === 0) { - fltElevRef.current.blur(); - setIsErrorModal({ - isOpen: true, - title: '비행 구역 설정', - desc: '비행 구역 설정을 먼저 설정 해 주세요' - }); - return false; - } - if (bufferZoneRef.current && type === 'bufferZone') { - const input = bufferZoneRef.current; - const inputValue = input.value; - input.setSelectionRange(inputValue.length - 1, inputValue.length - 1); - input.focus(); + const inputValue = input.value; + input.setSelectionRange(inputValue.length - 1, inputValue.length - 1); + input.focus(); + } else if (data.areaList[0].coordList[0].lat === 0) { + fltElevRef.current.blur(); + setIsErrorModal({ + isOpen: true, + title: '비행 구역 설정', + desc: '비행 구역 설정을 먼저 설정 해 주세요' + }); + return false; + } + break; + case 'bufferZone': + if (bufferZoneRef.current && type === 'bufferZone') { + const input = bufferZoneRef.current; + const inputValue = input.value; + input.setSelectionRange(inputValue.length - 1, inputValue.length - 1); + input.focus(); + } + break; } }; @@ -135,7 +131,8 @@ export default function LaancStep1({ name: 'idntfNum', value: '' }); - } else if (data.arcrftList[0].arcrftTypeCd) { + } + if (data.arcrftList[0].arcrftTypeCd) { handleChange({ type: 'arcrft', name: 'arcrftTypeCd', @@ -159,10 +156,15 @@ export default function LaancStep1({ // 고도 150 미만 핸들러 const handleBlur = (value, type) => { + const maxElev = 150; + const controlledAltitudeExceededWarning = + laancArea?.duplicated && + parseInt(value.replace('/^0+/', 'm', ''), 10) >= laancElev && + parseInt(value.replace('/^0+/', 'm', ''), 10) < maxElev; switch (type) { case 'fltElev': if ( - parseInt(value.replace('/^0+/', 'm', ''), 10) > 150 && + parseInt(value.replace('/^0+/', 'm', ''), 10) > maxElev && data.areaList[0].coordList[0].lat != 0 ) { handleChange({ @@ -186,7 +188,7 @@ export default function LaancStep1({ } if ( !laancArea?.duplicated && - parseInt(value.replace('/^0+/', 'm', ''), 10) < 150 + parseInt(value.replace('/^0+/', 'm', ''), 10) < maxElev ) { setIsErrorModal({ isOpen: true, @@ -200,11 +202,7 @@ export default function LaancStep1({ ) }); } - if ( - laancArea?.duplicated && - parseInt(value.replace('/^0+/', 'm', ''), 10) >= laancElev && - parseInt(value.replace('/^0+/', 'm', ''), 10) < 150 - ) { + if (controlledAltitudeExceededWarning) { setIsErrorModal({ isOpen: true, title: '검토 결과 사전안내', diff --git a/src/containers/laanc/LaancContainer.js b/src/containers/laanc/LaancContainer.js index b08cb00..3655d5e 100644 --- a/src/containers/laanc/LaancContainer.js +++ b/src/containers/laanc/LaancContainer.js @@ -1,42 +1,22 @@ import { useEffect, useState } from 'react'; import { useLocation } from 'react-router-dom'; import { Button, Badge } from 'reactstrap'; -import moment from 'moment'; -import { useDispatch, useSelector, shallowEqual } from 'react-redux'; +import { useDispatch } from 'react-redux'; import { CustomMainLayout } from '../../components/layout/CustomMainLayout'; import * as LaancAction from '../../modules/laanc/actions/laancActions'; import * as AreaAction from '../../modules/basis/flight/actions/basisFlightAction'; import { drawTypeChangeAction } from '../../modules/control/map/actions/controlMapActions'; -import { - JOIN_LIST, - GROUP_LIST -} from '../../modules/basis/group/actions/basisGroupAction'; + import LaancPlanContainer from './LaancPlanContainer'; import LaancSearch from '../../components/laanc/list/LaancSearch'; import LaancGrid from '../../components/laanc/list/LaancGrid'; -const initSearchData = { - schFltStDt: moment() - .set({ date: 1, h: 0, m: 0, s: 0 }) - .format('YYYY-MM-DD HH:mm:ss'), - schFltEndDt: moment() - .set({ h: 23, m: 59, s: 59 }) - .format('YYYY-MM-DD HH:mm:ss'), - aprvlYn: 'A', - groupId: '', - cstmrSno: 0 -}; -// const columns = [{}]; export default function LaancContainer() { const dispatch = useDispatch(); const location = useLocation(); const [currentParm, setCurrentParm] = useState(false); const [disabledAnimation, setDisabledAnimation] = useState(false); - const [searchData, setSerchData] = useState(initSearchData); - //비행계획서 신청 버튼 활성/비활성 제어 - const [isMyGroup, setIsMyGroup] = useState(); - const { user } = useSelector(state => state.authState, shallowEqual); const queryParams = new URLSearchParams(location.search); const mapParam = queryParams.get('map'); @@ -49,49 +29,6 @@ export default function LaancContainer() { setDisabledAnimation(mapParam != 'true' ? false : true); }, [location]); - useEffect(() => { - if (user?.cstmrSno) { - if (user.authId === 'SUPER' || user.authId === 'ADMIN') { - dispatch(GROUP_LIST.request({ cstmrSno: user?.cstmrSno })); - } else { - dispatch( - JOIN_LIST.request({ - cstmrSno: user?.cstmrSno - }) - ); - } - } - }, [user]); - - useEffect(() => { - if (searchData?.groupId) { - handleSearch(searchData); - - //admin -> myGroupAuthCd - const group = groupList?.find( - prev => prev.groupId === listSelect.groupId - ); - - const join = joinList?.find(prev => prev.groupId === listSelect.groupId); - - const obj = { - groupAuthCd: join?.groupAuthCd, - myGroupAuthCd: group?.myGroupAuthCd - }; - - //비행계획서 신청 버튼 활성/비활성 제어 - let my = false; - if (user.authId === 'SUPER') { - my = true; - } else if (user.authId === 'ADMIN') { - my = obj?.myGroupAuthCd && true; - } else if (user.authId === 'USER') { - my = obj?.groupAuthCd && true; - } - setIsMyGroup(my); - } - }, [searchData]); - const handleApply = () => { dispatch(drawTypeChangeAction('')); dispatch(LaancAction.LAANC_APPROVAL_INIT()); @@ -104,7 +41,7 @@ export default function LaancContainer() {
사업용 또는 비 사업용이며, 기체최대이륙중량이 2kg 초과 시 기체등록은 - 필수입니다.{' '} + 필수입니다. 기체신고대상 및 기준 자세히보기 diff --git a/src/containers/laanc/LaancPlanContainer.js b/src/containers/laanc/LaancPlanContainer.js index 456122f..3c5d99c 100644 --- a/src/containers/laanc/LaancPlanContainer.js +++ b/src/containers/laanc/LaancPlanContainer.js @@ -66,8 +66,15 @@ export default function LaancPlanContainer({ // laanc 승인 api 200 시 step 이동 const handlerLaanc = () => { - // 사전결과 미승인 대상 + // laanc 필요 없이 날 수 있음 + if (laancArea && laancElev) { + const laancNotRequired = + !laancArea.duplicated && + detailData.fltType != 'COMMERCIAL' && + detailData.arcrftList[0].arcrftWghtCd != '11'; + + const maxElev = 150; if (detailData.arcrftList[0].idntfNum === 'PA0002') { setIsErrorModal({ isOpen: true, @@ -84,11 +91,7 @@ export default function LaancPlanContainer({ ) }); return; - } else if ( - !laancArea.duplicated && - detailData.fltType != 'COMMERCIAL' && - detailData.arcrftList[0].arcrftWghtCd != '11' - ) { + } else if (laancNotRequired) { setIsErrorModal({ isOpen: true, title: '검토 결과 사전안내', @@ -124,26 +127,11 @@ export default function LaancPlanContainer({ }); } else if ( parseInt(detailData.areaList[0].fltElev) <= laancElev && - parseInt(detailData.areaList[0].fltElev) < 150 + parseInt(detailData.areaList[0].fltElev) < maxElev ) { setStep(2); } } - - // if (!valid && evaluatedTargetArea && !flight) { - // setIsErrorModal({ - // isOpen: true, - // title: '검토 결과 사전안내', - // desc: ( - // <> - // 유효성 검사에 실패하여 미 승인 대상입니다. - //

자세한 사항은 비행승인 검토결과를 확인해주시기 바랍니다.

- // - // ) - // }); - - // return; - // } }; // step 핸들러 @@ -247,11 +235,6 @@ export default function LaancPlanContainer({ // 스텝 1 다음 버튼 이벤트 const handlerNext = () => { - const reg_email = - /^([0-9a-zA-Z_\.-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}$/; - const check_num = /[0-9]/; - const check_kor = - /^[가-힣a-zA-Z0-9][^!@#$%^&*()+\=\[\]{};':"\\|,.<>\/?\s]*$/; // 시작일자 const schFltStDt = moment(detailData.schFltStDt, 'YYYY-MM-DD HH:mm:ss'); // 종료일자 @@ -259,6 +242,20 @@ export default function LaancPlanContainer({ const currentDate = moment(); // 현재 날짜와 시간을 가져옵니다. + const validateAircraftWeightCode = + !detailData.arcrftList[0].arcrftTypeCd && + (detailData.commercial === 'COMMERCIAL' || + detailData.arcrftList[0].arcrftWghtCd == '9' || + detailData.arcrftList[0].arcrftWghtCd == '10' || + detailData.arcrftList[0].arcrftWghtCd == '11'); + + const validateidntfNumCode = + !detailData.arcrftList[0].idntfNum && + (detailData.commercial === 'COMMERCIAL' || + detailData.arcrftList[0].arcrftWghtCd == '9' || + detailData.arcrftList[0].arcrftWghtCd == '10' || + detailData.arcrftList[0].arcrftWghtCd == '11'); + if (!detailData.fltType) { setIsErrorModal({ isOpen: true, @@ -343,13 +340,7 @@ export default function LaancPlanContainer({ }); return false; - } else if ( - !detailData.arcrftList[0].arcrftTypeCd && - (detailData.commercial === 'COMMERCIAL' || - detailData.arcrftList[0].arcrftWghtCd == '9' || - detailData.arcrftList[0].arcrftWghtCd == '10' || - detailData.arcrftList[0].arcrftWghtCd == '11') - ) { + } else if (validateAircraftWeightCode) { setIsErrorModal({ isOpen: true, title: '필수값 입력 오류', @@ -357,36 +348,26 @@ export default function LaancPlanContainer({ }); return false; - } else if ( - !detailData.arcrftList[0].idntfNum && - (detailData.commercial === 'COMMERCIAL' || - detailData.arcrftList[0].arcrftWghtCd == '9' || - detailData.arcrftList[0].arcrftWghtCd == '10' || - detailData.arcrftList[0].arcrftWghtCd == '11') - ) { + } else if (validateidntfNumCode) { setIsErrorModal({ isOpen: true, title: '필수값 입력 오류', desc: '기체 신고 번호를 입력해 주세요.' }); - return false; + } else if (detailData.areaList[0].selffltMethod) { + // 비행 방식 직접 입력칸 활성화 후 작성 시 조건문 + setFinalDetailData({ + ...detailData, + areaList: [ + { + ...detailData.areaList[0], + fltMethod: detailData.areaList[0].selffltMethod + } + ] + }); } else { handlerLaanc(); - // 비행 방식 직접 입력칸 활성화 후 작성 시 조건문 - if (detailData.areaList[0].selffltMethod) { - setFinalDetailData({ - ...detailData, - areaList: [ - { - ...detailData.areaList[0], - fltMethod: detailData.areaList[0].selffltMethod - } - ] - }); - } else { - // dispatch(LaancAction.LAANC_FLIGHT_Approval.request(detailData)); - } } };