Browse Source

사용자관리 그룹화 작업

pull/2/head
junh_eee(이준희) 2 years ago
parent
commit
acb1db2c96
  1. 41
      src/components/basis/group/BasisGroupGrid.js
  2. 14
      src/components/basis/group/BasisGroupUsersGrid.js
  3. 3
      src/components/basis/group/BasisGroupUsersSearch.js
  4. 27
      src/containers/basis/group/BasisGroupApprovalContainer.js
  5. 324
      src/containers/basis/group/BasisGroupUsersContainer.js

41
src/components/basis/group/BasisGroupGrid.js

@ -1,38 +1,18 @@
import { GridDatabase } from '../../crud/grid/GridDatatable';
import {
Row,
Col,
Table,
Badge,
UncontrolledDropdown,
DropdownMenu,
DropdownItem,
DropdownToggle,
Card,
CardHeader,
CardBody,
CardTitle,
CardSubtitle,
ButtonGroup,
Button,
Input,
CustomInput,
FormGroup,
Spinner
} from 'reactstrap';
import { ExcelExportButton } from '../../crud/excel/ExcelExportButton';
import { Card } from 'reactstrap';
export const BasisGroupGrid = props => {
return (
<div className='pal-card-box'>
<Row>
<Col>
// <div className='pal-card-box'>
// <Row>
// <Col>
<>
<div className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
<div>
<h4>{props.title} 목록</h4>
<span className='search-case'>검색결과 {props.count}</span>
</div>
<div className='d-flex align-items-center'>
{/* <div className='d-flex align-items-center'>
<Button.Ripple
color='primary'
size='sm'
@ -40,7 +20,7 @@ export const BasisGroupGrid = props => {
>
그룹생성
</Button.Ripple>
</div>
</div> */}
</div>
<div className='invoice-list-wrapper'>
<Card>
@ -58,8 +38,9 @@ export const BasisGroupGrid = props => {
</div>
</Card>
</div>
</Col>
</Row>
</div>
</>
// </Col>
// </Row>
// </div>
);
};

14
src/components/basis/group/BasisGroupUsersGrid.js

@ -3,10 +3,11 @@ import { Row, Col, Card } from 'reactstrap';
export const BasisGroupUsersGrid = props => {
return (
<div className='pal-card-box'>
<Row>
<Col>
<div className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>
// <div className='pal-card-box'>
// <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>{props.title} 목록</h4>
<span className='search-case'>검색결과 {props.count}</span>
@ -34,8 +35,9 @@ export const BasisGroupUsersGrid = props => {
</div>
</Card>
</div>
</Col>
{/* </Col>
</Row>
</div>
</div> */}
</>
);
};

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

@ -27,7 +27,8 @@ import moment from 'moment';
export const BasisGroupUsersSearch = props => {
return (
<div className='pal-card-box'>
// <div className='pal-card-box'>
<div>
<Row>
<Col>
<div className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'>

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

@ -6,7 +6,7 @@ import { BasisGroupApprovalSearch } from '../../../components/basis/group/BasisG
import { CustomMainLayout } from '../../../components/layout/CustomMainLayout';
import { ConfirmModal } from '../../../components/modal/ConfirmModal';
import * as Actions from '../../../modules/basis/group/actions/basisGroupAction';
import * as GroupActions 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 => {
@ -20,7 +20,7 @@ export const BasisGroupApprovalContainer = props => {
const titleName = '승인관리';
const [params, setParams] = useState({
cstmrSno: user?.cstmrSno,
aprvYn: '',
aprvYn: ''
});
const column = [
{
@ -66,7 +66,7 @@ export const BasisGroupApprovalContainer = props => {
row?.groupId,
row?.groupNm,
row?.groupAuthCd,
row?.aprvlYn,
row?.aprvlYn
)
}
>
@ -90,10 +90,12 @@ export const BasisGroupApprovalContainer = props => {
dispatch(
Actions.APPROVAL_LIST.request({
searchParams: { cstmrSno: user?.cstmrSno, aprvYn: '', groupId: groupId }
searchParams: {
cstmrSno: user?.cstmrSno,
aprvYn: '',
groupId: groupId
}
})
);
}
};
@ -121,7 +123,6 @@ export const BasisGroupApprovalContainer = props => {
cstmrSno: user?.cstmrSno,
groupId: selectData?.groupId
})
);
}
}, [user]);
@ -168,13 +169,7 @@ export const BasisGroupApprovalContainer = props => {
// minWidth: '102px',
sortable: true,
cell: row => {
return (
<Link
to={`/basis/dron/detail/${row.arcrftSno}`}
>
상세보기
</Link>
);
return <Link to={`/basis/dron/detail/${row.arcrftSno}`}>상세보기</Link>;
}
}
];
@ -283,7 +278,6 @@ export const BasisGroupApprovalContainer = props => {
}
];
const onKeyPress = e => {
if (e.key == 'Enter') {
// handlerSearch();
@ -365,8 +359,7 @@ export const BasisGroupApprovalContainer = props => {
<Col sm='12'>
{!selectData ? (
<>
<div className='no-dataTable'>
</div>
<div className='no-dataTable'></div>
</>
) : (
<BasisGroupApprovalGrid

324
src/containers/basis/group/BasisGroupUsersContainer.js

@ -12,16 +12,8 @@ import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'
export const BasisGroupUsersContainer = props => {
const dispatch = useDispatch();
const history = useHistory();
const {
joinList,
joinListCount,
selectGroup,
groupList,
groupListCount,
userList,
userListCount
} = useSelector(state => state.groupState);
const { joinList, joinListCount, selectData, userList, userCount } =
useSelector(state => state.groupState);
const { user } = useSelector(state => state.authState);
const [params, setParams] = useState({
@ -74,36 +66,25 @@ export const BasisGroupUsersContainer = props => {
name: '',
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>
// );
return (
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?.groupAuthCd, row?.aprvlYn)
handlerDetail(
row?.groupId,
row?.groupNm,
row?.groupAuthCd,
row?.aprvlYn
)
}
>
상세보기
@ -117,7 +98,7 @@ export const BasisGroupUsersContainer = props => {
{
name: '그룹명',
selector: 'groupNm',
minWidth: '150px',
// minWidth: '102px',
sortable: true,
cell: row => {
return row?.groupNm;
@ -127,7 +108,7 @@ export const BasisGroupUsersContainer = props => {
{
name: '그룹 코드',
selector: 'groupId',
minWidth: '102px',
// minWidth: '102px',
sortable: true,
cell: row => {
return row?.groupId;
@ -136,7 +117,7 @@ export const BasisGroupUsersContainer = props => {
{
name: '사용자 명',
selector: 'memberName',
minWidth: '102px',
// minWidth: '102px',
sortable: true,
cell: row => {
return row?.memberName;
@ -145,7 +126,7 @@ export const BasisGroupUsersContainer = props => {
{
name: '사용자 ID',
selector: 'userId',
minWidth: '120px',
// minWidth: '102px',
sortable: true,
cell: row => {
return row?.userId;
@ -155,7 +136,7 @@ export const BasisGroupUsersContainer = props => {
{
name: '권한명',
selector: 'groupAuthCd',
minWidth: '105px',
// minWidth: '102px',
sortable: true,
cell: row => {
return row?.groupAuthCd;
@ -164,7 +145,7 @@ export const BasisGroupUsersContainer = props => {
{
name: '가입 일시',
selector: 'joinDt',
minWidth: '150px',
// minWidth: '150px',
sortable: true,
cell: row => {
return row?.joinDt;
@ -173,7 +154,7 @@ export const BasisGroupUsersContainer = props => {
{
name: '권한 변경',
// selector: 'cntrlStDate',
minWidth: '130px',
minWidth: '300px',
sortable: false,
cell: row => {
const my = joinList?.find((prev, idx) => {
@ -181,71 +162,186 @@ export const BasisGroupUsersContainer = props => {
return prev;
}
});
let m_disabled = false;
let l_disabled = false;
let n_disabled = false;
if (row?.groupAuthCd === 'MASTER') {
return <div>수정불가</div>;
} else if (row?.groupAuthCd === 'LEADER') {
if (my?.groupAuthCd === 'MASTER') {
return (
<Button.Ripple
color='primary'
className='badge badge-primary'
onClick={() => handlerUserConfirm(row?.cstmrGroupSno)}
>
NORMAL
</Button.Ripple>
);
if (user.authId === 'SUPER') {
{
}
} else if (user.authId === 'ADMIN') {
if (my.groupAuthCd === 'MASTER') {
if (row.groupAuthCd === 'LEADER') {
l_disabled = true;
} else if (row.groupAuthCd === 'NORMAL') {
m_disabled = true;
n_disabled = true;
}
} else if (my.groupAuthCd === 'LEADER') {
if (row.groupAuthCd === 'MASTER') {
m_disabled = true;
l_disabled = true;
n_disabled = true;
} else if (row.groupAuthCd === 'LEADER') {
m_disabled = true;
l_disabled = true;
n_disabled = true;
} else if (row.groupAuthCd === 'NORMAL') {
m_disabled = true;
n_disabled = true;
}
} else {
return <div>수정불가</div>;
//내 권한이 마스터도 리더도 아니니까 우리그룹이 아님
m_disabled = true;
l_disabled = true;
n_disabled = true;
}
} else if (row?.groupAuthCd === 'NORMAL') {
if (my?.groupAuthCd === 'MASTER' || my?.groupAuthCd === 'LEADER') {
return (
<Button.Ripple
color='danger'
className='badge badge-danger'
onClick={() => handlerAdminConfirm(row?.cstmrGroupSno)}
>
LEADER
</Button.Ripple>
);
} else if (user.authId === 'ROLE_USER') {
if (my.groupAuthCd === 'MASTER') {
if (row.groupAuthCd === 'LEADER') {
l_disabled = true;
} else if (row.groupAuthCd === 'NORMAL') {
m_disabled = true;
n_disabled = true;
}
} else if (my.groupAuthCd === 'LEADER') {
if (row.groupAuthCd === 'MASTER') {
m_disabled = true;
l_disabled = true;
n_disabled = true;
} else if (row.groupAuthCd === 'LEADER') {
m_disabled = true;
l_disabled = true;
n_disabled = true;
} else if (row.groupAuthCd === 'NORMAL') {
m_disabled = true;
n_disabled = true;
}
}
},
{
name: '위임 하기',
// minWidth: '102px',
sortable: false,
cell: row => {
const my = joinList?.find((prev, idx) => {
if (prev.groupId === row?.groupId) {
return prev;
}
});
if (row?.groupAuthCd === 'LEADER') {
if (my?.groupAuthCd === 'MASTER') {
return (
const master = (
<>
<Button.Ripple
color='warning'
className='badge badge-warning'
style={{ marginRight: '0.35rem' }}
onClick={() =>
handlerCreaterConfirm(row?.cstmrGroupSno, my?.cstmrGroupSno)
handlerMaster(row?.cstmrGroupSno, my?.cstmrGroupSno)
}
disabled={m_disabled}
>
MASTER
</Button.Ripple>
</>
);
const leader = (
<>
<Button.Ripple
color='danger'
className='badge badge-danger'
style={{ marginRight: '0.35rem' }}
onClick={() => handlerLeader(row?.cstmrGroupSno)}
disabled={l_disabled}
>
LEADER
</Button.Ripple>
</>
);
const normal = (
<>
<Button.Ripple
color='primary'
className='badge badge-primary'
onClick={() => handlerNormal(row?.cstmrGroupSno)}
disabled={n_disabled}
>
NORMAL
</Button.Ripple>
</>
);
return (
<>
{master}
{leader}
{normal}
</>
);
// const my = joinList?.find((prev, idx) => {
// if (prev.groupId === row?.groupId) {
// return prev;
// }
// });
// if (row?.groupAuthCd === 'MASTER') {
// return <div>수정불가</div>;
// } else if (row?.groupAuthCd === 'LEADER') {
// if (my?.groupAuthCd === 'MASTER') {
// return (
// <Button.Ripple
// color='primary'
// className='badge badge-primary'
// onClick={() => handlerUserConfirm(row?.cstmrGroupSno)}
// >
// NORMAL
// </Button.Ripple>
// );
// } else {
// return <div>수정불가</div>;
// }
// } else if (row?.groupAuthCd === 'NORMAL') {
// if (my?.groupAuthCd === 'MASTER' || my?.groupAuthCd === 'LEADER') {
// return (
// <Button.Ripple
// color='danger'
// className='badge badge-danger'
// onClick={() => handlerAdminConfirm(row?.cstmrGroupSno)}
// >
// LEADER
// </Button.Ripple>
// );
// }
// }
}
}
}
}
// {
// name: '위임 하기',
// // minWidth: '102px',
// sortable: false,
// cell: row => {
// const my = joinList?.find((prev, idx) => {
// if (prev.groupId === row?.groupId) {
// return prev;
// }
// });
// if (row?.groupAuthCd === 'LEADER') {
// if (my?.groupAuthCd === 'MASTER') {
// return (
// <Button.Ripple
// color='warning'
// className='badge badge-warning'
// onClick={() =>
// handlerCreaterConfirm(row?.cstmrGroupSno, my?.cstmrGroupSno)
// }
// >
// MASTER
// </Button.Ripple>
// );
// }
// }
// }
// }
];
// useEffect(() => {
useEffect(() => {
// handlerSearch();
// }, []);
handlerCancel();
}, []);
const handlerSearch = () => {
if (params.cstmrSno && user?.cstmrSno) {
@ -268,17 +364,17 @@ export const BasisGroupUsersContainer = props => {
}
}, [user]);
const handlerDetail = (groupId, groupAuthCd, aprvlYn) => {
const handlerDetail = (groupId, groupNm, groupAuthCd, aprvlYn) => {
if (
groupAuthCd === 'MASTER' ||
user.authId === 'SUPER' ||
user.authId === 'ADMIN' ||
(aprvlYn === 'Y' && groupAuthCd === 'LEADER')
) {
dispatch(Actions.SELECT({ groupId: groupId, groupNm, groupNm }));
const param = params;
param.groupId = groupId;
param.groupAuthCd = groupAuthCd;
param.aprvlYn = aprvlYn;
param.memberNm = '';
dispatch(
Actions.USER_LIST.request({
@ -291,10 +387,20 @@ export const BasisGroupUsersContainer = props => {
title: '권한 확인',
desc: '사용자관리 확인을 위해서는 운영자 권한이 필요합니다. 운영자에게 권한을 부여받고 다시 시도해 주세요.'
});
return;
}
};
const handlerAdminConfirm = cstmrGroupSno => {
const handlerCancel = () => {
dispatch(Actions.SELECT());
setParams({
...params,
groupId: '',
memberNm: ''
});
};
const handlerLeader = cstmrGroupSno => {
setModal({
isOpen: true,
title: '권한 확인',
@ -314,7 +420,7 @@ export const BasisGroupUsersContainer = props => {
}
};
const handlerUserConfirm = cstmrGroupSno => {
const handlerNormal = cstmrGroupSno => {
setModal({
isOpen: true,
title: '권한 확인',
@ -328,7 +434,7 @@ export const BasisGroupUsersContainer = props => {
});
};
const handlerCreaterConfirm = (row, my) => {
const handlerMaster = (row, my) => {
setModal({
isOpen: true,
title: '권한 위임',
@ -393,38 +499,42 @@ export const BasisGroupUsersContainer = props => {
/>
</Col>
<Col sm='8'>
{!userList ? (
<div className='no-dataTable'>
그룹 목록에서 상세보기를 클릭하세요.
</div>
) : (
{selectData ? (
<>
<BasisGroupUsersSearch
handlerInput={handlerInput}
// handlerSearch={handlerSearch}
handlerSearch={handlerSearch}
params={params}
onKeyPress={onKeyPress}
setParams={setParams}
/>
{/* <BasisGroupUsersGrid
<BasisGroupUsersGrid
data={userList}
title={'그룹'}
title={'사용자'}
columns={userColumns}
count={userListCount}
count={userCount}
pagination={false}
/> */}
/>
</>
) : (
<div className='no-dataTable'>
그룹 목록에서 상세보기를 클릭하세요.
</div>
)}
</Col>
<Col sm='12'>
{/* <Col sm='12'>
{selectData ? (
<BasisGroupUsersGrid
data={userList}
title={'그룹'}
title={'사용자'}
columns={userColumns}
count={userListCount}
count={userCount}
pagination={false}
/>
</Col>
) : (
<div className='no-dataTable'></div>
)}
</Col> */}
</Row>
</div>
@ -434,7 +544,7 @@ export const BasisGroupUsersContainer = props => {
handlerConfirm={handlerAuthSave}
color='primary'
/>
{/* <InfoModal model={infoModal} setModal={setInfoModal} /> */}
<InfoModal modal={infoModal} setModal={setInfoModal} />
</CustomMainLayout>
);
};

Loading…
Cancel
Save