From af230f9df61a40ba393648e7a3f65f65222591d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?scnoh=28=EB=85=B8=EC=8A=B9=EC=B2=A0=29?= Date: Tue, 26 Jul 2022 19:22:05 +0900 Subject: [PATCH] =?UTF-8?q?[=EB=B9=84=ED=96=89=EA=B3=84=ED=9A=8D=EC=84=9C]?= =?UTF-8?q?=20=EC=A1=B0=EC=A2=85=EC=82=AC=20=EC=A0=95=EB=B3=B4=20=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basis/flight/plan/FlightPlanForm.js | 50 ++++++++++++++++++- .../basis/flight/plan/FlightPlanModal.js | 29 +++++++++++ .../flight/plan/FlightPlanDetailContainer.js | 31 +++++++++++- .../flight/plan/FlightPlanPilotContainer.js | 2 +- .../basis/flight/actions/basisFlightAction.ts | 9 +++- .../basis/flight/models/basisFlightModel.ts | 17 ++++++- .../flight/reducers/basisFlightReducer.ts | 7 +++ 7 files changed, 139 insertions(+), 6 deletions(-) create mode 100644 src/components/basis/flight/plan/FlightPlanModal.js diff --git a/src/components/basis/flight/plan/FlightPlanForm.js b/src/components/basis/flight/plan/FlightPlanForm.js index 0e25d0f7..c28e8188 100644 --- a/src/components/basis/flight/plan/FlightPlanForm.js +++ b/src/components/basis/flight/plan/FlightPlanForm.js @@ -13,9 +13,11 @@ import Flatpickr from 'react-flatpickr'; import '@styles/react/libs/flatpickr/flatpickr.scss'; import moment from 'moment'; import {initFlight, initFlightBas} from '../../../../modules/basis/flight/models/basisFlightModel'; +import FlightPlanPilotContainer from '../../../../containers/basis/flight/plan/FlightPlanPilotContainer'; +import { FlightPlanModal } from './FlightPlanModal'; -const FlightPlanForm = ({data, handleModal, handleChange, handleSave, handleDelete}) => { +const FlightPlanForm = ({data, handleModal, handleChange, handleSave, handleDelete, modal}) => { const {areaList, pilotList, arcrftList} = data; return ( @@ -258,7 +260,7 @@ const FlightPlanForm = ({data, handleModal, handleChange, handleSave, handleDele

조종사 정보

{ + onClick={(e) => { handleModal({target: 'pilot', isOpen: true}) }} > @@ -324,12 +326,56 @@ const FlightPlanForm = ({data, handleModal, handleChange, handleSave, handleDele +
) } export default FlightPlanForm; +const SelectModal = ({handleModal, modal}) => { + let title = ''; + let description = ''; + let type = ''; + let isOpen = false; + + if(modal.pilot) { + isOpen = modal.pilot; + title = '조종사 조회'; + type = 'pilot'; + description = + } + + if(modal.arcrft) { + isOpen = modal.arcrft; + title = '기체 조회'; + type = 'arcrft'; + description = ''; + } + + if(modal.area) { + isOpen = modal.area; + title = '비행 구역 설정'; + type = 'area'; + description = ''; + } + + return ( + + ) + +} + + const AreaForm = ({data, handleChange, index}) => { return (
diff --git a/src/components/basis/flight/plan/FlightPlanModal.js b/src/components/basis/flight/plan/FlightPlanModal.js new file mode 100644 index 00000000..b2d35d3b --- /dev/null +++ b/src/components/basis/flight/plan/FlightPlanModal.js @@ -0,0 +1,29 @@ +import { useState } from 'react'; +import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import FlightPlanAreaContainer from '../../../../containers/basis/flight/plan/FlightPlanAreaContainer'; + +export const FlightPlanModal = ({isOpen, title, description, type, handleModal}) => { + + return ( +
+ + handleModal(({target: type, isOpen: false})) + } + className='modal-dialog-centered modal-xl' + > + + handleModal(({target: type, isOpen: false})) + } + > + {title} + + + {description} + + +
+ ); +}; diff --git a/src/containers/basis/flight/plan/FlightPlanDetailContainer.js b/src/containers/basis/flight/plan/FlightPlanDetailContainer.js index 7797bd07..adbe4136 100644 --- a/src/containers/basis/flight/plan/FlightPlanDetailContainer.js +++ b/src/containers/basis/flight/plan/FlightPlanDetailContainer.js @@ -19,7 +19,7 @@ const FlightPlanDetailContainer = () => { const location = useLocation(); const urlParams = useParams(); const flightState = useSelector(state => state.flightState); - const {detail} = flightState; + const {detail, pilotSelect} = flightState; const [modal, setModal] = useState(initModal); const [detailData, setDetailData] = useState(initFlightBas.initDetail); @@ -32,6 +32,27 @@ const FlightPlanDetailContainer = () => { setDetailData(detail); }, [detail]) + useEffect(() => { + if(pilotSelect !== undefined) { + const pilot = Object.assign({}, initFlightBas['pilot']); + + pilot.cstmrSno = pilotSelect.cstmrSno; + pilot.groupNm = pilotSelect.groupNm; + pilot.clncd = pilotSelect.clncd; + pilot.email = pilotSelect.email; + pilot.memberName = pilotSelect.memberName; + pilot.hpno = pilotSelect.hpno; + + setDetailData(prevState => { + return { + ...prevState, + ['pilotList']: [...prevState['pilotList'], pilot] + } + }) + } + + }, [pilotSelect]) + const handleModal = (modal) => { setModal(prevState => ({ ...initModal, @@ -141,6 +162,13 @@ const FlightPlanDetailContainer = () => { break; case 'area': case 'pilot': + setDetailData(prevState => { + return { + ...prevState, + [arrName]: [...prevState[arrName], initFlightBas[type]] + } + }) + break; case 'arcrft': setDetailData(prevState => { return { @@ -202,6 +230,7 @@ const FlightPlanDetailContainer = () => { return ( { /* 조종사 선택 */ const handleSelectPilot = (cstmrSno) => { - handleModal({target: 'area', isOpen: false}); + handleModal({target: 'poilot', isOpen: false}); const pilot = pilotList.find(pilot => { return pilot.cstmrSno === cstmrSno; diff --git a/src/modules/basis/flight/actions/basisFlightAction.ts b/src/modules/basis/flight/actions/basisFlightAction.ts index e04e7d7c..953737bf 100644 --- a/src/modules/basis/flight/actions/basisFlightAction.ts +++ b/src/modules/basis/flight/actions/basisFlightAction.ts @@ -50,6 +50,9 @@ const FLIGHT_PLAN_PILOT_LIST_REQUEST = 'basis/flight/plan/pilot_list/PILOT_LIST_ const FLIGHT_PLAN_PILOT_LIST_SUCCESS = 'basis/flight/plan/pilot_list/PILOT_LIST_SUCCESS'; const FLIGHT_PLAN_PILOT_LIST_FAILURE = 'basis/flight/plan/pilot_list/PILOT_LIST_FAILURE'; +// 조종사 선택 +const FLIGHT_PLAN_PILOT_SELECT = 'basis/flight/plan/pilot_list/PILOT_SELECT'; + // 기체 조회 const FLIGHT_PLAN_ARCRFT_LIST_REQUEST = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_REQUEST'; const FLIGHT_PLAN_ARCRFT_LIST_SUCCESS = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_SUCCESS'; @@ -115,6 +118,9 @@ export const FLIGHT_PLAN_PILOT_LIST = createAsyncAction( FLIGHT_PLAN_PILOT_LIST_FAILURE )(); +// 조종사 조회 +export const PILOT_SELECT = createAction(FLIGHT_PLAN_PILOT_SELECT)(); + // 기체 목록 export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction( FLIGHT_PLAN_ARCRFT_LIST_REQUEST, @@ -133,7 +139,8 @@ const actions = { FLIGHT_PLAN_UPDATE, FLIGHT_PLAN_DELETE, FLIGHT_PLAN_PILOT_LIST, - FLIGHT_PLAN_ARCRFT_LIST + FLIGHT_PLAN_ARCRFT_LIST, + PILOT_SELECT }; export type FlightAction = ActionType; diff --git a/src/modules/basis/flight/models/basisFlightModel.ts b/src/modules/basis/flight/models/basisFlightModel.ts index cad9f06f..3339cd4a 100644 --- a/src/modules/basis/flight/models/basisFlightModel.ts +++ b/src/modules/basis/flight/models/basisFlightModel.ts @@ -7,6 +7,7 @@ export interface FlightState { detail: FlightPlanData | undefined pilotList: FlightPlanPilotDataList | undefined arcrftList: FlightPlanArcrftDataList | undefined + pilotSelect: PilotSelectData | undefined } export interface FlightAreaData { @@ -142,6 +143,18 @@ export interface FlightPlanAprovRqData { aprvlYn: string } +export interface PilotSelectData { + groupNm: string, + cstmrSno: string, + memberName: string, + email: string, + hpno: string, + clncd: string, + addr: string, + addrDtlCn: string, + zip: string +} + export const initFlight = { areaList: undefined, @@ -236,6 +249,8 @@ export const initFlight = { }, pilotList: undefined, arcrftList: undefined, + pilotSelect: undefined, + arcrftSelect: undefined }; @@ -262,7 +277,7 @@ export const initFlightBas = { updateDt: '', areaList: undefined, pilotList: undefined, - arcrftList: undefined + arcrftList: undefined, }, pilot: { planPilotSno: 0, diff --git a/src/modules/basis/flight/reducers/basisFlightReducer.ts b/src/modules/basis/flight/reducers/basisFlightReducer.ts index c44f0324..5a138ac0 100644 --- a/src/modules/basis/flight/reducers/basisFlightReducer.ts +++ b/src/modules/basis/flight/reducers/basisFlightReducer.ts @@ -45,6 +45,13 @@ export const flightReducer = createReducer(in draft.pilotList = data; }) ) + // 조종사 선택 + .handleAction(Actions.PILOT_SELECT, (state, action) => + produce(state, draft => { + const data = action.payload; + draft.pilotSelect = data; + }) + ) // 기체 조회 .handleAction(Actions.FLIGHT_PLAN_ARCRFT_LIST.success, (state, action) => produce(state, draft => {