From a20eec41cf079d113f6542bfaad33142cf95d569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?junh=5Feee=28=EC=9D=B4=EC=A4=80=ED=9D=AC=29?= Date: Tue, 4 Oct 2022 16:17:52 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EA=B7=B8=EB=A3=B9=ED=99=94=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basis/group/BasisGroupUsersSearch.js | 4 +- .../basis/flight/plan/FlightPlanContainer.js | 2 - .../basis/group/BasisGroupUsersContainer.js | 215 +++++++++++++++--- .../basis/group/actions/basisGroupAction.ts | 11 +- .../basis/group/models/basisGroupModel.ts | 14 +- .../basis/group/reducers/basisGroupReducer.ts | 7 + 6 files changed, 210 insertions(+), 43 deletions(-) diff --git a/src/components/basis/group/BasisGroupUsersSearch.js b/src/components/basis/group/BasisGroupUsersSearch.js index 81756dc..40c3640 100644 --- a/src/components/basis/group/BasisGroupUsersSearch.js +++ b/src/components/basis/group/BasisGroupUsersSearch.js @@ -49,7 +49,7 @@ export const BasisGroupUsersSearch = props => {
-
+ {/*
그룹명
@@ -74,7 +74,7 @@ export const BasisGroupUsersSearch = props => {
- + */}
사용자 명
diff --git a/src/containers/basis/flight/plan/FlightPlanContainer.js b/src/containers/basis/flight/plan/FlightPlanContainer.js index 33c0fe1..12a8f48 100644 --- a/src/containers/basis/flight/plan/FlightPlanContainer.js +++ b/src/containers/basis/flight/plan/FlightPlanContainer.js @@ -60,8 +60,6 @@ const FlightPlanContainer = () => { })); }; - - const handleGroupSelect = ({ groupId, groupNm, groupAuthCd }) => { // 권한 상관 없이 모두 조회 가능 const param = searchData; diff --git a/src/containers/basis/group/BasisGroupUsersContainer.js b/src/containers/basis/group/BasisGroupUsersContainer.js index ff151a2..4156fc2 100644 --- a/src/containers/basis/group/BasisGroupUsersContainer.js +++ b/src/containers/basis/group/BasisGroupUsersContainer.js @@ -1,27 +1,35 @@ import { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; -import { Button } from 'reactstrap'; +import { Button, Row, Col } from 'reactstrap'; +import { BasisGroupGrid } from '../../../components/basis/group/BasisGroupGrid'; import { BasisGroupUsersGrid } from '../../../components/basis/group/BasisGroupUsersGrid'; import { BasisGroupUsersSearch } from '../../../components/basis/group/BasisGroupUsersSearch'; import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; import { ConfirmModal } from '../../../components/modal/ConfirmModal'; +import { InfoModal } from '../../../components/modal/InfoModal'; import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; export const BasisGroupUsersContainer = props => { - const { userList, userCount, joinList, joinListCount } = useSelector( - state => state.groupState - ); - - const { user } = useSelector(state => state.authState); - const dispatch = useDispatch(); const history = useHistory(); + const { + joinList, + joinListCount, + selectGroup, + groupList, + groupListCount, + userList, + userListCount + } = useSelector(state => state.groupState); + const { user } = useSelector(state => state.authState); const [params, setParams] = useState({ - cstmrSno: user?.cstmrSno + cstmrSno: user?.cstmrSno, + groupId: '', + groupAuthCd: '', + aprvlYn: '' }); - const titleName = '사용자 관리'; const [saveData, setSaveData] = useState({ @@ -36,7 +44,76 @@ export const BasisGroupUsersContainer = props => { desc: '' }); + const [infoModal, setInfoModal] = useState({ + isOpen: false, + title: '', + desc: '' + }); + const columns = [ + { + name: '그룹명', + selector: 'groupNm', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupNm; + // return selectData; + } + }, + { + name: '그룹 코드', + selector: 'groupId', + minWidth: '102px', + sortable: true, + cell: row => { + return row?.groupId; + } + }, + { + name: '', + sortable: true, + cell: row => { + // return selectData?.groupId === row?.groupId ? ( + // handlerCancel()} + // > + // 선택취소 + // + // ) : ( + // + // handlerDetail( + // row?.groupId, + // row?.groupNm, + // row?.groupAuthCd, + // row?.aprvlYn + // ) + // } + // > + // 상세보기 + // + // ); + return ( + + handlerDetail(row?.groupId, row?.groupAuthCd, row?.aprvlYn) + } + > + 상세보기 + + ); + } + } + ]; + + const userColumns = [ { name: '그룹명', selector: 'groupNm', @@ -68,7 +145,7 @@ export const BasisGroupUsersContainer = props => { { name: '사용자 ID', selector: 'userId', - minWidth: '150px', + minWidth: '120px', sortable: true, cell: row => { return row?.userId; @@ -78,7 +155,7 @@ export const BasisGroupUsersContainer = props => { { name: '권한명', selector: 'groupAuthCd', - minWidth: '102px', + minWidth: '105px', sortable: true, cell: row => { return row?.groupAuthCd; @@ -87,7 +164,7 @@ export const BasisGroupUsersContainer = props => { { name: '가입 일시', selector: 'joinDt', - minWidth: '200px', + minWidth: '150px', sortable: true, cell: row => { return row?.joinDt; @@ -166,38 +243,57 @@ export const BasisGroupUsersContainer = props => { } ]; + // useEffect(() => { + // handlerSearch(); + // }, []); + + const handlerSearch = () => { + if (params.cstmrSno && user?.cstmrSno) { + dispatch( + Actions.USER_LIST.request({ + searchParams: params, + cstmrSno: user?.cstmrSno + }) + ); + } + }; + useEffect(() => { if (user?.cstmrSno) { dispatch(Actions.JOIN_LIST.request({ cstmrSno: user?.cstmrSno })); - // setParams({ - // ...params, - // cstmrSno: user?.cstmrSno - // }); - - // dispatch( - // Actions.USER_LIST.request({ - // searchParams: { cstmrSno: user?.cstmrSno } - // }) - // ); + setParams({ + ...params, + cstmrSno: user?.cstmrSno + }); } }, [user]); - // useEffect(() => { - - // }, [params]); - - useEffect(() => { - handlerSearch(); - }, []); + const handlerDetail = (groupId, groupAuthCd, aprvlYn) => { + if ( + groupAuthCd === 'MASTER' || + user.authId === 'SUPER' || + user.authId === 'ADMIN' || + (aprvlYn === 'Y' && groupAuthCd === 'LEADER') + ) { + const param = params; + param.groupId = groupId; + param.groupAuthCd = groupAuthCd; + param.aprvlYn = aprvlYn; - const handlerSearch = () => { - if (params.cstmrSno && user?.cstmrSno) { dispatch( Actions.USER_LIST.request({ - searchParams: params, - cstmrSno: user?.cstmrSno + searchParams: param }) ); + + console.log('볼 수 있음'); + } else { + console.log('볼 수 없다'); + setInfoModal({ + isOpen: true, + title: '권한 확인', + desc: '사용자관리 확인을 위해서는 운영자 권한이 필요합니다. 운영자에게 권한을 부여받고 다시 시도해 주세요.' + }); } }; @@ -274,7 +370,7 @@ export const BasisGroupUsersContainer = props => { return ( - { + /> */} +
+ + + + + + {!userList ? ( +
+ 그룹 목록에서 상세보기를 클릭하세요. +
+ ) : ( + <> + + {/* */} + + )} + + + + +
+
{ handlerConfirm={handlerAuthSave} color='primary' /> + {/* */}
); }; diff --git a/src/modules/basis/group/actions/basisGroupAction.ts b/src/modules/basis/group/actions/basisGroupAction.ts index 2d6b72a..1258265 100644 --- a/src/modules/basis/group/actions/basisGroupAction.ts +++ b/src/modules/basis/group/actions/basisGroupAction.ts @@ -9,7 +9,8 @@ import { UserGroupData, UserGroupState, GroupState, - MainGroupData + MainGroupData, + SelectGroupData } from '../models/basisGroupModel'; //# 나의 그룹 목록 조회 @@ -101,6 +102,9 @@ const GROUP_MAIN_LIST_REQUEST = 'basis/group/GROUP_MAIN_LIST_REQUEST'; const GROUP_MAIN_LIST_SUCCESS = 'basis/group/GROUP_MAIN_LIST_SUCCESS'; const GROUP_MAIN_LIST_FAILURE = 'basis/group/GROUP_MAIN_LIST_FAILURE'; +//# 그룹 선택 +const ROUP_SELECT = 'basis/group/select'; + export const MY_LIST = createAsyncAction( MY_LIST_REQUEST, MY_LIST_SUCCESS, @@ -207,6 +211,8 @@ export const USER_DELEGATE = createAsyncAction( USER_DELEGATE_FAILURE )(); +export const USER_GROUP_SELECT = createAction(ROUP_SELECT)(); + const actions = { MY_LIST, JOIN_LIST, @@ -225,7 +231,8 @@ const actions = { USER_UPDATE, USER_DELEGATE, GROUP_MYLIST, - GROUP_MAIN_LIST + GROUP_MAIN_LIST, + USER_GROUP_SELECT }; export type GroupAction = ActionType; diff --git a/src/modules/basis/group/models/basisGroupModel.ts b/src/modules/basis/group/models/basisGroupModel.ts index 2c417f6..308ee0c 100644 --- a/src/modules/basis/group/models/basisGroupModel.ts +++ b/src/modules/basis/group/models/basisGroupModel.ts @@ -18,6 +18,13 @@ export interface GroupState { newGroupId: String | ''; searchParams: string | ''; error: ErrorModel | undefined; + selectGroup: SelectGroupData | undefined; +} + +export interface SelectGroupData { + cstmrSno: number; + groupId: string; + groupNm: string; } export interface GroupSearchData { @@ -111,5 +118,10 @@ export const initGroup = { groupId: '', newGroupId: '', searchParams: '', - error: undefined + error: undefined, + selectGroup: { + cstmrSno: 0, + groupId: '', + groupNm: '' + } }; diff --git a/src/modules/basis/group/reducers/basisGroupReducer.ts b/src/modules/basis/group/reducers/basisGroupReducer.ts index 8dfdbcb..03df525 100644 --- a/src/modules/basis/group/reducers/basisGroupReducer.ts +++ b/src/modules/basis/group/reducers/basisGroupReducer.ts @@ -96,4 +96,11 @@ export const groupReducer = createReducer( draft.userList = data; draft.userCount = count; }) + ) + //그룹 선택 + .handleAction(Actions.USER_GROUP_SELECT, (state, action) => + produce(state, draft => { + const data = action.payload; + draft.selectGroup = data; + }) ); From 37396c09f066eaa46a74650b73c604e72f52a43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?hagjoon=28=EC=9D=B4=ED=95=99=EC=A4=80=29?= Date: Tue, 4 Oct 2022 16:26:13 +0900 Subject: [PATCH 2/3] =?UTF-8?q?main=20-=20=EB=AA=85=EC=B9=AD=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/dashboard/DashboardDronList.js | 2 +- src/components/dashboard/DashboardGroupList.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/dashboard/DashboardDronList.js b/src/components/dashboard/DashboardDronList.js index 61c1c10..5d32f19 100644 --- a/src/components/dashboard/DashboardDronList.js +++ b/src/components/dashboard/DashboardDronList.js @@ -5,7 +5,7 @@ export const DashboardDronList = props => { return ( - 내 기체 정보 + 기체 정보 diff --git a/src/components/dashboard/DashboardGroupList.js b/src/components/dashboard/DashboardGroupList.js index 98cd0e4..c9aecce 100644 --- a/src/components/dashboard/DashboardGroupList.js +++ b/src/components/dashboard/DashboardGroupList.js @@ -5,7 +5,7 @@ export const DashboardGroupList = props => { return ( - 내 그룹 정보 + 그룹 정보 @@ -21,10 +21,10 @@ export const DashboardGroupList = props => { {props.data?.map((item, index) => { return ( - - {item.groupNm} - {item.createDt} - + + {item.groupNm} + {item.createDt} + ); })} From dbae30592869af25a928102a320c6608940fe487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kimjh=28=EA=B9=80=EC=9E=A5=ED=98=84=29?= Date: Tue, 4 Oct 2022 16:58:29 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EB=B9=84=ED=96=89=EC=9A=B4=ED=95=AD=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=A4=84=20=EC=9E=91=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 28 +- package.json | 2 +- .../flight/schedule/FlightScheduleGrid.js | 203 ++++++ .../flight/schedule/FlightScheduleRealTime.js | 22 + .../flight/schedule/FlightScheduleSearch.js | 18 +- src/components/crud/grid/GridDatatable.js | 6 +- .../schedule/FlightScheduleContainer.js | 2 + .../basis/group/BasisGroupUsersContainer.js | 3 - .../basis/flight/actions/basisFlightAction.ts | 147 +++-- .../basis/flight/apis/basisFlightApi.ts | 15 +- .../basis/flight/models/basisFlightModel.ts | 607 ++++++++++-------- .../flight/reducers/basisFlightReducer.ts | 7 + .../basis/flight/sagas/basisFlightSaga.ts | 173 ++--- src/utility/hooks/useInterval.js | 21 + src/views/weather/WeatherView.js | 1 - 15 files changed, 810 insertions(+), 445 deletions(-) create mode 100644 src/components/basis/flight/schedule/FlightScheduleGrid.js create mode 100644 src/components/basis/flight/schedule/FlightScheduleRealTime.js create mode 100644 src/utility/hooks/useInterval.js diff --git a/package-lock.json b/package-lock.json index 5cbca85..e2a747d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 9321eab..b04381f 100644 --- a/package.json +++ b/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", diff --git a/src/components/basis/flight/schedule/FlightScheduleGrid.js b/src/components/basis/flight/schedule/FlightScheduleGrid.js new file mode 100644 index 0000000..37db6ab --- /dev/null +++ b/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 ( +
+ + +
+
+
+

