김지은 11 months ago
parent
commit
7e187409d4
  1. 6
      src/components/account/register/AccountRegisterTerm.js
  2. 90
      src/components/map/mapbox/draw/LaancDrawControl.js
  3. 22
      src/containers/laanc/LaancPlanContainer.js
  4. 8
      src/modules/account/register/sagas/accountSaga.ts
  5. 1
      src/modules/models/ComnModel.ts
  6. 16
      src/views/laanc/FlightArea.js
  7. 4
      src/views/laanc/LaancStep1.js

6
src/components/account/register/AccountRegisterTerm.js

@ -33,7 +33,11 @@ export const AccountRegisterTerm = ({ stepper, type, movePage }) => {
useEffect(() => { useEffect(() => {
dispatch( dispatch(
Actions.termsList.request({ langDivCd: 'KOR', siteCd: 'SANDBOX' }) Actions.termsList.request({
langDivCd: 'KOR',
siteCd: 'SANDBOX',
termsCtgryCd: 'SITE_JOIN'
})
); );
}, []); }, []);

90
src/components/map/mapbox/draw/LaancDrawControl.js

@ -12,6 +12,7 @@ export const LaancDrawControl = props => {
const drawObj = props.drawObj; const drawObj = props.drawObj;
const mapObject = props.mapObject; const mapObject = props.mapObject;
const [drawObjId, setDrawObjId] = useState();
const [bufferId, setBufferId] = useState(); const [bufferId, setBufferId] = useState();
const [geojson, setGeoJson] = useState(); const [geojson, setGeoJson] = useState();
@ -27,7 +28,7 @@ export const LaancDrawControl = props => {
useEffect(() => { useEffect(() => {
if (mapObject) { if (mapObject) {
mapObject.on('draw.create', handlerCreateObj); mapObject.on('draw.create', handlerSetId);
mapObject.on('draw.update', handlerFormatAreaInfo); mapObject.on('draw.update', handlerFormatAreaInfo);
mapObject.on('click', handlerOnClick); mapObject.on('click', handlerOnClick);
@ -68,11 +69,12 @@ export const LaancDrawControl = props => {
}; };
// 도형 첫 생성하면 properties.id에 현재 drawType 넣어줌 // 도형 첫 생성하면 properties.id에 현재 drawType 넣어줌
const handlerCreateObj = e => { const handlerSetId = e => {
const id = e.features[0].id; const id = e.features[0].id;
const mode = handlerReturnMode(drawObj.getMode()); const mode = handlerReturnMode(drawObj.getMode());
if (mode) { if (mode) {
drawObj.setFeatureProperty(id, 'id', mode); drawObj.setFeatureProperty(id, 'id', mode);
setDrawObjId(id);
handlerFormatAreaInfo(e); handlerFormatAreaInfo(e);
} }
}; };
@ -137,8 +139,6 @@ export const LaancDrawControl = props => {
const handlerPastDraw = () => { const handlerPastDraw = () => {
if (props.areaCoordList) { if (props.areaCoordList) {
console.log(props.areaCoordList[0], '>>>>areaCoordList---');
const areas = props.areaCoordList[0]; const areas = props.areaCoordList[0];
const paths = []; const paths = [];
areas.coordList.forEach(coord => paths.push([coord.lon, coord.lat])); areas.coordList.forEach(coord => paths.push([coord.lon, coord.lat]));
@ -147,8 +147,24 @@ export const LaancDrawControl = props => {
console.log('pastDraw'); console.log('pastDraw');
const drawGeoJson = drawObj.getAll(); const drawGeoJson = drawObj.getAll();
if (areas.areaType === 'CIRCLE') { if (areas.areaType === 'CIRCLE') {
console.log(paths, '>>>');
// handlerCreateDrawObj(
// drawObjId,
// setDrawObjId,
// 'Polygon',
// [paths],
// 'CIRCLE'
// );
} else { } else {
if (areas.areaType === 'LINE') { if (areas.areaType === 'LINE') {
handlerCreateDrawObj(
drawObjId,
setDrawObjId,
'LineString',
paths,
'LINE'
);
// 버퍼 생성 // 버퍼 생성
if (areas.bufferCoordList) { if (areas.bufferCoordList) {
const bufferPaths = []; const bufferPaths = [];
@ -157,17 +173,22 @@ export const LaancDrawControl = props => {
bufferPaths.push([bfCoord.lon, bfCoord.lat]) bufferPaths.push([bfCoord.lon, bfCoord.lat])
); );
const buffer = drawObj.get(bufferId); handlerCreateDrawObj(
if (buffer) drawObj.delete(bufferId); bufferId,
setBufferId,
const newBuffer = { 'LineString',
type: 'LineString', bufferPaths,
coordinates: bufferPaths 'BUFFER'
}; );
const newBufferId = drawObj.add(newBuffer);
setBufferId(newBufferId);
} }
} else if (areas.areaType === 'POLYGON') { } else if (areas.areaType === 'POLYGON') {
handlerCreateDrawObj(
drawObjId,
setDrawObjId,
'Polygon',
[paths],
'POLYGON'
);
} }
} }
// 현재 그려진 도형 저장 // 현재 그려진 도형 저장
@ -180,6 +201,26 @@ export const LaancDrawControl = props => {
} }
}; };
// 기존에 그려진 도형 지우고 새 도형 생성
const handlerCreateDrawObj = (id, setter, type, coord, propertyId) => {
const obj = drawObj.get(id);
if (obj) drawObj.delete(id);
const newObj = {
type: type,
coordinates: coord
};
const newObjId = drawObj.add(newObj);
drawObj.setFeatureProperty(newObjId[0], 'id', propertyId);
setter(newObjId[0]);
if (propertyId !== 'BUFFER') {
drawObj.changeMode('direct_select', {
featureId: newObjId[0]
});
}
};
const handlerRemoveMarker = () => { const handlerRemoveMarker = () => {
const ele = document.getElementsByClassName('mapboxgl-popup'); const ele = document.getElementsByClassName('mapboxgl-popup');
const eleArr = Array.from(ele); const eleArr = Array.from(ele);
@ -198,20 +239,27 @@ export const LaancDrawControl = props => {
}; };
const handlerCreateAllMarker = coords => { const handlerCreateAllMarker = coords => {
for (let i = 0; i < coords.length; i++) { const areas = props.areaCoordList[0];
if (i === 0) {
handlerCreateOneMarker([0, -10], coords[i], 'Start'); if (areas.areaType !== 'CIRCLE') {
} else { for (let i = 0; i < coords.length; i++) {
const lngLat = handlerGetMidPoint(coords[i - 1], coords[i]); if (i === 0) {
const text = CalculateDistance(coords[i - 1], coords[i]); handlerCreateOneMarker([0, -10], coords[i], 'Start');
handlerCreateOneMarker([0, 0], lngLat, text); } else {
const lngLat = handlerGetMidPoint(coords[i - 1], coords[i]);
const text = CalculateDistance(coords[i - 1], coords[i]);
handlerCreateOneMarker([0, 0], lngLat, text);
}
} }
} else {
handlerCreateOneMarker([0, -10], coords[0], areas.bufferZone);
} }
}; };
const drawInit = () => { const drawInit = () => {
drawObj.deleteAll(); drawObj.deleteAll();
handlerRemoveMarker(); handlerRemoveMarker();
setDrawObjId();
props.handlerInitCoordinates(); props.handlerInitCoordinates();
@ -229,7 +277,7 @@ export const LaancDrawControl = props => {
} else if (mode === 'POLYGON') { } else if (mode === 'POLYGON') {
drawObj.changeMode('draw_polygon'); drawObj.changeMode('draw_polygon');
} else if (mode === 'CIRCLE') { } else if (mode === 'CIRCLE') {
drawObj.changeMode('draw_circle'); drawObj.changeMode('draw_circle', { initialRadiusInKm: 100 / 1000 });
} }
}; };

22
src/containers/laanc/LaancPlanContainer.js

@ -23,6 +23,7 @@ export default function LaancPlanContainer({
const { areaCoordList } = useSelector(state => state.flightState); const { areaCoordList } = useSelector(state => state.flightState);
const { user } = useSelector(state => state.authState); const { user } = useSelector(state => state.authState);
const { laancApply } = useSelector(state => state.laancState);
const [step, setStep] = useState(1); const [step, setStep] = useState(1);
const [detailData, setDetailData] = useState(initFlightBas.initDetail); const [detailData, setDetailData] = useState(initFlightBas.initDetail);
@ -35,12 +36,6 @@ export default function LaancPlanContainer({
desc: '' desc: ''
}); });
useEffect(() => {
if (Object.getOwnPropertyNames(finalDetailData).length != 0) {
dispatch(LaancAction.LAANC_FLIGHT_Approval.request(finalDetailData));
setStep(2);
}
}, [finalDetailData]);
useEffect(() => { useEffect(() => {
setDetailData({ setDetailData({
...detailData, ...detailData,
@ -52,6 +47,18 @@ export default function LaancPlanContainer({
}; };
}, []); }, []);
//비행 방식 직접 입력칸 작성 시 api 호출 부분
useEffect(() => {
if (Object.getOwnPropertyNames(finalDetailData).length != 0) {
dispatch(LaancAction.LAANC_FLIGHT_Approval.request(finalDetailData));
}
}, [finalDetailData]);
// laanc 승인 api 200 시 step 이동
useEffect(() => {
if (laancApply) setStep(2);
}, [laancApply]);
// step 핸들러 // step 핸들러
const handlerStep = step => { const handlerStep = step => {
setStep(step); setStep(step);
@ -340,7 +347,7 @@ export default function LaancPlanContainer({
return false; return false;
} else { } else {
//api 호출 부분 // 비행 방식 직접 입력칸 활성화 후 작성 시 조건문
if (detailData.areaList[0].selffltMethod) { if (detailData.areaList[0].selffltMethod) {
// const concatData = {}; // const concatData = {};
// concatData ={ // concatData ={
@ -358,7 +365,6 @@ export default function LaancPlanContainer({
}); });
} else { } else {
dispatch(LaancAction.LAANC_FLIGHT_Approval.request(detailData)); dispatch(LaancAction.LAANC_FLIGHT_Approval.request(detailData));
setStep(2);
} }
} }
}; };

8
src/modules/account/register/sagas/accountSaga.ts

@ -32,9 +32,13 @@ function* register(action: ActionType<typeof Actions.register.request>) {
function* temrsList(action: ActionType<typeof Actions.termsList.request>) { function* temrsList(action: ActionType<typeof Actions.termsList.request>) {
try { try {
const { langDivCd, siteCd } = action.payload; const { langDivCd, siteCd, termsCtgryCd } = action.payload;
const res = yield call(Apis.accountApi.temrsList, { langDivCd, siteCd }); const res = yield call(Apis.accountApi.temrsList, {
langDivCd,
siteCd,
termsCtgryCd
});
const resData: Models.AccountTermsData[] = res.data; const resData: Models.AccountTermsData[] = res.data;

1
src/modules/models/ComnModel.ts

@ -8,6 +8,7 @@ export interface SearchModel {
export interface DefaultSeachModel { export interface DefaultSeachModel {
siteCd: string; siteCd: string;
langDivCd: string; langDivCd: string;
termsCtgryCd: string;
} }
export interface ResponseModel { export interface ResponseModel {

16
src/views/laanc/FlightArea.js

@ -560,6 +560,22 @@ export default function FlightArea({
> >
초기화 초기화
</Button> </Button>
<Button
color='primary'
onClick={() => {
const drawObjCnt = drawObj
.getAll()
.features.filter(
obj => obj.properties.id !== 'BUFFER'
).length;
if (drawObjCnt > 2) {
alert('구역은 2개까지만 설정 가능합니다.');
}
}}
>
추가
</Button>
{wheather[0]?.coordList[0].lat != 0 ? ( {wheather[0]?.coordList[0].lat != 0 ? (
<Button color='primary' onClick={handlerWeather}> <Button color='primary' onClick={handlerWeather}>
날씨 정보 날씨 정보

4
src/views/laanc/LaancStep1.js

@ -173,7 +173,7 @@ export default function LaancStep1({
value={data.schFltStDt} value={data.schFltStDt}
options={{ options={{
minDate: moment().format('YYYY-MM-DD'), minDate: moment().format('YYYY-MM-DD'),
maxDate: moment().add(1, 'year').format('YYYY-MM-DD') maxDate: moment().add(90, 'day').format('YYYY-MM-DD')
}} }}
onChange={date => { onChange={date => {
const value = const value =
@ -202,7 +202,7 @@ export default function LaancStep1({
value={data.schFltEndDt} value={data.schFltEndDt}
options={{ options={{
minDate: moment().format('YYYY-MM-DD'), minDate: moment().format('YYYY-MM-DD'),
maxDate: moment().add(1, 'year').format('YYYY-MM-DD') maxDate: moment().add(6, 'month').format('YYYY-MM-DD')
}} }}
onChange={date => { onChange={date => {
const value = const value =

Loading…
Cancel
Save