Browse Source

laanc 신청서 작업중

pull/2/head
sanguu516(박상현) 1 year ago
parent
commit
b269e54add
  1. 55
      src/containers/basis/flight/laanc/LaancPlanContainer.js
  2. 2
      src/navigation/flightPlan/index.js
  3. 476
      src/views/laanc/Apply.js
  4. 46
      src/views/laanc/FlightPlan.js

55
src/containers/basis/flight/laanc/LaancPlanContainer.js

@ -25,6 +25,8 @@ import {
const LaancPlanContainer = () => {
const [step, setStep] = useState(1);
const [detailData, setDetailData] = useState(initFlightBas.initDetail);
const [centeredModal, setCenteredModal] = useState(false);
const [formModal, setFormModal] = useState(false);
const [disabledAnimation, setDisabledAnimation] = useState(true);
const [modal2, setModal2] = useState({
@ -32,7 +34,6 @@ const LaancPlanContainer = () => {
title: '',
desc: ''
});
const [centeredModal, setCenteredModal] = useState(false);
//날씨 임시 데이터
const [wheather, setWheather] = useState([
{
@ -123,32 +124,7 @@ const LaancPlanContainer = () => {
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)
) {
if (!schFltStDt.isAfter(currentDate) || !schFltEndDt.isAfter(currentDate)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
@ -193,14 +169,6 @@ const LaancPlanContainer = () => {
desc: '비행방식를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].groupNm) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '기체 신고 번호를 입력해 주세요.'
});
return false;
} else if (!detailData.arcrftList[0].arcrftTypeCd) {
setModal2({
@ -210,11 +178,11 @@ const LaancPlanContainer = () => {
});
return false;
} else if (!detailData.arcrftList[0].ownerNm) {
} else if (!detailData.arcrftList[0].groupNm) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '소유자명(법인명)를 입력해 주세요.'
desc: '기체 신고 번호를 입력해 주세요.'
});
return false;
@ -245,11 +213,22 @@ const LaancPlanContainer = () => {
handlerWeather={handlerWeather}
setDisabledAnimation={setDisabledAnimation}
disabledAnimation={disabledAnimation}
centeredModal={centeredModal}
setCenteredModal={setCenteredModal}
/>
</>
)}
{step === 2 && <Apply handlerStep={handlerStep} data={detailData} />}
{step === 2 && (
<Apply
handlerStep={handlerStep}
data={detailData}
disabledAnimation={disabledAnimation}
setDisabledAnimation={setDisabledAnimation}
centeredModal={centeredModal}
setCenteredModal={setCenteredModal}
/>
)}
</Modal>
<ErrorModal modal={modal2} setModal={setModal2} />
</div>

2
src/navigation/flightPlan/index.js

@ -16,7 +16,7 @@ export default [
navLink: '/basis/flight/plan/index'
},
{
id: 'flight_plan_001_01_01',
id: 'laanc_001_01_01',
type: 'item',
title: 'LAANC 신청 목록',
navLink: '/basis/laanc/index'

476
src/views/laanc/Apply.js

@ -7,19 +7,20 @@ import { useDispatch, useSelector } from 'react-redux';
import Flatpickr from 'react-flatpickr';
import '@styles/react/libs/flatpickr/flatpickr.scss';
import moment from 'moment';
import { AlertCircle } from 'react-feather';
import FlightArea from './FlightArea';
import {
Button,
InputGroup,
ButtonGroup,
InputGroupAddon,
Input,
Row,
Col,
Button,
Modal,
ModalHeader,
ModalBody,
ModalFooter,
Alert,
FormGroup,
Label,
Card,
CardBody,
CustomInput
Input
} from 'reactstrap';
import {
initFlight,
@ -33,8 +34,16 @@ import {
sensorClickAction
} from '../../modules/control/map/actions/controlMapActions';
const Apply = ({ data, handlerStep }) => {
const Apply = ({
data,
handlerStep,
disabledAnimation,
setDisabledAnimation,
centeredModal,
setCenteredModal
}) => {
const [detailData, setDetailData] = useState(initFlightBas.initDetail);
const { user } = useSelector(state => state.authState);
const history = useHistory();
// 변경감지
@ -52,294 +61,181 @@ const Apply = ({ data, handlerStep }) => {
};
return (
<div className=''>
<div className='layer-content'>
<div className='layer-ti'>
<h4 className='ti'>LAANC 승인 요청</h4>
{/* <button className='btn-icon' outline color='primary'> */}
{/* <X size={20} /> */}
{/* </button> */}
<Button.Ripple
color='danger'
className='badge badge-danger'
onClick={() => handlerLaanc()}
>
취소
</Button.Ripple>
<>
<ModalHeader>
LAANC 승인 요청
<Button
color='danger'
onClick={() => setDisabledAnimation(!disabledAnimation)}
>
취소
</Button>
</ModalHeader>
<ModalBody>
<div className='mb-1'>
<div className='ti'>비행승인 사전결과 확인</div>
<div className='laanc-map-sm'>지도영역</div>
<div className='mt-1'>
<Alert color='danger'>
<div className='alert-body'>
<AlertCircle size={15} />{' '}
<span className='ms-1'>사전 결과 승인 대상입니다.</span>
</div>
</Alert>
</div>
<div className='vertically-centered-modal'>
<FlightArea
centeredModal={centeredModal}
setCenteredModal={setCenteredModal}
/>
</div>
</div>
</div>
<Row>
<Col sm='12'>
<div>
<Row>
<Col>
<div className='search-cont search-info pd-0'>
<div className='cont-ti mb-1 d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<div className='final'></div>
</div>
<dl>
<dt>
<div className='layer-ti'>
<h4>유효성 검사 정보</h4>
</div>
<CustomInput
inline
type='checkbox'
id='pilotYn'
label='조종사자격정보유무'
name='pilotYn'
value='A'
// checked={true}
// checked={checkState.all}
// onChange={handleChangeCheckbox}
<Col className='list-input' md='6' sm='12'>
<FormGroup>
<div className='ti'>조종사 정보</div>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Input
type='text'
id='memberName'
name='memberName'
size='sm'
placeholder=''
value={user.memberName}
disabled
/>
</FormGroup>
</Col>
<Col className='list-input' md='6' sm='12'>
<FormGroup>
<div className='ti'>승인 유형</div>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Input type='select' name='select' size='sm' id='test' disabled>
<option>상업</option>
<option>비상업</option>
</Input>
</FormGroup>
</Col>
<Col className='list-input' md='12'>
<div className='ti'>비행 계획 정보</div>
<Row>
<Col className='list-input' md='6'>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Flatpickr
className='form-control form-control-sm'
type='text'
id='schFltStDt'
name='schFltStDt'
data-enable-time
defaultValue={data.schFltStDt}
value={data.schFltStDt}
options={{
minDate: moment().format('YYYY-MM-DD')
}}
onChange={date => {
const value =
moment(date[0]).format('YYYY-MM-DD HH:mm:ss') || '';
handleChange({
name: 'schFltStDt',
value
});
}}
placeholder='비행 시작일자 선택(클릭)'
disabled
/>
<CustomInput
inline
type='checkbox'
id='DronYn'
label='기체보험가입여부'
name='DronYn'
value='B'
// checked={true}
// checked={checkState.all}
// onChange={handleChangeCheckbox}
</FormGroup>
</Col>
<Col className='list-input' md='6'>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Flatpickr
className='form-control form-control-sm'
type='text'
id='schFltEndDt'
name='schFltEndDt'
data-enable-time
defaultValue={data.schFltEndDt}
value={data.schFltEndDt}
options={{
minDate: moment().format('YYYY-MM-DD')
}}
onChange={date => {
const value =
moment(date[0]).format('YYYY-MM-DD HH:mm:ss') || '';
handleChange({
name: 'schFltEndDt',
value
});
}}
placeholder='비행 종료일자 선택(클릭)'
disabled
// {...{options:{minDate: "today"}}}
/>
</dt>
</FormGroup>
</Col>
</Row>
</Col>
<div className='search-info-ti d-flex justify-content-between'>
<h4 className='ti'>LAANC 승인 사전 결과 확인</h4>
</div>
<CustomInput
inline
type='checkbox'
id='exampleCustomCheckbox'
label='승인 처리를 위해 다음 스텝을 진행해주세요.'
name='aprvlYn'
value='C'
// checked={true}
// checked={checkState.all}
// onChange={handleChangeCheckbox}
/>
<div className='search-info-box'>
<Row>
<Col className='list-input' lg={4} md={4} sm={12}>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
비행시작일자
</Label>
<Flatpickr
className='form-control form-control-sm'
type='text'
id='schFltStDt'
name='schFltStDt'
data-enable-time
// defaultValue={data.schFltStDt}
value={data.schFltStDt}
onChange={date => {
const value =
moment(date[0]).format('YYYY-MM-DD HH:mm:ss') ||
'';
handleChange({
name: 'schFltStDt',
value
});
}}
placeholder='비행 시작일자 선택(클릭)'
disabled
/>
</FormGroup>
</Col>
<Col className='list-input' lg={4} md={4} sm={12}>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
비행종료일자
</Label>
<Flatpickr
className='form-control form-control-sm'
type='text'
id='schFltEndDt'
name='schFltEndDt'
data-enable-time
// defaultValue={data.schFltEndDt}
value={data.schFltEndDt}
onChange={date => {
const value =
moment(date[0]).format('YYYY-MM-DD HH:mm:ss') ||
'';
handleChange({
name: 'schFltEndDt',
value
});
}}
disabled
placeholder='비행 종료일자 선택(클릭)'
// {...{options:{minDate: "today"}}}
/>
</FormGroup>
</Col>
<Col className='list-input' lg={4} md={4} sm={12}>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Input
type='select'
id='fltPurpose'
name='fltPurpose'
value={data.fltPurpose}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
handleChange({
type: 'plan',
name,
value
});
}}
disabled
// innerRef={props.data}
// className={classnames({
// 'is-invalid': props.errors.arcrftTypeCd
// })}
>
{/* TODO CDNOT 코드연동 필요 */}
<option value=''>= 선택 =</option>
<option value='시험비행'>= 시험비행 =</option>
<option value='교육비행'>= 교육비행 =</option>
<option value='사진/영상촬영'>
= 사진/영상촬영 =
</option>
<option value='비행훈련'>= 비행훈련 =</option>
<option value='비행교육'>= 비행교육 =</option>
<option value='비행실기시험'>
= 비행실기시험 =
</option>
</Input>
</FormGroup>
</Col>
</Row>
</div>
<div className='search-info-box'>
<Row>
<Col className='list-input' lg={4} md={4} sm={12}>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Input
type='text'
id='fltElev'
name='fltElev'
// defaultValue={data.email || ''}
value={data.areaList[0].fltElev}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
handleChange({
type: 'area',
name,
value
});
}}
// innerRef={data}
placeholder='100m'
disabled
/>
</FormGroup>
</Col>
<Col className='list-input' lg={4} md={4} sm={12}>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Input
type='text'
id='bufferZone'
name='bufferZone'
// defaultValue={data.email || ''}
value={data.areaList[0].bufferZone}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
handleChange({
type: 'area',
name,
value
});
}}
// innerRef={data}
placeholder='100m'
disabled
/>
</FormGroup>
</Col>
<Col className='list-input' lg={4} md={4} sm={12}>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Input
type='text'
id='fltMethod'
name='fltMethod'
// defaultValue={data.email || ''}
value={data.areaList[0].fltMethod}
bsSize='sm'
onChange={e => {
const { name, value } = e.target;
handleChange({
type: 'area',
name,
value
});
}}
// innerRef={data}
placeholder=''
disabled
/>
</FormGroup>
</Col>
</Row>
</div>
<div className='search-info-ti d-flex justify-content-between'>
<h4 className='ti'>조종사 준수사항 처벌 동의 약관</h4>
</div>
<CustomInput
inline
type='checkbox'
id='aprvlYn'
label='조종자 준수사항 미 준수 시 처벌에 동의합니다.'
name='aprvlYn'
value='D'
// checked={true}
// checked={checkState.all}
// onChange={handleChangeCheckbox}
/>
<div className='d-flex align-items-center'>
<Button.Ripple
color='danger'
bsSize='sm'
onClick={() => handleClick(1)}
>
이전
</Button.Ripple>
<Button.Ripple
className='mr-1'
color='primary'
beSize='sm'
//onClick={() => handleClick(3)}
>
다음
</Button.Ripple>
</div>
</dl>
</div>
<Col className='list-input' md='12'>
<div className='ti'>기체 정보</div>
<Row>
<Col className='list-input' md='12'>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
</Label>
<Input
type='text'
id='test'
size='sm'
placeholder=''
disabled
/>
</FormGroup>
</Col>
</Row>
</Col>
<Col className='list-input' md='12'>
<div className='ti'> 승인 사유</div>
<div className='cancel-box'>내용</div>
</Col>
</Row>
</Col>
</Row>
</div>
</div>
</ModalBody>
<ModalFooter>
<Button outline color='danger' onClick={() => handlerStep(1)}>
이전
</Button>
<ul className='step'>
<li>
<span className='on'></span>
</li>
<li>
<span className='on'></span>
</li>
<li>
<span></span>
</li>
</ul>
<Button
outline
onClick={() => setDisabledAnimation(!disabledAnimation)}
>
다음
</Button>
</ModalFooter>
</>
);
};
export default Apply;

