Browse Source

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

feature/auth
김지은 2 years ago
parent
commit
dbd2a164ac
  1. 47
      src/components/account/find/AccountFindPassword.js
  2. 34
      src/components/account/find/AccountFindUserId.js
  3. 4
      src/components/account/register/AccountRegister.js
  4. 5
      src/components/account/register/AccountRegisterComplete.js
  5. 12
      src/components/account/register/AccountRegisterForm.js
  6. 2
      src/components/analysis/simulation/AnalysisSimulationDetail.js
  7. 1
      src/components/analysis/simulation/AnalysisSimulationReport.js
  8. 1
      src/components/analysis/simulation/AnalysisSimulatorSlider.js
  9. 25
      src/components/basis/dron/BasisDronImage.js
  10. 4
      src/components/basis/group/BasisGroupDetailJoinSearch.js
  11. 4
      src/components/basis/group/BasisGroupUsersSearch.js
  12. 17
      src/containers/account/find/AccounFindTabContainer.js
  13. 25
      src/containers/basis/dron/BasisDronDetailContainer.js
  14. 6
      src/modules/control/gp/sagas/controlGpSaga.ts

47
src/components/account/find/AccountFindPassword.js

@ -56,11 +56,21 @@ export const AccountFindPassword = props => {
}, []); }, []);
const handlerSend = async() => { const handlerSend = async() => {
if(!inputId || !inputHpno) { if(!inputId) {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '인증번호 발송', title: '인증번호 발송',
desc: '빈칸을 채워주세요.', desc: '아이디를 입력해 주세요.',
color: 'modal-danger'
})
return;
}
if(!inputHpno) {
setModal({
isOpen: true,
title: '인증번호 발송',
desc: '휴대폰 번호를 입력해 주세요.',
color: 'modal-danger' color: 'modal-danger'
}) })
return; return;
@ -126,6 +136,12 @@ export const AccountFindPassword = props => {
setIsRunning(false); setIsRunning(false);
// setValue('crtfyNo', ''); // setValue('crtfyNo', '');
// setCrtfyNo(''); // setCrtfyNo('');
setModal({
isOpen: true,
title: '인증번호 만료',
desc: '인증번호가 만료되었습니다.',
color: 'modal-danger'
})
} }
}, 1000); }, 1000);
@ -137,11 +153,21 @@ export const AccountFindPassword = props => {
} }
const handlerConfirm = async() => { const handlerConfirm = async() => {
if(!inputId || !inputHpno) { if(!inputId) {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '인증번호 인증', title: '인증번호 발송',
desc: '빈칸을 채워주세요.', desc: '아이디를 입력해 주세요.',
color: 'modal-danger'
})
return;
}
if(!inputHpno) {
setModal({
isOpen: true,
title: '인증번호 발송',
desc: '휴대폰 번호를 입력해 주세요.',
color: 'modal-danger' color: 'modal-danger'
}) })
return; return;
@ -183,7 +209,7 @@ export const AccountFindPassword = props => {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '비밀번호 변경', title: '비밀번호 변경',
desc: '빈칸을 채워주세요.', desc: '비밀번호를 입력해 주세요.',
color: 'modal-danger' color: 'modal-danger'
}) })
return; return;
@ -194,7 +220,7 @@ export const AccountFindPassword = props => {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '비밀번호 변경', title: '비밀번호 변경',
desc: '8자 이상, 20자 미만 영문자/숫자/특수문자(@$!%*#?&) 조합하여 입력해주세요.', desc: '8자 이상, 20자 미만 영문자/숫자/특수문자(@$!%*#?&) 조합하여 입력해 주세요.',
color: 'modal-danger' color: 'modal-danger'
}) })
return; return;
@ -242,12 +268,17 @@ export const AccountFindPassword = props => {
setInputCrtfy(crtfyhp) setInputCrtfy(crtfyhp)
} }
} else if(name == 'newPw') { } else if(name == 'newPw') {
const regex = /^[A-Za-z0-9@$!%*#?&]{0,20}$/;
if(regex.test(value)) {
newpw = value; newpw = value;
setInputNewPw(newpw); setInputNewPw(newpw);
// } }
} else if(name == 'newPwCk') { } else if(name == 'newPwCk') {
const regex = /^[A-Za-z0-9@$!%*#?&]{0,20}$/;
if(regex.test(value)) {
newpwck = value; newpwck = value;
setInputNewPwCk(newpwck); setInputNewPwCk(newpwck);
}
} }
} }

34
src/components/account/find/AccountFindUserId.js

