|
|
@ -1,27 +1,183 @@ |
|
|
|
import { useEffect, useState } from 'react'; |
|
|
|
import { useEffect, useState } from 'react'; |
|
|
|
import { useDispatch, useSelector } from 'react-redux'; |
|
|
|
import { useDispatch, useSelector } from 'react-redux'; |
|
|
|
import { useHistory } from 'react-router-dom'; |
|
|
|
import { Button, Col, Row } from 'reactstrap'; |
|
|
|
import { Button } from 'reactstrap'; |
|
|
|
|
|
|
|
import { BasisGroupApprovalGrid } from '../../../components/basis/group/BasisGroupApprovalGrid'; |
|
|
|
import { BasisGroupApprovalGrid } from '../../../components/basis/group/BasisGroupApprovalGrid'; |
|
|
|
import { BasisGroupApprovalSearch } from '../../../components/basis/group/BasisGroupApprovalSearch'; |
|
|
|
import { BasisGroupApprovalSearch } from '../../../components/basis/group/BasisGroupApprovalSearch'; |
|
|
|
import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; |
|
|
|
import { CustomMainLayout } from '../../../components/layout/CustomMainLayout'; |
|
|
|
import { ConfirmModal } from '../../../components/modal/ConfirmModal'; |
|
|
|
import { ConfirmModal } from '../../../components/modal/ConfirmModal'; |
|
|
|
import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; |
|
|
|
import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; |
|
|
|
|
|
|
|
import * as GroupActions from '../../../modules/basis/group/actions/basisGroupAction'; |
|
|
|
|
|
|
|
import { BasisGroupDronGrid } from '../../../components/basis/dron/BasisGroupDronGrid'; |
|
|
|
|
|
|
|
|
|
|
|
export const BasisGroupApprovalContainer = props => { |
|
|
|
export const BasisGroupApprovalContainer = props => { |
|
|
|
const { aprvList, aprvCount } = useSelector(state => state.groupState); |
|
|
|
const { aprvList, aprvCount } = useSelector(state => state.groupState); |
|
|
|
|
|
|
|
|
|
|
|
const { user } = useSelector(state => state.authState); |
|
|
|
const { user } = useSelector(state => state.authState); |
|
|
|
|
|
|
|
const { joinList, joinListCount } = useSelector(state => state.groupState); |
|
|
|
|
|
|
|
const { selectData } = useSelector(state => state.groupState); |
|
|
|
|
|
|
|
|
|
|
|
const dispatch = useDispatch(); |
|
|
|
const dispatch = useDispatch(); |
|
|
|
const history = useHistory(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const titleName = '승인관리'; |
|
|
|
const titleName = '승인관리'; |
|
|
|
|
|
|
|
|
|
|
|
const [params, setParams] = useState({ |
|
|
|
const [params, setParams] = useState({ |
|
|
|
cstmrSno: user?.cstmrSno |
|
|
|
cstmrSno: user?.cstmrSno, |
|
|
|
|
|
|
|
aprvYn: '', |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
const column = [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '그룹명', |
|
|
|
|
|
|
|
selector: 'groupNm', |
|
|
|
|
|
|
|
minWidth: '102px', |
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return row?.groupNm; |
|
|
|
|
|
|
|
// return selectData;
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '그룹 코드', |
|
|
|
|
|
|
|
selector: 'groupId', |
|
|
|
|
|
|
|
minWidth: '102px', |
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return row?.groupId; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '', |
|
|
|
|
|
|
|
// selector: 'cntrlStDate',
|
|
|
|
|
|
|
|
// width: '100px',
|
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return selectData?.groupId === row?.groupId ? ( |
|
|
|
|
|
|
|
<Button.Ripple |
|
|
|
|
|
|
|
color='danger' |
|
|
|
|
|
|
|
className='badge badge-danger' |
|
|
|
|
|
|
|
onClick={() => handlerCancel()} |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
선택취소 |
|
|
|
|
|
|
|
</Button.Ripple> |
|
|
|
|
|
|
|
) : ( |
|
|
|
|
|
|
|
<Button.Ripple |
|
|
|
|
|
|
|
color='primary' |
|
|
|
|
|
|
|
className='badge badge-primary' |
|
|
|
|
|
|
|
onClick={() => |
|
|
|
|
|
|
|
handlerDetail( |
|
|
|
|
|
|
|
row?.groupId, |
|
|
|
|
|
|
|
row?.groupNm, |
|
|
|
|
|
|
|
row?.groupAuthCd, |
|
|
|
|
|
|
|
row?.aprvlYn, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
상세보기 |
|
|
|
|
|
|
|
</Button.Ripple> |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
const handlerDetail = (groupId, groupNm) => { |
|
|
|
|
|
|
|
// 권한 상관 없이 모두 조회 가능
|
|
|
|
|
|
|
|
// param.cstmrSno = user.cstmrSno;
|
|
|
|
|
|
|
|
dispatch(Actions.SELECT({ groupId: groupId, groupNm: groupNm })); |
|
|
|
|
|
|
|
if (user?.cstmrSno) { |
|
|
|
|
|
|
|
setParams({ |
|
|
|
|
|
|
|
...params, |
|
|
|
|
|
|
|
cstmrSno: user?.cstmrSno, |
|
|
|
|
|
|
|
aprvYn: '', |
|
|
|
|
|
|
|
groupId: groupId |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dispatch( |
|
|
|
|
|
|
|
Actions.APPROVAL_LIST.request({ |
|
|
|
|
|
|
|
searchParams: { cstmrSno: user?.cstmrSno, aprvYn: '', groupId: groupId } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const handlerCancel = () => { |
|
|
|
|
|
|
|
dispatch(Actions.SELECT()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setParams({ |
|
|
|
|
|
|
|
...params, |
|
|
|
|
|
|
|
groupId: '', |
|
|
|
|
|
|
|
groupNm: '' |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
|
|
|
if (user?.cstmrSno) { |
|
|
|
|
|
|
|
setParams({ |
|
|
|
|
|
|
|
...params, |
|
|
|
|
|
|
|
cstmrSno: user?.cstmrSno, |
|
|
|
|
|
|
|
groupId: selectData?.groupId, |
|
|
|
|
|
|
|
aprvYn: 'A' |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
dispatch( |
|
|
|
|
|
|
|
GroupActions.JOIN_LIST.request({ |
|
|
|
|
|
|
|
cstmrSno: user?.cstmrSno, |
|
|
|
|
|
|
|
groupId: selectData?.groupId |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, [user]); |
|
|
|
|
|
|
|
const dronColumns = [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '모델명', |
|
|
|
|
|
|
|
selector: 'arcrftModelNm', |
|
|
|
|
|
|
|
minWidth: '102px', |
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return row?.arcrftModelNm; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '종류', |
|
|
|
|
|
|
|
selector: 'arcrftTypeCd', |
|
|
|
|
|
|
|
minWidth: '102px', |
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return GET_ARCTFT_TYPE_CD(row?.arcrftTypeCd); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '제작사', |
|
|
|
|
|
|
|
selector: 'prdctCmpnNm', |
|
|
|
|
|
|
|
minWidth: '102px', |
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return row?.prdctCmpnNm; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '수정일자', |
|
|
|
|
|
|
|
selector: 'updateDt', |
|
|
|
|
|
|
|
minWidth: '102px', |
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return moment(row?.updateDt).format('MM-DD HH:mm'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: '상세보기', |
|
|
|
|
|
|
|
// selector: 'cntrlStDate',
|
|
|
|
|
|
|
|
// minWidth: '102px',
|
|
|
|
|
|
|
|
sortable: true, |
|
|
|
|
|
|
|
cell: row => { |
|
|
|
|
|
|
|
return ( |
|
|
|
|
|
|
|
<Link |
|
|
|
|
|
|
|
to={`/basis/dron/detail/${row.arcrftSno}`} |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
상세보기 |
|
|
|
|
|
|
|
</Link> |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
]; |
|
|
|
const [saveData, setSaveData] = useState({ |
|
|
|
const [saveData, setSaveData] = useState({ |
|
|
|
cstmrGroupSno: '', |
|
|
|
cstmrGroupSno: '', |
|
|
|
// aprvlYn: 'N', //가입은 USER 로만
|
|
|
|
// aprvlYn: 'N', //가입은 USER 로만
|
|
|
@ -127,26 +283,10 @@ export const BasisGroupApprovalContainer = props => { |
|
|
|
} |
|
|
|
} |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
|
|
|
if (user?.cstmrSno) { |
|
|
|
|
|
|
|
setParams({ |
|
|
|
|
|
|
|
...params, |
|
|
|
|
|
|
|
cstmrSno: user?.cstmrSno, |
|
|
|
|
|
|
|
aprvYn: 'N' |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dispatch( |
|
|
|
|
|
|
|
Actions.APPROVAL_LIST.request({ |
|
|
|
|
|
|
|
searchParams: { cstmrSno: user?.cstmrSno, aprvYn: 'N' } |
|
|
|
|
|
|
|
// searchParams: params
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, [user]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const onKeyPress = e => { |
|
|
|
const onKeyPress = e => { |
|
|
|
if (e.key == 'Enter') { |
|
|
|
if (e.key == 'Enter') { |
|
|
|
handlerSearch(); |
|
|
|
// handlerSearch();
|
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -195,9 +335,25 @@ export const BasisGroupApprovalContainer = props => { |
|
|
|
[name]: value |
|
|
|
[name]: value |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<CustomMainLayout title={titleName}> |
|
|
|
<CustomMainLayout title={titleName}> |
|
|
|
|
|
|
|
<div className='pal-card-box'> |
|
|
|
|
|
|
|
<Row> |
|
|
|
|
|
|
|
<Col sm='4'> |
|
|
|
|
|
|
|
<BasisGroupDronGrid |
|
|
|
|
|
|
|
data={joinList} |
|
|
|
|
|
|
|
title={'그룹'} |
|
|
|
|
|
|
|
columns={column} |
|
|
|
|
|
|
|
count={joinListCount} |
|
|
|
|
|
|
|
pagination={false} |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
</Col> |
|
|
|
|
|
|
|
<Col sm='8'> |
|
|
|
|
|
|
|
{!selectData ? ( |
|
|
|
|
|
|
|
<div className='no-dataTable'> |
|
|
|
|
|
|
|
그룹 목록에서 상세보기를 클릭하세요. |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
) : ( |
|
|
|
<BasisGroupApprovalSearch |
|
|
|
<BasisGroupApprovalSearch |
|
|
|
handlerInput={handlerInput} |
|
|
|
handlerInput={handlerInput} |
|
|
|
onKeyPress={onKeyPress} |
|
|
|
onKeyPress={onKeyPress} |
|
|
@ -205,7 +361,14 @@ export const BasisGroupApprovalContainer = props => { |
|
|
|
setParams={setParams} |
|
|
|
setParams={setParams} |
|
|
|
handlerSearch={handlerSearch} |
|
|
|
handlerSearch={handlerSearch} |
|
|
|
/> |
|
|
|
/> |
|
|
|
|
|
|
|
)} |
|
|
|
|
|
|
|
<Col sm='12'> |
|
|
|
|
|
|
|
{!selectData ? ( |
|
|
|
|
|
|
|
<> |
|
|
|
|
|
|
|
<div className='no-dataTable'> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</> |
|
|
|
|
|
|
|
) : ( |
|
|
|
<BasisGroupApprovalGrid |
|
|
|
<BasisGroupApprovalGrid |
|
|
|
data={aprvList} |
|
|
|
data={aprvList} |
|
|
|
title={titleName} |
|
|
|
title={titleName} |
|
|
@ -213,7 +376,11 @@ export const BasisGroupApprovalContainer = props => { |
|
|
|
count={aprvCount} |
|
|
|
count={aprvCount} |
|
|
|
pagination={false} |
|
|
|
pagination={false} |
|
|
|
/> |
|
|
|
/> |
|
|
|
|
|
|
|
)} |
|
|
|
|
|
|
|
</Col> |
|
|
|
|
|
|
|
</Col> |
|
|
|
|
|
|
|
</Row> |
|
|
|
|
|
|
|
</div> |
|
|
|
<ConfirmModal |
|
|
|
<ConfirmModal |
|
|
|
modal={modal} |
|
|
|
modal={modal} |
|
|
|
setModal={setModal} |
|
|
|
setModal={setModal} |
|
|
|