Browse Source

비행계획서(유효성 검사 기획X 버전)

pull/2/head
sanguu 2 years ago
parent
commit
f158921a56
  1. 265
      src/containers/basis/flight/plan/FlightPlanDetailContainer.js

265
src/containers/basis/flight/plan/FlightPlanDetailContainer.js

@ -1,10 +1,10 @@
import React, {useEffect, useState} from 'react'; import React, { useEffect, useState } from 'react';
import FlightPlanForm from '../../../../components/basis/flight/plan/FlightPlanForm'; import FlightPlanForm from '../../../../components/basis/flight/plan/FlightPlanForm';
import {CustomDetailLayout} from '../../../../components/layout/CustomDetailLayout'; import { CustomDetailLayout } from '../../../../components/layout/CustomDetailLayout';
import {useHistory, useLocation, useParams} from 'react-router-dom'; import { useHistory, useLocation, useParams } from 'react-router-dom';
import {useDispatch, useSelector} from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import * as Actions from '../../../../modules/basis/flight/actions/basisFlightAction'; import * as Actions from '../../../../modules/basis/flight/actions/basisFlightAction';
import {initFlight, initFlightBas} from '../../../../modules/basis/flight/models/basisFlightModel'; import { initFlight, initFlightBas } from '../../../../modules/basis/flight/models/basisFlightModel';
import { AiFillPropertySafety } from 'react-icons/ai'; import { AiFillPropertySafety } from 'react-icons/ai';
import { ErrorModal } from '../../../../components/modal/ErrorModal'; import { ErrorModal } from '../../../../components/modal/ErrorModal';
import { CgArrowLeftR } from 'react-icons/cg'; import { CgArrowLeftR } from 'react-icons/cg';
@ -25,30 +25,30 @@ const FlightPlanDetailContainer = () => {
const { detail, pilotSelect, arcrftSelect, areaList, selectGroup } = flightState; const { detail, pilotSelect, arcrftSelect, areaList, selectGroup } = flightState;
const [modal, setModal] = useState(initModal); const [modal, setModal] = useState(initModal);
const [detailData, setDetailData] = useState(initFlightBas.initDetail); const [detailData, setDetailData] = useState(initFlightBas.initDetail);
//모달 관련 설정 //모달 관련 설정
const [modal2, setModal2] = useState({ const [modal2, setModal2] = useState({
isOpen: false, isOpen: false,
title: '', title: '',
desc: '' desc: ''
}); });
useEffect(() => { useEffect(() => {
if (Object.keys(urlParams).length === 0 && urlParams.constructor === Object) return; if (Object.keys(urlParams).length === 0 && urlParams.constructor === Object) return;
dispatch(Actions.FLIGHT_PLAN_DETAIL.request(urlParams.planSno)); dispatch(Actions.FLIGHT_PLAN_DETAIL.request(urlParams.planSno));
}, [urlParams]) }, [urlParams])
useEffect(() => { useEffect(() => {
setDetailData({ setDetailData({
...detail, ...detail,
cstmrSno: sessionStorage.getItem('cstmrSno'), cstmrSno: sessionStorage.getItem('cstmrSno'),
groupId: sessionStorage.getItem('groupId'), groupId: sessionStorage.getItem('groupId'),
}); });
}, [detail]) }, [detail])
useEffect(() => { useEffect(() => {
if(pilotSelect !== undefined) { if (pilotSelect !== undefined) {
const pilotList = detailData.pilotList.concat(); const pilotList = detailData.pilotList.concat();
const pilot = Object.assign({}, initFlightBas['pilot']); const pilot = Object.assign({}, initFlightBas['pilot']);
pilot.planSno = detailData.planSno; pilot.planSno = detailData.planSno;
pilot.cstmrSno = pilotSelect.cstmrSno; pilot.cstmrSno = pilotSelect.cstmrSno;
@ -61,116 +61,116 @@ const FlightPlanDetailContainer = () => {
// 파일럿 중복 확인 // 파일럿 중복 확인
let checking = true let checking = true
pilotList.forEach((p, i) => { pilotList.forEach((p, i) => {
if(p.cstmrSno === pilotSelect.cstmrSno) { if (p.cstmrSno === pilotSelect.cstmrSno) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '중복값 입력 오류', title: '중복값 입력 오류',
desc: '이미 등록된 조종사 정보입니다.' desc: '이미 등록된 조종사 정보입니다.'
}); });
checking = false; checking = false;
return false; return false;
} }
if(p.cstmrSno !== 0) { if (p.cstmrSno !== 0) {
if(i === pilotList.length -1) pilotList.push(pilot); if (i === pilotList.length - 1) pilotList.push(pilot);
} else { } else {
pilotList[i] = pilot; pilotList[i] = pilot;
} }
}); });
if(checking) { if (checking) {
setDetailData(prevState => { setDetailData(prevState => {
return { return {
...prevState, ...prevState,
['pilotList']: pilotList ['pilotList']: pilotList
} }
}); });
} }
} }
}, [pilotSelect]) }, [pilotSelect])
useEffect(() => { useEffect(() => {
if(arcrftSelect !== undefined) { if (arcrftSelect !== undefined) {
const arcrftList = detailData.arcrftList.concat(); const arcrftList = detailData.arcrftList.concat();
const arcrft = Object.assign({}, initFlightBas['arcrft']); const arcrft = Object.assign({}, initFlightBas['arcrft']);
arcrft.planSno = detailData.planSno; arcrft.planSno = detailData.planSno;
arcrft.arcrftSno = arcrftSelect.arcrftSno; arcrft.arcrftSno = arcrftSelect.arcrftSno;
arcrft.groupId = arcrftSelect.groupId; arcrft.groupId = arcrftSelect.groupId;
arcrft.groupNm = arcrftSelect.groupNm; arcrft.groupNm = arcrftSelect.groupNm;
arcrft.arcrftModelNm = arcrftSelect.arcrftModelNm; arcrft.arcrftModelNm = arcrftSelect.arcrftModelNm;
arcrft.idntfTypeCd = arcrftSelect.idntfTypeCd; arcrft.idntfTypeCd = arcrftSelect.idntfTypeCd;
arcrft.arcrftTypeCd = arcrftSelect.arcrftTypeCd; arcrft.arcrftTypeCd = arcrftSelect.arcrftTypeCd;
arcrft.idntfNum = arcrftSelect.idntfNum; arcrft.idntfNum = arcrftSelect.idntfNum;
arcrft.ownerNm = arcrftSelect.ownerNm; arcrft.ownerNm = arcrftSelect.ownerNm;
let checking = true; let checking = true;
arcrftList.forEach((p,i) => { arcrftList.forEach((p, i) => {
if(p.idntfNum === arcrftSelect.idntfNum) { if (p.idntfNum === arcrftSelect.idntfNum) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '중복값 입력 오류', title: '중복값 입력 오류',
desc: '이미 등록된 기체 정보입니다.' desc: '이미 등록된 기체 정보입니다.'
}); });
checking = false; checking = false;
return false; return false;
} }
if(p.idntfNum) { if (p.idntfNum) {
if(i === arcrftList.length -1) arcrftList.push(arcrft); if (i === arcrftList.length - 1) arcrftList.push(arcrft);
} else { } else {
arcrftList[i] = arcrft; arcrftList[i] = arcrft;
} }
}); });
if(checking) { if (checking) {
setDetailData(prevState => { setDetailData(prevState => {
return { return {
...prevState, ...prevState,
['arcrftList']: arcrftList ['arcrftList']: arcrftList
} }
}) })
} }
} }
}, [arcrftSelect]) }, [arcrftSelect])
useEffect(() => { useEffect(() => {
if(areaList !== undefined) { if (areaList !== undefined) {
const areas = detailData.areaList.concat(); const areas = detailData.areaList.concat();
const createAreaList = areas.map((area, i) => { const createAreaList = areas.map((area, i) => {
const targetArea = areaList[i]; const targetArea = areaList[i];
let targetCoordList = area.coordList; let targetCoordList = area.coordList;
if(targetArea.coordList) { if (targetArea.coordList) {
targetCoordList = targetArea.coordList.map((coord, j) => { targetCoordList = targetArea.coordList.map((coord, j) => {
return { return {
...coord, ...coord,
planAreaSno : area.planAreaSno, planAreaSno: area.planAreaSno,
planAreaCoordSno : 0 planAreaCoordSno: 0
} }
}) })
} }
return { return {
...area, ...area,
areaType : targetArea.areaType, areaType: targetArea.areaType,
bufferZone: targetArea.bufferZone ? targetArea.bufferZone : 0, bufferZone: targetArea.bufferZone ? targetArea.bufferZone : 0,
fltElev : targetArea.fltElev ? targetArea.fltElev : 0, fltElev: targetArea.fltElev ? targetArea.fltElev : 0,
fltMethod : targetArea.fltMethod ? targetArea.fltMethod : '', fltMethod: targetArea.fltMethod ? targetArea.fltMethod : '',
coordList : targetCoordList coordList: targetCoordList
} }
}); });
setDetailData(prevState => { setDetailData(prevState => {
return { return {
...prevState, ...prevState,
['areaList']: createAreaList ['areaList']: createAreaList
} }
}) })
// dispatch(Actions.AREA_DETAIL_INIT()); // dispatch(Actions.AREA_DETAIL_INIT());
} }
@ -179,14 +179,14 @@ const FlightPlanDetailContainer = () => {
useEffect(() => { useEffect(() => {
// 조종사, 기체 정보 Redux 초기화 // 조종사, 기체 정보 Redux 초기화
dispatch(Actions.PILOT_ARCRFT_SELECT_INIT()); dispatch(Actions.PILOT_ARCRFT_SELECT_INIT());
}, [flightState]); }, [flightState]);
const handleModal = (modal) => { const handleModal = (modal) => {
if(modal.target === 'area' && modal.isOpen) { if (modal.target === 'area' && modal.isOpen) {
if(detailData.areaList) { if (detailData.areaList) {
dispatch(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request(detailData.areaList)); dispatch(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request(detailData.areaList));
} }
} }
setModal(prevState => ({ setModal(prevState => ({
@ -196,18 +196,18 @@ const FlightPlanDetailContainer = () => {
} }
// 변경감지 // 변경감지
const handleChange = ({name, value, type, index, pIndex}) => { const handleChange = ({ name, value, type, index, pIndex }) => {
const arrName = `${type}List`; const arrName = `${type}List`;
switch (type) { switch (type) {
case 'coord': case 'coord':
// TODO 추후 삭제 필요 start // TODO 추후 삭제 필요 start
if(name == 'lonlat'){ if (name == 'lonlat') {
const values = value.split("/"); const values = value.split("/");
let latValue = 1 let latValue = 1
let lonValue = 1 let lonValue = 1
if(values.length == 1){ if (values.length == 1) {
latValue = values[0].trim(); latValue = values[0].trim();
} else if(values.length == 2){ } else if (values.length == 2) {
latValue = values[0].trim(); latValue = values[0].trim();
lonValue = values[1].trim(); lonValue = values[1].trim();
} else { } else {
@ -215,10 +215,10 @@ const FlightPlanDetailContainer = () => {
} }
setDetailData(prevState => { setDetailData(prevState => {
const areaList = prevState.areaList.map((area, i) => { const areaList = prevState.areaList.map((area, i) => {
if(i !== pIndex) return {...area}; if (i !== pIndex) return { ...area };
const coordList = area.coordList.map((coord, j) => { const coordList = area.coordList.map((coord, j) => {
if(j !== index) return {...coord}; if (j !== index) return { ...coord };
return { return {
...coord, ...coord,
lat: latValue, lat: latValue,
@ -281,7 +281,7 @@ const FlightPlanDetailContainer = () => {
} }
// 추가 // 추가
const handleAddArray = ({type, pIndex}) => { const handleAddArray = ({ type, pIndex }) => {
const arrName = `${type}List`; const arrName = `${type}List`;
switch (type) { switch (type) {
case 'coord': case 'coord':
@ -317,7 +317,7 @@ const FlightPlanDetailContainer = () => {
} }
} }
// 삭제 // 삭제
const handleDeleteArray = ({type, index, pIndex}) => { const handleDeleteArray = ({ type, index, pIndex }) => {
const arrName = `${type}List`; const arrName = `${type}List`;
switch (type) { switch (type) {
case 'coord': case 'coord':
@ -337,36 +337,36 @@ const FlightPlanDetailContainer = () => {
setDetailData(prevState => { setDetailData(prevState => {
const arr = [...prevState[arrName]]; const arr = [...prevState[arrName]];
const deleteData = arr.splice(index, 1); const deleteData = arr.splice(index, 1);
const id = initFlight.detail['pilotList'] const id = initFlight.detail['pilotList']
if(arr.length > 0) { if (arr.length > 0) {
return { return {
...prevState, ...prevState,
[arrName]: arr [arrName]: arr
} }
} }
else { else {
return { return {
...prevState, ...prevState,
[arrName]: id [arrName]: id
} }
} }
}) })
break; break;
case 'arcrft': case 'arcrft':
setDetailData(prevState => { setDetailData(prevState => {
const arr = [...prevState[arrName]]; const arr = [...prevState[arrName]];
const deleteData = arr.splice(index, 1); const deleteData = arr.splice(index, 1);
const id = initFlight.detail['arcrftList'] const id = initFlight.detail['arcrftList']
if(arr.length > 0) { if (arr.length > 0) {
return { return {
...prevState, ...prevState,
[arrName]: arr [arrName]: arr
} }
} }
else{ else {
return { return {
...prevState, ...prevState,
[arrName]: id [arrName]: id
@ -380,37 +380,43 @@ const FlightPlanDetailContainer = () => {
} }
// 저장 // 저장
const handleSave = () => { const handleSave = () => {
const reg_email = /^([0-9a-zA-Z_\.-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}$/;
if (!detailData.memberName) { const check_num = /[0-9]/;
const check_kor =
/^[가-힣a-zA-Z0-9][^!@#$%^&*()+\=\[\]{};':"\\|,.<>\/?\s]*$/;
if (!detailData.memberName) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '이름을 입력해 주세요.' desc: '이름을 입력해 주세요.'
}); });
return false; return false;
} }
else if (!detailData.hpno) { else if (!detailData.hpno) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '전화번호를 입력해 주세요.' desc: '전화번호를 입력해 주세요.'
}); });
return false; return false;
} }
else if(!detailData.email){
else if (!detailData.email) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '이메일을 입력해 주세요.' desc: '이메일을 입력해 주세요.'
}); });
return false; return false;
} }
else if(!detailData.fltPurpose){ else if (!detailData.fltPurpose) {
setModal2({ setModal2({
isOpen:true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '비행목적을 선택해 주세요.' desc: '비행목적을 선택해 주세요.'
}); });
@ -422,63 +428,86 @@ const FlightPlanDetailContainer = () => {
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '좌표를 선택해 주세요.' desc: '좌표를 선택해 주세요.'
}); });
return false; return false;
} }
else if (!detailData.areaList[0].fltElev) { else if (!detailData.areaList[0].fltElev) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '반경/고도를 입력해 주세요.' desc: '반경/고도를 입력해 주세요.'
}); });
return false; return false;
} }
else if (!detailData.areaList[0].fltMethod) { else if (!detailData.areaList[0].fltMethod) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '비행방식를 입력해 주세요.' desc: '비행방식를 입력해 주세요.'
}); });
return false; return false;
} }
else if (!detailData.pilotList[0].groupNm) { else if (!detailData.pilotList[0].groupNm) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '조종사를 선택해 주세요.' desc: '조종사를 선택해 주세요.'
}); });
return false; return false;
} }
else if (!detailData.arcrftList[0].groupNm) { else if (!detailData.arcrftList[0].groupNm) {
setModal2({ setModal2({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '기체를 선택해 주세요.' desc: '기체를 선택해 주세요.'
}); });
return false; return false;
}
else if (!check_kor.test(detailData.memberName)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '지원하지 않는 입력값 입니다.'
});
return false;
}
else if (!check_num.test(detailData.hpno)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '연락처에 숫자만 입력해주세요.'
});
return false;
}
if (!reg_email.test(detailData.email)) {
setModal2({
isOpen: true,
title: '필수값 입력 오류',
desc: '이메일 형식을 다시 확인해 주세요.',
});
return false;
} }
if (!detailData.planSno) { if (!detailData.planSno) {
dispatch(Actions.FLIGHT_PLAN_CREATE.request(detailData)); dispatch(Actions.FLIGHT_PLAN_CREATE.request(detailData));
} else { } else {
dispatch(Actions.FLIGHT_PLAN_UPDATE.request(detailData)); dispatch(Actions.FLIGHT_PLAN_UPDATE.request(detailData));
} }
dispatch(Actions.FLIGHT_PLAN_GROUP_SELECT( {cstmrSno: 0, groupId: '', groupNm: ''} )); dispatch(Actions.FLIGHT_PLAN_GROUP_SELECT({ cstmrSno: 0, groupId: '', groupNm: '' }));
} }
// 삭제 // 삭제
const handleDelete = () => { const handleDelete = () => {
if(!urlParams.planSno || urlParams.planSno){ if (!urlParams.planSno || urlParams.planSno) {
dispatch(Actions.FLIGHT_PLAN_DELETE.request(urlParams.planSno)); dispatch(Actions.FLIGHT_PLAN_DELETE.request(urlParams.planSno));
}
dispatch(Actions.FLIGHT_PLAN_GROUP_SELECT({ cstmrSno: 0, groupId: '', groupNm: '' }));
} }
dispatch(Actions.FLIGHT_PLAN_GROUP_SELECT({cstmrSno: 0, groupId: '', groupNm: ''}));
}
return ( return (
<CustomDetailLayout title={"비행 계획 신청서"}> <CustomDetailLayout title={"비행 계획 신청서"}>
@ -491,14 +520,14 @@ const FlightPlanDetailContainer = () => {
handleChange={handleChange} handleChange={handleChange}
handleAddArray={handleAddArray} handleAddArray={handleAddArray}
handleDeleteArray={handleDeleteArray} handleDeleteArray={handleDeleteArray}
// handlerSave={ // handlerSave={
// pageType === 'create' ? handlerCreate : handlerUpdate // pageType === 'create' ? handlerCreate : handlerUpdate
// } // }
// onChange={onChange} // onChange={onChange}
// handlerDelete={handlerDelete} // handlerDelete={handlerDelete}
// handlerInput={handlerInput} // handlerInput={handlerInput}
/> />
<ErrorModal modal={modal2} setModal={setModal2} /> <ErrorModal modal={modal2} setModal={setModal2} />
{/*<FlightPlanAreaModal*/} {/*<FlightPlanAreaModal*/}
{/* modal={modal}*/} {/* modal={modal}*/}
{/* save={saveFlightPlanArea}*/} {/* save={saveFlightPlanArea}*/}

Loading…
Cancel
Save