@ -52,11 +52,21 @@ export const AccountFindUserId = props => {
}, []); }, []);
const handlerSend = async() => { const handlerSend = async() => {
if(!inputName || !inputHpno) { if(!inputName) {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '인증번호 발송', title: '인증번호 발송',
desc: '빈칸을 채워주세요.', desc: '이름을 입력해 주세요.',
color: 'modal-danger'
})
return;
}
if(!inputHpno) {
setModal({
isOpen: true,
title: '인증번호 발송',
desc: '휴대폰 번호를 입력해 주세요.',
color: 'modal-danger' color: 'modal-danger'
}) })
return; return;
@ -121,6 +131,12 @@ export const AccountFindUserId = props => {
setIsRunning(false); setIsRunning(false);
// setValue('crtfyNo', ''); // setValue('crtfyNo', '');
// setCrtfyNo(''); // setCrtfyNo('');
setModal({
isOpen: true,
title: '인증번호 만료',
desc: '인증번호가 만료되었습니다.',
color: 'modal-danger'
})
} }
}, 1000); }, 1000);
@ -132,11 +148,21 @@ export const AccountFindUserId = props => {
} }
const handlerConfirm = async() => { const handlerConfirm = async() => {
if(!inputName || !inputHpno) { if(!inputHpno) {
setModal({
isOpen: true,
title: '인증번호 인증',
desc: '휴대폰 번호를 입력 해주세요.',
color: 'modal-danger'
})
return;
}
if(!inputName) {
setModal({ setModal({
isOpen: true, isOpen: true,
title: '인증번호 인증', title: '인증번호 인증',
desc: '빈칸을 채워주세요.', desc: '이름을 입력 해주세요.',
color: 'modal-danger' color: 'modal-danger'
}) })
return; return;

4
src/components/account/register/AccountRegister.js

@ -8,6 +8,7 @@ import { AccountRegisterComplete } from './AccountRegisterComplete';
export const AccountRegister = ({ props }) => { export const AccountRegister = ({ props }) => {
const [stepper, setStepper] = useState(null); const [stepper, setStepper] = useState(null);
const [memberName, setMemberName] = useState();
const ref = useRef(null); const ref = useRef(null);
// console.log(props); // console.log(props);
@ -36,6 +37,8 @@ export const AccountRegister = ({ props }) => {
stepper={stepper} stepper={stepper}
type='wizard-horizontal' type='wizard-horizontal'
movePage={movePage} movePage={movePage}
memberName={memberName}
setMemberName={setMemberName}
/> />
) )
}, },
@ -48,6 +51,7 @@ export const AccountRegister = ({ props }) => {
stepper={stepper} stepper={stepper}
type='wizard-horizontal' type='wizard-horizontal'
movePage={movePage} movePage={movePage}
memberName={memberName}
/> />
) )
} }

5
src/components/account/register/AccountRegisterComplete.js

