Browse Source

Merge branch 'master' of http://gitea.palntour.com/pav/pav-home

pull/2/head
sanguu 2 years ago
parent
commit
2bd1ca6877
  1. 8
      src/App.js
  2. 1735
      src/components/basis/flight/plan/FlightPlanForm.js
  3. 222
      src/components/basis/group/BaisGroupForm.js
  4. 43
      src/components/map/naver/dron/DronToast.js
  5. 149
      src/containers/analysis/history/AnalysisHistoryContainer.js
  6. 62
      src/containers/basis/group/BasisGroupDetailContainer.js
  7. 7
      src/modules/analysis/history/actions/analysisHistoryAction.ts
  8. 6
      src/modules/analysis/history/reducers/analysisHitoryReducer.ts
  9. 18
      src/modules/control/gp/sagas/controlGpSaga.ts
  10. 27
      src/views/control/alarm/ControlAlarmList.js

8
src/App.js

@ -1,6 +1,6 @@
// ** Router Import // ** Router Import
import Router from './router/Router' import Router from './router/Router';
if (process.env.NODE_ENV === 'production') console.log = function () {};
const App = props => <Router />;
const App = props => <Router /> export default App;
export default App

1735
src/components/basis/flight/plan/FlightPlanForm.js

File diff suppressed because it is too large Load Diff

222
src/components/basis/group/BaisGroupForm.js

