Browse Source

laanc 비행 시작 종료 초기값 수정 및 laanc폴더 수정

pull/2/head
sanguu516(박상현) 1 year ago
parent
commit
4421c80995
  1. 5
      src/modules/basis/flight/models/basisFlightModel.ts
  2. 27
      src/views/laanc/LaacnStep3.js
  3. 277
      src/views/laanc/LeftMenu.js
  4. 16
      src/views/laanc/index.js

5
src/modules/basis/flight/models/basisFlightModel.ts

@ -490,13 +490,14 @@ export const initFlightBas = {
cstmrSno: 0, cstmrSno: 0,
memberName: '', memberName: '',
email: '', email: '',
commercial: '',
hpno: '', hpno: '',
clncd: '+82', clncd: '+82',
addr: '', addr: '',
addrDtlCn: '', addrDtlCn: '',
zip: '', zip: '',
schFltStDt: moment().format('YYYY-MM-DD HH:mm:ss'), schFltStDt: moment().add(5, 'minute').format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment().format('YYYY-MM-DD HH:mm:ss'), schFltEndDt: moment().add(2, 'hours').format('YYYY-MM-DD HH:mm:ss'),
fltPurpose: '', fltPurpose: '',
aprvlYn: '', aprvlYn: '',
delYn: '', delYn: '',

27
src/views/laanc/LaacnStep3.js

@ -1,4 +1,5 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
import moment from 'moment'; import moment from 'moment';
import { import {
Row, Row,
@ -20,8 +21,10 @@ import { AlertCircle } from 'react-feather';
export default function LaacnStep3({ export default function LaacnStep3({
handlerStep, handlerStep,
disabledAnimation, disabledAnimation,
data,
setDisabledAnimation setDisabledAnimation
}) { }) {
const { user } = useSelector(state => state.authState);
return ( return (
<> <>
<ModalHeader> <ModalHeader>
@ -47,10 +50,12 @@ export default function LaacnStep3({
</Label> </Label>
<Input <Input
type='text' type='text'
id='test' id='memberName'
name='memberName'
bsSize='sm' bsSize='sm'
placeholder='' placeholder=''
disabled disabled
value={user.memberName}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -61,10 +66,12 @@ export default function LaacnStep3({
</Label> </Label>
<Input <Input
type='text' type='text'
id='test' id='commercial'
name='commercial'
bsSize='sm' bsSize='sm'
placeholder='' placeholder=''
disabled disabled
value={data.commercial}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -75,8 +82,10 @@ export default function LaacnStep3({
</Label> </Label>
<Input <Input
type='text' type='text'
id='test' id='schFltStDt'
name='schFltStDt'
bsSize='sm' bsSize='sm'
value={data.schFltStDt}
placeholder='' placeholder=''
disabled disabled
/> />
@ -89,8 +98,10 @@ export default function LaacnStep3({
</Label> </Label>
<Input <Input
type='text' type='text'
id='test' id='schFltEndDt'
name='schFltEndDt'
bsSize='sm' bsSize='sm'
value={data.schFltEndDt}
placeholder='' placeholder=''
disabled disabled
/> />
@ -103,7 +114,9 @@ export default function LaacnStep3({
</Label> </Label>
<Input <Input
type='text' type='text'
id='test' value={data.areaList[0].fltElev}
id='fltElev'
name='fltElev'
bsSize='sm' bsSize='sm'
placeholder='' placeholder=''
disabled disabled
@ -117,10 +130,12 @@ export default function LaacnStep3({
</Label> </Label>
<Input <Input
type='text' type='text'
id='test' id='arcrftWdth'
name='arcrftWdth'
bsSize='sm' bsSize='sm'
placeholder='' placeholder=''
disabled disabled
value={data.arcrftList[0].arcrftWdth}
/> />
</FormGroup> </FormGroup>
</Col> </Col>

277
src/views/laanc/LeftMenu.js

@ -1,277 +0,0 @@
import logo from '../../assets/images/pal_logo.png';
import tp_logo from '../../assets/images/tplogo_wh.png';
import kac_logo from '../../assets/images/kac_logo_wh.png';
import FlightPlan from './LaancStep1';
import Apply from './LaancStep2';
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';
import { WeatherContainer } from '../../containers/basis/flight/plan/WeatherContainer';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import moment from 'moment';
function LeftMenu() {
const [step, setStep] = useState(1);
const [detailData, setDetailData] = useState(initFlightBas.initDetail);
const [formModal, setFormModal] = useState(false);
const [modal2, setModal2] = useState({
isOpen: false,
title: '',
desc: ''
});
//날씨 임시 데이터
const [wheather, setWheather] = useState([
{
coordList: [
{
lat: 37.40284040287055,
lon: 126.68639226254697
}
]
}
]);
// step 핸들러
const handlerStep = step => {
setStep(step);
};
const handlerLogout = () => {
dispatch(Actions.logout.request());
};
useEffect(() => {}, [detailData]);
// 날씨 핸들러
const handlerWeather = () => {
setFormModal(!formModal);
};
// 비행계획서 작성 핸들러
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;
}
};
console.log('>>>>', detailData);
// 스텝 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');
// 종료일자
const schFltEndDt = moment(detailData.schFltEndDt, 'YYYY-MM-DD HH:mm:ss');
const currentDate = moment(); // 현재 날짜와 시간을 가져옵니다.
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 (
!schFltStDt.isAfter(currentDate) ||
!schFltEndDt.isAfter(currentDate)
) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '비행 일자가 이미 지난 일자입니다.'
});
return false;
} else if (schFltStDt.isAfter(schFltEndDt)) {
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'>
<h1 className='logo'>
<img src={logo} width='80' />
<span>PAL</span>
</h1>
<ul className='left-menu-nav'></ul>
<ul className='left-menu-footer'>
<li>
<AiOutlinePoweroff
size={25}
className='logout-btn'
onClick={handlerLogout}
/>
</li>
<li style={{ marginLeft: '8px' }}>
<WebsocketClient />
</li>
</ul>
</div>
<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}
data={detailData}
handleChange={handleChange}
handlerNext={handlerNext}
handlerWeather={handlerWeather}
/>
)}
{step === 2 && <Apply handlerStep={handlerStep} data={detailData} />}
</div>
<ErrorModal modal={modal2} setModal={setModal2} />
<Modal
isOpen={formModal}
toggle={handlerWeather}
className='modal-dialog-centered'
>
<ModalHeader toggle={handlerWeather}>날씨 정보</ModalHeader>
<ModalBody>
<WeatherContainer mapAreaCoordList={wheather} />
</ModalBody>
<ModalFooter>
<Button color='primary' onClick={handlerWeather}>
확인
</Button>
</ModalFooter>
</Modal>
</div>
</>
);
}
export default LeftMenu;

16
src/views/laanc/index.js

@ -1,16 +0,0 @@
import { MapControl } from '../../components/map/MapControl';
import LeftMenu from './LeftMenu';
const LaancView = () => {
return (
<div className='pal-container'>
<div className='map'>
<MapControl />
</div>
<LeftMenu />
</div>
);
};
export default LaancView;
Loading…
Cancel
Save