Browse Source

[권한정리] 비행계획목록

pull/2/head
junh_eee(이준희) 2 years ago
parent
commit
e53a98f4c4
  1. 43
      src/components/basis/flight/plan/FlightPlanGrid.js
  2. 2
      src/components/basis/flight/plan/FlightPlanGroupGrid.js
  3. 327
      src/components/basis/flight/plan/FlightPlanSearch.js
  4. 33
      src/containers/basis/flight/plan/FlightPlanContainer.js

43
src/components/basis/flight/plan/FlightPlanGrid.js

@ -5,7 +5,15 @@ import { Redirect } from 'react-router-dom';
import { Link, useHistory } from 'react-router-dom';
import { useSelector } from 'react-redux';
const FlightPlanGrid = ({ movePage, planListData, pagination, paginationPerPage, paginationRowsPerPageOptions }) => {
const FlightPlanGrid = ({
movePage,
planListData,
pagination,
paginationPerPage,
paginationRowsPerPageOptions,
isMyGroup,
user
}) => {
const { loading } = useSelector(state => state.loadingReducer);
const columns = [
{ id: 'planSno', name: '번호', cell: (row, i) => <div>{i + 1}</div> },
@ -36,10 +44,28 @@ const FlightPlanGrid = ({ movePage, planListData, pagination, paginationPerPage,
id: 'moveDetail',
name: '상세보기',
cell: row => {
let mine = false;
if (user.authId === 'SUPER') {
mine = true;
} else if (user.authId === 'ADMIN' || user.authId === 'USER') {
if (row.createUserId === user.userId) {
mine = true;
}
}
console.log(row.createUserId, user.userId);
return (
<Link to={`/basis/flight/plan/detail/${row.planSno}`} size='sm'>
상세보기
</Link>
<>
{mine ? (
<>
<Link to={`/basis/flight/plan/detail/${row.planSno}`} size='sm'>
상세보기
</Link>
</>
) : (
<>-</>
)}
</>
);
}
}
@ -57,7 +83,12 @@ const FlightPlanGrid = ({ movePage, planListData, pagination, paginationPerPage,
</span>
</div>
<div className='d-flex align-items-center'>
<Button.Ripple color='primary' size='sm' onClick={movePage}>
<Button.Ripple
color='primary'
size='sm'
onClick={movePage}
{...(isMyGroup ? {} : { disabled: true })}
>
{/* 계획서 생성 */}
비행계획서 신청
</Button.Ripple>
@ -82,7 +113,7 @@ const FlightPlanGrid = ({ movePage, planListData, pagination, paginationPerPage,
pagination={pagination}
paginationPerPage={paginationPerPage}
paginationRowsPerPageOptions={paginationRowsPerPageOptions}
// pagination={props.pagination}
// pagination={props.pagination}
/>
{/* 검색된 데이터가 없습니다. */}
</div>

2
src/components/basis/flight/plan/FlightPlanGroupGrid.js

@ -9,7 +9,7 @@ const FlightPlanGroupGrid = ({
handlerGroupCancel,
handleGroupSelect,
paginationRowsPerPageOptions,
pagination,
pagination
}) => {
const columns = [
{

327
src/components/basis/flight/plan/FlightPlanSearch.js

@ -1,172 +1,171 @@
import React, {useState} from 'react';
import {Button, Card, CardBody, Col, CustomInput, Row} from 'reactstrap';
import {Search} from 'react-feather';
import React, { useState } from 'react';
import { Button, Card, CardBody, Col, CustomInput, Row } from 'reactstrap';
import { Search } from 'react-feather';
import Flatpickr from 'react-flatpickr';
import moment from 'moment';
const FlightPlanSearch = ({searchData, handleChangeSearchData, handleSearch}) => {
const {schFltStDt, schFltEndDt, aprvlYn} = searchData;
const initCheckState = {
'all': aprvlYn == 'A',
'yes': (aprvlYn == 'Y' || aprvlYn == 'A'),
'no': (aprvlYn == 'N' || aprvlYn == 'A'),
}
const [checkState, setCheckState] = useState(initCheckState);
const handleClickSearch = (e) => {
handleSearch(searchData);
}
const handleChangeInput = (dates, value, config) => {
if (dates.length === 2) {
const schFltStDt = moment(dates[0]).format('YYYY-MM-DD HH:mm:ss');
const schFltEndDt = moment(dates[1]).set({'h': 23, 'm': 59, 's': 59}).format('YYYY-MM-DD HH:mm:ss');
handleChangeSearchData({schFltStDt, schFltEndDt})
}
const FlightPlanSearch = ({
searchData,
handleChangeSearchData,
handleSearch
}) => {
const { schFltStDt, schFltEndDt, aprvlYn } = searchData;
const initCheckState = {
all: aprvlYn == 'A',
yes: aprvlYn == 'Y' || aprvlYn == 'A',
no: aprvlYn == 'N' || aprvlYn == 'A'
};
const [checkState, setCheckState] = useState(initCheckState);
const handleClickSearch = e => {
handleSearch(searchData);
};
const handleChangeInput = (dates, value, config) => {
if (dates.length === 2) {
const schFltStDt = moment(dates[0]).format('YYYY-MM-DD HH:mm:ss');
const schFltEndDt = moment(dates[1])
.set({ h: 23, m: 59, s: 59 })
.format('YYYY-MM-DD HH:mm:ss');
handleChangeSearchData({ schFltStDt, schFltEndDt });
}
const handleChangeCheckbox = (e) => {
const {name, value, checked} = e.target;
let val;
switch (value) {
case 'A':
val = checked ? 'A' : '';
handleChangeSearchData({[name]: val})
setCheckState({
'all': checked,
'yes': checked,
'no': checked
})
break;
case 'Y':
if (checked && checkState.no) val = 'A'
else if (checked && !checkState.no) val = 'Y'
else if (!checked && checkState.no) val = 'N'
else if (!checked && !checkState.no) val = ''
handleChangeSearchData({[name]: val})
setCheckState(prevState => ({
'all': prevState.no && checked,
'yes': checked,
'no': prevState.no
}))
break;
case 'N':
if (checked && checkState.yes) val = 'A'
else if (checked && !checkState.yes) val = 'N'
else if (!checked && checkState.yes) val = 'Y'
else if (!checked && !checkState.yes) val = ''
handleChangeSearchData({[name]: val})
setCheckState(prevState => ({
'all': prevState.yes && checked,
'yes': prevState.yes,
'no': checked
}))
break;
default:
break;
}
};
const handleChangeCheckbox = e => {
const { name, value, checked } = e.target;
let val;
switch (value) {
case 'A':
val = checked ? 'A' : '';
handleChangeSearchData({ [name]: val });
setCheckState({
all: checked,
yes: checked,
no: checked
});
break;
case 'Y':
if (checked && checkState.no) val = 'A';
else if (checked && !checkState.no) val = 'Y';
else if (!checked && checkState.no) val = 'N';
else if (!checked && !checkState.no) val = '';
handleChangeSearchData({ [name]: val });
setCheckState(prevState => ({
all: prevState.no && checked,
yes: checked,
no: prevState.no
}));
break;
case 'N':
if (checked && checkState.yes) val = 'A';
else if (checked && !checkState.yes) val = 'N';
else if (!checked && checkState.yes) val = 'Y';
else if (!checked && !checkState.yes) val = '';
handleChangeSearchData({ [name]: val });
setCheckState(prevState => ({
all: prevState.yes && checked,
yes: prevState.yes,
no: checked
}));
break;
default:
break;
}
return (
<div>
<Row>
<Col>
<div
className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<div>
<h4>검색조건</h4>
</div>
<div className='d-flex align-items-center'>
<Button.Ripple
color='primary'
size='sm'
onClick={handleClickSearch}
>
<Search size={16}/>
검색
</Button.Ripple>
</div>
</div>
<Card>
<div className='search-cont'>
<dl>
<dt>
<div className='search-box'>
<div className='search-list-ti'>신청일</div>
<div className='search-list'>
<div className='search-list-cont'>
<Row>
<Col className='list-input' xl='4' md='6' sm='12'>
<div className='d-flex align-items-center calendar-flat'>
<Flatpickr
id='searchDate'
value={[
schFltStDt,
schFltEndDt
]}
options={{
mode: 'range',
// defaultDate: [
// props.params.stDate,
// props.params.endDate
// ]
}}
onChange={handleChangeInput}
className='form-control flat-picker bg-transparent border-0 shadow-none'
/>
</div>
</Col>
</Row>
</div>
</div>
</div>
</dt>
<dt>
<div className='search-box'>
<div className='search-list-ti'>승인여부</div>
<div className='search-list'>
<div className='search-list-cont'>
<CustomInput
inline
type='checkbox'
id='exampleCustomCheckbox'
label='전체'
name="aprvlYn"
value="A"
// checked={true}
checked={checkState.all}
onChange={handleChangeCheckbox}
/>
<CustomInput
inline
type='checkbox'
id='exampleCustomCheckbox2'
label='승인'
name="aprvlYn"
value="Y"
checked={checkState.yes}
onChange={handleChangeCheckbox}
/>
<CustomInput
inline
type='checkbox'
id='exampleCustomCheckbox3'
label='미승인'
name="aprvlYn"
value="N"
checked={checkState.no}
onChange={handleChangeCheckbox}
/>
</div>
</div>
</div>
</dt>
</dl>
};
return (
<div>
<Row>
<Col>
<div className='mt-2 cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<div>
<h4>검색조건</h4>
</div>
<div className='d-flex align-items-center'>
<Button.Ripple
color='primary'
size='sm'
onClick={handleClickSearch}
>
<Search size={16} />
검색
</Button.Ripple>
</div>
</div>
<Card>
<div className='search-cont'>
<dl>
<dt>
<div className='search-box'>
<div className='search-list-ti'>신청일</div>
<div className='search-list'>
<div className='search-list-cont'>
<Row>
<Col className='list-input' xl='4' md='6' sm='12'>
<div className='d-flex align-items-center calendar-flat'>
<Flatpickr
id='searchDate'
value={[schFltStDt, schFltEndDt]}
options={{
mode: 'range'
// defaultDate: [
// props.params.stDate,
// props.params.endDate
// ]
}}
onChange={handleChangeInput}
className='form-control flat-picker bg-transparent border-0 shadow-none'
/>
</div>
</Card>
</Col>
</Row>
</div>
)
}
</Col>
</Row>
</div>
</div>
</div>
</dt>
<dt>
<div className='search-box'>
<div className='search-list-ti'>승인여부</div>
<div className='search-list'>
<div className='search-list-cont'>
<CustomInput
inline
type='checkbox'
id='exampleCustomCheckbox'
label='전체'
name='aprvlYn'
value='A'
// checked={true}
checked={checkState.all}
onChange={handleChangeCheckbox}
/>
<CustomInput
inline
type='checkbox'
id='exampleCustomCheckbox2'
label='승인'
name='aprvlYn'
value='Y'
checked={checkState.yes}
onChange={handleChangeCheckbox}
/>
<CustomInput
inline
type='checkbox'
id='exampleCustomCheckbox3'
label='미승인'
name='aprvlYn'
value='N'
checked={checkState.no}
onChange={handleChangeCheckbox}
/>
</div>
</div>
</div>
</dt>
</dl>
</div>
</Card>
</Col>
</Row>
</div>
);
};
export default FlightPlanSearch;

33
src/containers/basis/flight/plan/FlightPlanContainer.js

@ -39,9 +39,10 @@ const FlightPlanContainer = () => {
state => state.groupState
);
const { user } = useSelector(state => state.authState, shallowEqual);
const [params, setParams] = useState({});
const [isMyGroup, setIsMyGroup] = useState();
const moveFlightPlanDetailPage = () => {
if (planDetailData) {
dispatch(FlightAction.FLIGHT_PLAN_DETAIL_INIT());
@ -91,6 +92,16 @@ const FlightPlanContainer = () => {
});
dispatch(FlightAction.FLIGHT_PLAN_LIST.request(param));
let my = false;
if (user.authId === 'SUPER') {
my = true;
} else if (user.authId === 'ADMIN' || user.authId === 'USER') {
if (groupAuthCd) {
my = true;
}
}
setIsMyGroup(my);
};
const handlerGroupCancel = () => {
@ -123,19 +134,8 @@ const FlightPlanContainer = () => {
return (
<CustomMainLayout title={'비행계획서 신청'}>
{/* <div className='pal-card-box'> */}
<div className='mt-2 pal-card-box'>
<div className='pal-card-box'>
<Row>
{/* <Col sm='4'>
<FlightPlanGroupGrid
data={joinList}
count={joinListCount}
selectGroup={selectGroup}
handleGroupSelect={handleGroupSelect}
handlerGroupCancel={handlerGroupCancel}
/>
</Col> */}
{/* <Col sm='4'> */}
<Col sm='12' lg='12'>
{user ? (
<>
@ -156,9 +156,7 @@ const FlightPlanContainer = () => {
) : (
<></>
)}
</Col>
{/* <Col sm='8'> */}
<Col sm='12' lg='12'>
{selectGroup.cstmrSno !== 0 ? (
<>
@ -173,12 +171,11 @@ const FlightPlanContainer = () => {
pagination={true}
paginationPerPage={10}
paginationRowsPerPageOptions={[10, 20, 30, 40]}
// handlerPageChange={handlerPageChange}
// columns={columns}
isMyGroup={isMyGroup}
user={user}
/>
</>
) : (
// <div className='no-dataTable'>
<div className='mt-2 no-dataTable'>
그룹 목록에서 상세보기를 클릭하세요.
</div>

Loading…
Cancel
Save