Browse Source

비행계획서 폼 + api작업

pull/2/head
qkr7828(박재우) 2 years ago
parent
commit
4c41fc5203
  1. 128
      src/components/basis/flight/plan/FlightPlanForm.js
  2. 53
      src/containers/basis/flight/plan/FlightPlanDetailContainer.js
  3. 11
      src/modules/basis/flight/apis/basisFlightApi.ts
  4. 33
      src/modules/basis/flight/models/basisFlightModel.ts
  5. 6
      src/modules/basis/flight/reducers/basisFlightReducer.ts
  6. 50
      src/modules/basis/flight/sagas/basisFlightSaga.ts

128
src/components/basis/flight/plan/FlightPlanForm.js

@ -11,6 +11,8 @@ import {
} from 'reactstrap'; } from 'reactstrap';
import Flatpickr from 'react-flatpickr'; import Flatpickr from 'react-flatpickr';
import '@styles/react/libs/flatpickr/flatpickr.scss'; import '@styles/react/libs/flatpickr/flatpickr.scss';
import moment from 'moment';
const FlightPlanForm = (props) => { const FlightPlanForm = (props) => {
@ -48,12 +50,10 @@ const FlightPlanForm = (props) => {
<Label for='test'><span className='necessary'>*</span></Label> <Label for='test'><span className='necessary'>*</span></Label>
<Input <Input
type='text' type='text'
id={'memberName'} id='memberName'
name={'memberName'} name='memberName'
onChange={props.onChange} onChange={props.onChange}
size='sm' size='sm'
innerRef={props.data}
placeholder='' placeholder=''
/> />
</FormGroup> </FormGroup>
@ -69,7 +69,9 @@ const FlightPlanForm = (props) => {
id='clncd' id='clncd'
name='clncd' name='clncd'
size='sm' size='sm'
placeholder='+82' placeholder='+82'
value='+82'
readOnly readOnly
/> />
</div> </div>
@ -79,6 +81,7 @@ const FlightPlanForm = (props) => {
id='hpno' id='hpno'
name='hpno' name='hpno'
size='sm' size='sm'
onChange={props.onChange}
placeholder='010-0000-0000' placeholder='010-0000-0000'
@ -94,6 +97,7 @@ const FlightPlanForm = (props) => {
id='email' id='email'
name='email' name='email'
size='sm' size='sm'
onChange={props.onChange}
// innerRef={props.data} // innerRef={props.data}
placeholder='' placeholder=''
/> />
@ -151,6 +155,10 @@ const FlightPlanForm = (props) => {
type='text' type='text'
id='schFltStDt' id='schFltStDt'
name='schFltStDt' name='schFltStDt'
value={props.schFltStDt}
onChange={val =>
props.handlerInput(val)
}
// innerRef={props.data} // innerRef={props.data}
placeholder='비행 시작일자 선택(클릭)'/> placeholder='비행 시작일자 선택(클릭)'/>
@ -159,13 +167,17 @@ const FlightPlanForm = (props) => {
<Col className='list-input' lg={4} md={6} sm={12}> <Col className='list-input' lg={4} md={6} sm={12}>
<FormGroup> <FormGroup>
<Label for='test'> <Label for='test'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
<Flatpickr size='sm' <Flatpickr size='sm'
className='form-control calendar-flat' className='form-control calendar-flat'
type='text' type='text'
id='schFltEndDt' id='schFltEndDt'
name='schFltEndDt' name='schFltEndDt'
value={props.schFltEndDt}
onChange={val =>
props.handlerInput(val)
}
// innerRef={props.data} // innerRef={props.data}
placeholder='비행 종료일자 선택(클릭)'/> placeholder='비행 종료일자 선택(클릭)'/>
@ -181,12 +193,19 @@ const FlightPlanForm = (props) => {
name='fltPurpose' name='fltPurpose'
id='fltPurpose' id='fltPurpose'
size='sm' size='sm'
onChange={props.onChange}
// innerRef={props.data} // innerRef={props.data}
// className={classnames({ // className={classnames({
// 'is-invalid': props.errors.arcrftTypeCd // 'is-invalid': props.errors.arcrftTypeCd
// })} // })}
> >
<option value=''>= 선택 =</option> <option value=''>= 선택 =</option>
<option value='시험비행'>= 시험비행 =</option>
<option value='교육비행'>= 교육비행 =</option>
<option value='사진/영상촬영'>= 사진/영상촬영 =</option>
<option value='비행훈련'>= 비행훈련 =</option>
<option value='비행교육'>= 비행교육 =</option>
<option value='비행실기시험'>= 비행실기시험 =</option>
{/* CDNOT 코드연동 필요 */} {/* CDNOT 코드연동 필요 */}
{/* {ARCTFT_TYPE_CD.map(item => { {/* {ARCTFT_TYPE_CD.map(item => {
return ( return (
@ -289,11 +308,12 @@ const FlightPlanForm = (props) => {
</Label> </Label>
<Input <Input
type='text' type='text'
id='ownerNm' id='lonlat'
name='ownerNm' name='lonlat'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -308,18 +328,20 @@ const FlightPlanForm = (props) => {
id='fltElev' id='fltElev'
name='fltElev' name='fltElev'
size='sm' size='sm'
placeholder='반경' placeholder='반경'
readOnly onChange={props.onChange}
/> />
</div> </div>
<div className='m_ft_box'> <div className='m_ft_box'>
<Input <Input
type='text' type='text'
id='fltElev' id='fltHight'
name='fltElev' name='fltHight'
size='sm' size='sm'
placeholder='고도' placeholder='고도'
readOnly onChange={props.onChange}
/> />
</div> </div>
</FormGroup> </FormGroup>
@ -335,11 +357,12 @@ const FlightPlanForm = (props) => {
</Label> </Label>
<Input <Input
type='text' type='text'
id='ownerNm' id='lonlat2'
name='ownerNm' name='lonlat2'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -354,7 +377,8 @@ const FlightPlanForm = (props) => {
name='fltMethod' name='fltMethod'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -365,11 +389,12 @@ const FlightPlanForm = (props) => {
</Label> </Label>
<Input <Input
type='text' type='text'
id='ownerNm' id='lonlat3'
name='ownerNm' name='lonlat3'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -399,8 +424,9 @@ const FlightPlanForm = (props) => {
id='groupNm' id='groupNm'
name='groupNm' name='groupNm'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -411,11 +437,12 @@ const FlightPlanForm = (props) => {
</Label> </Label>
<Input <Input
type='text' type='text'
id='memberName' id='pilotName'
name='memberName' name='pilotName'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -434,18 +461,20 @@ const FlightPlanForm = (props) => {
id='clncd' id='clncd'
name='clncd' name='clncd'
size='sm' size='sm'
placeholder='+82' placeholder='+82'
readOnly onChange={props.onChange}
/> />
</div> </div>
<div className='m_ft_box'> <div className='m_ft_box'>
<Input <Input
type='text' type='text'
id='hpno' id='pilotHpno'
name='hpno' name='pilotHpno'
size='sm' size='sm'
placeholder='010-0000-0000' placeholder='010-0000-0000'
readOnly onChange={props.onChange}
/> />
</div> </div>
@ -458,11 +487,12 @@ const FlightPlanForm = (props) => {
</Label> </Label>
<Input <Input
type='text' type='text'
id='email' id='pilotEmail'
name='email' name='pilotEmail'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -488,11 +518,12 @@ const FlightPlanForm = (props) => {
</Label> </Label>
<Input <Input
type='text' type='text'
id='groupNm' id='aGroupNm'
name='groupNm' name='aGroupNm'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -507,7 +538,8 @@ const FlightPlanForm = (props) => {
name='arcrftModelNm' name='arcrftModelNm'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -526,7 +558,8 @@ const FlightPlanForm = (props) => {
name='arcrftTypeCd' name='arcrftTypeCd'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>
@ -541,7 +574,8 @@ const FlightPlanForm = (props) => {
name='ownerNm' name='ownerNm'
size='sm' size='sm'
placeholder='' placeholder=''
readOnly onChange={props.onChange}
/> />
</FormGroup> </FormGroup>
</Col> </Col>

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

@ -9,6 +9,8 @@ import * as yup from 'yup';
import { yupResolver } from '@hookform/resolvers/yup'; import { yupResolver } from '@hookform/resolvers/yup';
import * as Actions from '../../../../modules/basis/flight/actions/basisFlightAction'; import * as Actions from '../../../../modules/basis/flight/actions/basisFlightAction';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import moment from 'moment';
import { Save } from 'react-feather';
const FlightPlanDetailContainer = props => { const FlightPlanDetailContainer = props => {
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -20,20 +22,38 @@ const FlightPlanDetailContainer = props => {
isOpen: false, isOpen: false,
title: '', title: '',
}); });
const { listFlightP, flightCount, isRefreshFlight } = useSelector( const { listFlightP, flightCount, isRefreshFlight } = useSelector(
state => state.flightState state => state.flightState
); );
const [flightPlanData, setFlightPlanData] = useState({ const [flightPlanData, setFlightPlanData] = useState({
id: '', id:'',
memberName: '', memberName:'',
clncd: '', clncd: '+82',
hpno: '', hpno:'',
email:'', email:'',
createDt: '', lonlat:'',
createUserId: '', lonlat2:'',
updateUserId: '', lonlat3:'',
updateDt: '' fltElev:'',
fltHight:'',
fltMethod:'',
groupNm:'',
pilotName:'',
pilotHpno:'',
pilotEmail:'',
aGroupNm:'',
arcrftModelNm:'',
arcrftTypeCd:'',
ownerNm:'',
createUserId:'',
updateUserId:''
}); });
const [params, setParams] = useState({
schFltStDt: moment().subtract(1, 'day').format('YYYY-MM-DD'),
schFltEndDt: moment().subtract(-1, 'day').format('YYYY-MM-DD'),
search1: ''
});
useEffect(() => { useEffect(() => {
console.log('isRefreshFlight>>>>', isRefreshFlight); console.log('isRefreshFlight>>>>', isRefreshFlight);
if (isRefreshFlight) { if (isRefreshFlight) {
@ -81,21 +101,30 @@ const FlightPlanDetailContainer = props => {
} }
const handlerCreate = async data => { const handlerCreate = async data => {
console.log('data>>>>>', data); console.log('data>>>>>', data);
console.log('flightPlanData>>>',flightPlanData); console.log('flightPlanData>>>',{flightPlanData, params});
let saveArr = flightPlanData; let saveArr = {flightPlanData, params};
dispatch( dispatch(
Actions.FLIGHT_PLAN_CREATE.request({ Actions.FLIGHT_PLAN_CREATE.request({
data: saveArr data: saveArr
}) })
); );
}; };
const handlerInput = (val) => {
setParams({
...params,
schFltStDt: moment(val[1]).format('YYYY-MM-DD'),
schFltEndDt: moment(val[0]).format('YYYY-MM-DD')
});
};
const onChange = (e) => { const onChange = (e) => {
setFlightPlanData({ setFlightPlanData({
...flightPlanData, ...flightPlanData,
[e.target.name]: e.target.value, [e.target.name]: e.target.value,
}); });
}; };
const handlerDelete = async data => { const handlerDelete = async data => {
// dispatch(Actions.IDNTF_DELETE.request(data.arcrftSno)); // dispatch(Actions.IDNTF_DELETE.request(data.arcrftSno));
}; };
@ -109,11 +138,13 @@ const FlightPlanDetailContainer = props => {
data={flightPlanData} data={flightPlanData}
openModal={openModal} openModal={openModal}
areaInfo={areaInfo} areaInfo={areaInfo}
params={params}
handlerSave={ handlerSave={
pageType === 'create' ? handlerCreate : handlerUpdate pageType === 'create' ? handlerCreate : handlerUpdate
} }
onChange={onChange} onChange={onChange}
handlerDelete={handlerDelete} handlerDelete={handlerDelete}
handlerInput={handlerInput}
/> />
<FlightPlanAreaModal <FlightPlanAreaModal
modal={modal} modal={modal}

11
src/modules/basis/flight/apis/basisFlightApi.ts

@ -1,9 +1,18 @@
import axios from '../../../utils/customAxiosUtil'; import axios from '../../../utils/customAxiosUtil';
import qs from 'qs'; import qs from 'qs';
import { FlightPlanData } from '../models/basisFlightModel';
export const flightPlanAPI = { export const flightPlanAPI = {
area: async () => { area: async () => {
return await axios.get(`api/bas/flight/area`); return await axios.get(`api/bas/flight/area`);
} },
Create: async (data: FlightPlanData) => {
console.log(data);
const res = await axios.post('api/bas/flight/create', data);
console.log('res>>>>', res);
return res;
}
} }

33
src/modules/basis/flight/models/basisFlightModel.ts

@ -1,6 +1,7 @@
export interface FlightState { export interface FlightState {
areaList: FlightAreaData | undefined areaList: FlightAreaData | undefined
flightPlanArea: FlightPlanArea | undefined flightPlanArea: FlightPlanArea | undefined
flightPlanData: FlightPlanData | undefined
} }
export interface FlightAreaData { export interface FlightAreaData {
@ -16,15 +17,29 @@ export interface FlightPlanArea {
} }
export interface FlightPlanData { export interface FlightPlanData {
id: '', id:string;
memberName: '', memberName:string;
clncd: '', clncd:string;
hpno: '', hpno:string;
email:'', email:string;
createDt: '', lonlat:string;
createUserId: '', lonlat2:string;
updateUserId: '', lonlat3:string;
updateDt: '' fltElev:string;
fltHight:string;
fltMethod:string;
groupNm:string;
pilotName:string;
pilotHpno:string;
pilotEmail:string;
aGroupNm:string;
arcrftModelNm:string;
arcrftTypeCd:string;
ownerNm:string;
createUserId:string;
updateUserId:string;
schFltStDt:Date;
schFltEndDt:Date;
} }
export const initFlight = { export const initFlight = {

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

@ -18,4 +18,10 @@ export const flightReducer = createReducer<FlightState, Actions.FlightAction> (
const data = action.payload; const data = action.payload;
draft.flightPlanArea = data; draft.flightPlanArea = data;
}) })
)
.handleAction(Actions.FLIGHT_PLAN_CREATE.request, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.flightPlanData = data;
})
) )

50
src/modules/basis/flight/sagas/basisFlightSaga.ts

@ -54,8 +54,56 @@ function* createFlightPlanArea(action: ActionType<typeof Actions.FLIGHT_PLAN_ARE
) )
} }
} }
function* createFlightPlanData(
action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.request>
) {
try {
const detail = action.payload;
console.log('detail>>>:', detail);
const res = yield call(Apis.flightPlanAPI.Create, detail);
console.log(res);
const { data } = res;
console.log('data:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>', data.result);
if (data.result) {
yield put(
MessageActions.IS_MESSAGE({
messageCode: SAVE_MESSAGE.code,
message: SAVE_MESSAGE.message,
isHistoryBack: false,
isRefresh: false
})
);
yield put(Actions.FLIGHT_PLAN_CREATE.success(data));
} else {
console.log('errorCode >>> ', data.errorCode);
if (data.errorCode === 'DT002') {
yield put(
MessageActions.IS_ERROR({
errorCode: DUPLATE_MESSAGE.code,
errorMessage: '식별번호가 ' + DUPLATE_MESSAGE.message,
isHistoryBack: false,
isRefresh: false
})
);
} else {
throw Error;
}
}
} catch (error) {
yield put(
MessageActions.IS_ERROR({
errorCode: ERROR_MESSAGE.code,
errorMessage: ERROR_MESSAGE.message,
isHistoryBack: false,
isRefresh: false
})
);
// yield put(Actions.GROUP_CREATE.failure(error));
}
}
export function* flightSaga() { export function* flightSaga() {
yield takeEvery(Actions.AREA_LIST.request, listAreaSaga); yield takeEvery(Actions.AREA_LIST.request, listAreaSaga);
yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea); yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea);
yield takeEvery(Actions.FLIGHT_PLAN_CREATE.request, createFlightPlanData)
} }
Loading…
Cancel
Save