@ -20,8 +20,9 @@ import {
import AppCollapse from '@components/app-collapse'; import AppCollapse from '@components/app-collapse';
import Select from 'react-select'; import Select from 'react-select';
import { selectThemeColors } from '@utils'; import { selectThemeColors } from '@utils';
import { useSelector } from 'react-redux';
export const AccountRegisterComplete = ({ stepper, type, movePage }) => { export const AccountRegisterComplete = ({ stepper, type, movePage, memberName}) => {
const handlerLogin = () => { const handlerLogin = () => {
movePage('/account/login'); movePage('/account/login');
}; };
@ -30,7 +31,7 @@ export const AccountRegisterComplete = ({ stepper, type, movePage }) => {
<Fragment> <Fragment>
<div className='complete-txt'> <div className='complete-txt'>
<img src={completeImg} /> <img src={completeImg} />
<span className='big-txt'>환영합니다. 홍길동 </span> <span className='big-txt'>환영합니다. {memberName}</span>
<span className='d-block'> <span className='d-block'>
모든 회원가입절차가 완료되었습니다. 로그인 사용해주세요. 모든 회원가입절차가 완료되었습니다. 로그인 사용해주세요.
</span> </span>

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

@ -25,7 +25,7 @@ import { useDispatch, useSelector } from 'react-redux';
import { accountApi } from '../../../modules/account/register/apis/accountApi'; import { accountApi } from '../../../modules/account/register/apis/accountApi';
import * as Actions from '../../../modules/account/register/actions/accountAction'; import * as Actions from '../../../modules/account/register/actions/accountAction';
export const AccountRegisterForm = ({ stepper, type, movePage }) => { export const AccountRegisterForm = ({ stepper, type, movePage, testName, setMemberName }) => {
const { agreeTerms } = useSelector(state => state.accountState); const { agreeTerms } = useSelector(state => state.accountState);
const [minutes_Counter, setMinutes_Counter] = useState('03'); const [minutes_Counter, setMinutes_Counter] = useState('03');
const [seconds_Counter, setSeconds_Counter] = useState('00'); const [seconds_Counter, setSeconds_Counter] = useState('00');
@ -198,9 +198,9 @@ export const AccountRegisterForm = ({ stepper, type, movePage }) => {
}); });
return false; return false;
} }
// dispatch( dispatch(
// Actions.register.request({ data: data, agreeTerms: agreeTerms }) Actions.register.request({ data: data, agreeTerms: agreeTerms })
// ); );
const res = await accountApi.register({ const res = await accountApi.register({
data: data, data: data,
agreeTerms: agreeTerms agreeTerms: agreeTerms
@ -272,6 +272,10 @@ export const AccountRegisterForm = ({ stepper, type, movePage }) => {
// console.log(register); // console.log(register);
const { name, value } = e.target; const { name, value } = e.target;
if(name == 'memberName') {
setMemberName(value);
}
if (name == 'brthdyDate') { if (name == 'brthdyDate') {
const regex = /^[0-9\b]{0,8}$/; const regex = /^[0-9\b]{0,8}$/;

2
src/components/analysis/simulation/AnalysisSimulationDetail.js

@ -210,7 +210,7 @@ export const AnalysisSimulationDetail = props => {
</div> */} </div> */}
{props.stcsList?.map(item => { {props.stcsList?.map(item => {
return ( return (
<div <div key={item.timeCd}
className={ className={
props.timeCd === item.timeCd props.timeCd === item.timeCd
? 'simulation-date-num date-num-focus' ? 'simulation-date-num date-num-focus'

1
src/components/analysis/simulation/AnalysisSimulationReport.js

@ -6,7 +6,6 @@ import { Button, Input, InputGroup } from 'reactstrap';
export const AnalysisSimulationReport = props => { export const AnalysisSimulationReport = props => {
// console.log(props.params); // console.log(props.params);
console.log(11111111111111);
return ( return (
<div className='left-layer'> <div className='left-layer'>
<div className='layer-content'> <div className='layer-content'>

1
src/components/analysis/simulation/AnalysisSimulatorSlider.js

@ -40,7 +40,6 @@ const AnalysisSimulatorSlider = ({
}; };
useEffect(() => { useEffect(() => {
console.log(playCount);
}, [playCount]); }, [playCount]);
return ( return (
<div className='simulation-slider'> <div className='simulation-slider'>

25
src/components/basis/dron/BasisDronImage.js

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Edit, Image, Trash2 } from 'react-feather'; import { Edit, Image, Trash2 } from 'react-feather';
import { Button, Label, Media } from 'reactstrap'; import { Button, Label, Media, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
export const BasisDronImage = props => { export const BasisDronImage = props => {
return ( return (
@ -50,6 +50,29 @@ export const BasisDronImage = props => {
</span> </span>
</Button.Ripple> </Button.Ripple>
</div> </div>
<div className='vertically-centered-modal'>
<Modal
isOpen={props.modal.isOpen}
toggle={() => props.setModal({ ...props.modal, isOpen: !props.modal.isOpen })}
modalClassName={props.modal.color}
className='modal-dialog-centered'
>
<ModalHeader
toggle={() => props.setModal({ ...props.modal, isOpen: !props.modal.isOpen })}
>
{props.modal.title}
</ModalHeader>
<ModalBody>{props.modal.desc}</ModalBody>
<ModalFooter>
<Button
color='danger'
onClick={() => props.setModal({ ...props.modal, isOpen: !props.modal.isOpen })}
>
확인
</Button>
</ModalFooter>
</Modal>
</div>
{/* <div className='sm-txt mt-1'>이미지 최적 크기 300*300</div> */} {/* <div className='sm-txt mt-1'>이미지 최적 크기 300*300</div> */}
</Media> </Media>
</Media> </Media>

4
src/components/basis/group/BasisGroupDetailJoinSearch.js

@ -61,7 +61,7 @@ export const BasisGroupDetailJoinSearch = props => {
type='text' type='text'
id='groupNm' id='groupNm'
name='groupNm' name='groupNm'
value={props.params.groupNm} value={props.params.groupNm || ''}
onChange={props.handlerInput} onChange={props.handlerInput}
bsSize='sm' bsSize='sm'
placeholder='그룹명을 입력하세요' placeholder='그룹명을 입력하세요'
@ -84,7 +84,7 @@ export const BasisGroupDetailJoinSearch = props => {
id='groupId' id='groupId'
name='groupId' name='groupId'
onChange={props.handlerInput} onChange={props.handlerInput}
value={props.params.groupId} value={props.params.groupId || ''}
onKeyPress={props.onKeyPress} onKeyPress={props.onKeyPress}
bsSize='sm' bsSize='sm'
placeholder='그룹코드를 입력하세요' placeholder='그룹코드를 입력하세요'

4
src/components/basis/group/BasisGroupUsersSearch.js

@ -61,7 +61,7 @@ export const BasisGroupUsersSearch = props => {
type='text' type='text'
id='groupNm' id='groupNm'
name='groupNm' name='groupNm'
value={props.params.groupNm} value={props.params.groupNm || ''}
onChange={props.handlerInput} onChange={props.handlerInput}
onKeyPress={props.onKeyPress} onKeyPress={props.onKeyPress}
bsSize='sm' bsSize='sm'
@ -87,7 +87,7 @@ export const BasisGroupUsersSearch = props => {
type='text' type='text'
id='memberName' id='memberName'
name='memberName' name='memberName'
value={props.params.memberName} value={props.params.memberName || ''}
onChange={props.handlerInput} onChange={props.handlerInput}
onKeyPress={props.onKeyPress} onKeyPress={props.onKeyPress}
bsSize='sm' bsSize='sm'

17
src/containers/account/find/AccounFindTabContainer.js

@ -1,10 +1,15 @@
import { AccountFindTab } from "../../../components/account/find/AccountFindTab"; import { AccountFindTab } from "../../../components/account/find/AccountFindTab";
import loginImg from '../../../assets/images/login01.png'; import loginImg from '../../../assets/images/login01.png';
import { Button } from 'reactstrap'
import '../../../assets/css/custom.css'; import '../../../assets/css/custom.css';
import { useHistory } from 'react-router-dom'
export const AccountFindTabContainer = () => { export const AccountFindTabContainer = () => {
const history = useHistory();
const handlerRegister = () => {
history.push(`/account/register`)
}
return ( return (
<> <>
@ -17,6 +22,14 @@ export const AccountFindTabContainer = () => {
<div className='pal-card'> <div className='pal-card'>
<AccountFindTab /> <AccountFindTab />
</div> </div>
<div className='user-search-link'>
<Button.Ripple
color='flat-warning'
onClick={handlerRegister}
>
회원가입 바로가기
</Button.Ripple>
</div>
</div> </div>
</div> </div>
</> </>

25
src/containers/basis/dron/BasisDronDetailContainer.js

@ -54,7 +54,12 @@ export const BasisDronDetailContainer = props => {
}, },
resolver: yupResolver(validationSchema) resolver: yupResolver(validationSchema)
}); });
const [modal, setModal] = useState({
isOpen: false,
title: '',
desc: '',
color: ''
})
useEffect(() => { useEffect(() => {
if (props.id) { if (props.id) {
handlerSearch(); handlerSearch();
@ -96,7 +101,21 @@ export const BasisDronDetailContainer = props => {
const handlerImageChange = e => { const handlerImageChange = e => {
const reader = new FileReader(), const reader = new FileReader(),
files = e.target.files; files = e.target.files;
saveFileAPI(files[0]); if(!(files[0] == undefined)){
if(!(files[0].size == 0)){
const fileSize = files[0].size/1048576;
if(fileSize > 10) {
setModal({
isOpen: true,
title: '이미지 용량 초과',
desc: '10MB 이하의 파일만 등록 가능합니다',
color: 'modal-danger'
})
return;
}
}
}
saveFileAPI(files[0]);
}; };
const handlerImageDelete = () => { const handlerImageDelete = () => {
@ -148,6 +167,8 @@ export const BasisDronDetailContainer = props => {
handlerImageDelete={handlerImageDelete} handlerImageDelete={handlerImageDelete}
data={register} data={register}
img={img} img={img}
modal={modal}
setModal={setModal}
/> />
</Col> </Col>
<Col md={7} lg={9}> <Col md={7} lg={9}>

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

@ -27,6 +27,7 @@ function* getControlGpSaga(
if (controlGroupAuthInfo.length > 0) { if (controlGroupAuthInfo.length > 0) {
controlGroupAuthInfo.forEach((auth) => { controlGroupAuthInfo.forEach((auth) => {
if (auth.groupAuthCd === 'CREATER' || auth.groupAuthCd === 'ADMIN') { if (auth.groupAuthCd === 'CREATER' || auth.groupAuthCd === 'ADMIN') {
if (gpsData.length > 0) return false; if (gpsData.length > 0) return false;
gpsData = data.filter(gps => auth.idntfNum === gps.objectId); gpsData = data.filter(gps => auth.idntfNum === gps.objectId);
@ -38,11 +39,10 @@ function* getControlGpSaga(
gpsData.filter(gps => auth.createUserId && auth.idntfNum === gps.objectId); gpsData.filter(gps => auth.createUserId && auth.idntfNum === gps.objectId);
} }
}); });
} }
console.log('gps data >>>> ', data);
*/ */
console.log('websocket data :: ', data);
yield put( yield put(
Actions.controlGpAction.success({ Actions.controlGpAction.success({

Loading…
Cancel
Save