From 4e846ae0752b9a8b3848da5e2d4a69870f4efd49 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 20:43:21 +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=EA=B8=B0=EC=B2=B4=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basis/flight/plan/FlightPlanArcrft.js | 137 ++++++++++++++++++ .../basis/flight/plan/FlightPlanForm.js | 3 +- .../basis/flight/plan/FlightPlanPilot.js | 4 +- .../flight/plan/FlightPlanArcrftContainer.js | 42 ++++++ .../flight/plan/FlightPlanDetailContainer.js | 30 +++- .../basis/flight/actions/basisFlightAction.ts | 23 ++- .../basis/flight/models/basisFlightModel.ts | 1 + .../flight/reducers/basisFlightReducer.ts | 14 ++ 8 files changed, 243 insertions(+), 11 deletions(-) create mode 100644 src/components/basis/flight/plan/FlightPlanArcrft.js create mode 100644 src/containers/basis/flight/plan/FlightPlanArcrftContainer.js diff --git a/src/components/basis/flight/plan/FlightPlanArcrft.js b/src/components/basis/flight/plan/FlightPlanArcrft.js new file mode 100644 index 0000000..a853dc8 --- /dev/null +++ b/src/components/basis/flight/plan/FlightPlanArcrft.js @@ -0,0 +1,137 @@ +import React from 'react'; +import {Button, Card, CardBody, Col, CustomInput, Row, FormGroup, Input, Label} from 'reactstrap'; +import {Search} from 'react-feather'; +import {GridDatabase} from '../../../crud/grid/GridDatatable'; + +const FlightPlanArcrft = ({ arcrftList, handleSelectArcrft }) => { + const columns = [ + {id: 'groupNm', name: '그룹 명', cell: row => (
{row.groupNm}
)}, + {id: 'arcrftModelNm', name: '모델 명', cell: row => (
{row.arcrftModelNm}
)}, + {id: 'idntfTypeCd', name: '종류', cell: row => (
{row.idntfTypeCd}
)}, + {id: 'ownerNm', name: '소유자 명', cell: row => (
{row.ownerNm}
)}, + {id: 'idntfNum', name: '식별 코드', cell: row => (
{row.idntfNum}
)}, + { + id: 'selectPilot', name: '선택', cell: row => { + return { + handleSelectArcrft(row.arcrftSno) + } + }>선택; + } + } + ]; + + return ( + <> +
+ + +
+
+

검색조건

+
+
+ + + 검색 + +
+
+ + +
+
+
+
+
그룹 명
+
+
+ + + + + + + + +
+
+
+
+
소유자 명
+
+
+ + + + + + + + +
+
+
+
+
+
+
+
+ + +
+
+
+ + +
+
+

기체 목록

+ 검색결과 총 {!!arcrftList ? arcrftList.length : 0}건 +
+
+
+ +
+ + {/* 검색된 데이터가 없습니다. */} +
+
+
+ +
+
+ + ) + +} + +export default FlightPlanArcrft; \ No newline at end of file diff --git a/src/components/basis/flight/plan/FlightPlanForm.js b/src/components/basis/flight/plan/FlightPlanForm.js index c28e818..27f4a0e 100644 --- a/src/components/basis/flight/plan/FlightPlanForm.js +++ b/src/components/basis/flight/plan/FlightPlanForm.js @@ -15,6 +15,7 @@ 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'; +import FlightPlanArcrftContainer from '../../../../containers/basis/flight/plan/FlightPlanArcrftContainer'; const FlightPlanForm = ({data, handleModal, handleChange, handleSave, handleDelete, modal}) => { @@ -353,7 +354,7 @@ const SelectModal = ({handleModal, modal}) => { isOpen = modal.arcrft; title = '기체 조회'; type = 'arcrft'; - description = ''; + description = ; } if(modal.area) { diff --git a/src/components/basis/flight/plan/FlightPlanPilot.js b/src/components/basis/flight/plan/FlightPlanPilot.js index d35a132..52089f5 100644 --- a/src/components/basis/flight/plan/FlightPlanPilot.js +++ b/src/components/basis/flight/plan/FlightPlanPilot.js @@ -78,8 +78,8 @@ const FlightPlanPilot = ({ pilotList, handleSelectPilot }) => { { + const dispatch = useDispatch(); + const { arcrftList } = useSelector(state => state.flightState); + + + /* 기체 조회 */ + const handleSearch = () => { + // group id 하드코딩 + dispatch(Actions.FLIGHT_PLAN_ARCRFT_LIST.request("D1682A")); + } + + /* 기체 선택 */ + const handleSelectArcrft = (arcrftSno) => { + handleModal({target: 'arcrft', isOpen: false}); + + const arcrft = arcrftList.find(arcrft => { + return arcrft.arcrftSno === arcrftSno; + }); + /* 기체 정보 Redux 저장 */ + dispatch(Actions.ARCRFT_SELECT(arcrft)); + } + + useEffect(() => { + handleSearch(); + }, []) + + + return ( + + ) +} + +export default FlightPlanArcrftContainer; \ No newline at end of file diff --git a/src/containers/basis/flight/plan/FlightPlanDetailContainer.js b/src/containers/basis/flight/plan/FlightPlanDetailContainer.js index adbe413..1cc2743 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, pilotSelect} = flightState; + const { detail, pilotSelect, arcrftSelect } = flightState; const [modal, setModal] = useState(initModal); const [detailData, setDetailData] = useState(initFlightBas.initDetail); @@ -42,7 +42,7 @@ const FlightPlanDetailContainer = () => { pilot.email = pilotSelect.email; pilot.memberName = pilotSelect.memberName; pilot.hpno = pilotSelect.hpno; - + setDetailData(prevState => { return { ...prevState, @@ -53,6 +53,32 @@ const FlightPlanDetailContainer = () => { }, [pilotSelect]) + useEffect(() => { + if(arcrftSelect !== undefined) { + const arcrft = Object.assign({}, initFlightBas['arcrft']); + + arcrft.arcrftSno = arcrftSelect.arcrftSno; + arcrft.groupId = arcrftSelect.groupNm; + arcrft.groupNm = arcrftSelect.clncd; + arcrft.arcrftModelNm = arcrftSelect.arcrftModelNm; + arcrft.idntfTypeCd = arcrftSelect.idntfTypeCd; + arcrft.idntfNum = arcrftSelect.idntfNum; + arcrft.ownerNm = arcrftSelect.ownerNm; + + setDetailData(prevState => { + return { + ...prevState, + ['arcrftList']: [...prevState['arcrftList'], arcrft] + } + }) + } + }, [arcrftSelect]) + + useEffect(() => { + // 조종사, 기체 정보 Redux 초기화 + dispatch(Actions.PILOT_ARCRFT_SELECT_INIT()); + }) + const handleModal = (modal) => { setModal(prevState => ({ ...initModal, diff --git a/src/modules/basis/flight/actions/basisFlightAction.ts b/src/modules/basis/flight/actions/basisFlightAction.ts index 953737b..bb51e31 100644 --- a/src/modules/basis/flight/actions/basisFlightAction.ts +++ b/src/modules/basis/flight/actions/basisFlightAction.ts @@ -2,10 +2,11 @@ import { AxiosError } from 'axios'; import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; import { FlightAreaData, + FlightPlanArcrftData, FlightPlanArcrftDataList, // FlightPlanArea, FlightPlanData, - FlightPlanListRqData, FlightPlanPilotDataList + FlightPlanListRqData, FlightPlanPilotDataList, PilotSelectData } from '../models/basisFlightModel'; @@ -58,9 +59,11 @@ const FLIGHT_PLAN_ARCRFT_LIST_REQUEST = 'basis/flight/plan/arcrft_list/ARCRFT_LI const FLIGHT_PLAN_ARCRFT_LIST_SUCCESS = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_SUCCESS'; const FLIGHT_PLAN_ARCRFT_LIST_FAILURE = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_FAILURE'; +// 기체 선택 +const FLIGHT_PLAN_ARCRFT_SELECT = 'basis/flight/plan/arcrft_list/ARCRFT_SELECT'; - - +// 조종사, 기체 선택 초기화 +const PILOT_ARCRFT_SELECT_INITIAL = 'basis/flight/plan/detail/SELECT_INIT'; export const AREA_LIST = createAsyncAction( @@ -118,8 +121,8 @@ export const FLIGHT_PLAN_PILOT_LIST = createAsyncAction( FLIGHT_PLAN_PILOT_LIST_FAILURE )(); -// 조종사 조회 -export const PILOT_SELECT = createAction(FLIGHT_PLAN_PILOT_SELECT)(); +// 조종사 선택 +export const PILOT_SELECT = createAction(FLIGHT_PLAN_PILOT_SELECT)(); // 기체 목록 export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction( @@ -128,6 +131,12 @@ export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction( FLIGHT_PLAN_ARCRFT_LIST_FAILURE )(); +// 조종사 선택 +export const ARCRFT_SELECT = createAction(FLIGHT_PLAN_ARCRFT_SELECT)(); + +// 조종사, 기체 선택 초기화 +export const PILOT_ARCRFT_SELECT_INIT = createAction(PILOT_ARCRFT_SELECT_INITIAL)(); + const actions = { AREA_LIST, @@ -140,7 +149,9 @@ const actions = { FLIGHT_PLAN_DELETE, FLIGHT_PLAN_PILOT_LIST, FLIGHT_PLAN_ARCRFT_LIST, - PILOT_SELECT + PILOT_SELECT, + ARCRFT_SELECT, + PILOT_ARCRFT_SELECT_INIT }; export type FlightAction = ActionType; diff --git a/src/modules/basis/flight/models/basisFlightModel.ts b/src/modules/basis/flight/models/basisFlightModel.ts index 3339cd4..401562f 100644 --- a/src/modules/basis/flight/models/basisFlightModel.ts +++ b/src/modules/basis/flight/models/basisFlightModel.ts @@ -8,6 +8,7 @@ export interface FlightState { pilotList: FlightPlanPilotDataList | undefined arcrftList: FlightPlanArcrftDataList | undefined pilotSelect: PilotSelectData | undefined + arcrftSelect: FlightPlanArcrftData | undefined } export interface FlightAreaData { diff --git a/src/modules/basis/flight/reducers/basisFlightReducer.ts b/src/modules/basis/flight/reducers/basisFlightReducer.ts index 5a138ac..d1bf3f1 100644 --- a/src/modules/basis/flight/reducers/basisFlightReducer.ts +++ b/src/modules/basis/flight/reducers/basisFlightReducer.ts @@ -59,3 +59,17 @@ export const flightReducer = createReducer(in draft.arcrftList = data; }) ) + // 기체 선택 + .handleAction(Actions.ARCRFT_SELECT, (state, action) => + produce(state, draft => { + const data = action.payload; + draft.arcrftSelect = data; + }) + ) + // 조종사, 기체 선택 초기화 + .handleAction(Actions.PILOT_ARCRFT_SELECT_INIT, (state, action) => + produce(state, draft => { + draft.arcrftSelect = undefined; + draft.pilotSelect = undefined; + }) + )