Browse Source

laanc 리팩토링

pull/2/head
박상현 11 months ago
parent
commit
a319e1f1bb
  1. 82
      src/components/laanc/step/LaancStep1.js
  2. 69
      src/containers/laanc/LaancContainer.js
  3. 93
      src/containers/laanc/LaancPlanContainer.js

82
src/components/laanc/step/LaancStep1.js

@ -88,42 +88,38 @@ export default function LaancStep1({
} }
}, [areaCoordList]); }, [areaCoordList]);
useEffect(() => { // Input 요소가 포커스될 때 커서를 맨 뒤로 이동
if (
data.commercial === 'COMMERCIAL' ||
data.arcrftList[0].arcrftWghtCd == '11' ||
data.arcrftList[0].arcrftWghtCd == '10' ||
data.arcrftList[0].arcrftWghtCd == '9'
) {
}
}, [data]);
const handleInputClick = type => { const handleInputClick = type => {
// Input 요소가 포커스될 때 커서를 맨 뒤로 이동 switch (type) {
if ( case 'fltElev':
fltElevRef.current && const drawFlightZone =
type === 'fltElev' && fltElevRef.current &&
data.areaList[0].coordList[0].lat != 0 type === 'fltElev' &&
) { data.areaList[0].coordList[0].lat != 0;
const input = fltElevRef.current; if (drawFlightZone) {
const input = fltElevRef.current;
const inputValue = input.value; const inputValue = input.value;
input.setSelectionRange(inputValue.length - 1, inputValue.length - 1); input.setSelectionRange(inputValue.length - 1, inputValue.length - 1);
input.focus(); input.focus();
} else if (data.areaList[0].coordList[0].lat === 0) { } else if (data.areaList[0].coordList[0].lat === 0) {
fltElevRef.current.blur(); fltElevRef.current.blur();
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
title: '비행 구역 설정', title: '비행 구역 설정',
desc: '비행 구역 설정을 먼저 설정 해 주세요' desc: '비행 구역 설정을 먼저 설정 해 주세요'
}); });
return false; return false;
} }
if (bufferZoneRef.current && type === 'bufferZone') { break;
const input = bufferZoneRef.current; case 'bufferZone':
const inputValue = input.value; if (bufferZoneRef.current && type === 'bufferZone') {
input.setSelectionRange(inputValue.length - 1, inputValue.length - 1); const input = bufferZoneRef.current;
input.focus(); 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', name: 'idntfNum',
value: '' value: ''
}); });
} else if (data.arcrftList[0].arcrftTypeCd) { }
if (data.arcrftList[0].arcrftTypeCd) {
handleChange({ handleChange({
type: 'arcrft', type: 'arcrft',
name: 'arcrftTypeCd', name: 'arcrftTypeCd',
@ -159,10 +156,15 @@ export default function LaancStep1({
// 고도 150 미만 핸들러 // 고도 150 미만 핸들러
const handleBlur = (value, type) => { 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) { switch (type) {
case 'fltElev': case 'fltElev':
if ( if (
parseInt(value.replace('/^0+/', 'm', ''), 10) > 150 && parseInt(value.replace('/^0+/', 'm', ''), 10) > maxElev &&
data.areaList[0].coordList[0].lat != 0 data.areaList[0].coordList[0].lat != 0
) { ) {
handleChange({ handleChange({
@ -186,7 +188,7 @@ export default function LaancStep1({
} }
if ( if (
!laancArea?.duplicated && !laancArea?.duplicated &&
parseInt(value.replace('/^0+/', 'm', ''), 10) < 150 parseInt(value.replace('/^0+/', 'm', ''), 10) < maxElev
) { ) {
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
@ -200,11 +202,7 @@ export default function LaancStep1({
) )
}); });
} }
if ( if (controlledAltitudeExceededWarning) {
laancArea?.duplicated &&
parseInt(value.replace('/^0+/', 'm', ''), 10) >= laancElev &&
parseInt(value.replace('/^0+/', 'm', ''), 10) < 150
) {
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
title: '검토 결과 사전안내', title: '검토 결과 사전안내',

69
src/containers/laanc/LaancContainer.js

@ -1,42 +1,22 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useLocation } from 'react-router-dom'; import { useLocation } from 'react-router-dom';
import { Button, Badge } from 'reactstrap'; import { Button, Badge } from 'reactstrap';
import moment from 'moment'; import { useDispatch } from 'react-redux';
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
import { CustomMainLayout } from '../../components/layout/CustomMainLayout'; import { CustomMainLayout } from '../../components/layout/CustomMainLayout';
import * as LaancAction from '../../modules/laanc/actions/laancActions'; import * as LaancAction from '../../modules/laanc/actions/laancActions';
import * as AreaAction from '../../modules/basis/flight/actions/basisFlightAction'; import * as AreaAction from '../../modules/basis/flight/actions/basisFlightAction';
import { drawTypeChangeAction } from '../../modules/control/map/actions/controlMapActions'; import { drawTypeChangeAction } from '../../modules/control/map/actions/controlMapActions';
import {
JOIN_LIST,
GROUP_LIST
} from '../../modules/basis/group/actions/basisGroupAction';
import LaancPlanContainer from './LaancPlanContainer'; import LaancPlanContainer from './LaancPlanContainer';
import LaancSearch from '../../components/laanc/list/LaancSearch'; import LaancSearch from '../../components/laanc/list/LaancSearch';
import LaancGrid from '../../components/laanc/list/LaancGrid'; 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() { export default function LaancContainer() {
const dispatch = useDispatch(); const dispatch = useDispatch();
const location = useLocation(); const location = useLocation();
const [currentParm, setCurrentParm] = useState(false); const [currentParm, setCurrentParm] = useState(false);
const [disabledAnimation, setDisabledAnimation] = 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 queryParams = new URLSearchParams(location.search);
const mapParam = queryParams.get('map'); const mapParam = queryParams.get('map');
@ -49,49 +29,6 @@ export default function LaancContainer() {
setDisabledAnimation(mapParam != 'true' ? false : true); setDisabledAnimation(mapParam != 'true' ? false : true);
}, [location]); }, [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 = () => { const handleApply = () => {
dispatch(drawTypeChangeAction('')); dispatch(drawTypeChangeAction(''));
dispatch(LaancAction.LAANC_APPROVAL_INIT()); dispatch(LaancAction.LAANC_APPROVAL_INIT());
@ -104,7 +41,7 @@ export default function LaancContainer() {
<CustomMainLayout title={'LAANC 신청 목록'}> <CustomMainLayout title={'LAANC 신청 목록'}>
<div className='sub-text'> <div className='sub-text'>
사업용 또는 사업용이며, 기체최대이륙중량이 2kg 초과 기체등록은 사업용 또는 사업용이며, 기체최대이륙중량이 2kg 초과 기체등록은
필수입니다.{' '} 필수입니다.
<a href='/laanc/report'> <a href='/laanc/report'>
<Badge color='light-primary'>기체신고대상 기준 자세히보기</Badge> <Badge color='light-primary'>기체신고대상 기준 자세히보기</Badge>
</a> </a>

93
src/containers/laanc/LaancPlanContainer.js

@ -66,8 +66,15 @@ export default function LaancPlanContainer({
// laanc 승인 api 200 시 step 이동 // laanc 승인 api 200 시 step 이동
const handlerLaanc = () => { const handlerLaanc = () => {
// 사전결과 미승인 대상 // laanc 필요 없이 날 수 있음
if (laancArea && laancElev) { if (laancArea && laancElev) {
const laancNotRequired =
!laancArea.duplicated &&
detailData.fltType != 'COMMERCIAL' &&
detailData.arcrftList[0].arcrftWghtCd != '11';
const maxElev = 150;
if (detailData.arcrftList[0].idntfNum === 'PA0002') { if (detailData.arcrftList[0].idntfNum === 'PA0002') {
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
@ -84,11 +91,7 @@ export default function LaancPlanContainer({
) )
}); });
return; return;
} else if ( } else if (laancNotRequired) {
!laancArea.duplicated &&
detailData.fltType != 'COMMERCIAL' &&
detailData.arcrftList[0].arcrftWghtCd != '11'
) {
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
title: '검토 결과 사전안내', title: '검토 결과 사전안내',
@ -124,26 +127,11 @@ export default function LaancPlanContainer({
}); });
} else if ( } else if (
parseInt(detailData.areaList[0].fltElev) <= laancElev && parseInt(detailData.areaList[0].fltElev) <= laancElev &&
parseInt(detailData.areaList[0].fltElev) < 150 parseInt(detailData.areaList[0].fltElev) < maxElev
) { ) {
setStep(2); setStep(2);
} }
} }
// if (!valid && evaluatedTargetArea && !flight) {
// setIsErrorModal({
// isOpen: true,
// title: '검토 결과 사전안내',
// desc: (
// <>
// 유효성 검사에 실패하여 미 승인 대상입니다.
// <p>자세한 사항은 비행승인 검토결과를 확인해주시기 바랍니다.</p>
// </>
// )
// });
// return;
// }
}; };
// step 핸들러 // step 핸들러
@ -247,11 +235,6 @@ export default function LaancPlanContainer({
// 스텝 1 다음 버튼 이벤트 // 스텝 1 다음 버튼 이벤트
const handlerNext = () => { 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'); const schFltStDt = moment(detailData.schFltStDt, 'YYYY-MM-DD HH:mm:ss');
// 종료일자 // 종료일자
@ -259,6 +242,20 @@ export default function LaancPlanContainer({
const currentDate = moment(); // 현재 날짜와 시간을 가져옵니다. 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) { if (!detailData.fltType) {
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
@ -343,13 +340,7 @@ export default function LaancPlanContainer({
}); });
return false; return false;
} else if ( } else if (validateAircraftWeightCode) {
!detailData.arcrftList[0].arcrftTypeCd &&
(detailData.commercial === 'COMMERCIAL' ||
detailData.arcrftList[0].arcrftWghtCd == '9' ||
detailData.arcrftList[0].arcrftWghtCd == '10' ||
detailData.arcrftList[0].arcrftWghtCd == '11')
) {
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
@ -357,36 +348,26 @@ export default function LaancPlanContainer({
}); });
return false; return false;
} else if ( } else if (validateidntfNumCode) {
!detailData.arcrftList[0].idntfNum &&
(detailData.commercial === 'COMMERCIAL' ||
detailData.arcrftList[0].arcrftWghtCd == '9' ||
detailData.arcrftList[0].arcrftWghtCd == '10' ||
detailData.arcrftList[0].arcrftWghtCd == '11')
) {
setIsErrorModal({ setIsErrorModal({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '기체 신고 번호를 입력해 주세요.' desc: '기체 신고 번호를 입력해 주세요.'
}); });
return false; return false;
} else if (detailData.areaList[0].selffltMethod) {
// 비행 방식 직접 입력칸 활성화 후 작성 시 조건문
setFinalDetailData({
...detailData,
areaList: [
{
...detailData.areaList[0],
fltMethod: detailData.areaList[0].selffltMethod
}
]
});
} else { } else {
handlerLaanc(); 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));
}
} }
}; };

Loading…
Cancel
Save