@ -1,87 +1,113 @@
import React, { useState } from 'react'; import React, { useEffect, useState } from 'react';
import * as yup from 'yup';
import { useForm } from 'react-hook-form';
import classnames from 'classnames';
import { import {
Row, Row,
Col, Col,
Table,
Badge,
UncontrolledDropdown,
DropdownMenu,
DropdownItem,
DropdownToggle,
Card, Card,
CardHeader,
CardBody, CardBody,
CardTitle,
CardSubtitle,
ButtonGroup,
Button, Button,
Input, Input,
CustomInput,
FormGroup, FormGroup,
Modal, Label,
ModalHeader, FormFeedback,
ModalBody, Form
ModalFooter,
Label
} from 'reactstrap'; } from 'reactstrap';
import { Link, useHistory } from 'react-router-dom'; import { yupResolver } from '@hookform/resolvers/yup';
export const BasisGroupForm = props => { export const BasisGroupForm = props => {
useEffect(() => {
if (props.groupData?.groupId) {
setValue('groupNm', props.groupData?.groupNm);
}
}, [props.groupData]);
const Schema = yup.object().shape({
groupNm: yup
.string()
.required('그룹명을 입력해 주세요')
.matches(
/^[ㄱ-힣A-Za-z0-9]{2,12}$/,
'2 자 이상, 12 자 이하 영문자/숫자만 입력 가능합니다.'
)
});
const { register, getValues, setValue, errors, handleSubmit } = useForm({
defaultValues: {
groupNm: ''
},
resolver: yupResolver(Schema)
});
const onSumbit = async data => {
props.handlerSave(data);
};
return ( return (
<Row> <Form onSubmit={handleSubmit(onSumbit)}>
<Col> <Row>
<Card> <Col>
<CardBody className='pal-card-body'> <Card>
<div className='search-cont search-info'> <CardBody className='pal-card-body'>
<div className='cont-ti mb-1 d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'> <div className='search-cont search-info'>
<div> <div className='cont-ti mb-1 d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<h4>{props.title} 상세정보</h4> <div>
</div> <h4>{props.title} 상세정보</h4>
<div className='final'> </div>
{props.groupData.type === 'update' ? ( <div className='final'>
<span>최종 수정일자 : {props.groupData.updateDt}</span> {props.groupData.type === 'update' ? (
) : null} <span>최종 수정일자 : {props.groupData.updateDt}</span>
) : null}
</div>
</div> </div>
</div>
<dl> <dl>
<dt> <dt>
<div className='search-info-box'> <div className='search-info-box'>
<Row> <Row>
<Col className='list-input' md='4' sm='12'> <Col className='list-input' md='4' sm='12'>
<FormGroup> <FormGroup>
<Label for='groupcode'> <Label for='groupId'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
<Input <Input
type='text' type='text'
id='groupId' id='groupId'
name='groupId' name='groupId'
bsSize='sm' bsSize='sm'
readOnly={true} readOnly={true}
value={props.groupData.groupId || ''} value={props.groupData.groupId || ''}
placeholder='' placeholder=''
/> />
</FormGroup> </FormGroup>
</Col> </Col>
<Col className='list-input' md='4' sm='12'> <Col className='list-input' md='4' sm='12'>
<FormGroup> <FormGroup>
<Label for='groupname'> <Label for='groupNm'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
<Input <Input
type='text' type='text'
id='groupNm' id='groupNm'
name='groupNm' name='groupNm'
bsSize='sm' bsSize='sm'
onChange={props.handlerInput} innerRef={register}
value={props.groupData.groupNm || ''} // value={props.groupData.groupNm || ''}
placeholder='' placeholder=''
/> className={classnames({
</FormGroup> 'is-invalid': errors.groupNm
</Col> })}
/>
{errors && errors.groupNm && (
<FormFeedback>
{errors.groupNm.message}
</FormFeedback>
)}
</FormGroup>
</Col>
{/* <Col className='list-input' md='4' sm='12'> {/* <Col className='list-input' md='4' sm='12'>
<FormGroup> <FormGroup>
<Label for='groupauthority'>그룹 구분 코드</Label> <Label for='groupauthority'>그룹 구분 코드</Label>
<Input <Input
@ -95,39 +121,41 @@ export const BasisGroupForm = props => {
</Input> </Input>
</FormGroup> </FormGroup>
</Col> */} </Col> */}
</Row> </Row>
</div> </div>
</dt> </dt>
</dl> </dl>
<div className='d-flex align-items-center'> <div className='d-flex align-items-center'>
<Button.Ripple
className='mr-1'
color='primary'
size='sm'
onClick={props.handlerSave}
>
저장
</Button.Ripple>
{/* <Button.Ripple className='mr-1' color='secondary' size='sm'>
목록
</Button.Ripple> */}
{props.groupData.type != 'create' ? (
<Button.Ripple <Button.Ripple
color='danger' className='mr-1'
color='primary'
size='sm' size='sm'
onClick={() => props.handlerWidthrow()} // onClick={props.handlerSave}
type='submit'
> >
삭제 저장
</Button.Ripple> </Button.Ripple>
) : ( {/* <Button.Ripple className='mr-1' color='secondary' size='sm'>
<></> 목록
)} </Button.Ripple> */}
{props.groupData.type != 'create' ? (
<Button.Ripple
color='danger'
size='sm'
onClick={() => props.handlerWidthrow()}
>
삭제
</Button.Ripple>
) : (
<></>
)}
</div>
</div> </div>
</div> </CardBody>
</CardBody> </Card>
</Card> </Col>
</Col> </Row>
</Row> </Form>
); );
}; };

43
src/components/map/naver/dron/DronToast.js

@ -6,34 +6,41 @@ import Avatar from '../../../../@core/components/avatar';
import { Bell, Check, X, AlertTriangle, Info } from 'react-feather' import { Bell, Check, X, AlertTriangle, Info } from 'react-feather'
import { controlGpDtlAction, controlGpFlightPlanAction } from '../../../../modules/control/gp'; import { controlGpDtlAction, controlGpFlightPlanAction } from '../../../../modules/control/gp';
import { objectClickAction, objectUnClickAction } from '../../../../modules/control/map/actions/controlMapActions'; import { objectClickAction, objectUnClickAction } from '../../../../modules/control/map/actions/controlMapActions';
import 'react-toastify/dist/ReactToastify.css';
const DronToast = () => { const DronToast = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const { controlGpList } = useSelector(state => state.controlGpState); const { controlGpList } = useSelector(state => state.controlGpState);
const { controlGpArcrftWarnList } = useSelector(state => state.controlGpLogState);
const [toastId, setToastId] = useState(); const [toastId, setToastId] = useState();
useEffect(() => { useEffect(() => {
if (controlGpList) { if (controlGpArcrftWarnList) {
console.log("===================================")
console.log('tastID : ', toastId);
if (!toastId) { if (!toastId) {
controlGpList.forEach(gps => { controlGpArcrftWarnList.forEach(warn => {
// console.log("===================================")
// console.log("Warn ==> ", gps.controlWarnCd); // console.log("Warn ==> ", gps.controlWarnCd);
// console.log("Noti ==> ", gps.controlWarnNotyCd); // console.log("Noti ==> ", gps.controlWarnNotyCd);
if (gps.controlWarnCd && gps.controlWarnNotyCd) { if (warn.controlWarnCd) {
console.log('warn CD : ', warn.controlWarnCd);
const id = toast.info( const id = toast.info(
toastRender( toastRender(
`${gps.objectId} 비정상 상황 알림`, `${warn.idntfNum} 비정상 상황 알림`,
`경로 상에 비행 구역을 이탈했습니다.` `경로 상에 비행 구역을 이탈했습니다.`
), ),
{ {
autoClose: false, autoClose: false,
hideProgressBar: true, hideProgressBar: true,
position: toast.POSITION.BOTTOM_RIGHT, position: toast.POSITION.BOTTOM_RIGHT,
onClick: props => { onClick: () => {
setToastId(null);
handleNotiClick(warn.controlId, warn.idntfNum);
},
onClose: () => {
setToastId(null); setToastId(null);
handleNotiClick(gps.controlId, gps.objectId);
} }
} }
) )
@ -43,7 +50,7 @@ const DronToast = () => {
}) })
} }
} }
}, [controlGpList]); }, [controlGpArcrftWarnList]);
const handleNotiClick = (controlId, idntfNum) => { const handleNotiClick = (controlId, idntfNum) => {
dispatch(objectClickAction(controlId)); dispatch(objectClickAction(controlId));
@ -73,23 +80,7 @@ const DronToast = () => {
) )
} }
return ( return (
// <Fragment>
// <div className='toastify-header'>
// <div className='title-wrapper'>
// <Avatar size='sm' color='info' icon={<Info size={12} />} />
// <h6 className='text-info ml-50 mb-0'>
// {/* {title} */}
// </h6>
// </div>
// </div>
// <div className='toastify-body'>
// <span>
// {/* {message} */}
// </span>
// </div>
// </Fragment>
null null
) )

149
src/containers/analysis/history/AnalysisHistoryContainer.js

@ -8,12 +8,19 @@ import { CustomMainLayout } from '../../../components/layout/CustomMainLayout';
import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction'; import * as Actions from '../../../modules/analysis/history/actions/analysisHistoryAction';
import FlightPlanGroupGrid from '../../../components/basis/flight/plan/FlightPlanGroupGrid'; import FlightPlanGroupGrid from '../../../components/basis/flight/plan/FlightPlanGroupGrid';
import { JOIN_LIST } from '../../../modules/basis/group/actions/basisGroupAction'; import { JOIN_LIST } from '../../../modules/basis/group/actions/basisGroupAction';
import { Col, Row, Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import {
Col,
Row,
Button,
Modal,
ModalHeader,
ModalBody,
ModalFooter
} from 'reactstrap';
import * as FlightAction from '../../../modules/basis/flight/actions/basisFlightAction'; import * as FlightAction from '../../../modules/basis/flight/actions/basisFlightAction';
import { useHistory } from 'react-router-dom'; import { useHistory } from 'react-router-dom';
import { MessageErrorModal } from '../../../components/message/MessageErrorModal'; import { MessageErrorModal } from '../../../components/message/MessageErrorModal';
export const AnalysisHistoryContainer = props => { export const AnalysisHistoryContainer = props => {
const { data, count, searchParams } = useSelector( const { data, count, searchParams } = useSelector(
state => state.analysisHistoryState state => state.analysisHistoryState
@ -23,12 +30,15 @@ export const AnalysisHistoryContainer = props => {
endDate: moment().subtract(0, 'day').format('YYYY-MM-DD'), endDate: moment().subtract(0, 'day').format('YYYY-MM-DD'),
// stDate: moment().set({ 'date': 1, 'h': 0, 'm': 0, 's': 0 }).format('YYYY-MM-DD HH:mm:ss'), // stDate: moment().set({ 'date': 1, 'h': 0, 'm': 0, 's': 0 }).format('YYYY-MM-DD HH:mm:ss'),
// endDate: moment().set({ 'h': 23, 'm': 59, 's': 59 }).format('YYYY-MM-DD HH:mm:ss'), // endDate: moment().set({ 'h': 23, 'm': 59, 's': 59 }).format('YYYY-MM-DD HH:mm:ss'),
groupId: '', groupId: ''
}; };
const [searchData, setSearchData] = useState(initSearchData); const [searchData, setSearchData] = useState(initSearchData);
const { list: aprvList, aprvProc, selectGroup } = useSelector(state => state.flightState); const {
list: aprvList,
aprvProc,
selectGroup
} = useSelector(state => state.flightState);
const { joinList, joinListCount } = useSelector(state => state.groupState); const { joinList, joinListCount } = useSelector(state => state.groupState);
const { user } = useSelector(state => state.authState, shallowEqual); const { user } = useSelector(state => state.authState, shallowEqual);
@ -42,6 +52,42 @@ export const AnalysisHistoryContainer = props => {
color: '' color: ''
}); });
useEffect(() => {
if (aprvProc && aprvProc.result > 0) {
handleSearch(searchData);
}
}, [aprvProc]);
useEffect(() => {
if (user?.cstmrSno) {
dispatch(
JOIN_LIST.request({
cstmrSno: user?.cstmrSno
})
);
}
}, [user]);
useEffect(() => {
setParams({
...params,
stDate: '',
endDate: '',
search1: '',
groupId: searchData.groupId
});
}, [searchData.groupId]);
useEffect(() => {
handlerGroupCancel();
}, []);
const onKeyPress = e => {
if (e.key == 'Enter') {
handlerSearch();
}
};
const handleGroupSelect = ({ groupId }) => { const handleGroupSelect = ({ groupId }) => {
// 권한 상관 없이 모두 조회 가능 // 권한 상관 없이 모두 조회 가능
const param = searchData; const param = searchData;
@ -54,47 +100,33 @@ export const AnalysisHistoryContainer = props => {
sessionStorage.setItem('groupId', groupId); sessionStorage.setItem('groupId', groupId);
sessionStorage.setItem('cstmrSno', user.cstmrSno); sessionStorage.setItem('cstmrSno', user.cstmrSno);
setIsClick(0) setIsClick(0);
setSearchData(prevState => { setSearchData(prevState => {
return { return {
...prevState, ...prevState,
// cstmrSno: user.cstmrSno, // cstmrSno: user.cstmrSno,
groupId: groupId groupId: groupId
} };
}); });
//dispatch(Actions.list.request({ searchParams: param })); dispatch(Actions.LIST_INITAL());
} };
const handlerGroupCancel = () => { const handlerGroupCancel = () => {
dispatch(FlightAction.FLIGHT_PLAN_GROUP_SELECT({ cstmrSno: 0, groupId: '', groupNm: '', endDate: '', stDate: '' })); dispatch(
setIsClick(0) FlightAction.FLIGHT_PLAN_GROUP_SELECT({
cstmrSno: 0,
} groupId: '',
groupNm: '',
endDate: '',
stDate: ''
useEffect(() => { })
if (aprvProc && aprvProc.result > 0) { );
handleSearch(searchData); setIsClick(0);
} };
}, [aprvProc])
useEffect(() => {
if (user?.cstmrSno) {
dispatch(
JOIN_LIST.request({
cstmrSno: user?.cstmrSno
})
);
}
}, [user])
const dispatch = useDispatch(); const dispatch = useDispatch();
const titleName = '비행이력 현황'; const titleName = '비행이력 현황';
const excelHeaders = [ const excelHeaders = [
{ label: '일자', key: 'cntrlStDt' }, { label: '일자', key: 'cntrlStDt' },
{ label: '식별번호', key: 'idntfNum' }, { label: '식별번호', key: 'idntfNum' },
@ -207,32 +239,8 @@ export const AnalysisHistoryContainer = props => {
endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'),
search1: '', search1: '',
groupId: searchData.groupId groupId: searchData.groupId
}); });
useEffect(() => {
setParams({
...params,
stDate: '',
endDate: '',
search1: '',
groupId: searchData.groupId
});
}, [searchData.groupId]);
useEffect(() => {
if (data) return;
}, [searchParams]);
const onKeyPress = e => {
if (e.key == 'Enter') {
handlerSearch();
}
};
// useEffect(() => { }, [params]);
const handlerSearch = () => { const handlerSearch = () => {
if (!params.stDate || !params.endDate) { if (!params.stDate || !params.endDate) {
setModal({ setModal({
@ -240,18 +248,15 @@ export const AnalysisHistoryContainer = props => {
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '올바른 일자를 입력해 주세요.', desc: '올바른 일자를 입력해 주세요.',
color: 'modal-danger' color: 'modal-danger'
}) });
} } else if (!params.groupId) {
else if (!params.groupId) {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '필수값 입력 오류', title: '필수값 입력 오류',
desc: '그룹 선택 해주세요.', desc: '그룹 선택 해주세요.',
color: 'modal-danger' color: 'modal-danger'
}) });
} } else dispatch(Actions.list.request({ searchParams: params }));
else
dispatch(Actions.list.request({ searchParams: params }));
}; };
const handlerInput = (type, val) => { const handlerInput = (type, val) => {
@ -263,9 +268,9 @@ export const AnalysisHistoryContainer = props => {
setParams({ setParams({
...params, ...params,
stDate: moment(val[0]).format('YYYY-MM-DD'), stDate: moment(val[0]).format('YYYY-MM-DD'),
endDate: moment(val[1]).format('YYYY-MM-DD'), endDate: moment(val[1]).format('YYYY-MM-DD')
}); });
setIsClick(-1) setIsClick(-1);
} }
} }
}; };
@ -274,7 +279,6 @@ export const AnalysisHistoryContainer = props => {
setIsClick(val); setIsClick(val);
}; };
return ( return (
<CustomMainLayout title={titleName}> <CustomMainLayout title={titleName}>
<div className='pal-card-box'> <div className='pal-card-box'>
<Row> <Row>
@ -302,13 +306,11 @@ export const AnalysisHistoryContainer = props => {
searchData={searchData} searchData={searchData}
/> />
</> </>
) : ( ) : (
<div className='no-dataTable'> <div className='no-dataTable'>
나의 그룹 목록에서 상세보기를 클릭하세요. 나의 그룹 목록에서 상세보기를 클릭하세요.
</div> </div>
)} )}
</Col> </Col>
<Col sm='12'> <Col sm='12'>
{selectGroup.cstmrSno !== 0 ? ( {selectGroup.cstmrSno !== 0 ? (
@ -320,15 +322,11 @@ export const AnalysisHistoryContainer = props => {
excelHeaders={excelHeaders} excelHeaders={excelHeaders}
count={count} count={count}
pagination={true} pagination={true}
/> />
</> </>
) : ( ) : (
<div className='no-dataTable'> <div className='no-dataTable'></div>
</div>
)} )}
</Col> </Col>
</Row> </Row>
</div> </div>
@ -357,6 +355,5 @@ export const AnalysisHistoryContainer = props => {
</div> </div>
<MessageErrorModal /> <MessageErrorModal />
</CustomMainLayout> </CustomMainLayout>
); );
}; };

