Browse Source

비행계획서 폼 + api작업

pull/2/head
qkr7828(박재우) 2 years ago
parent
commit
4c41fc5203
  1. 106
      src/components/basis/flight/plan/FlightPlanForm.js
  2. 51
      src/containers/basis/flight/plan/FlightPlanDetailContainer.js
  3. 9
      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. 48
      src/modules/basis/flight/sagas/basisFlightSaga.ts

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

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

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

@ -9,6 +9,8 @@ import * as yup from 'yup';
import { yupResolver } from '@hookform/resolvers/yup';
import * as Actions from '../../../../modules/basis/flight/actions/basisFlightAction';
import { useForm } from 'react-hook-form';
import moment from 'moment';
import { Save } from 'react-feather';
const FlightPlanDetailContainer = props => {
const dispatch = useDispatch();
@ -20,19 +22,37 @@ const FlightPlanDetailContainer = props => {
isOpen: false,
title: '',
});
const { listFlightP, flightCount, isRefreshFlight } = useSelector(
state => state.flightState
);
const [flightPlanData, setFlightPlanData] = useState({
id: '',
memberName: '',
clncd: '',
hpno: '',
id:'',
memberName:'',
clncd: '+82',
hpno:'',
email:'',
createDt: '',
createUserId: '',
updateUserId: '',
updateDt: ''
lonlat:'',
lonlat2:'',
lonlat3:'',
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(() => {
console.log('isRefreshFlight>>>>', isRefreshFlight);
@ -81,21 +101,30 @@ const FlightPlanDetailContainer = props => {
}
const handlerCreate = async data => {
console.log('data>>>>>', data);
console.log('flightPlanData>>>',flightPlanData);
let saveArr = flightPlanData;
console.log('flightPlanData>>>',{flightPlanData, params});
let saveArr = {flightPlanData, params};
dispatch(
Actions.FLIGHT_PLAN_CREATE.request({
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) => {
setFlightPlanData({
...flightPlanData,
[e.target.name]: e.target.value,
});
};
const handlerDelete = async data => {
// dispatch(Actions.IDNTF_DELETE.request(data.arcrftSno));
};
@ -109,11 +138,13 @@ const FlightPlanDetailContainer = props => {
data={flightPlanData}
openModal={openModal}
areaInfo={areaInfo}
params={params}
handlerSave={
pageType === 'create' ? handlerCreate : handlerUpdate
}
onChange={onChange}
handlerDelete={handlerDelete}
handlerInput={handlerInput}
/>
<FlightPlanAreaModal
modal={modal}

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

@ -1,9 +1,18 @@
import axios from '../../../utils/customAxiosUtil';
import qs from 'qs';
import { FlightPlanData } from '../models/basisFlightModel';
export const flightPlanAPI = {
area: async () => {
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 {
areaList: FlightAreaData | undefined
flightPlanArea: FlightPlanArea | undefined
flightPlanData: FlightPlanData | undefined
}
export interface FlightAreaData {
@ -16,15 +17,29 @@ export interface FlightPlanArea {
}
export interface FlightPlanData {
id: '',
memberName: '',
clncd: '',
hpno: '',
email:'',
createDt: '',
createUserId: '',
updateUserId: '',
updateDt: ''
id:string;
memberName:string;
clncd:string;
hpno:string;
email:string;
lonlat:string;
lonlat2:string;
lonlat3:string;
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 = {

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

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

48
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() {
yield takeEvery(Actions.AREA_LIST.request, listAreaSaga);
yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea);
yield takeEvery(Actions.FLIGHT_PLAN_CREATE.request, createFlightPlanData)
}
Loading…
Cancel
Save