Browse Source

비행운항 스케줄 작업중

pull/2/head
kimjh(김장현) 2 years ago
parent
commit
dbae305928
  1. 28
      package-lock.json
  2. 2
      package.json
  3. 203
      src/components/basis/flight/schedule/FlightScheduleGrid.js
  4. 22
      src/components/basis/flight/schedule/FlightScheduleRealTime.js
  5. 18
      src/components/basis/flight/schedule/FlightScheduleSearch.js
  6. 6
      src/components/crud/grid/GridDatatable.js
  7. 2
      src/containers/basis/flight/schedule/FlightScheduleContainer.js
  8. 3
      src/containers/basis/group/BasisGroupUsersContainer.js
  9. 147
      src/modules/basis/flight/actions/basisFlightAction.ts
  10. 15
      src/modules/basis/flight/apis/basisFlightApi.ts
  11. 607
      src/modules/basis/flight/models/basisFlightModel.ts
  12. 7
      src/modules/basis/flight/reducers/basisFlightReducer.ts
  13. 173
      src/modules/basis/flight/sagas/basisFlightSaga.ts
  14. 21
      src/utility/hooks/useInterval.js
  15. 1
      src/views/weather/WeatherView.js

28
package-lock.json generated

@ -12896,11 +12896,6 @@
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
"lodash.orderby": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz",
"integrity": "sha1-5pfwTOXXhSL1TZM4syuBozk+TrM="
},
"lodash.template": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
@ -13495,11 +13490,6 @@
"resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
"integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA=="
},
"nanoid": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
"integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA=="
},
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@ -20676,13 +20666,11 @@
"integrity": "sha512-exyAdFLAxtuM4wNwLYrlKyPYLiJ7e0mv9tqPAd3kq+k1CiJFtznevR3yP0icv5q/y200w+lzNgi7TQn1Wrhu0w=="
},
"react-data-table-component": {
"version": "6.11.2",
"resolved": "https://registry.npmjs.org/react-data-table-component/-/react-data-table-component-6.11.2.tgz",
"integrity": "sha512-xoaTVTX4svgY3norL707GSUZJ5Q0FRZ1g2QY5oI5soiNtGMor9yGTXjnMq6mDmL9A4a7lmA+4xntoEEMJMcIvA==",
"version": "7.5.3",
"resolved": "https://registry.npmjs.org/react-data-table-component/-/react-data-table-component-7.5.3.tgz",
"integrity": "sha512-JhatRTgThAAa1HobPaPmkNPsjLT6+fnMIdtcXRCy+0bSYN7XJnTgob9Qyi4bjHh/8tMPTHtxZCV/TKiPwRvFMA==",
"requires": {
"deepmerge": "^4.2.2",
"lodash.orderby": "^4.6.0",
"shortid": "^2.2.15"
"deepmerge": "^4.2.2"
}
},
"react-datepicker": {
@ -23441,14 +23429,6 @@
"smoothscroll-polyfill": "^0.4.4"
}
},
"shortid": {
"version": "2.2.16",
"resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz",
"integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==",
"requires": {
"nanoid": "^2.1.0"
}
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",

2
package.json

@ -69,7 +69,7 @@
"react-copy-to-clipboard": "5.0.2",
"react-country-flag": "2.0.1",
"react-csv": "^2.0.3",
"react-data-table-component": "6.11.2",
"react-data-table-component": "^7.5.3",
"react-datepicker": "^4.2.1",
"react-dom": "17.0.1",
"react-draft-wysiwyg": "1.14.5",

203
src/components/basis/flight/schedule/FlightScheduleGrid.js

@ -0,0 +1,203 @@
import { useRef } from 'react';
import { GridDatabase } from '@src/components/crud/grid/GridDatatable';
import { Row, Col, Card } from 'reactstrap';
import FlightScheduleRealTime from './FlightScheduleRealTime';
import { useSelector } from 'react-redux';
import moment from 'moment';
import DataTable from 'react-data-table-component';
const KR_TIME_DIFF = 9 * 60 * 60 * 1000;
/**
* 비행 : B
* 비행 : F
* 비행 완료 : S
*/
function FlightScheduleGrid() {
const timeRef = useRef(null);
const { scheduleList } = useSelector(state => state.flightState);
// const [list, setList] = useState(
// new Array(10).fill({ groupNm: 'test', groupNm: 'test' })
// );
const fillZero = (width, str) => {
return str.length >= width
? str
: new Array(width - str.length + 1).join('0') + str; //남는 길이만큼 0으로 채움
};
const columns = [
{
name: '그룹 명',
selector: 'groupNm',
minWidth: '150px',
sortable: true,
cell: row => {
return row.groupNm;
}
// conditionalCellStyles: [
// {
// when: row => {
// return true;
// },
// style: row => {
// let color;
// if (row.statusCd === 's') {
// color = '#82868B';
// }
// return {
// backgroundColor: '#82868B',
// color: 'white'
// };
// }
// }
// ]
},
{
name: '기체 소유자',
selector: 'ownerNm',
minWidth: '150px',
sortable: true,
cell: row => {
return row.ownerNm;
}
},
{
name: '기체 식별번호',
selector: 'idntfNum',
minWidth: '150px',
sortable: true,
cell: row => {
return row.idntfNum;
}
},
{
name: '출발지',
selector: 'startAddress',
minWidth: '150px',
sortable: true,
cell: row => {
return row.startAddress;
}
},
{
name: '비행 시작 시간',
selector: 'schFltStDt ',
minWidth: '150px',
sortable: true,
cell: row => {
return moment(row.schFltStDt).format('HH:mm');
}
},
{
name: '도착지',
selector: 'endAddress',
minWidth: '150px',
sortable: true,
cell: row => {
return row.endAddress;
}
},
{
name: '비행 종료 시간',
selector: 'schFltEndDt',
minWidth: '150px',
sortable: true,
cell: row => {
return moment(row.schFltEndDt).format('HH:mm');
}
},
{
name: '총 예상 비행시간',
selector: 'groupNm',
minWidth: '150px',
sortable: true,
cell: row => {
const endDate = new Date(row.schFltEndDt);
const startDate = new Date(row.schFltStDt);
const a = endDate - startDate;
let time = fillZero(
2,
String(Math.floor((a % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)))
);
let hore = fillZero(
2,
String(Math.floor((a % (1000 * 60 * 60)) / (1000 * 60)))
);
return `${time}:${hore}`;
}
},
{
name: '상태',
selector: 'statusCd',
minWidth: '150px',
sortable: true,
cell: row => {
switch (row.statusCd) {
case 'B':
return '비행전';
case 'F':
return '비행중';
default:
return '비행완료';
}
}
}
];
const conditionalRowStyles = [
{
when: row => true,
style: {
backgroundColor: 'red'
}
}
];
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
style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
width: '100%'
}}
>
<div style={{ display: 'flex', alignItems: 'center' }}>
<h4>비행운항 스케줄 목록</h4>
<span className='search-case'>
검색결과 {scheduleList.length}
</span>
</div>
<FlightScheduleRealTime ref={timeRef} />
</div>
</div>
<div className='invoice-list-wrapper'>
<Card>
<div className='invoice-list-dataTable'>
<GridDatabase
title={'비행이력'}
data={scheduleList}
count={scheduleList.length}
columns={columns}
pagination={false}
conditionalRowStyles={conditionalRowStyles}
/>
</div>
</Card>
</div>
</Col>
</Row>
</div>
);
}
export default FlightScheduleGrid;

