Browse Source

LAANC 신청 비행계획서로 이전시 데이터 유지 기능 추가

pull/2/head
sanguu516(박상현) 1 year ago
parent
commit
1455f39252
  1. 207
      src/views/laanc/FlightPlan.js
  2. 165
      src/views/laanc/LeftMenu.js

207
src/views/laanc/FlightPlan.js

@ -33,160 +33,10 @@ import {
sensorClickAction
} from '../../modules/control/map/actions/controlMapActions';
import { useHistory } from 'react-router-dom';
const FlightPlan = props => {
const [detailData, setDetailData] = useState(initFlightBas.initDetail);
const FlightPlan = ({ handleChange, handlerNext, data }) => {
const user = useSelector(state => state.authState);
const [modal2, setModal2] = useState({
isOpen: false,
title: '',
desc: ''
});
const history = useHistory();
const handleChange = ({ name, value, type, index, pIndex }) => {
// 입력 값에서 숫자 이외의 문자를 제거
const arrName = `${type}List`;
switch (type) {
case 'area':
case 'pilot':
case 'arcrft':
if (name === 'fltElev' || name === 'bufferZone') {
const newValue = value.replace(/[^0-9]/g, '');
setDetailData(prevState => {
const arr = [...prevState[arrName]];
const updateData = {
...prevState[arrName][0],
[name]: newValue
};
arr[0] = updateData;
return {
...prevState,
[arrName]: arr
};
});
} else {
setDetailData(prevState => {
const arr = [...prevState[arrName]];
const updateData = {
...prevState[arrName][0],
[name]: value
};
arr[0] = updateData;
return {
...prevState,
[arrName]: arr
};
});
}
break;
case 'plan':
default:
setDetailData(prevState => ({
...prevState,
[name]: value
}));
break;
}
};
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]*$/;
if (!detailData.pilotList[0].memberName) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '이름을 입력해 주세요.'
});
return false;
} else if (!check_num.test(detailData.pilotList[0].hpno)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '연락처를 확인해 주세요.'
});
return false;
return false;
} else if (!reg_email.test(detailData.pilotList[0].email)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '이메일을 확인해 주세요.'
});
return false;
} else if (!detailData.fltPurpose) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '비행목적을 선택해 주세요.'
});
return false;
} else if (!detailData.areaList[0].fltElev) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '고도를 입력해 주세요.'
});
return false;
} else if (!detailData.areaList[0].bufferZone) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '반경을 입력해 주세요.'
});
return false;
} else if (!detailData.areaList[0].fltMethod) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '비행방식를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].groupNm) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '기체 신고 번호를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].arcrftTypeCd) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '기체 종류를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].ownerNm) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '소유자명(법인명)를 입력해 주세요.'
});
return false;
} else {
//api 호출 부분
handleClick(2);
}
};
const handleClick = value => {
props.handlerStep(value);
};
const history = useHistory();
const handlerLaanc = () => {
history.replace('/control');
@ -227,7 +77,7 @@ const FlightPlan = props => {
className='mr-1'
color='primary'
onClick={e => handlerDrawType('LINE')}
disabled={props.isDisabled || props.isDone}
// disabled={isDisabled || isDone}
>
WayPoint
</Button.Ripple>
@ -235,7 +85,7 @@ const FlightPlan = props => {
className='mr-1'
color='primary'
onClick={e => handlerDrawType('CIRCLE')}
disabled={props.isDisabled || props.isDone}
// disabled={isDisabled || isDone}
>
Circle
</Button.Ripple>
@ -243,7 +93,7 @@ const FlightPlan = props => {
className='mr-1'
color='primary'
onClick={e => handlerDrawType('POLYGON')}
disabled={props.isDisabled || props.isDone}
// disabled={isDisabled || isDone}
>
Polygon
</Button.Ripple>
@ -265,7 +115,7 @@ const FlightPlan = props => {
id='memberName'
name='memberName'
// defaultValue={data.memberName}
value={detailData.pilotList[0].memberName || ''}
value={data.pilotList[0].memberName || ''}
onChange={e => {
const { name, value } = e.target;
handleChange({
@ -310,7 +160,7 @@ const FlightPlan = props => {
id='hpno'
name='hpno'
// defaultValue={data.hpno}
value={detailData.pilotList[0].hpno || ''}
value={data.pilotList[0].hpno || ''}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -335,7 +185,7 @@ const FlightPlan = props => {
id='email'
name='email'
// defaultValue={data.email || ''}
value={detailData.pilotList[0].email}
value={data.pilotList[0].email}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -345,7 +195,7 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
placeholder=''
/>
</FormGroup>
@ -369,8 +219,8 @@ const FlightPlan = props => {
id='schFltStDt'
name='schFltStDt'
data-enable-time
defaultValue={detailData.schFltStDt}
value={detailData.schFltStDt}
defaultValue={data.schFltStDt}
value={data.schFltStDt}
onChange={date => {
const value =
moment(date[0]).format('YYYY-MM-DD HH:mm:ss') ||
@ -396,8 +246,8 @@ const FlightPlan = props => {
id='schFltEndDt'
name='schFltEndDt'
data-enable-time
defaultValue={detailData.schFltEndDt}
value={detailData.schFltEndDt}
defaultValue={data.schFltEndDt}
value={data.schFltEndDt}
onChange={date => {
const value =
moment(date[0]).format('YYYY-MM-DD HH:mm:ss') ||
@ -421,7 +271,7 @@ const FlightPlan = props => {
type='select'
id='fltPurpose'
name='fltPurpose'
value={detailData.fltPurpose}
value={data.fltPurpose}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -431,9 +281,9 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
// className={classnames({
// 'is-invalid': props.errors.arcrftTypeCd
// 'is-invalid': errors.arcrftTypeCd
// })}
>
{/* TODO CDNOT 코드연동 필요 */}
@ -469,7 +319,7 @@ const FlightPlan = props => {
id='fltElev'
name='fltElev'
// defaultValue={data.email || ''}
value={detailData.areaList[0].fltElev}
value={data.areaList[0].fltElev}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -479,7 +329,7 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
placeholder='100m'
/>
</FormGroup>
@ -494,7 +344,7 @@ const FlightPlan = props => {
id='bufferZone'
name='bufferZone'
// defaultValue={data.email || ''}
value={detailData.areaList[0].bufferZone}
value={data.areaList[0].bufferZone}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -504,7 +354,7 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
placeholder='100m'
/>
</FormGroup>
@ -519,7 +369,7 @@ const FlightPlan = props => {
id='fltMethod'
name='fltMethod'
// defaultValue={data.email || ''}
value={detailData.areaList[0].fltMethod}
value={data.areaList[0].fltMethod}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -529,7 +379,7 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
placeholder=''
/>
</FormGroup>
@ -551,7 +401,7 @@ const FlightPlan = props => {
id='groupNm'
name='groupNm'
// defaultValue={data.email || ''}
// value={data.email}
value={data.arcrftList[0].groupNm}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -561,7 +411,7 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
placeholder=''
/>
</FormGroup>
@ -576,7 +426,7 @@ const FlightPlan = props => {
id='arcrftTypeCd'
name='arcrftTypeCd'
// defaultValue={data.email || ''}
// value={data.email}
value={data.arcrftList[0].arcrftTypeCd}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -586,7 +436,7 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
placeholder='100m'
/>
</FormGroup>
@ -601,7 +451,7 @@ const FlightPlan = props => {
id='ownerNm'
name='ownerNm'
// defaultValue={data.email || ''}
// value={data.email}
value={data.arcrftList[0].ownerNm}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
@ -611,7 +461,7 @@ const FlightPlan = props => {
value
});
}}
// innerRef={props.data}
// innerRef={data}
placeholder=''
/>
</FormGroup>
@ -647,7 +497,6 @@ const FlightPlan = props => {
</Row>
</Col>
</Row>
<ErrorModal modal={modal2} setModal={setModal2} />
</div>
);
};

165
src/views/laanc/LeftMenu.js

@ -3,12 +3,23 @@ import tp_logo from '../../assets/images/tplogo_wh.png';
import kac_logo from '../../assets/images/kac_logo_wh.png';
import FlightPlan from './FlightPlan';
import Apply from './Apply';
import { useState } from 'react';
import { useEffect, useState } from 'react';
import { AiOutlinePoweroff, AiOutlineExclamation } from 'react-icons/ai';
import WebsocketClient from '../../components/websocket/WebsocketClient';
import UserDropdown from '../../@core/layouts/components/navbar/UserDropdown';
import { ErrorModal } from '../../components/modal/ErrorModal';
import {
initFlight,
initFlightBas
} from '../../modules/basis/flight/models/basisFlightModel';
function LeftMenu() {
const [step, setStep] = useState(1);
const [detailData, setDetailData] = useState(initFlightBas.initDetail);
const [modal2, setModal2] = useState({
isOpen: false,
title: '',
desc: ''
});
const handlerStep = step => {
setStep(step);
@ -17,6 +28,148 @@ function LeftMenu() {
const handlerLogout = () => {
dispatch(Actions.logout.request());
};
useEffect(() => {}, [detailData]);
const handleChange = ({ name, value, type, index, pIndex }) => {
// 입력 값에서 숫자 이외의 문자를 제거
const arrName = `${type}List`;
switch (type) {
case 'area':
case 'pilot':
case 'arcrft':
if (name === 'fltElev' || name === 'bufferZone' || name === 'hpno') {
const newValue = value.replace(/[^0-9]/g, '');
setDetailData(prevState => {
const arr = [...prevState[arrName]];
const updateData = {
...prevState[arrName][0],
[name]: newValue
};
arr[0] = updateData;
return {
...prevState,
[arrName]: arr
};
});
} else {
setDetailData(prevState => {
const arr = [...prevState[arrName]];
const updateData = {
...prevState[arrName][0],
[name]: value
};
arr[0] = updateData;
return {
...prevState,
[arrName]: arr
};
});
}
break;
case 'plan':
default:
setDetailData(prevState => ({
...prevState,
[name]: value
}));
break;
}
};
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]*$/;
if (!detailData.pilotList[0].memberName) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '이름을 입력해 주세요.'
});
return false;
} else if (!check_num.test(detailData.pilotList[0].hpno)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '연락처를 확인해 주세요.'
});
return false;
} else if (!reg_email.test(detailData.pilotList[0].email)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '이메일을 확인해 주세요.'
});
return false;
} else if (!detailData.fltPurpose) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '비행목적을 선택해 주세요.'
});
return false;
} else if (!detailData.areaList[0].fltElev) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '고도를 입력해 주세요.'
});
return false;
} else if (!detailData.areaList[0].bufferZone) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '반경을 입력해 주세요.'
});
return false;
} else if (!detailData.areaList[0].fltMethod) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '비행방식를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].groupNm) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '기체 신고 번호를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].arcrftTypeCd) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '기체 종류를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].ownerNm) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '소유자명(법인명)를 입력해 주세요.'
});
return false;
} else {
//api 호출 부분
setStep(2);
}
};
return (
<>
<div className='left-menu'>
@ -41,9 +194,17 @@ function LeftMenu() {
<div className='right-menu active'>
<button className='right-layer-btn' onClick={() => {}}></button>
<div className='right-layer active' style={{ width: '567.58px' }}>
{step === 1 && <FlightPlan handlerStep={handlerStep} />}
{step === 1 && (
<FlightPlan
handlerStep={handlerStep}
data={detailData}
handleChange={handleChange}
handlerNext={handlerNext}
/>
)}
{step === 2 && <Apply handlerStep={handlerStep} />}
</div>
<ErrorModal modal={modal2} setModal={setModal2} />
</div>
</>
);

Loading…
Cancel
Save