diff --git a/src/components/basis/flight/plan/FlightPlanGrid.js b/src/components/basis/flight/plan/FlightPlanGrid.js
index b9474a3..d68f85b 100644
--- a/src/components/basis/flight/plan/FlightPlanGrid.js
+++ b/src/components/basis/flight/plan/FlightPlanGrid.js
@@ -52,9 +52,9 @@ const FlightPlanGrid = ({movePage, planListData, handleMoveDetail}) => {
{/* 검색된 데이터가 없습니다. */}
diff --git a/src/components/basis/flight/plan/FlightPlanGroupGrid.js b/src/components/basis/flight/plan/FlightPlanGroupGrid.js
new file mode 100644
index 0000000..8efc285
--- /dev/null
+++ b/src/components/basis/flight/plan/FlightPlanGroupGrid.js
@@ -0,0 +1,67 @@
+import React, {} from 'react';
+import { GridDatabase } from "../../../crud/grid/GridDatatable";
+import {
+ Card,
+ Button
+} from 'reactstrap';
+
+
+const FlightPlanGroupGrid = ({ data, count, selectGroup, handlerGroupCancel, handleGroupSelect }) => {
+
+ const columns = [
+ {id: 'groupNm', name: '그룹 명', minWidth: '102px', cell: row => (
{row.groupNm}
)},
+ {id: 'groupId', name: '그룹 코드', minWidth: '102px', sortable: true, cell: row => (
{row.groupId}
)},
+ {sortable: true, cell: row => {
+ return selectGroup?.groupId === row?.groupId ? (
+
handlerGroupCancel()}
+ >
+ 선택취소
+
+ ) : (
+
{
+ handleGroupSelect({
+ groupId: row?.groupId,
+ groupNm: row?.groupNm,
+ groupAuthCd: row?.groupAuthCd
+ })
+ }
+ }
+ >
+ 상세보기
+
+ )
+ }}
+ ];
+
+ return (
+ <>
+
+
+
나의 그룹 목록
+ 검색결과 총 {count}건
+
+
+
+
+ >
+ )
+
+}
+
+export default FlightPlanGroupGrid;
\ No newline at end of file
diff --git a/src/containers/basis/flight/plan/FlightPlanAreaDetailContainer.js b/src/containers/basis/flight/plan/FlightPlanAreaDetailContainer.js
index 30350d8..049a2e8 100644
--- a/src/containers/basis/flight/plan/FlightPlanAreaDetailContainer.js
+++ b/src/containers/basis/flight/plan/FlightPlanAreaDetailContainer.js
@@ -51,11 +51,14 @@ const FlightPlanAreaDetailContainer = ({ handleModal }) => {
useEffect(() => {
// detail의 area 정보가 존재하면 detail 정보로 매핑
- if(detail.areaList[0].planAreaSno !== 0) {
- setAreaDetail(detail.areaList);
-
- dispatch(Actions.AREA_DETAIL_LIST_SAVE(detail.areaList));
- }
+ if(detail.areaList) {
+ if(detail.areaList[0].planAreaSno !== 0) {
+ setAreaDetail(detail.areaList);
+
+ dispatch(Actions.AREA_DETAIL_LIST_SAVE(detail.areaList));
+ }
+ }
+
}, [])
diff --git a/src/containers/basis/flight/plan/FlightPlanContainer.js b/src/containers/basis/flight/plan/FlightPlanContainer.js
index 1033d6f..2f4c86e 100644
--- a/src/containers/basis/flight/plan/FlightPlanContainer.js
+++ b/src/containers/basis/flight/plan/FlightPlanContainer.js
@@ -4,22 +4,32 @@ import {Link, Redirect, useHistory} from 'react-router-dom';
import FlightPlanGrid from '../../../../components/basis/flight/plan/FlightPlanGrid';
import {CustomMainLayout} from '../../../../components/layout/CustomMainLayout';
import FlightPlanSearch from '../../../../components/basis/flight/plan/FlightPlanSearch';
-import {useDispatch, useSelector} from 'react-redux';
+import {useDispatch, useSelector, shallowEqual} from 'react-redux';
import * as FlightAction from '../../../../modules/basis/flight/actions/basisFlightAction';
import {FlightPlanListRqData} from '../../../../modules/basis/flight/models/basisFlightModel';
+import { Row, Col } from 'reactstrap';
+import { JOIN_LIST } from "../../../../modules/basis/group/actions/basisGroupAction";
+import FlightPlanGroupGrid from '../../../../components/basis/flight/plan/FlightPlanGroupGrid';
const initSearchData = {
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment().set({'h': 23, 'm': 59, 's': 59}).format('YYYY-MM-DD HH:mm:ss'),
aprvlYn: 'N',
+ groupId: '',
+ cstmrSno: 0,
}
const columns = [{}]
const FlightPlanContainer = () => {
const dispatch = useDispatch();
const history = useHistory();
const [searchData, setSerchData] = useState(initSearchData);
- const {list: planListData, detail: planDetailData} = useSelector(state => state.flightState);
+ const {list: planListData, detail: planDetailData, selectGroup} = useSelector(state => state.flightState);
+ const { joinList, joinListCount } = useSelector(state => state.groupState);
+ const { user } = useSelector(state => state.authState, shallowEqual);
+
+ const [ params, setParams ] = useState({});
+
const moveFlightPlanDetailPage = () => {
if(planDetailData){
@@ -31,10 +41,7 @@ const FlightPlanContainer = () => {
const handleSearch = (data) => {
dispatch(FlightAction.FLIGHT_PLAN_LIST.request(data));
}
- useEffect(() => {
- handleSearch(searchData);
- }, [])
-
+
const handleChangeSearchData = (values) => {
setSerchData(prevState => ({
...prevState,
@@ -46,19 +53,78 @@ const FlightPlanContainer = () => {
history.push(`/basis/flight/plan/detail/${id}`)
}
+ const handleGroupSelect = ({ groupId, groupNm, groupAuthCd }) => {
+ // 권한 상관 없이 모두 조회 가능
+ console.log('select group : ', groupId)
+ const param = searchData;
+
+ param.cstmrSno = user.cstmrSno;
+ param.groupId = groupId;
+
+ dispatch(FlightAction.FLIGHT_PLAN_GROUP_SELECT( {cstmrSno: user.cstmrSno, groupId: groupId, groupNm: groupNm} ));
+
+ setSerchData(prevState => {
+ return {
+ ...prevState,
+ cstmrSno: user.cstmrSno,
+ groupId: groupId
+ }
+ });
+
+ dispatch(FlightAction.FLIGHT_PLAN_LIST.request(param));
+ }
+
+ const handlerGroupCancel = () => {
+ dispatch(FlightAction.FLIGHT_PLAN_GROUP_SELECT( {cstmrSno: 0, groupId: '', groupNm: ''} ));
+ }
+
+ useEffect(() => {
+ if (user?.cstmrSno) {
+ dispatch(
+ JOIN_LIST.request({
+ cstmrSno: user?.cstmrSno
+ })
+ );
+ }
+ }, [user])
+
return (
-
-
+
+
+
+
+
+
+ {selectGroup.cstmrSno !== 0 ? (
+ <>
+
+
+ >
+ ) : (
+
+ 나의 그룹 목록에서 상세보기를 클릭하세요.
+
+ )}
+
+
+
+
)
}
diff --git a/src/containers/basis/flight/plan/FlightPlanDetailContainer.js b/src/containers/basis/flight/plan/FlightPlanDetailContainer.js
index 107559b..1389f0a 100644
--- a/src/containers/basis/flight/plan/FlightPlanDetailContainer.js
+++ b/src/containers/basis/flight/plan/FlightPlanDetailContainer.js
@@ -19,7 +19,7 @@ const FlightPlanDetailContainer = () => {
const location = useLocation();
const urlParams = useParams();
const flightState = useSelector(state => state.flightState);
- const { detail, pilotSelect, arcrftSelect, areaList } = flightState;
+ const { detail, pilotSelect, arcrftSelect, areaList, selectGroup } = flightState;
const [modal, setModal] = useState(initModal);
const [detailData, setDetailData] = useState(initFlightBas.initDetail);
@@ -28,8 +28,12 @@ const FlightPlanDetailContainer = () => {
dispatch(Actions.FLIGHT_PLAN_DETAIL.request(urlParams.planSno));
}, [urlParams])
- useEffect(() => {
- setDetailData(detail);
+ useEffect(() => {
+ setDetailData({
+ ...detail,
+ cstmrSno: selectGroup.cstmrSno,
+ groupId: selectGroup.groupId,
+ });
}, [detail])
useEffect(() => {
@@ -98,37 +102,38 @@ const FlightPlanDetailContainer = () => {
}, [arcrftSelect])
useEffect(() => {
- if(areaList !== undefined) {
- // const detailAreaList = detailData.areaList.concat();
- // const area = Object.assign({}, initFlightBas['area']);
-
-
- const detailAreaList = areaList.map((area) => {
- return {
- ...area
- }
- })
-
- // area.bufferZone = areaList[0].bufferZone;
- // area.fltElev = areaList[0].fltElev;
- // area.fltMethod = areaList[0].fltMethod;
- // area.areaType = areaList[0]
- // area.coordList = areaList[0].coordList;
-
- // detailAreaList.forEach((a, i) => {
- // detailAreaList[i] = area;
+ if(areaList !== undefined) {
+ const areas = detailData.areaList.concat();
+
+ const createAreaList = areas.map((area, i) => {
+ const targetArea = areaList[i];
+
+ let targetCoordList = area.coordList;
+ if(targetArea.coordList) {
+ targetCoordList = targetArea.coordList.map((coord, j) => {
+ return {
+ ...coord,
+ planAreaSno : area.planAreaSno,
+ planAreaCoordSno : 0
+ }
+ })
+ }
- // // if(a.planAreaSno === 0) { // create
- // // areaList[i] = area;
- // // } else { // update
- // // }
- // });
+ return {
+ ...area,
+ areaType : targetArea.areaType,
+ bufferZone: targetArea.bufferZone,
+ fltElev : targetArea.fltElev,
+ fltMethod : targetArea.fltMethod,
+ coordList : targetCoordList
+ }
+ });
setDetailData(prevState => {
return {
...prevState,
- ['areaList']: detailAreaList
+ ['areaList']: createAreaList
}
})
}
diff --git a/src/modules/basis/flight/actions/basisFlightAction.ts b/src/modules/basis/flight/actions/basisFlightAction.ts
index 6d629c5..a3f2e6f 100644
--- a/src/modules/basis/flight/actions/basisFlightAction.ts
+++ b/src/modules/basis/flight/actions/basisFlightAction.ts
@@ -7,7 +7,7 @@ import {
FlightPlanAreaDataList,
// FlightPlanArea,
FlightPlanData,
- FlightPlanListRqData, FlightPlanPilotDataList, PilotSelectData
+ FlightPlanListRqData, FlightPlanPilotDataList, PilotSelectData, SelectGroupData
} from '../models/basisFlightModel';
@@ -72,6 +72,9 @@ const AREA_COORDINATE_LIST = 'basis/flight/plan/area/COORDINATE_LIST';
// 비행 구역 상세 저장
const AREA_DETAIL_LIST = 'basis/flight/plan/area/DETAIL_LIST';
+// 비행계획서 그룹 선택
+const ROUP_SELECT = 'basis/flight/plan/group/select';
+
export const PUBLIC_AREA_LIST = createAsyncAction(
PUBLIC_AREA_LIST_REQUEST,
PUBLIC_AREA_LIST_SUCCESS,
@@ -149,6 +152,9 @@ export const AREA_COORDINATE_LIST_SAVE = createAction(AREA_COORDINATE_LIST)
();
+// 비행 계획서 그룹 선택
+export const FLIGHT_PLAN_GROUP_SELECT = createAction(ROUP_SELECT)();
+
const actions = {
PUBLIC_AREA_LIST,
// FLIGHT_PLAN_AREA,
@@ -164,7 +170,8 @@ const actions = {
ARCRFT_SELECT,
PILOT_ARCRFT_SELECT_INIT,
AREA_COORDINATE_LIST_SAVE,
- AREA_DETAIL_LIST_SAVE
+ AREA_DETAIL_LIST_SAVE,
+ FLIGHT_PLAN_GROUP_SELECT
};
export type FlightAction = ActionType;
diff --git a/src/modules/basis/flight/models/basisFlightModel.ts b/src/modules/basis/flight/models/basisFlightModel.ts
index 6ba38bc..fb1c8e2 100644
--- a/src/modules/basis/flight/models/basisFlightModel.ts
+++ b/src/modules/basis/flight/models/basisFlightModel.ts
@@ -11,6 +11,13 @@ export interface FlightState {
arcrftSelect: FlightPlanArcrftData | undefined
areaCoordList: FlightPlanAreaData[] | undefined
areaList: FlightPlanAreaData[] | undefined
+ selectGroup: SelectGroupData | undefined
+}
+
+export interface SelectGroupData {
+ cstmrSno: number,
+ groupId: string,
+ groupNm: string,
}
export interface PublicAreaData {
@@ -136,6 +143,8 @@ export interface FlightPlanArcrftDataList extends Array {}
// rq
export interface FlightPlanListRqData {
+ groupId: string,
+ cstmrSno: number,
schFltStDt: string,
schFltEndDt: string,
aprvlYn: string
@@ -167,6 +176,11 @@ export interface AreaCoordinateCreateData {
export const initFlight = {
+ selectGroup: {
+ cstmrSno: 0,
+ groupId: '',
+ groupNm: ''
+ },
publicAreaList: undefined,
flightPlanArea: undefined,
list: undefined,
diff --git a/src/modules/basis/flight/reducers/basisFlightReducer.ts b/src/modules/basis/flight/reducers/basisFlightReducer.ts
index 0aafdd5..3a4d3b9 100644
--- a/src/modules/basis/flight/reducers/basisFlightReducer.ts
+++ b/src/modules/basis/flight/reducers/basisFlightReducer.ts
@@ -9,7 +9,7 @@ import { any } from 'prop-types';
export const flightReducer = createReducer(initFlight)
.handleAction(Actions.PUBLIC_AREA_LIST.success, (state, action) =>
produce(state, draft => {
- const {data} = action.payload;
+ const { data } = action.payload;
draft.publicAreaList = data;
})
)
@@ -69,24 +69,31 @@ export const flightReducer = createReducer(in
// 조종사, 기체 선택 초기화
.handleAction(Actions.PILOT_ARCRFT_SELECT_INIT, (state, action) =>
produce(state, draft => {
- draft.arcrftSelect = undefined;
- draft.pilotSelect = undefined;
- draft.areaList = undefined;
- draft.areaCoordList = undefined;
+ draft.arcrftSelect = undefined;
+ draft.pilotSelect = undefined;
+ draft.areaList = undefined;
+ draft.areaCoordList = undefined;
})
)
// 비행 구역 좌표 저장
.handleAction(Actions.AREA_COORDINATE_LIST_SAVE, (state, action) =>
produce(state, draft => {
const data = action.payload;
- draft.areaCoordList = data;
+ draft.areaCoordList = data;
+ })
+ )
+ // 비행 구역 상세 저장
+ .handleAction(Actions.AREA_DETAIL_LIST_SAVE, (state, action) =>
+ produce(state, draft => {
+ const data = action.payload;
+ draft.areaList = data;
+ draft.areaCoordList = data;
+ })
+ )
+ // 비행 계획서 그룹 선택
+ .handleAction(Actions.FLIGHT_PLAN_GROUP_SELECT, (state, action) =>
+ produce(state, draft => {
+ const data = action.payload;
+ draft.selectGroup = data;
})
)
- // 비행 구역 상세 저장
- .handleAction(Actions.AREA_DETAIL_LIST_SAVE, (state, action) =>
- produce(state, draft => {
- const data = action.payload;
- draft.areaList = data;
- draft.areaCoordList = data;
- })
- )