22
src/components/basis/flight/schedule/FlightScheduleRealTime.js

@ -0,0 +1,22 @@
import { useState, forwardRef } from 'react';
import moment from 'moment';
import useInterval from '@src/utility/hooks/useInterval';
const KR_TIME_DIFF = 9 * 60 * 60 * 1000;
const FlightScheduleRealTime = forwardRef(({}, ref) => {
const [currTime, setCurrTime] = useState(new Date());
const utc = currTime.getTime() + currTime.getTimezoneOffset() * 60 * 1000;
const kr_curr = new Date(utc + KR_TIME_DIFF);
useInterval(() => {
setCurrTime(new Date());
setTime(moment(new Date()).format('HH:mm:ss'));
}, [1000]);
const [time, setTime] = useState(moment(kr_curr).format('HH:mm:ss'));
return <div ref={ref}>현재시간 UTC : {time.toString()}</div>;
});
export default FlightScheduleRealTime;

18
src/components/basis/flight/schedule/FlightScheduleSearch.js

@ -3,16 +3,32 @@ import { Row, Col, Button, Card, CardBody } from 'reactstrap';
import { Search, Calendar } from 'react-feather';
import moment from 'moment';
import Flatpickr from 'react-flatpickr';
import { FLIGHT_SCHEDULE_LIST } from '@src/modules/basis/flight/actions/basisFlightAction';
import { useDispatch } from 'react-redux';
import useInterval from '@src/utility/hooks/useInterval';
function FlightScheduleSearch() {
const dispatch = useDispatch();
const [date, setDate] = useState(
moment().subtract('day').format('YYYY-MM-DD')
);
const [isSearch, setIsSearch] = useState(false);
useInterval(() => {
if (isSearch) {
dispatch(FLIGHT_SCHEDULE_LIST.request(date));
}
}, [10000]);
const handlerChangeDate = val => {
setDate(moment(val[0]).format('YYYY-MM-DD'));
};
const handlerSearch = () => {
setIsSearch(true);
dispatch(FLIGHT_SCHEDULE_LIST.request(date));
};
return (
<div className='pal-card-box'>
<Row>
@ -22,7 +38,7 @@ function FlightScheduleSearch() {
<h4>검색조건</h4>
</div>
<div className='d-flex align-items-center'>
<Button.Ripple color='primary' size='sm' onClick={e => {}}>
<Button.Ripple color='primary' size='sm' onClick={handlerSearch}>
<Search size={16} />
검색
</Button.Ripple>

6
src/components/crud/grid/GridDatatable.js

@ -38,9 +38,9 @@ export const GridDatabase = props => {
}}
selectableRows={props.selectableRows}
selectableRowsComponent={props.selectableRowsComponent}
onSelectedRowsChange={
props.onSelectedRowsChange ? props.onSelectedRowsChange : null
}
{...(props.onSelectedRowsChange
? { onSelectedRowsChange: props.onSelectedRowsChange }
: {})}
/>
</div>
</>

2
src/containers/basis/flight/schedule/FlightScheduleContainer.js

@ -1,10 +1,12 @@
import { CustomMainLayout } from '@src/components/layout/CustomMainLayout';
import FlightScheduleSearch from '@src/components/basis/flight/schedule/FlightScheduleSearch';
import FlightScheduleGrid from '@src/components/basis/flight/schedule/FlightScheduleGrid';
function FlightScheduleContainer() {
return (
<CustomMainLayout title={'비행운항 스케줄'}>
<FlightScheduleSearch />
<FlightScheduleGrid />
</CustomMainLayout>
);
}

3
src/containers/basis/group/BasisGroupUsersContainer.js

@ -285,10 +285,7 @@ export const BasisGroupUsersContainer = props => {
searchParams: param
})
);
console.log('볼 수 있음');
} else {
console.log('볼 수 없다');
setInfoModal({
isOpen: true,
title: '권한 확인',

147
src/modules/basis/flight/actions/basisFlightAction.ts

@ -6,10 +6,14 @@ import {
FlightPlanArcrftDataList,
FlightPlanAreaDataList,
FlightPlanData,
FlightPlanListRqData, FlightPlanPilotDataList, PilotSelectData, SelectGroupData, BasFlightAprovData
FlightPlanListRqData,
FlightPlanPilotDataList,
PilotSelectData,
SelectGroupData,
BasFlightAprovData,
BasFlightScheduleList
} from '../models/basisFlightModel';
// 공역 조회
const PUBLIC_AREA_LIST_REQUEST = 'basis/flight/public_area/LIST_REQUEST';
const PUBLIC_AREA_LIST_SUCCESS = 'basis/flight/public_area/LIST_SUCCESS';
@ -42,17 +46,23 @@ const FLIGHT_PLAN_DELETE_SUCCESS = 'basis/flight/plan/delete/DELETE_SUCCESS';
const FLIGHT_PLAN_DELETE_FAILURE = 'basis/flight/plan/delete/DELETE_FAILURE';
// 조종사 조회
const FLIGHT_PLAN_PILOT_LIST_REQUEST = 'basis/flight/plan/pilot_list/PILOT_LIST_REQUEST';
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_LIST_REQUEST =
'basis/flight/plan/pilot_list/PILOT_LIST_REQUEST';
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';
const FLIGHT_PLAN_ARCRFT_LIST_FAILURE = 'basis/flight/plan/arcrft_list/ARCRFT_LIST_FAILURE';
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';
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';
@ -78,29 +88,47 @@ const AREA_BUFFER_LIST_SUCCESS = 'basis/flight/plan/area/BUFFER_LIST_SUCCESS';
const AREA_BUFFER_LIST_FAILURE = 'basis/flight/plan/area/BUFFER_LIST_FAILURE';
// 비행계획서 조회(승인)
const FLIGHT_APRV_LIST_REQUEST = 'basis/flight/aprv/list/FLIGHT_APRV_LIST_REQUEST';
const FLIGHT_APRV_LIST_SUCCESS = 'basis/flight/aprv/list/FLIGHT_APRV_LIST_SUCCESS';
const FLIGHT_APRV_LIST_FAILURE = 'basis/flight/aprv/list/FLIGHT_APRV_LIST_FAILURE';
const FLIGHT_APRV_LIST_REQUEST =
'basis/flight/aprv/list/FLIGHT_APRV_LIST_REQUEST';
const FLIGHT_APRV_LIST_SUCCESS =
'basis/flight/aprv/list/FLIGHT_APRV_LIST_SUCCESS';
const FLIGHT_APRV_LIST_FAILURE =
'basis/flight/aprv/list/FLIGHT_APRV_LIST_FAILURE';
// 비행계획서 승인/미승인 처리
const FLIGHT_APRV_PROC_REQUEST = 'basis/flight/aprv/proc/FLIGHT_APRV_PROC_REQUEST';
const FLIGHT_APRV_PROC_SUCCESS = 'basis/flight/aprv/proc/FLIGHT_APRV_PROC_SUCCESS';
const FLIGHT_APRV_PROC_FAILURE = 'basis/flight/aprv/proc/FLIGHT_APRV_PROC_FAILURE';
const FLIGHT_APRV_PROC_REQUEST =
'basis/flight/aprv/proc/FLIGHT_APRV_PROC_REQUEST';
const FLIGHT_APRV_PROC_SUCCESS =
'basis/flight/aprv/proc/FLIGHT_APRV_PROC_SUCCESS';
const FLIGHT_APRV_PROC_FAILURE =
'basis/flight/aprv/proc/FLIGHT_APRV_PROC_FAILURE';
//지도 검색
const FLIGHT_SEARCH_AREA_REQUEST = 'basis/flight/search/area/FLIGHT_SEARCH_AREA_REQUEST';
const FLIGHT_SEARCH_AREA_SUCCESS = 'basis/flight/search/area/FLIGHT_SEARCH_AREA_SUCCESS';
const FLIGHT_SEARCH_AREA_FAILURE = 'basis/flight/search/area/FLIGHT_SEARCH_AREA_FAILURE';
const FLIGHT_SEARCH_AREA_REQUEST =
'basis/flight/search/area/FLIGHT_SEARCH_AREA_REQUEST';
const FLIGHT_SEARCH_AREA_SUCCESS =
'basis/flight/search/area/FLIGHT_SEARCH_AREA_SUCCESS';
const FLIGHT_SEARCH_AREA_FAILURE =
'basis/flight/search/area/FLIGHT_SEARCH_AREA_FAILURE';
// 비행운항 스케줄
const FLIGHT_SCHEDULE_REQUEST =
'basis/flight/schedule/list/FLIGHT_SCHEDULE_REQUEST';
const FLIGHT_SCHEDULE_SUCCESS =
'basis/flight/schedule/list/FLIGHT_SCHEDULE_SUCCESS';
const FLIGHT_SCHEDULE_FAILURE =
'basis/flight/schedule/list/FLIGHT_SCHEDULE_FAILURE';
export const SEARCH_AREA = createAsyncAction(
FLIGHT_SEARCH_AREA_REQUEST,
FLIGHT_SEARCH_AREA_SUCCESS,
FLIGHT_SEARCH_AREA_FAILURE
)<{query: string}, string, AxiosError>();
)<{ query: string }, string, AxiosError>();
export const PUBLIC_AREA_LIST = createAsyncAction(
PUBLIC_AREA_LIST_REQUEST,
PUBLIC_AREA_LIST_SUCCESS,
PUBLIC_AREA_LIST_FAILURE
PUBLIC_AREA_LIST_REQUEST,
PUBLIC_AREA_LIST_SUCCESS,
PUBLIC_AREA_LIST_FAILURE
)<PublicAreaData, { data: PublicAreaData }, AxiosError>();
// 목록
@ -117,12 +145,14 @@ export const FLIGHT_PLAN_DETAIL = createAsyncAction(
FLIGHT_PLAN_DETAIL_FAILURE
)<number, FlightPlanData, AxiosError>();
// 상세 초기화
export const FLIGHT_PLAN_DETAIL_INIT = createAction(FLIGHT_PLAN_DETAIL_INITIAL)();
export const FLIGHT_PLAN_DETAIL_INIT = createAction(
FLIGHT_PLAN_DETAIL_INITIAL
)();
// 생성
export const FLIGHT_PLAN_CREATE = createAsyncAction(
FLIGHT_PLAN_CREATE_REQUEST,
FLIGHT_PLAN_CREATE_SUCCESS,
FLIGHT_PLAN_CREATE_FAILURE
FLIGHT_PLAN_CREATE_REQUEST,
FLIGHT_PLAN_CREATE_SUCCESS,
FLIGHT_PLAN_CREATE_FAILURE
)<FlightPlanData, string, AxiosError>();
// 수정
@ -147,7 +177,9 @@ export const FLIGHT_PLAN_PILOT_LIST = createAsyncAction(
)<string, FlightPlanPilotDataList, AxiosError>();
// 조종사 선택
export const PILOT_SELECT = createAction(FLIGHT_PLAN_PILOT_SELECT)<PilotSelectData>();
export const PILOT_SELECT = createAction(
FLIGHT_PLAN_PILOT_SELECT
)<PilotSelectData>();
// 기체 목록
export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction(
@ -157,19 +189,26 @@ export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction(
)<string, FlightPlanArcrftDataList, AxiosError>();
// 조종사 선택
export const ARCRFT_SELECT = createAction(FLIGHT_PLAN_ARCRFT_SELECT)<FlightPlanArcrftData>();
export const ARCRFT_SELECT = createAction(
FLIGHT_PLAN_ARCRFT_SELECT
)<FlightPlanArcrftData>();
// 조종사, 기체 선택 초기화
export const PILOT_ARCRFT_SELECT_INIT = createAction(PILOT_ARCRFT_SELECT_INITIAL)();
export const PILOT_ARCRFT_SELECT_INIT = createAction(
PILOT_ARCRFT_SELECT_INITIAL
)();
// 비행 구역 좌표 저장 (스텝2 데이터 공유)
export const AREA_COORDINATE_LIST_SAVE = createAction(AREA_COORDINATE_LIST)<FlightPlanAreaDataList>();
export const AREA_COORDINATE_LIST_SAVE =
createAction(AREA_COORDINATE_LIST)<FlightPlanAreaDataList>();
// 비행 구역 상세 저장
export const AREA_DETAIL_LIST_SAVE = createAction(AREA_DETAIL_LIST)<FlightPlanAreaDataList>();
export const AREA_DETAIL_LIST_SAVE =
createAction(AREA_DETAIL_LIST)<FlightPlanAreaDataList>();
// 비행 계획서 그룹 선택
export const FLIGHT_PLAN_GROUP_SELECT = createAction(ROUP_SELECT)<SelectGroupData>();
export const FLIGHT_PLAN_GROUP_SELECT =
createAction(ROUP_SELECT)<SelectGroupData>();
// 비행 구역 상세 값 초기화
export const AREA_DETAIL_INIT = createAction(AREA_DETAIL_INITIAL)();
@ -194,29 +233,35 @@ export const FLIGHT_APRV_PROC = createAsyncAction(
FLIGHT_APRV_PROC_FAILURE
)<BasFlightAprovData, string, AxiosError>();
export const FLIGHT_SCHEDULE_LIST = createAsyncAction(
FLIGHT_SCHEDULE_REQUEST,
FLIGHT_SCHEDULE_SUCCESS,
FLIGHT_SCHEDULE_FAILURE
)<string, [BasFlightScheduleList], AxiosError>();
const actions = {
PUBLIC_AREA_LIST,
// FLIGHT_PLAN_AREA,
FLIGHT_PLAN_LIST,
FLIGHT_PLAN_DETAIL,
FLIGHT_PLAN_DETAIL_INIT,
FLIGHT_PLAN_CREATE,
FLIGHT_PLAN_UPDATE,
FLIGHT_PLAN_DELETE,
FLIGHT_PLAN_PILOT_LIST,
FLIGHT_PLAN_ARCRFT_LIST,
PILOT_SELECT,
ARCRFT_SELECT,
PILOT_ARCRFT_SELECT_INIT,
AREA_COORDINATE_LIST_SAVE,
AREA_DETAIL_LIST_SAVE,
FLIGHT_PLAN_GROUP_SELECT,
FLIGHT_PLAN_AREA_BUFFER_LIST,
AREA_DETAIL_INIT,
FLIGHT_APRV_LIST,
FLIGHT_APRV_PROC,
SEARCH_AREA
// FLIGHT_PLAN_AREA,
FLIGHT_PLAN_LIST,
FLIGHT_PLAN_DETAIL,
FLIGHT_PLAN_DETAIL_INIT,
FLIGHT_PLAN_CREATE,
FLIGHT_PLAN_UPDATE,
FLIGHT_PLAN_DELETE,
FLIGHT_PLAN_PILOT_LIST,
FLIGHT_PLAN_ARCRFT_LIST,
PILOT_SELECT,
ARCRFT_SELECT,
PILOT_ARCRFT_SELECT_INIT,
AREA_COORDINATE_LIST_SAVE,
AREA_DETAIL_LIST_SAVE,
FLIGHT_PLAN_GROUP_SELECT,
FLIGHT_PLAN_AREA_BUFFER_LIST,
AREA_DETAIL_INIT,
FLIGHT_APRV_LIST,
FLIGHT_APRV_PROC,
SEARCH_AREA,
FLIGHT_SCHEDULE_LIST
};
export type FlightAction = ActionType<typeof actions>;

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

@ -8,7 +8,6 @@ import {
FlightPlanListRqData
} from '../models/basisFlightModel';
export const flightPlanAPI = {
area: async () => {
const res = await axios.get(`api/bas/flight/area`);
@ -54,7 +53,7 @@ export const flightPlanAPI = {
const res = await axios.post(`api/bas/flight/plan/area/buffer`, data);
return res;
},
aprvList: async (data: FlightPlanListRqData) => {
aprvList: async (data: FlightPlanListRqData) => {
const queryString = qs.stringify(data, {
addQueryPrefix: true,
arrayFormat: 'repeat'
@ -67,8 +66,12 @@ export const flightPlanAPI = {
return res;
},
searchArea: async(param) => {
return await axios.get(`api/bas/flight/plan/area/search?query=${param.query}`);
searchArea: async param => {
return await axios.get(
`api/bas/flight/plan/area/search?query=${param.query}`
);
},
scheduleList: async (date: string) => {
return await axios.get(`api/bas/flight/schedule?searchDate=${date}`);
}
}
};

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

@ -1,178 +1,195 @@
import moment from "moment";
import moment from 'moment';
export interface FlightState {
publicAreaList: PublicAreaData | undefined
flightPlanArea: FlightPlanArea | undefined
list: [FlightPlanData] | undefined
detail: FlightPlanData | undefined
pilotList: FlightPlanPilotDataList | undefined
arcrftList: FlightPlanArcrftDataList | undefined
pilotSelect: PilotSelectData | undefined
arcrftSelect: FlightPlanArcrftData | undefined
areaCoordList: FlightPlanAreaData[] | undefined
areaList: FlightPlanAreaData[] | undefined
selectGroup: SelectGroupData | undefined
aprvList: [FlightPlanData] | undefined
aprvProc: any | undefined
publicAreaList: PublicAreaData | undefined;
flightPlanArea: FlightPlanArea | undefined;
list: [FlightPlanData] | undefined;
detail: FlightPlanData | undefined;
pilotList: FlightPlanPilotDataList | undefined;
arcrftList: FlightPlanArcrftDataList | undefined;
pilotSelect: PilotSelectData | undefined;
arcrftSelect: FlightPlanArcrftData | undefined;
areaCoordList: FlightPlanAreaData[] | undefined;
areaList: FlightPlanAreaData[] | undefined;
selectGroup: SelectGroupData | undefined;
aprvList: [FlightPlanData] | undefined;
aprvProc: any | undefined;
scheduleList: BasFlightScheduleList[] | [];
}
export interface SelectGroupData {
cstmrSno: number,
groupId: string,
groupNm: string,
cstmrSno: number;
groupId: string;
groupNm: string;
}
export interface PublicAreaData {
publicAreaList: []
publicAreaList: [];
}
export interface FlightPlanArea {
address: string,
coordinates: string,
redius: string,
altitude_m: string,
altitude_ft: string,
address: string;
coordinates: string;
redius: string;
altitude_m: string;
altitude_ft: string;
}
export interface FlightPlanData {
planSno?: number,
groupId: string,
cstmrSno: number,
memberName: string,
email: string,
hpno: string,
clncd: string,
addr: string,
addrDtlCn: string,
zip: string,
schFltStDt: string,
schFltEndDt: string,
fltPurpose: string,
aprvlYn: string,
delYn: string,
createUserId: string,
createDt: string,
updateUserId: string,
updateDt: string,
areaList?: FlightPlanAreaDataList | undefined,
pilotList?: FlightPlanPilotDataList | undefined,
arcrftList?: FlightPlanArcrftDataList | undefined
planSno?: number;
groupId: string;
cstmrSno: number;
memberName: string;
email: string;
hpno: string;
clncd: string;
addr: string;
addrDtlCn: string;
zip: string;
schFltStDt: string;
schFltEndDt: string;
fltPurpose: string;
aprvlYn: string;
delYn: string;
createUserId: string;
createDt: string;
updateUserId: string;
updateDt: string;
areaList?: FlightPlanAreaDataList | undefined;
pilotList?: FlightPlanPilotDataList | undefined;
arcrftList?: FlightPlanArcrftDataList | undefined;
// docState: string
}
export interface FlightPlanAreaData {
planAreaSno?: number,
planSno: number,
areaType: string,
fltMethod: string,
bufferZone: number,
fltElev: string,
createUserId?: string,
createDt?: string,
updateUserId?: string,
updateDt?: string,
coordList?: FlightPlanAreaCoordDataList | undefined
bufferCoordList?: FlightPlanAreaCoordDataList | undefined
planAreaSno?: number;
planSno: number;
areaType: string;
fltMethod: string;
bufferZone: number;
fltElev: string;
createUserId?: string;
createDt?: string;
updateUserId?: string;
updateDt?: string;
coordList?: FlightPlanAreaCoordDataList | undefined;
bufferCoordList?: FlightPlanAreaCoordDataList | undefined;
// docState: string,
}
export interface FlightPlanAreaDataList extends Array<FlightPlanAreaData> {};
export interface FlightPlanAreaDataList extends Array<FlightPlanAreaData> {}
export interface FlightPlanAreaCoordData {
planAreaCoordSno?: number,
planAreaSno?: number,
lat: number,
lon: number,
createUserId?: string,
createDt?: string
planAreaCoordSno?: number;
planAreaSno?: number;
lat: number;
lon: number;
createUserId?: string;
createDt?: string;
// docState: string
}
export interface FlightPlanAreaCoordDataList extends Array<FlightPlanAreaCoordData> {};
export interface FlightPlanAreaCoordDataList
extends Array<FlightPlanAreaCoordData> {}
export interface FlightPlanPilotData {
planPilotSno?: number,
planSno?: number,
cstmrSno?: number,
groupNm: string,
memberName: string,
email: string,
hpno: string,
clncd: string,
addr: string,
addrDtlCn: string,
zip: string,
qlfcNo: string,
carrer: string,
createUserId: string,
createDt: string,
updateUserId: string,
updateDt: string
planPilotSno?: number;
planSno?: number;
cstmrSno?: number;
groupNm: string;
memberName: string;
email: string;
hpno: string;
clncd: string;
addr: string;
addrDtlCn: string;
zip: string;
qlfcNo: string;
carrer: string;
createUserId: string;
createDt: string;
updateUserId: string;
updateDt: string;
// docState: string
}
export interface FlightPlanPilotDataList extends Array<FlightPlanPilotData> {};
export interface FlightPlanPilotDataList extends Array<FlightPlanPilotData> {}
export interface FlightPlanArcrftData {
planArcrftSno: number,
planSno: number,
arcrftSno: number,
idntfNum: string,
groupNm: string,
prdctNum: string,
arcrftTypeCd: string,
arcrftModelNm: string,
prdctCmpnNm: string,
prdctDate: string,
arcrftLngth: number,
arcrftWdth: number,
arcrftHght: number,
arcrftWght: number,
wghtTypeCd: string,
imageUrl: string,
takeoffWght: number,
useYn: string,
cameraYn: string,
insrncYn: string,
ownerNm: string,
createUserId: string,
createDt: string,
updateUserId: string,
updateDt: string
planArcrftSno: number;
planSno: number;
arcrftSno: number;
idntfNum: string;
groupNm: string;
prdctNum: string;
arcrftTypeCd: string;
arcrftModelNm: string;
prdctCmpnNm: string;
prdctDate: string;
arcrftLngth: number;
arcrftWdth: number;
arcrftHght: number;
arcrftWght: number;
wghtTypeCd: string;
imageUrl: string;
takeoffWght: number;
useYn: string;
cameraYn: string;
insrncYn: string;
ownerNm: string;
createUserId: string;
createDt: string;
updateUserId: string;
updateDt: string;
// docState: string
}
export interface FlightPlanArcrftDataList extends Array<FlightPlanArcrftData> {};
export interface FlightPlanArcrftDataList extends Array<FlightPlanArcrftData> {}
// rq
export interface FlightPlanListRqData {
groupId: string,
cstmrSno: number,
schFltStDt: string,
schFltEndDt: string,
aprvlYn: string
groupId: string;
cstmrSno: number;
schFltStDt: string;
schFltEndDt: string;
aprvlYn: string;
}
export interface FlightPlanAprovRqData {
planSnoList: [number],
aprvlYn: string
planSnoList: [number];
aprvlYn: string;
}
export interface PilotSelectData {
groupNm: string,
cstmrSno: string,
memberName: string,
email: string,
hpno: string,
clncd: string,
addr: string,
addrDtlCn: string,
zip: string
groupNm: string;
cstmrSno: string;
memberName: string;
email: string;
hpno: string;
clncd: string;
addr: string;
addrDtlCn: string;
zip: string;
}
export interface BasFlightAprovData {
planSnoList: [number]
aprvlYn: string
planSnoList: [number];
aprvlYn: string;
}
export interface BasFlightScheduleList {
groupId: string;
groupNm: string;
memberName: string;
ownerNm: string;
idntfNum: string;
schFltStDt: string;
schFltEndDt: string;
}
export interface BasFlightScheduleData {
count: number;
list: [BasFlightScheduleList];
}
export const initFlight = {
@ -195,8 +212,12 @@ export const initFlight = {
addr: '',
addrDtlCn: '',
zip: '',
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltStDt: moment()
.set({ h: 0, m: 0, s: 0 })
.format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment()
.set({ h: 0, m: 0, s: 0 })
.format('YYYY-MM-DD HH:mm:ss'),
fltPurpose: '',
aprvlYn: '',
delYn: '',
@ -204,80 +225,90 @@ export const initFlight = {
createDt: '',
updateUserId: '',
updateDt: '',
areaList: [{
planAreaSno: 0,
planSno: 0,
areaType: '',
fltMethod: '',
bufferZone: 0,
fltElev: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: '',
coordList: [{
planAreaCoordSno: 0,
areaList: [
{
planAreaSno: 0,
lat: 0,
lon: 0,
planSno: 0,
areaType: '',
fltMethod: '',
bufferZone: 0,
fltElev: '',
createUserId: '',
createDt: ''
}],
bufferCoordList: [{
planAreaCoordSno: 0,
planAreaSno: 0,
lat: 0,
lon: 0,
createDt: '',
updateUserId: '',
updateDt: '',
coordList: [
{
planAreaCoordSno: 0,
planAreaSno: 0,
lat: 0,
lon: 0,
createUserId: '',
createDt: ''
}
],
bufferCoordList: [
{
planAreaCoordSno: 0,
planAreaSno: 0,
lat: 0,
lon: 0,
createUserId: '',
createDt: ''
}
]
}
],
pilotList: [
{
planPilotSno: 0,
planSno: 0,
cstmrSno: 0,
groupNm: '',
memberName: '',
email: '',
hpno: '',
clncd: '+82',
addr: '',
addrDtlCn: '',
zip: '',
qlfcNo: '',
carrer: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: ''
}
],
arcrftList: [
{
planArcrftSno: 0,
planSno: 0,
arcrftSno: 0,
idntfNum: '',
groupNm: '',
prdctNum: '',
arcrftTypeCd: '',
arcrftModelNm: '',
prdctCmpnNm: '',
prdctDate: '',
arcrftLngth: 0,
arcrftWdth: 0,
arcrftHght: 0,
arcrftWght: 0,
wghtTypeCd: '',
imageUrl: '',
takeoffWght: 0,
useYn: '',
cameraYn: '',
insrncYn: '',
ownerNm: '',
createUserId: '',
createDt: ''
}],
}],
pilotList: [{
planPilotSno: 0,
planSno: 0,
cstmrSno: 0,
groupNm: '',
memberName: '',
email: '',
hpno: '',
clncd: '+82',
addr: '',
addrDtlCn: '',
zip: '',
qlfcNo: '',
carrer: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: ''
}],
arcrftList: [{
planArcrftSno: 0,
planSno: 0,
arcrftSno: 0,
idntfNum: '',
groupNm: '',
prdctNum: '',
arcrftTypeCd: '',
arcrftModelNm: '',
prdctCmpnNm: '',
prdctDate: '',
arcrftLngth: 0,
arcrftWdth: 0,
arcrftHght: 0,
arcrftWght: 0,
wghtTypeCd: '',
imageUrl: '',
takeoffWght: 0,
useYn: '',
cameraYn: '',
insrncYn: '',
ownerNm: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: ''
}]
createDt: '',
updateUserId: '',
updateDt: ''
}
]
},
pilotList: undefined,
arcrftList: undefined,
@ -286,10 +317,10 @@ export const initFlight = {
areaCoordList: undefined,
areaList: undefined,
aprvList: undefined,
aprvProc: undefined
aprvProc: undefined,
scheduleList: []
};
export const initFlightBas = {
plan: {
planSno: 0,
@ -302,8 +333,12 @@ export const initFlightBas = {
addr: '',
addrDtlCn: '',
zip: '',
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltStDt: moment()
.set({ h: 0, m: 0, s: 0 })
.format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment()
.set({ h: 0, m: 0, s: 0 })
.format('YYYY-MM-DD HH:mm:ss'),
fltPurpose: '',
aprvlYn: '',
delYn: '',
@ -313,7 +348,7 @@ export const initFlightBas = {
updateDt: '',
areaList: undefined,
pilotList: undefined,
arcrftList: undefined,
arcrftList: undefined
},
pilot: {
planPilotSno: 0,
@ -393,8 +428,12 @@ export const initFlightBas = {
addr: '',
addrDtlCn: '',
zip: '',
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltStDt: moment()
.set({ h: 0, m: 0, s: 0 })
.format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment()
.set({ h: 0, m: 0, s: 0 })
.format('YYYY-MM-DD HH:mm:ss'),
fltPurpose: '',
aprvlYn: '',
delYn: '',
@ -402,79 +441,89 @@ export const initFlightBas = {
createDt: '',
updateUserId: '',
updateDt: '',
areaList: [{
planAreaSno: 0,
planSno: 0,
areaType: '',
fltMethod: '',
bufferZone: 0,
fltElev: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: '',
coordList: [{
planAreaCoordSno: 0,
areaList: [
{
planAreaSno: 0,
lat: 0,
lon: 0,
planSno: 0,
areaType: '',
fltMethod: '',
bufferZone: 0,
fltElev: '',
createUserId: '',
createDt: ''
}],
bufferCoordList: [{
planAreaCoordSno: 0,
planAreaSno: 0,
lat: 0,
lon: 0,
createDt: '',
updateUserId: '',
updateDt: '',
coordList: [
{
planAreaCoordSno: 0,
planAreaSno: 0,
lat: 0,
lon: 0,
createUserId: '',
createDt: ''
}
],
bufferCoordList: [
{
planAreaCoordSno: 0,
planAreaSno: 0,
lat: 0,
lon: 0,
createUserId: '',
createDt: ''
}
]
}
],
pilotList: [
{
planPilotSno: 0,
planSno: 0,
cstmrSno: 0,
groupNm: '',
memberName: '',
email: '',
hpno: '',
clncd: '+82',
addr: '',
addrDtlCn: '',
zip: '',
qlfcNo: '',
carrer: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: ''
}
],
arcrftList: [
{
planArcrftSno: 0,
planSno: 0,
arcrftSno: 0,
idntfNum: '',
groupNm: '',
prdctNum: '',
arcrftTypeCd: '',
arcrftModelNm: '',
prdctCmpnNm: '',
prdctDate: '',
arcrftLngth: 0,
arcrftWdth: 0,
arcrftHght: 0,
arcrftWght: 0,
wghtTypeCd: '',
imageUrl: '',
takeoffWght: 0,
useYn: '',
cameraYn: '',
insrncYn: '',
ownerNm: '',
createUserId: '',
createDt: ''
}],
}],
pilotList: [{
planPilotSno: 0,
planSno: 0,
cstmrSno: 0,
groupNm: '',
memberName: '',
email: '',
hpno: '',
clncd: '+82',
addr: '',
addrDtlCn: '',
zip: '',
qlfcNo: '',
carrer: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: ''
}],
arcrftList: [{
planArcrftSno: 0,
planSno: 0,
arcrftSno: 0,
idntfNum: '',
groupNm: '',
prdctNum: '',
arcrftTypeCd: '',
arcrftModelNm: '',
prdctCmpnNm: '',
prdctDate: '',
arcrftLngth: 0,
arcrftWdth: 0,
arcrftHght: 0,
arcrftWght: 0,
wghtTypeCd: '',
imageUrl: '',
takeoffWght: 0,
useYn: '',
cameraYn: '',
insrncYn: '',
ownerNm: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: ''
}]
createDt: '',
updateUserId: '',
updateDt: ''
}
]
}
}
};

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

@ -129,4 +129,11 @@ export const flightReducer = createReducer<FlightState, Actions.FlightAction>(
const data = action.payload;
draft.aprvProc = data;
})
)
// 비행운항 스케줄
.handleAction(Actions.FLIGHT_SCHEDULE_LIST.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.scheduleList = data;
})
);

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

@ -9,15 +9,19 @@ import {
import * as MessageActions from '../../../comn/message/actions/comnMessageAction';
import * as Actions from '../actions/basisFlightAction';
import * as Apis from '../apis/basisFlightApi';
import { FlightPlanData } from "../models/basisFlightModel";
import { FlightPlanData } from '../models/basisFlightModel';
import {
FLIGHT_PLAN_ARCRFT_LIST,
FLIGHT_PLAN_CREATE, FLIGHT_PLAN_DELETE,
FLIGHT_PLAN_CREATE,
FLIGHT_PLAN_DELETE,
FLIGHT_PLAN_DETAIL,
FLIGHT_PLAN_PILOT_LIST, FLIGHT_PLAN_UPDATE
} from "../actions/basisFlightAction";
FLIGHT_PLAN_PILOT_LIST,
FLIGHT_PLAN_UPDATE
} from '../actions/basisFlightAction';
function* listAreaSaga(action: ActionType<typeof Actions.PUBLIC_AREA_LIST.request>) {
function* listAreaSaga(
action: ActionType<typeof Actions.PUBLIC_AREA_LIST.request>
) {
try {
const response = yield call(Apis.flightPlanAPI.area);
@ -39,9 +43,7 @@ function* listAreaSaga(action: ActionType<typeof Actions.PUBLIC_AREA_LIST.reques
})
);
} catch (error: any) {
yield put(
Actions.PUBLIC_AREA_LIST.failure(error)
);
yield put(Actions.PUBLIC_AREA_LIST.failure(error));
}
}
@ -63,7 +65,9 @@ function* listAreaSaga(action: ActionType<typeof Actions.PUBLIC_AREA_LIST.reques
// }
// 비행계획서 목록
function* listPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_LIST.request>) {
function* listPlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_LIST.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.list, data);
@ -79,18 +83,16 @@ function* listPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_LIST.reques
return;
}
yield put(
Actions.FLIGHT_PLAN_LIST.success(response.data)
);
yield put(Actions.FLIGHT_PLAN_LIST.success(response.data));
} catch (error: any) {
yield put(
Actions.FLIGHT_PLAN_LIST.failure(error)
);
yield put(Actions.FLIGHT_PLAN_LIST.failure(error));
}
}
// 비행계획서 상세
function* detailPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DETAIL.request>) {
function* detailPlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_DETAIL.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.detail, data);
@ -106,24 +108,22 @@ function* detailPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DETAIL.re
return;
}
yield put(
Actions.FLIGHT_PLAN_DETAIL.success(response.data)
);
yield put(Actions.FLIGHT_PLAN_DETAIL.success(response.data));
} catch (error: any) {
yield put(
Actions.FLIGHT_PLAN_DETAIL.failure(error)
);
yield put(Actions.FLIGHT_PLAN_DETAIL.failure(error));
}
}
// 비행계획서 등록
function* createPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.request>) {
function* createPlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.request>
) {
try {
const detail = action.payload;
const res = yield call(Apis.flightPlanAPI.create, detail);
const {data} = res;
const { data } = res;
if (data.result) {
yield put(
@ -144,7 +144,7 @@ function* createPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.re
isRefresh: false
})
);
} else if(data.errorCode === 'FT500') {
} else if (data.errorCode === 'FT500') {
yield put(
MessageActions.IS_ERROR({
errorCode: DUPLATE_MESSAGE.code,
@ -171,13 +171,15 @@ function* createPlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_CREATE.re
}
// 비행계획서 수정
function* updatePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_UPDATE.request>) {
function* updatePlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_UPDATE.request>
) {
try {
const detail = action.payload;
const res = yield call(Apis.flightPlanAPI.update, detail);
const {data} = res;
const { data } = res;
if (data.result) {
yield put(
@ -216,12 +218,14 @@ function* updatePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_UPDATE.re
}
// 비행계획서 삭제
function* deletePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DELETE.request>) {
function* deletePlanSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_DELETE.request>
) {
try {
const id = action.payload;
const res = yield call(Apis.flightPlanAPI.delete, id);
const {data} = res;
const { data } = res;
if (data.result) {
yield put(
@ -249,7 +253,9 @@ function* deletePlanSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_DELETE.re
}
// 조종사 목록
function* listPilotSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_PILOT_LIST.request>) {
function* listPilotSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_PILOT_LIST.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.listPilot, data);
@ -265,18 +271,16 @@ function* listPilotSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_PILOT_LIST
return;
}
yield put(
Actions.FLIGHT_PLAN_PILOT_LIST.success(response.data)
);
yield put(Actions.FLIGHT_PLAN_PILOT_LIST.success(response.data));
} catch (error: any) {
yield put(
Actions.FLIGHT_PLAN_PILOT_LIST.failure(error)
);
yield put(Actions.FLIGHT_PLAN_PILOT_LIST.failure(error));
}
}
// 기체 목록
function* listArcrftSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_ARCRFT_LIST.request>) {
function* listArcrftSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_ARCRFT_LIST.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.listArcrft, data);
@ -292,18 +296,16 @@ function* listArcrftSaga(action: ActionType<typeof Actions.FLIGHT_PLAN_ARCRFT_LI
return;
}
yield put(
Actions.FLIGHT_PLAN_ARCRFT_LIST.success(response.data)
);
yield put(Actions.FLIGHT_PLAN_ARCRFT_LIST.success(response.data));
} catch (error: any) {
yield put(
Actions.FLIGHT_PLAN_ARCRFT_LIST.failure(error)
);
yield put(Actions.FLIGHT_PLAN_ARCRFT_LIST.failure(error));
}
}
// get buffer list
function* listBuffer(action: ActionType<typeof Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request>) {
function* listBuffer(
action: ActionType<typeof Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.listBuffer, data);
@ -319,19 +321,16 @@ function* listBuffer(action: ActionType<typeof Actions.FLIGHT_PLAN_AREA_BUFFER_L
return;
}
yield put(
Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.success(response.data)
);
yield put(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.success(response.data));
} catch (error: any) {
yield put(
Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.failure(error)
);
yield put(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.failure(error));
}
}
// 비행계획서 목록(승인)
function* listAprvSaga(action: ActionType<typeof Actions.FLIGHT_APRV_LIST.request>) {
function* listAprvSaga(
action: ActionType<typeof Actions.FLIGHT_APRV_LIST.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.aprvList, data);
@ -347,25 +346,22 @@ function* listAprvSaga(action: ActionType<typeof Actions.FLIGHT_APRV_LIST.reques
return;
}
yield put(
Actions.FLIGHT_APRV_LIST.success(response.data)
);
yield put(Actions.FLIGHT_APRV_LIST.success(response.data));
} catch (error: any) {
yield put(
Actions.FLIGHT_APRV_LIST.failure(error)
);
yield put(Actions.FLIGHT_APRV_LIST.failure(error));
}
}
// 비행계획서 승인
function* aprvProcSaga(action: ActionType<typeof Actions.FLIGHT_APRV_PROC.request>) {
function* aprvProcSaga(
action: ActionType<typeof Actions.FLIGHT_APRV_PROC.request>
) {
try {
const sendData = action.payload;
const res = yield call(Apis.flightPlanAPI.aprvProc, sendData);
const {data} = res;
const { data } = res;
if (data.result) {
yield put(
@ -376,9 +372,7 @@ function* aprvProcSaga(action: ActionType<typeof Actions.FLIGHT_APRV_PROC.reques
isRefresh: false
})
);
yield put(
Actions.FLIGHT_APRV_PROC.success(data)
)
yield put(Actions.FLIGHT_APRV_PROC.success(data));
} else {
if (data.errorCode === 'DT002') {
yield put(
@ -406,10 +400,36 @@ function* aprvProcSaga(action: ActionType<typeof Actions.FLIGHT_APRV_PROC.reques
}
}
// 비행계획서 목록
function* scheduleListSaga(
action: ActionType<typeof Actions.FLIGHT_SCHEDULE_LIST.request>
) {
try {
const data = action.payload;
const response = yield call(Apis.flightPlanAPI.scheduleList, data);
if (response.errorCode) {
yield put(
MessageActions.IS_ERROR({
errorCode: response.errorCode,
errorMessage: response.errorMessage,
isHistoryBack: false,
isRefresh: false
})
);
return;
}
yield put(Actions.FLIGHT_SCHEDULE_LIST.success(response.data || []));
} catch (error: any) {
yield put(Actions.FLIGHT_SCHEDULE_LIST.failure(error));
}
}
function* searchAreaSaga(
action: ActionType<typeof Actions.SEARCH_AREA.request>
) {
try{
try {
const { query } = action.payload;
const res = yield call(Apis.flightPlanAPI.searchArea, { query });
@ -422,15 +442,16 @@ function* searchAreaSaga(
export function* flightSaga() {
yield takeEvery(Actions.PUBLIC_AREA_LIST.request, listAreaSaga);
// yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea);
yield takeEvery(Actions.FLIGHT_PLAN_LIST.request, listPlanSaga)
yield takeEvery(Actions.FLIGHT_PLAN_DETAIL.request, detailPlanSaga)
yield takeEvery(Actions.FLIGHT_PLAN_CREATE.request, createPlanSaga)
yield takeEvery(Actions.FLIGHT_PLAN_UPDATE.request, updatePlanSaga)
yield takeEvery(Actions.FLIGHT_PLAN_DELETE.request, deletePlanSaga)
yield takeEvery(Actions.FLIGHT_PLAN_PILOT_LIST.request, listPilotSaga)
yield takeEvery(Actions.FLIGHT_PLAN_ARCRFT_LIST.request, listArcrftSaga)
yield takeEvery(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request, listBuffer)
yield takeEvery(Actions.FLIGHT_APRV_LIST.request, listAprvSaga)
yield takeEvery(Actions.FLIGHT_APRV_PROC.request, aprvProcSaga)
yield takeEvery(Actions.SEARCH_AREA.request, searchAreaSaga)
yield takeEvery(Actions.FLIGHT_PLAN_LIST.request, listPlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_DETAIL.request, detailPlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_CREATE.request, createPlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_UPDATE.request, updatePlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_DELETE.request, deletePlanSaga);
yield takeEvery(Actions.FLIGHT_PLAN_PILOT_LIST.request, listPilotSaga);
yield takeEvery(Actions.FLIGHT_PLAN_ARCRFT_LIST.request, listArcrftSaga);
yield takeEvery(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request, listBuffer);
yield takeEvery(Actions.FLIGHT_APRV_LIST.request, listAprvSaga);
yield takeEvery(Actions.FLIGHT_APRV_PROC.request, aprvProcSaga);
yield takeEvery(Actions.SEARCH_AREA.request, searchAreaSaga);
yield takeEvery(Actions.FLIGHT_SCHEDULE_LIST.request, scheduleListSaga);
}

21
src/utility/hooks/useInterval.js

@ -0,0 +1,21 @@
import { useEffect, useRef } from 'react';
const useInterval = (callback, delay) => {
const savedCallback = useRef(null);
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
useEffect(() => {
const executeCallback = () => {
savedCallback.current();
};
const timerId = setInterval(executeCallback, delay);
return () => clearInterval(timerId);
}, []);
};
export default useInterval;

1
src/views/weather/WeatherView.js

@ -48,7 +48,6 @@ const WeatherView = () => {
easing: 'easeOutCubic'
};
// map.morph(latlng, 16, options)
console.log(map);
};
const handleEnter = e => {
if (e.key == 'Enter') {

Loading…
Cancel
Save