62
src/containers/basis/group/BasisGroupDetailContainer.js

@ -61,12 +61,32 @@ export const BasisGroupDetailContainer = () => {
dispatch(Actions.GROUP_DETAIL.request(id)); dispatch(Actions.GROUP_DETAIL.request(id));
}; };
const handlerCreate = () => { const handlerCreate = data => {
dispatch(Actions.GROUP_CREATE.request(groupData)); const saveData = {
createDt: '',
cstmrSno: groupData.cstmrSno,
groupId: groupData.groupId,
groupNm: data.groupNm,
groupTypeCd: groupData.groupTypeCd,
type: groupData.type,
updateDt: ''
};
// dispatch(Actions.GROUP_CREATE.request(groupData));
dispatch(Actions.GROUP_CREATE.request(saveData));
}; };
const handlerUpdate = () => { const handlerUpdate = data => {
dispatch(Actions.GROUP_UPDATE.request(groupData)); const saveData = {
createDt: groupData.createDt,
cstmrSno: groupData.cstmrSno,
groupId: groupData.groupId,
groupNm: data.groupNm,
groupTypeCd: groupData.groupTypeCd,
type: groupData.type,
updateDt: groupData.updateDt
};
// dispatch(Actions.GROUP_UPDATE.request(groupData));
dispatch(Actions.GROUP_UPDATE.request(saveData));
}; };
const handlerDelete = () => { const handlerDelete = () => {
dispatch(Actions.GROUP_DELETE.request(groupData.groupId)); dispatch(Actions.GROUP_DELETE.request(groupData.groupId));
@ -81,29 +101,33 @@ export const BasisGroupDetailContainer = () => {
return; return;
}; };
const handlerInput = e => { const handlerSave = data => {
const { name, value } = e.target; groupData.type === 'create' ? handlerCreate(data) : handlerUpdate(data);
if (name == 'groupNm') {
const regex = /^[ㄱ-힣A-Za-z0-9]{0,11}$/;
if (regex.test(value)) {
setGroupData({
...groupData,
[name]: value
});
}
}
}; };
// const handlerInput = e => {
// const { name, innerRef } = e.target;
// if (name == 'groupNm') {
// // const regex = /^[ㄱ-힣A-Za-z0-9]{0,11}$/;
// // if (regex.test(innerRef)) {
// console.log(innerRef);
// setGroupData({
// ...groupData,
// [name]: innerRef
// });
// // }
// }
// };
return ( return (
<CustomDetailLayout title={titleName}> <CustomDetailLayout title={titleName}>
<BasisGroupForm <BasisGroupForm
groupDetail={groupDetail} groupDetail={groupDetail}
groupData={groupData} groupData={groupData}
handlerSave={ setGroupData={setGroupData}
groupData.type === 'create' ? handlerCreate : handlerUpdate handlerSave={handlerSave}
}
handlerDelete={handlerDelete} handlerDelete={handlerDelete}
handlerInput={handlerInput} // handlerInput={handlerInput}
handlerWidthrow={handlerWidthrow} handlerWidthrow={handlerWidthrow}
/> />

7
src/modules/analysis/history/actions/analysisHistoryAction.ts

@ -20,6 +20,8 @@ const DETAIL_FAILURE = 'anls/hstry/DETAIL_FAILURE';
const DISPATCH_SEARCH = 'amls/hstry/DISPATCH_SEARCH'; const DISPATCH_SEARCH = 'amls/hstry/DISPATCH_SEARCH';
const LIST_INIT = 'anls/hstry/LIST_INIT';
export const dispatchSearch = export const dispatchSearch =
createAction(DISPATCH_SEARCH)<{ searchParams: string }>(); createAction(DISPATCH_SEARCH)<{ searchParams: string }>();
@ -41,11 +43,14 @@ export const detail = createAsyncAction(
DETAIL_FAILURE DETAIL_FAILURE
)<string, { detail: AnalysisHistoryData }, AxiosError>(); )<string, { detail: AnalysisHistoryData }, AxiosError>();
export const LIST_INITAL = createAction(LIST_INIT)();
const actions = { const actions = {
list, list,
detail, detail,
log, log,
dispatchSearch dispatchSearch,
LIST_INITAL
}; };
export type AnalysisHistoryAction = ActionType<typeof actions>; export type AnalysisHistoryAction = ActionType<typeof actions>;

6
src/modules/analysis/history/reducers/analysisHitoryReducer.ts

@ -44,4 +44,10 @@ export const analysisHistoryReducer = createReducer<
draft.log = log; draft.log = log;
}) })
)
.handleAction(Actions.LIST_INITAL, (state, action) =>
produce(state, draft => {
draft.data = initResponseAnalysisHistoryData.data;
draft.count = initResponseAnalysisHistoryData.count;
})
); );

