Browse Source

비행계획서 - 권한에 따른 승인 제어

pull/2/head
junh_eee 2 years ago
parent
commit
d79a91a756
  1. 30
      src/components/basis/flight/aprv/FlightPlanAprvGrid.js
  2. 7
      src/components/basis/flight/aprv/FlightPlanAprvSearch.js
  3. 122
      src/containers/basis/flight/aprv/FlightPlanAprvContainer.js
  4. 2
      src/views/basis/flight/aprv/FlightPlanAprv.js

30
src/components/basis/flight/aprv/FlightPlanAprvGrid.js

@ -1,13 +1,27 @@
import React from 'react';
import React, { useEffect, useState } from 'react';
import {Button, Card, Col, Row} from 'reactstrap';
import {GridDatabase} from '../../../crud/grid/GridDatatable';
const FlightPlanAprvGrid = ({data, columns, handleChangeSelected, handleClickAprv}) => {
const FlightPlanAprvGrid = ({data, columns, handleChangeSelected, handleClickAprv, joinList, selectGroup}) => {
const [aprvAuth, setAprvAuth] = useState(false);
useEffect(() => {
joinList.forEach(c => {
if(c.groupId === selectGroup.groupId) {
if(c.groupAuthCd === 'USER') {
setAprvAuth(false);
} else if(c.groupAuthCd === 'CREATE' || c.groupAuthCd === 'ADMIN') {
setAprvAuth(true);
}
}
})
}, [selectGroup])
return (
<div className='pal-card-box'>
// <div className='pal-card-box'>
<div className='mt-2'>
<Row>
<Col>
<div
@ -21,6 +35,11 @@ const FlightPlanAprvGrid = ({data, columns, handleChangeSelected, handleClickApr
color='primary'
size='sm'
onClick={handleClickAprv('aprv')}
{...aprvAuth ? (
{}
) : (
{disabled:true}
)}
>
승인
</Button.Ripple>
@ -29,6 +48,11 @@ const FlightPlanAprvGrid = ({data, columns, handleChangeSelected, handleClickApr
size='sm'
style={{marginLeft: 10}}
onClick={handleClickAprv('notAprov')}
{...aprvAuth ? (
{}
) : (
{disabled:true}
)}
>
미승인
</Button.Ripple>

7
src/components/basis/flight/aprv/FlightPlanAprvSearch.js

@ -66,7 +66,8 @@ const FlightPlanAprvSearch = ({searchData, handleChangeSearchData, handleSearch}
}
}
return (
<div className='pal-card-box'>
// <div className='pal-card-box'>
<div>
<Row>
<Col>
<div
@ -86,7 +87,7 @@ const FlightPlanAprvSearch = ({searchData, handleChangeSearchData, handleSearch}
</div>
</div>
<Card>
<CardBody className='pal-card-body'>
{/* <CardBody className='pal-card-body'> */}
<div className='search-cont'>
<dl>
<dt>
@ -163,7 +164,7 @@ const FlightPlanAprvSearch = ({searchData, handleChangeSearchData, handleSearch}
</dt>
</dl>
</div>
</CardBody>
{/* </CardBody> */}
</Card>
</Col>

122
src/containers/basis/flight/aprv/FlightPlanAprvContainer.js

@ -5,46 +5,79 @@ import moment from 'moment/moment';
import FlightPlanAprvSearch from '../../../../components/basis/flight/aprv/FlightPlanAprvSearch';
import FlightPlanAprvGrid from '../../../../components/basis/flight/aprv/FlightPlanAprvGrid';
import FlightPlanGrid from '../../../../components/basis/flight/plan/FlightPlanGrid';
import {useDispatch, useSelector} from 'react-redux';
import {useDispatch, useSelector, shallowEqual} from 'react-redux';
import * as FlightAction from '../../../../modules/basis/flight/actions/basisFlightAction';
import {useHistory} from 'react-router-dom';
import FlightPlanGroupGrid from '../../../../components/basis/flight/plan/FlightPlanGroupGrid';
import { JOIN_LIST } from '../../../../modules/basis/group/actions/basisGroupAction';
const initSearchData = {
schFltStDt: moment().set({'date': 1, 'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'),
schFltEndDt: moment().set({'h': 23, 'm': 59, 's': 59}).format('YYYY-MM-DD HH:mm:ss'),
aprvlYn: 'N',
groupId: '',
cstmrSno: 0,
};
const FlightPlanAprvContainer = () => {
const dispatch = useDispatch();
const [searchData, setSearchData] = useState(initSearchData);
const [selPlanSnoList, setSelPlanSnoList] = useState([]);
const {aprvList, aprvProc} = useSelector(state => state.flightState);
const history = useHistory();
const dispatch = useDispatch();
const history = useHistory();
const [searchData, setSearchData] = useState(initSearchData);
const [selPlanSnoList, setSelPlanSnoList] = useState([]);
const {list: aprvList, aprvProc, selectGroup} = useSelector(state => state.flightState);
const { joinList, joinListCount } = useSelector(state => state.groupState);
const { user } = useSelector(state => state.authState, shallowEqual);
const handleGroupSelect = ({ groupId, groupNm, groupAuthCd }) => {
// 권한 상관 없이 모두 조회 가능
const param = searchData;
param.cstmrSno = user.cstmrSno;
param.groupId = groupId;
dispatch(FlightAction.FLIGHT_PLAN_GROUP_SELECT( {cstmrSno: user.cstmrSno, groupId: groupId, groupNm: groupNm} ));
// groupId sessionStorage에 보관 (1 브라우저 1 tab에만 유효)
sessionStorage.setItem('groupId', groupId);
sessionStorage.setItem('cstmrSno', user.cstmrSno);
setSearchData(prevState => {
return {
...prevState,
cstmrSno: user.cstmrSno,
groupId: groupId
}
});
dispatch(FlightAction.FLIGHT_PLAN_LIST.request(param));
}
const handlerGroupCancel = () => {
dispatch(FlightAction.FLIGHT_PLAN_GROUP_SELECT( {cstmrSno: 0, groupId: '', groupNm: ''} ));
}
const handleMoveDetail = (id) => {
history.push(`/basis/flight/plan/detail/${id}`)
}
const columns = [
{id: 'planSno', name: '번호', cell: (row, i) => (<div>{i + 1}</div>)},
{id: 'fltPurpose', name: '비행목적', cell: row => (<div>{row.fltPurpose}</div>)},
{
id: 'fltMethod', name: '비행방식', cell: row => {
const displayName = row.areaList && row.areaList.length > 0 && row.areaList[0].fltMethod || '-';
return <div>{displayName}</div>
}
},
{id: 'schFltStDt', name: '출발일', cell: row => (<div>{row.schFltStDt}</div>)},
{id: 'aprvlYn', name: '승인여부', cell: row => (<div>{row.aprvlYn}</div>)},
{
id: 'moveDetail', name: '상세보기', cell: row => {
return <Button.Ripple color='primary' size='sm' onClick={() => {
handleMoveDetail(row.planSno)}
}>상세</Button.Ripple>;
{id: 'planSno', name: '번호', cell: (row, i) => (<div>{i + 1}</div>)},
{id: 'fltPurpose', name: '비행목적', cell: row => (<div>{row.fltPurpose}</div>)},
{
id: 'fltMethod', name: '비행방식', cell: row => {
const displayName = row.areaList && row.areaList.length > 0 && row.areaList[0].fltMethod || '-';
return <div>{displayName}</div>
}
},
{id: 'schFltStDt', name: '출발일', cell: row => (<div>{row.schFltStDt}</div>)},
{id: 'aprvlYn', name: '승인여부', cell: row => (<div>{row.aprvlYn}</div>)},
{
id: 'moveDetail', name: '상세보기', cell: row => {
return <Button.Ripple color='primary' size='sm' onClick={() => {
handleMoveDetail(row.planSno)}
}>상세</Button.Ripple>;
}
}
];
@ -52,6 +85,15 @@ const FlightPlanAprvContainer = () => {
useEffect(() => {
handleSearch(searchData);
}, [])
useEffect(() => {
if (user?.cstmrSno) {
dispatch(
JOIN_LIST.request({
cstmrSno: user?.cstmrSno
})
);
}
}, [user])
useEffect(() => {
if (aprvProc && aprvProc.result > 0) {
handleSearch(searchData);
@ -90,7 +132,7 @@ const FlightPlanAprvContainer = () => {
<CustomMainLayout title={"비행계획서 승인"}>
<div className='pal-card-box'>
<Row>
<Col sm='12'>
{/* <Col sm='12'>
<FlightPlanAprvSearch
searchData={searchData}
handleChangeSearchData={handleChangeSearchData}
@ -103,12 +145,44 @@ const FlightPlanAprvContainer = () => {
handleClickAprv={handleClickAprv}
/>
{/* <FlightPlanGrid
<FlightPlanGrid
planListData={aprvList}
handleMoveDetail={handleMoveDetail}
handleChangeSelected={handleChangeSelected}
handleClickAprv={handleClickAprv}
/> */}
/>
</Col> */}
<Col sm='4'>
<FlightPlanGroupGrid
data = {joinList}
count = {joinListCount}
selectGroup = {selectGroup}
handleGroupSelect = {handleGroupSelect}
handlerGroupCancel = {handlerGroupCancel}
/>
</Col>
<Col sm='8'>
{selectGroup.cstmrSno !==0 ? (
<>
<FlightPlanAprvSearch
searchData={searchData}
handleChangeSearchData={handleChangeSearchData}
handleSearch={handleSearch}
/>
<FlightPlanAprvGrid
data={aprvList}
columns={columns}
handleChangeSelected={handleChangeSelected}
handleClickAprv={handleClickAprv}
joinList={joinList}
selectGroup={selectGroup}
/>
</>
) : (
<div className='no-dataTable'>
나의 그룹 목록에서 상세보기를 클릭하세요.
</div>
)}
</Col>
</Row>
</div>

2
src/views/basis/flight/aprv/FlightPlanAprv.js

@ -2,7 +2,7 @@ import '@styles/react/libs/flatpickr/flatpickr.scss';
import '@styles/react/libs/tables/react-dataTable-component.scss';
import '../../../../assets/css/custom.css';
import React from 'react';
import FlightPlanAprvContainer from '../../../../containers/basis/flight/aprv/FlightPlanAprvContainer';
import FlightPlanAprvContainer from '../../../../containers/basis/flight/aprv/FlightPlanAprvContainer_bdf';
const FlightPlanAprv = (props) => <FlightPlanAprvContainer/>;

Loading…
Cancel
Save