Browse Source

[비행계획서] 기체 목록 작업

pull/2/head
노승철 2 years ago
parent
commit
4e846ae075
  1. 137
      src/components/basis/flight/plan/FlightPlanArcrft.js
  2. 3
      src/components/basis/flight/plan/FlightPlanForm.js
  3. 4
      src/components/basis/flight/plan/FlightPlanPilot.js
  4. 42
      src/containers/basis/flight/plan/FlightPlanArcrftContainer.js
  5. 28
      src/containers/basis/flight/plan/FlightPlanDetailContainer.js
  6. 23
      src/modules/basis/flight/actions/basisFlightAction.ts
  7. 1
      src/modules/basis/flight/models/basisFlightModel.ts
  8. 14
      src/modules/basis/flight/reducers/basisFlightReducer.ts

137
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 => (<div>{row.groupNm}</div>)},
{id: 'arcrftModelNm', name: '모델 명', cell: row => (<div>{row.arcrftModelNm}</div>)},
{id: 'idntfTypeCd', name: '종류', cell: row => (<div>{row.idntfTypeCd}</div>)},
{id: 'ownerNm', name: '소유자 명', cell: row => (<div>{row.ownerNm}</div>)},
{id: 'idntfNum', name: '식별 코드', cell: row => (<div>{row.idntfNum}</div>)},
{
id: 'selectPilot', name: '선택', cell: row => {
return <Button.Ripple color='primary' size='sm' onClick={() => {
handleSelectArcrft(row.arcrftSno)
}
}>선택</Button.Ripple>;
}
}
];
return (
<>
<div className='pal-card-box'>
<Row>
<Col>
<div
className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<div>
<h4>검색조건</h4>
</div>
<div className='d-flex align-items-center'>
<Button.Ripple
color='primary'
size='sm'
// onClick={handleClickSearch}
>
<Search size={16}/>
검색
</Button.Ripple>
</div>
</div>
<Card>
<CardBody className='pal-card-body'>
<div className='search-cont'>
<dl>
<dt>
<div className='search-box'>
<div className='search-list-ti'>그룹 </div>
<div className='search-list'>
<div className='search-list-cont'>
<Row>
<Col className='list-input' xl='4' md='4' sm='12'>
<FormGroup className='form-label-group'>
<Input
type='text'
id='groupNm'
name='groupNm'
// value={props.params.groupNm}
// onChange={props.handlerInput}
size='sm'
// onKeyPress={props.onKeyPress}
placeholder='그룹명을 입력하세요'
/>
<Label for='test'>그룹 </Label>
</FormGroup>
</Col>
</Row>
</div>
</div>
</div>
<div className='search-box'>
<div className='search-list-ti'>소유자 </div>
<div className='search-list'>
<div className='search-list-cont'>
<Row>
<Col className='list-input' xl='4' md='4' sm='12'>
<FormGroup className='form-label-group'>
<Input
type='text'
id='ownerNm'
name='ownerNm'
// value={props.params.groupNm}
// onChange={props.handlerInput}
size='sm'
// onKeyPress={props.onKeyPress}
placeholder='소유자 명을 입력하세요'
/>
<Label for='test'>소유자 </Label>
</FormGroup>
</Col>
</Row>
</div>
</div>
</div>
</dt>
</dl>
</div>
</CardBody>
</Card>
</Col>
</Row>
</div>
<div className='pal-card-box'>
<Row>
<Col>
<div className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<div>
<h4>기체 목록</h4>
<span className='search-case'>검색결과 {!!arcrftList ? arcrftList.length : 0}</span>
</div>
</div>
<div className='invoice-list-wrapper'>
<Card>
<div className='invoice-list-dataTable'>
<GridDatabase
title={'조종사목록'}
data={arcrftList}
// count={0}
columns={columns}
// pagination={props.pagination}
/>
{/* 검색된 데이터가 없습니다. */}
</div>
</Card>
</div>
</Col>
</Row>
</div>
</>
)
}
export default FlightPlanArcrft;

3
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 = <FlightPlanArcrftContainer handleModal={handleModal} type={type} />;
}
if(modal.area) {

4
src/components/basis/flight/plan/FlightPlanPilot.js

@ -78,8 +78,8 @@ const FlightPlanPilot = ({ pilotList, handleSelectPilot }) => {
<FormGroup className='form-label-group'>
<Input
type='text'
id='groupNm'
name='groupNm'
id='memberName'
name='memberName'
// value={props.params.groupNm}
// onChange={props.handlerInput}
size='sm'

42
src/containers/basis/flight/plan/FlightPlanArcrftContainer.js

@ -0,0 +1,42 @@
import React, {useEffect, useState} from 'react';
import {useDispatch, useSelector} from 'react-redux';
import FlightPlanArcrft from '../../../../components/basis/flight/plan/FlightPlanArcrft';
import * as Actions from '../../../../modules/basis/flight/actions/basisFlightAction';
// import FlightPlanPilot from '../../../../components/basis/flight/plan/FlightPlanPilot';
const FlightPlanArcrftContainer = ({handleModal, type}) => {
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 (
<FlightPlanArcrft
arcrftList = {arcrftList}
handleSelectArcrft={handleSelectArcrft}
/>
)
}
export default FlightPlanArcrftContainer;

28
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);
@ -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,

23
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
)<string, FlightPlanPilotDataList, AxiosError>();
// 조종사 조회
export const PILOT_SELECT = createAction(FLIGHT_PLAN_PILOT_SELECT)<any>();
// 조종사 선택
export const PILOT_SELECT = createAction(FLIGHT_PLAN_PILOT_SELECT)<PilotSelectData>();
// 기체 목록
export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction(
@ -128,6 +131,12 @@ export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction(
FLIGHT_PLAN_ARCRFT_LIST_FAILURE
)<string, FlightPlanArcrftDataList, AxiosError>();
// 조종사 선택
export const ARCRFT_SELECT = createAction(FLIGHT_PLAN_ARCRFT_SELECT)<FlightPlanArcrftData>();
// 조종사, 기체 선택 초기화
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<typeof actions>;

1
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 {

14
src/modules/basis/flight/reducers/basisFlightReducer.ts

@ -59,3 +59,17 @@ export const flightReducer = createReducer<FlightState, Actions.FlightAction>(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;
})
)

Loading…
Cancel
Save