From 44123945ff4045e3ef04648a216891161cca2834 Mon Sep 17 00:00:00 2001 From: JANGHYUNn Date: Wed, 22 Nov 2023 15:09:59 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20page=20l?= =?UTF-8?q?ink=20=EC=97=B0=EA=B2=B0=20=EB=B0=8F=20=EA=B6=8C=ED=95=9C?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/DashboardGroupList.js | 22 ++++- src/components/dashboard/DashboardStcsArea.js | 19 +++- src/components/dashboard/DashboardStcsDay.js | 12 ++- .../dashboard/DroneFlightSchedule.js | 95 +++++++++++++++++-- src/containers/main/dash/MainDashContainer.js | 90 +++++++----------- .../main/dash/actions/mainDashAction.ts | 20 +++- src/modules/main/dash/apis/mainDashApi.ts | 1 - src/modules/main/dash/models/mainDashModel.ts | 9 +- .../main/dash/reducers/mainDashReducer.ts | 6 ++ src/modules/main/dash/sagas/mainDashSaga.ts | 35 +++++-- 10 files changed, 225 insertions(+), 84 deletions(-) diff --git a/src/components/dashboard/DashboardGroupList.js b/src/components/dashboard/DashboardGroupList.js index be78734..56b98a1 100644 --- a/src/components/dashboard/DashboardGroupList.js +++ b/src/components/dashboard/DashboardGroupList.js @@ -173,12 +173,30 @@ const columns = { ] }; -export const DashboardGroupList = ({ title, pageMove, data }) => { +export const DashboardGroupList = ({ title, handlerMovePage, data }) => { return ( {titles[title]} - diff --git a/src/components/dashboard/DashboardStcsArea.js b/src/components/dashboard/DashboardStcsArea.js index 72cafb5..762f62b 100644 --- a/src/components/dashboard/DashboardStcsArea.js +++ b/src/components/dashboard/DashboardStcsArea.js @@ -61,7 +61,13 @@ const titles = { flightsRegion: 'TOP5 지역 별 비행횟수 통계' }; -export const DashboardStcsArea = ({ data, title, setStartDate, startDate }) => { +export const DashboardStcsArea = ({ + data, + title, + setStartDate, + startDate, + handlerMovePage +}) => { const [chartData, setChartData] = useState({}); useEffect(() => { @@ -117,7 +123,10 @@ export const DashboardStcsArea = ({ data, title, setStartDate, startDate }) => { /> - @@ -126,7 +135,11 @@ export const DashboardStcsArea = ({ data, title, setStartDate, startDate }) => { -
+
0 ? '275px' : '100%' + }} + > {Object.keys(chartData).length > 0 ? ( ) : ( diff --git a/src/components/dashboard/DashboardStcsDay.js b/src/components/dashboard/DashboardStcsDay.js index ce5b54b..f3280eb 100644 --- a/src/components/dashboard/DashboardStcsDay.js +++ b/src/components/dashboard/DashboardStcsDay.js @@ -70,7 +70,12 @@ const options = { } }; -export const DashboardStcsDay = ({ startDate, setStartDate, data }) => { +export const DashboardStcsDay = ({ + startDate, + setStartDate, + data, + handlerMovePage +}) => { const [chartData, setChartData] = useState({}); useEffect(() => { @@ -126,7 +131,10 @@ export const DashboardStcsDay = ({ startDate, setStartDate, data }) => { />
- diff --git a/src/components/dashboard/DroneFlightSchedule.js b/src/components/dashboard/DroneFlightSchedule.js index 21ed07c..d73e80a 100644 --- a/src/components/dashboard/DroneFlightSchedule.js +++ b/src/components/dashboard/DroneFlightSchedule.js @@ -1,5 +1,13 @@ +import { useSelector } from 'react-redux'; import { Plus } from 'react-feather'; -import { Card, CardBody, CardHeader, CardTitle, Input, Col } from 'reactstrap'; +import { + Card, + CardBody, + CardHeader, + CardTitle, + Input, + Label +} from 'reactstrap'; import { GridDatabase } from '../../components/crud/grid/GridDatatable'; const columns = [ @@ -61,24 +69,97 @@ const columns = [ } ]; -export default function DroneFlightSchedule({ pageMove, data }) { +const competentAgency = [ + { + text: '서울지방항공청(항공운항과)', + value: 'F0001' + }, + { + text: '김포항공관리사무소(안전운항과)', + value: 'F0002' + }, + { + text: '양양공항출장소', + value: 'F0003' + }, + { + text: '원주공항출장소', + value: 'F0004' + }, + { + text: '청주공항출장소', + value: 'F0005' + }, + { + text: '군산공항출장소', + value: 'F0006' + }, + { + text: '부산지방항공청(항공운항과)', + value: 'F0007' + }, + { + text: '제주지방항공청(안전운항과)', + value: 'F0008' + }, + { + text: '정석비행장', + value: 'F0009' + }, + { + text: '울진공항출장소', + value: 'F0010' + } +]; + +export default function DroneFlightSchedule({ + handlerMovePage, + handlerDronOperationChange, + user +}) { + const { dronOperationList } = useSelector(state => state.mainDashState); + return (
드론 별 비행운항 목록
- - - -
- +
); diff --git a/src/containers/main/dash/MainDashContainer.js b/src/containers/main/dash/MainDashContainer.js index e40b1f9..beffc01 100644 --- a/src/containers/main/dash/MainDashContainer.js +++ b/src/containers/main/dash/MainDashContainer.js @@ -7,7 +7,8 @@ import DroneFlightSchedule from '../../../components/dashboard/DroneFlightSchedu import { DashboardGroupList } from '../../../components/dashboard/DashboardGroupList'; import { DashboardStcsArea } from '../../../components/dashboard/DashboardStcsArea'; import { DashboardStcsDay } from '../../../components/dashboard/DashboardStcsDay'; -import * as Actions from '../../../modules/main/dash/actions/mainDashAction'; +import * as DashActions from '../../../modules/main/dash/actions/mainDashAction'; +import * as GroupActions from '../../../modules/basis/group/actions/basisGroupAction'; import { MessageErrorModal } from '../../../components/message/MessageErrorModal'; import '@styles/react/libs/flatpickr/flatpickr.scss'; import '@styles/react/libs/tables/react-dataTable-component.scss'; @@ -27,75 +28,66 @@ export const MainDashContainer = () => { const { stcsDayList, stcsAreaList } = useSelector( state => state.mainDashState ); - const { user } = useSelector(state => state.authState, shallowEqual); + const { user } = useSelector(state => state.authState); + const [dayStartDate, setDayStartDate] = useState(new Date()); const [areaStartDate, setAreaStartDate] = useState(new Date()); const history = useHistory(); + useEffect(() => { + // 일일 비행계획 현황, 일일 비행건수 현황, 일일 비정상상황 현황 Promise.all 처리 + dispatch(DashActions.DASHBOARD_DATA.request()); + handlerStcsDaySearch(dayStartDate); + handlerStcsAreaSearch(areaStartDate); + }, []); + + useEffect(() => { + handlerDronOperationList(user.cptAuthCode); + }, [user]); + + // 일 별 비행횟수 통계 날짜 리스트 dispatch const handlerStcsDaySearch = date => { dispatch( - Actions.STCS_DAY.request({ + DashActions.STCS_DAY.request({ yyyymm: moment(date).format('YYYY-MM') }) ); }; + // top5 지역 별 비행횟수 통계 리스트 dispatch const handlerStcsAreaSearch = date => { dispatch( - Actions.STCS_AREA.request({ + DashActions.STCS_AREA.request({ yyyymm: moment(date).format('YYYY-MM') }) ); }; - const handlerGroupSearch = () => { - dispatch( - Actions.GROUP_LIST.request({ - cstmrSno: user?.cstmrSno - }) - ); - }; - - const handlerDronSearch = () => { - dispatch( - Actions.DRON_LIST.request({ - cstmrSno: user?.cstmrSno - }) - ); + // 드론 별 비행운항 목록 리스트 dispatch + const handlerDronOperationList = data => { + dispatch(DashActions.DRON_OPERRATION_LIST.request(data)); }; + // 일 별 비행횟수 통계 날짜 변경 핸들러 const handlerStcsDayParam = date => { setDayStartDate(date); handlerStcsDaySearch(date); }; + // top5 지역 별 비행횟수 통계 날짜 변경 핸들러 const handlerStcsAreaParam = date => { setAreaStartDate(date); handlerStcsAreaSearch(date); }; - const handlerDronDetail = () => { - history.push('/basis/dron/index'); + // 드론 별 비행운항 목록 그룹 체인지 핸들러 + const handlerDronOperationChange = data => { + handlerDronOperationList(data); }; - const handlerGroupDetail = useCallback(val => { - history.push('/basis/group/index'); - }, []); - - const movePage = url => { + const handlerMovePage = url => { history.push(url); }; - useEffect(() => { - dispatch( - Actions.DASHBOARD_DATA.request({ - serviceType: 'all' - }) - ); - handlerStcsDaySearch(dayStartDate); - handlerStcsAreaSearch(areaStartDate); - // handlerGroupSearch(); - // handlerDronSearch(); - }, []); return (
@@ -103,21 +95,21 @@ export const MainDashContainer = () => { @@ -128,8 +120,9 @@ export const MainDashContainer = () => { @@ -153,6 +146,7 @@ export const MainDashContainer = () => { startDate={dayStartDate} setStartDate={handlerStcsDayParam} data={stcsDayList || []} + handlerMovePage={handlerMovePage} /> @@ -164,23 +158,11 @@ export const MainDashContainer = () => { setStartDate={handlerStcsAreaParam} data={stcsAreaList || []} title='flightsRegion' + handlerMovePage={handlerMovePage} />
- {/*
- - - - - - - - -
*/} ); diff --git a/src/modules/main/dash/actions/mainDashAction.ts b/src/modules/main/dash/actions/mainDashAction.ts index e19791f..9a7b4ee 100644 --- a/src/modules/main/dash/actions/mainDashAction.ts +++ b/src/modules/main/dash/actions/mainDashAction.ts @@ -6,7 +6,7 @@ import { StcsAreaData, StcsDayData, IDashBoardData, - IDashBoardRq + IDronOperationList } from '../models/mainDashModel'; const STCS_DAY_REQUEST = 'main/dash/STCS_DAY_REQUEST'; @@ -29,6 +29,13 @@ const DASHBOARD_DATA_REQUEST = 'main/dashboard/DATA_REQUEST'; const DASHBOARD_DATA_SUCCESS = 'main/dashboard/DATA_SUCCESS'; const DASHBOARD_DATA_FAILURE = 'main/dashboard/DATA_FAILURE'; +const DRON_OPERRATION_LIST_REQUEST = + 'main/dashboard/DRON_OPERRATION_LIST_REQUEST'; +const DRON_OPERRATION_LIST_SUCCESS = + 'main/dashboard/DRON_OPERRATION_LIST_SUCCESS'; +const DRON_OPERRATION_LIST_FAILURE = + 'main/dashboard/DRON_OPERRATION_LIST_FAILURE'; + export const STCS_DAY = createAsyncAction( STCS_DAY_REQUEST, STCS_DAY_SUCCESS, @@ -57,14 +64,21 @@ export const DASHBOARD_DATA = createAsyncAction( DASHBOARD_DATA_REQUEST, DASHBOARD_DATA_SUCCESS, DASHBOARD_DATA_FAILURE -)(); +)<{}, IDashBoardData, AxiosError>(); + +export const DRON_OPERRATION_LIST = createAsyncAction( + DRON_OPERRATION_LIST_REQUEST, + DRON_OPERRATION_LIST_SUCCESS, + DRON_OPERRATION_LIST_FAILURE +)(); const actions = { STCS_DAY, STCS_AREA, GROUP_LIST, DRON_LIST, - DASHBOARD_DATA + DASHBOARD_DATA, + DRON_OPERRATION_LIST }; export type MainDashAction = ActionType; diff --git a/src/modules/main/dash/apis/mainDashApi.ts b/src/modules/main/dash/apis/mainDashApi.ts index b1292ac..1bc8a4d 100644 --- a/src/modules/main/dash/apis/mainDashApi.ts +++ b/src/modules/main/dash/apis/mainDashApi.ts @@ -1,6 +1,5 @@ import qs from 'qs'; import axios from '../../../utils/customAxiosUtil'; -import { IDashBoardRq } from '../models/mainDashModel'; export const mainDashAPI = { stcsDay: async (data: { yyyymm: string }) => { diff --git a/src/modules/main/dash/models/mainDashModel.ts b/src/modules/main/dash/models/mainDashModel.ts index e409162..90bdc40 100644 --- a/src/modules/main/dash/models/mainDashModel.ts +++ b/src/modules/main/dash/models/mainDashModel.ts @@ -4,6 +4,7 @@ export interface MainDashState { groupList: GroupListData[] | undefined; dronList: DronListData[] | undefined; dashboardData: IDashBoardData | undefined; + dronOperationList: IDronOperationList[] | undefined; } export enum EDateType { @@ -86,11 +87,6 @@ export interface IDashBoardData { dailyFlightCount: IDailyFlightCount[]; dailyFlightPlan: IDailyFlightPlan[]; dronSituation: IDronSituation[]; - dronOperationList: IDronOperationList[]; -} - -export interface IDashBoardRq { - serviceType: string; } export const initMainDash = { @@ -98,7 +94,8 @@ export const initMainDash = { stcsAreaList: undefined, groupList: undefined, dronList: undefined, - dashboardData: undefined + dashboardData: undefined, + dronOperationList: undefined }; // laanc 승인 목록 검색 diff --git a/src/modules/main/dash/reducers/mainDashReducer.ts b/src/modules/main/dash/reducers/mainDashReducer.ts index 5d23869..dfbde68 100644 --- a/src/modules/main/dash/reducers/mainDashReducer.ts +++ b/src/modules/main/dash/reducers/mainDashReducer.ts @@ -36,4 +36,10 @@ export const mainDahReducer = createReducer< const data = action.payload; draft.dashboardData = { ...data }; }) + ) + .handleAction(Actions.DRON_OPERRATION_LIST.success, (state, action) => + produce(state, draft => { + const data = action.payload; + draft.dronOperationList = data; + }) ); diff --git a/src/modules/main/dash/sagas/mainDashSaga.ts b/src/modules/main/dash/sagas/mainDashSaga.ts index 9544769..246f96c 100644 --- a/src/modules/main/dash/sagas/mainDashSaga.ts +++ b/src/modules/main/dash/sagas/mainDashSaga.ts @@ -122,8 +122,6 @@ function* dashboardData( action: ActionType ) { try { - const { serviceType } = action.payload; - /* dailyFlightWarn: 일일 비정상상황 현황 통계 dailyFlightPlan: 일일 비행계획 현황 통계 @@ -135,8 +133,7 @@ function* dashboardData( call(Apis.mainDashAPI.dailyFlightWarn), call(Apis.mainDashAPI.dailyFlightPlan), call(Apis.mainDashAPI.dailyFlightCount), - call(Apis.mainDashAPI.dronSituation), - call(Apis.mainDashAPI.dronOperationList, serviceType) + call(Apis.mainDashAPI.dronSituation) ]); let errorCheck = res.filter(i => i.hasOwnProperty('errorCode')); @@ -168,8 +165,7 @@ function* dashboardData( dailyFlightWarn: res[0].data.slice(0, res[0].data.length - 1), dailyFlightPlan: res[1].data, dailyFlightCount: res[2].data, - dronSituation: dronSituationArr, - dronOperationList: res[4].data + dronSituation: dronSituationArr }) ); } catch (error) { @@ -177,10 +173,37 @@ function* dashboardData( } } +function* dronOperationList( + action: ActionType +) { + try { + const params = action.payload; + const res = yield call(Apis.mainDashAPI.dronOperationList, params); + const { data, count, errorCode, errorMessage } = res; + if (errorCode) { + // 오류메시지 호출 + yield put( + MessageActions.IS_ERROR({ + errorCode: errorCode, + errorMessage: '처리중 오류가 발생하였습니다', + isHistoryBack: false, + isRefresh: false + }) + ); + + return; + } + yield put(Actions.DRON_OPERRATION_LIST.success(data)); + } catch (error) { + yield put(Actions.DRON_OPERRATION_LIST.failure(error)); + } +} + export function* mainDashSaga() { yield takeEvery(Actions.STCS_DAY.request, listStcsDay); yield takeEvery(Actions.STCS_AREA.request, listStcsArea); yield takeEvery(Actions.GROUP_LIST.request, listGroup); yield takeEvery(Actions.DRON_LIST.request, listDron); yield takeEvery(Actions.DASHBOARD_DATA.request, dashboardData); + yield takeEvery(Actions.DRON_OPERRATION_LIST.request, dronOperationList); }