18
src/modules/control/gp/sagas/controlGpSaga.ts

@ -43,14 +43,28 @@ function* getControlGpSaga(
} }
// console.log('websocket data :: ', data); // console.log('websocket data :: ', data);
yield put( yield put(
Actions.controlGpAction.success({ Actions.controlGpAction.success({
//*
controlGpList: data controlGpList: data
}) })
); );
if (data.length > 0) {
const controlIds: any = [];
data.forEach((gps) => {
controlIds.push(gps.controlId);
});
const param = controlIds.join(',');
const rs = yield call(controlGpApi.getArcrftWarnList, param);
yield put(Actions.controlGpArcrftWarnAction.success(rs));
}
if (objectId && isClickObject) { if (objectId && isClickObject) {
let detailData; let detailData;

27
src/views/control/alarm/ControlAlarmList.js

@ -55,32 +55,7 @@ const ControlAlarmList = props => {
} }
}, [controlGpArcrftWarnList]); }, [controlGpArcrftWarnList]);
useEffect(() => {
if(controlGpList) {
const controlIds = [];
if(controlGpList.length > 0) {
controlGpList.forEach(gps => {
controlIds.push(gps.controlId);
});
const param = controlIds.join(',');
dispatch(controlGpArcrftWarnAction.request(param));
} else {
setTotal(total => {
return {
totalDroneCnt: 0,
totalWarnCnt: 0,
warnList: []
}
})
}
}
}, [controlGpList]);
return ( return (
<div className='left-layer'> <div className='left-layer'>
<div className='layer-content'> <div className='layer-content'>

Loading…
Cancel
Save