46
src/views/laanc/FlightPlan.js

@ -40,16 +40,18 @@ const FlightPlan = ({
data,
handlerWeather,
disabledAnimation,
setDisabledAnimation
setDisabledAnimation,
centeredModal,
setCenteredModal
}) => {
const user = useSelector(state => state.authState);
const [centeredModal, setCenteredModal] = useState(false);
const { user } = useSelector(state => state.authState);
const history = useHistory();
const handlerLaanc = () => {
history.replace('/control');
};
console.log('>>', user);
return (
<>
@ -77,15 +79,7 @@ const FlightPlan = ({
name='memberName'
size='sm'
placeholder=''
value={data.pilotList[0].memberName || ''}
onChange={e => {
const { name, value } = e.target;
handleChange({
type: 'pilot',
name,
value
});
}}
value={user.memberName}
disabled
/>
</FormGroup>
@ -97,17 +91,16 @@ const FlightPlan = ({
<span className='necessary'>*</span>
</Label>
<Input type='select' name='select' size='sm' id='test'>
<option>무인 비행기</option>
<option>무인 헬리콥터</option>
<option>무인 멀티콥터</option>
<option>무인 비행선</option>
<option value=''>= 선택 =</option>
<option>상업</option>
<option>비상업</option>
</Input>
</FormGroup>
</Col>
<Col className='list-input' md='12'>
<div className='ti'>비행 계획 정보</div>
<Row>
<Col className='list-input' md='4'>
<Col className='list-input' md='6'>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
@ -135,7 +128,7 @@ const FlightPlan = ({
/>
</FormGroup>
</Col>
<Col className='list-input' md='4'>
<Col className='list-input' md='6'>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
@ -164,7 +157,7 @@ const FlightPlan = ({
/>
</FormGroup>
</Col>
<Col className='list-input' md='4'>
<Col className='list-input' md='12'>
<FormGroup>
<Label for='test'>
<span className='necessary'>*</span>
@ -324,12 +317,11 @@ const FlightPlan = ({
<span className='necessary'>*</span>
</Label>
<Input
type='text'
type='select'
id='arcrftTypeCd'
name='arcrftTypeCd'
// defaultValue={data.email || ''}
value={data.arcrftList[0].arcrftTypeCd}
bsSize='sm'
size='sm'
onChange={e => {
const { name, value } = e.target;
handleChange({
@ -338,9 +330,13 @@ const FlightPlan = ({
value
});
}}
// innerRef={data}
placeholder='100m'
/>
>
<option value=''>= 선택 =</option>
<option>무인 비행기</option>
<option>무인 헬리콥터</option>
<option>무인 멀티콥터</option>
<option>무인 비행선</option>
</Input>
</FormGroup>
</Col>
<Col className='list-input' md='4'>

Loading…
Cancel
Save