sanguu(박상현) 2 years ago
parent
commit
702600c2fe
  1. 59
      src/components/account/register/AccountRegisterForm.js
  2. 189
      src/components/basis/flight/plan/FlightPlanAreaDetailForm.js
  3. 28
      src/components/basis/group/BaisGroupForm.js
  4. 6
      src/components/map/naver/dron/DronMarker.js
  5. 24
      src/containers/basis/group/BasisGroupApprovalContainer.js
  6. 2
      src/containers/basis/group/BasisGroupDetailContainer.js
  7. 1
      src/modules/control/gp/models/controlGpModel.ts
  8. 4
      src/modules/control/gp/sagas/controlGpSaga.ts

59
src/components/account/register/AccountRegisterForm.js

@ -203,7 +203,9 @@ export const AccountRegisterForm = ({
email: '', email: '',
hpno: '', hpno: '',
clncd: '+82', clncd: '+82',
crtfyNo: '' crtfyNo: '',
company: '팔네트웍스',
trmnlId: 'SANDBOX-001'
}, },
resolver: yupResolver(SignupSchema) resolver: yupResolver(SignupSchema)
}); });
@ -289,9 +291,15 @@ export const AccountRegisterForm = ({
let hpno = ''; let hpno = '';
let brthdyDate = ''; let brthdyDate = '';
let trmnlId = '';
const onChangeHandler = e => { const onChangeHandler = e => {
const { name, value } = e.target; const { name, value } = e.target;
if (name === 'company') {
trmnlId = value;
setValue('trmnlId', trmnlId);
}
if (name === 'memberName') { if (name === 'memberName') {
setMemberName(value); setMemberName(value);
} }
@ -578,7 +586,7 @@ export const AccountRegisterForm = ({
</Button.Ripple> */} </Button.Ripple> */}
</div> </div>
</FormGroup> </FormGroup>
<div className='form-group form-password-toggle col-md-6'> <FormGroup tag={Col} md='6'>
<Label className='form-label' for='userPswd'> <Label className='form-label' for='userPswd'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
@ -597,8 +605,51 @@ export const AccountRegisterForm = ({
{errors && errors.userPswd && ( {errors && errors.userPswd && (
<FormFeedback>{errors.userPswd.message}</FormFeedback> <FormFeedback>{errors.userPswd.message}</FormFeedback>
)} )}
</FormGroup>
<FormGroup tag={Col} md='6'>
<Label className='form-label' for='company'>
<span className='necessary'>*</span>
</Label>
<div className='input-btn'>
<Col md='5' xs='12'>
<Input
type='select'
name='company'
id='company'
onChange={onChangeHandler}
// innerRef={register}
className={classnames({
'is-invalid': errors.company
})}
>
<option value={'SANDBOX-001'}>팔네트웍스</option>
<option value={'ANTOS-001'}>ANTOS</option>
<option value={'JAR-001'}>진에어</option>
</Input>
{errors && errors.company && (
<FormFeedback>{errors.company.message}</FormFeedback>
)}
</Col>
<Col md='7' xs='12'>
<Input
name='trmnlId'
id='trmnlId'
readOnly={true}
onChange={onChangeHandler}
innerRef={register}
className={classnames({
'is-invalid': errors.trmnlId
})}
/>
{errors && errors.trmnlId && (
<FormFeedback>{errors.trmnlId.message}</FormFeedback>
)}
</Col>
</div> </div>
<div className='form-group form-password-toggle col-md-6'> </FormGroup>
<FormGroup tag={Col} md='6'>
<Label className='form-label' for='confirmUserPaswd'> <Label className='form-label' for='confirmUserPaswd'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
@ -617,7 +668,7 @@ export const AccountRegisterForm = ({
{errors && errors.confirmUserPaswd && ( {errors && errors.confirmUserPaswd && (
<FormFeedback>{errors.confirmUserPaswd.message}</FormFeedback> <FormFeedback>{errors.confirmUserPaswd.message}</FormFeedback>
)} )}
</div> </FormGroup>
</Row> </Row>
<div className='d-flex justify-content-between'> <div className='d-flex justify-content-between'>
<Button.Ripple <Button.Ripple

189
src/components/basis/flight/plan/FlightPlanAreaDetailForm.js

@ -4,11 +4,25 @@ import {
CardBody, CardBody,
Col, Col,
FormGroup, FormGroup,
Input,
Label, Label,
Row, Row,
Button Button,
InputGroupAddon,
InputGroup,
Input,
Table
} from 'reactstrap'; } from 'reactstrap';
import {
Search,
Compass,
Sun,
CloudLightning,
Cloud,
CloudRain,
CloudDrizzle,
CloudSnow,
Navigation2
} from 'react-feather';
const FlightPlanAreaDetailForm = ({ const FlightPlanAreaDetailForm = ({
handleSave, handleSave,
@ -247,6 +261,177 @@ const FlightPlanAreaDetailForm = ({
닫기 닫기
</Button.Ripple> </Button.Ripple>
</div> </div>
<div className='layer-content'>
<div className='layer-weather-box'>
<div className='layer-weather-info'>
<div className='layer-weather-table'>
<div className='layer-weather-address'>
검색하신 지역의 날씨 정보입니다.
<span>
<Compass size={20} /> 인천광역시 부평구 안남로 272
</span>
</div>
{/* 탭메뉴or탭내용 활성화 active */}
<div className='tab-menu'>
<ul>
<li className=''>오늘</li>
<li className='active'>주간</li>
</ul>
</div>
<div className='tab-content'>
<Table responsive>
<thead>
<tr>
<th>시각</th>
<th>날씨</th>
<th>기온</th>
<th>풍향</th>
<th>풍속</th>
</tr>
</thead>
<tbody>
<tr>
<td>10</td>
<td>
<Sun />
</td>
<td>27</td>
<td>
<Navigation2 className='rotate-45' />
</td>
<td>2m/s</td>
</tr>
<tr>
<td>12</td>
<td>
<CloudLightning />
</td>
<td>30</td>
<td>
<Navigation2 className='rotate-75' />
</td>
<td>3m/s</td>
</tr>
<tr>
<td>14</td>
<td>
<Cloud />
</td>
<td>28</td>
<td>
<Navigation2 className='rotate-90' />
</td>
<td>4m/s</td>
</tr>
<tr>
<td>16</td>
<td>
<CloudRain />
</td>
<td>27</td>
<td>
<Navigation2 className='rotate-135' />
</td>
<td>7m/s</td>
</tr>
<tr>
<td>18</td>
<td>
<CloudSnow />
</td>
<td>25</td>
<td>
<Navigation2 className='rotate-180' />
</td>
<td>2m/s</td>
</tr>
<tr>
<td>20</td>
<td>
<CloudDrizzle />
</td>
<td>26</td>
<td>
<Navigation2 className='rotate-225' />
</td>
<td>2m/s</td>
</tr>
</tbody>
</Table>
</div>
<div className='tab-content active'>
<Table responsive>
<thead>
<tr>
<th>날짜</th>
<th>날씨</th>
<th>기온</th>
</tr>
</thead>
<tbody>
<tr>
<td>06.19.() 오전</td>
<td>
<Sun />
</td>
<td>최저 27</td>
</tr>
<tr>
<td>06.19.() 오후</td>
<td>
<CloudLightning />
</td>
<td>30</td>
</tr>
<tr>
<td>06.20.() 오전</td>
<td>
<CloudLightning />
</td>
<td>30</td>
</tr>
<tr>
<td>06.20.() 오후</td>
<td>
<CloudLightning />
</td>
<td>30</td>
</tr>
<tr>
<td>06.21.() 오전</td>
<td>
<CloudLightning />
</td>
<td>30</td>
</tr>
<tr>
<td>06.21.() 오후</td>
<td>
<CloudLightning />
</td>
<td>30</td>
</tr>
<tr>
<td>06.22.() 오전</td>
<td>
<CloudLightning />
</td>
<td>30</td>
</tr>
<tr>
<td>06.2.() 오후</td>
<td>
<CloudLightning />
</td>
<td>30</td>
</tr>
</tbody>
</Table>
</div>
</div>
</div>
</div>
</div>
</CardBody> </CardBody>
</Card> </Card>
</Col> </Col>

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

@ -77,7 +77,7 @@ export const BasisGroupForm = props => {
name='groupId' name='groupId'
bsSize='sm' bsSize='sm'
readOnly={true} readOnly={true}
value={props.groupData.groupId || ''} defaultValue={props.groupData.groupId || ''}
placeholder='' placeholder=''
/> />
</FormGroup> </FormGroup>
@ -107,6 +107,32 @@ export const BasisGroupForm = props => {
</FormGroup> </FormGroup>
</Col> </Col>
<Col className='list-input' md='4' sm='12'>
<FormGroup>
<Label for='trmnlId'>
<span className='necessary'>*</span> ID
</Label>
<Input
type='text'
id='trmnlId'
name='trmnlId'
bsSize='sm'
readOnly={true}
// innerRef={register}
defaultValue={props.groupData.trmnlId || ''}
placeholder=''
className={classnames({
'is-invalid': errors.trmnlId
})}
/>
{errors && errors.trmnlId && (
<FormFeedback>
{errors.trmnlId.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>

6
src/components/map/naver/dron/DronMarker.js

@ -116,12 +116,15 @@ export const DronMarker = props => {
const markerOption = {}; const markerOption = {};
if (id.substring(0, 2) === 'PA') { if (id.substring(0, 2) === 'PA') {
const pal = controlGroupAuthInfo.find( const pal = controlGroupAuthInfo?.find(
prev => prev.idntfNum === gps.objectId prev => prev.idntfNum === gps.objectId
); );
markerOption.url = pal ? DronIcon : FlightIcon; markerOption.url = pal ? DronIcon : FlightIcon;
markerOption.type = pal ? 'DRONE' : 'FLIGHT'; markerOption.type = pal ? 'DRONE' : 'FLIGHT';
} else { } else {
// const etc = controlGpList?.filter(
// prev => prev.command === 이사람이 가입한 그룹의 command(가입한 그룹의 리스트를 여기로 불러와야 함)
// )
markerOption.url = FlightIcon; markerOption.url = FlightIcon;
markerOption.type = 'FLIGHT'; markerOption.type = 'FLIGHT';
} }
@ -253,7 +256,6 @@ export const DronMarker = props => {
//마커를 셋팅 한다. //마커를 셋팅 한다.
const markerInit = () => { const markerInit = () => {
if (controlGpList) { if (controlGpList) {
console.log(controlGpList);
allRemoveMarkers(); allRemoveMarkers();
controlGpList.map(item => { controlGpList.map(item => {
let position = new naver.maps.LatLng(item.lat, item.lng); let position = new naver.maps.LatLng(item.lat, item.lng);

24
src/containers/basis/group/BasisGroupApprovalContainer.js

@ -170,6 +170,7 @@ export const BasisGroupApprovalContainer = props => {
const [saveData, setSaveData] = useState({ const [saveData, setSaveData] = useState({
cstmrGroupSno: '', cstmrGroupSno: '',
trmnlId: '',
// aprvlYn: 'N', //가입은 USER 로만 // aprvlYn: 'N', //가입은 USER 로만
aprvlYn: 'N', //가입은 NORMAL 로만 aprvlYn: 'N', //가입은 NORMAL 로만
aprvUserId: '' aprvUserId: ''
@ -259,14 +260,10 @@ export const BasisGroupApprovalContainer = props => {
sortable: false, sortable: false,
cell: (row, i) => { cell: (row, i) => {
let disa = false; let disa = false;
let trmnlId = '';
if (user.authId === 'ADMIN') { if (user.authId === 'ADMIN') {
//모든 그룹 조회 가능 //모든 그룹 조회 가능
const my = groupList?.find(prev => { const my = groupList?.find(prev => prev.groupId === row?.groupId);
if (prev.groupId === row?.groupId) {
return prev;
}
});
if (my.myGroupAuthCd === 'NORMAL') { if (my.myGroupAuthCd === 'NORMAL') {
disa = true; disa = true;
} else if (!my.myGroupAuthCd) { } else if (!my.myGroupAuthCd) {
@ -274,11 +271,8 @@ export const BasisGroupApprovalContainer = props => {
} }
} else if (user.authId === 'USER') { } else if (user.authId === 'USER') {
//본인 그룹 조회 가능 //본인 그룹 조회 가능
const my = joinList?.find(prev => { const my = joinList?.find(prev => prev.groupId === row?.groupId);
if (prev.groupId === row?.groupId) { trmnlId = my?.trmnlId;
return prev;
}
});
if (my?.groupAuthCd === 'NORMAL') { if (my?.groupAuthCd === 'NORMAL') {
disa = true; disa = true;
} }
@ -288,7 +282,7 @@ export const BasisGroupApprovalContainer = props => {
<Button.Ripple <Button.Ripple
color='primary' color='primary'
className='badge badge-primary' className='badge badge-primary'
onClick={() => handlerAprvConfirm(row?.cstmrGroupSno)} onClick={() => handlerAprvConfirm(row?.cstmrGroupSno, trmnlId)}
disabled={disa} disabled={disa}
> >
승인처리 승인처리
@ -327,19 +321,19 @@ export const BasisGroupApprovalContainer = props => {
param.page = page; param.page = page;
dispatch(Actions.APPROVAL_LIST.request({ searchParams: param })); dispatch(Actions.APPROVAL_LIST.request({ searchParams: param }));
}; };
const handlerAprvConfirm = cstmrGroupSno => { const handlerAprvConfirm = (cstmrGroupSno, trmnlId) => {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '승인 확인', title: '승인 확인',
desc: '해당 사용자를 승인 처리 하시겠습니까?' desc: '해당 사용자를 승인 처리 하시겠습니까?'
}); });
//승인처리 시 권한부여 O //승인처리 시 권한부여 O
setSaveData({ setSaveData({
cstmrGroupSno: cstmrGroupSno, cstmrGroupSno: cstmrGroupSno,
aprvlYn: 'Y', aprvlYn: 'Y',
aprvUserId: user?.userId, aprvUserId: user?.userId,
groupAuthCd: 'NORMAL' groupAuthCd: 'NORMAL',
trmnlId: trmnlId
}); });
}; };

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

@ -38,6 +38,7 @@ export const BasisGroupDetailContainer = () => {
useEffect(() => { useEffect(() => {
setGroupData({ setGroupData({
trmnlId: user?.trmnlId,
groupId: newGroupId, groupId: newGroupId,
groupNm: '', groupNm: '',
type: 'create', type: 'create',
@ -63,6 +64,7 @@ export const BasisGroupDetailContainer = () => {
const handlerCreate = data => { const handlerCreate = data => {
const saveData = { const saveData = {
trmnlId: groupData.trmnlId,
createDt: '', createDt: '',
cstmrSno: groupData.cstmrSno, cstmrSno: groupData.cstmrSno,
groupId: groupData.groupId, groupId: groupData.groupId,

1
src/modules/control/gp/models/controlGpModel.ts

@ -113,6 +113,7 @@ export interface ControlGroupAuthData {
arcrftSno: number; arcrftSno: number;
idntfNum: string; idntfNum: string;
createUserId: string; createUserId: string;
trmnlId: string;
} }
export interface ControlGpFlightPlanDataList export interface ControlGpFlightPlanDataList

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

@ -26,7 +26,7 @@ function* getControlGpSaga(
let gpsData: ControlGpData[] = []; let gpsData: ControlGpData[] = [];
//사용자가 등록한 기체(식별장치 포함)만 관제에서 볼 수 있게 필터처리 //사용자가 등록한 기체(식별장치 포함)만 관제에서 볼 수 있게 필터처리
if (controlGroupAuthInfo.length > 0) { if (controlGroupAuthInfo?.length > 0) {
controlGroupAuthInfo.forEach(auth => { controlGroupAuthInfo.forEach(auth => {
if (gpsData.length > 0) return false; if (gpsData.length > 0) return false;
@ -46,7 +46,7 @@ function* getControlGpSaga(
data.forEach(gps => { data.forEach(gps => {
if (gps.controlId && gps.objectId.substring(0, 2) === 'PA') { if (gps.controlId && gps.objectId.substring(0, 2) === 'PA') {
const arcrft = controlGroupAuthInfo.find( const arcrft = controlGroupAuthInfo?.find(
auth => auth.idntfNum === gps.objectId auth => auth.idntfNum === gps.objectId
); );

Loading…
Cancel
Save