비행운항 스케줄 목록

+ + 검색결과 총 {scheduleList.length}건 + +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ ); +} + +export default FlightScheduleGrid; diff --git a/src/components/basis/flight/schedule/FlightScheduleRealTime.js b/src/components/basis/flight/schedule/FlightScheduleRealTime.js new file mode 100644 index 0000000..0833d65 --- /dev/null +++ b/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
현재시간 UTC : {time.toString()}
; +}); + +export default FlightScheduleRealTime; diff --git a/src/components/basis/flight/schedule/FlightScheduleSearch.js b/src/components/basis/flight/schedule/FlightScheduleSearch.js index 6ffe650..a0a6637 100644 --- a/src/components/basis/flight/schedule/FlightScheduleSearch.js +++ b/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 (
@@ -22,7 +38,7 @@ function FlightScheduleSearch() {

검색조건

- {}}> + 검색 diff --git a/src/components/crud/grid/GridDatatable.js b/src/components/crud/grid/GridDatatable.js index e3e364a..eae6563 100644 --- a/src/components/crud/grid/GridDatatable.js +++ b/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 } + : {})} />
diff --git a/src/containers/basis/flight/schedule/FlightScheduleContainer.js b/src/containers/basis/flight/schedule/FlightScheduleContainer.js index 46fb0c7..6f37834 100644 --- a/src/containers/basis/flight/schedule/FlightScheduleContainer.js +++ b/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 ( + ); } diff --git a/src/containers/basis/group/BasisGroupUsersContainer.js b/src/containers/basis/group/BasisGroupUsersContainer.js index 4156fc2..3e5acaa 100644 --- a/src/containers/basis/group/BasisGroupUsersContainer.js +++ b/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: '권한 확인', diff --git a/src/modules/basis/flight/actions/basisFlightAction.ts b/src/modules/basis/flight/actions/basisFlightAction.ts index 1d4d406..a17c4aa 100644 --- a/src/modules/basis/flight/actions/basisFlightAction.ts +++ b/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 )(); // 목록 @@ -117,12 +145,14 @@ export const FLIGHT_PLAN_DETAIL = createAsyncAction( FLIGHT_PLAN_DETAIL_FAILURE )(); // 상세 초기화 -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 )(); // 수정 @@ -147,7 +177,9 @@ export const FLIGHT_PLAN_PILOT_LIST = createAsyncAction( )(); // 조종사 선택 -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( @@ -157,19 +189,26 @@ export const FLIGHT_PLAN_ARCRFT_LIST = createAsyncAction( )(); // 조종사 선택 -export const ARCRFT_SELECT = createAction(FLIGHT_PLAN_ARCRFT_SELECT)(); +export const ARCRFT_SELECT = createAction( + FLIGHT_PLAN_ARCRFT_SELECT +)(); // 조종사, 기체 선택 초기화 -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)(); +export const AREA_COORDINATE_LIST_SAVE = + createAction(AREA_COORDINATE_LIST)(); // 비행 구역 상세 저장 -export const AREA_DETAIL_LIST_SAVE = createAction(AREA_DETAIL_LIST)(); +export const AREA_DETAIL_LIST_SAVE = + createAction(AREA_DETAIL_LIST)(); // 비행 계획서 그룹 선택 -export const FLIGHT_PLAN_GROUP_SELECT = createAction(ROUP_SELECT)(); +export const FLIGHT_PLAN_GROUP_SELECT = + createAction(ROUP_SELECT)(); // 비행 구역 상세 값 초기화 export const AREA_DETAIL_INIT = createAction(AREA_DETAIL_INITIAL)(); @@ -194,29 +233,35 @@ export const FLIGHT_APRV_PROC = createAsyncAction( FLIGHT_APRV_PROC_FAILURE )(); +export const FLIGHT_SCHEDULE_LIST = createAsyncAction( + FLIGHT_SCHEDULE_REQUEST, + FLIGHT_SCHEDULE_SUCCESS, + FLIGHT_SCHEDULE_FAILURE +)(); 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; diff --git a/src/modules/basis/flight/apis/basisFlightApi.ts b/src/modules/basis/flight/apis/basisFlightApi.ts index 7a97abc..edb43ce 100644 --- a/src/modules/basis/flight/apis/basisFlightApi.ts +++ b/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}`); } -} - +}; diff --git a/src/modules/basis/flight/models/basisFlightModel.ts b/src/modules/basis/flight/models/basisFlightModel.ts index 4d8809f..38fc316 100644 --- a/src/modules/basis/flight/models/basisFlightModel.ts +++ b/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 {}; +export interface FlightPlanAreaDataList extends Array {} 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 {}; +export interface FlightPlanAreaCoordDataList + extends Array {} 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 {}; +export interface FlightPlanPilotDataList extends Array {} 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 {}; +export interface FlightPlanArcrftDataList extends Array {} // 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: '' + } + ] } -} +}; diff --git a/src/modules/basis/flight/reducers/basisFlightReducer.ts b/src/modules/basis/flight/reducers/basisFlightReducer.ts index fb16452..d048aa8 100644 --- a/src/modules/basis/flight/reducers/basisFlightReducer.ts +++ b/src/modules/basis/flight/reducers/basisFlightReducer.ts @@ -129,4 +129,11 @@ export const flightReducer = createReducer( 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; + }) ); diff --git a/src/modules/basis/flight/sagas/basisFlightSaga.ts b/src/modules/basis/flight/sagas/basisFlightSaga.ts index 658573f..b5ba4b4 100644 --- a/src/modules/basis/flight/sagas/basisFlightSaga.ts +++ b/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) { +function* listAreaSaga( + action: ActionType +) { try { const response = yield call(Apis.flightPlanAPI.area); @@ -39,9 +43,7 @@ function* listAreaSaga(action: ActionType) { +function* listPlanSaga( + action: ActionType +) { try { const data = action.payload; const response = yield call(Apis.flightPlanAPI.list, data); @@ -79,18 +83,16 @@ function* listPlanSaga(action: ActionType) { +function* detailPlanSaga( + action: ActionType +) { try { const data = action.payload; const response = yield call(Apis.flightPlanAPI.detail, data); @@ -106,24 +108,22 @@ function* detailPlanSaga(action: ActionType) { +function* createPlanSaga( + action: ActionType +) { 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) { +function* updatePlanSaga( + action: ActionType +) { 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) { +function* deletePlanSaga( + action: ActionType +) { 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) { +function* listPilotSaga( + action: ActionType +) { try { const data = action.payload; const response = yield call(Apis.flightPlanAPI.listPilot, data); @@ -265,18 +271,16 @@ function* listPilotSaga(action: ActionType) { +function* listArcrftSaga( + action: ActionType +) { try { const data = action.payload; const response = yield call(Apis.flightPlanAPI.listArcrft, data); @@ -292,18 +296,16 @@ function* listArcrftSaga(action: ActionType) { +function* listBuffer( + action: ActionType +) { try { const data = action.payload; const response = yield call(Apis.flightPlanAPI.listBuffer, data); @@ -319,19 +321,16 @@ function* listBuffer(action: ActionType) { +function* listAprvSaga( + action: ActionType +) { try { const data = action.payload; const response = yield call(Apis.flightPlanAPI.aprvList, data); @@ -347,25 +346,22 @@ function* listAprvSaga(action: ActionType) { +function* aprvProcSaga( + action: ActionType +) { 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 +) { + 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 ) { - 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); } diff --git a/src/utility/hooks/useInterval.js b/src/utility/hooks/useInterval.js new file mode 100644 index 0000000..4b07222 --- /dev/null +++ b/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; diff --git a/src/views/weather/WeatherView.js b/src/views/weather/WeatherView.js index 72d2a1d..5f456d1 100644 --- a/src/views/weather/WeatherView.js +++ b/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') {