Browse Source

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

pull/2/head
이학준 2 years ago
parent
commit
d7ff0f5c8a
  1. 4
      src/components/basis/group/BasisGroupUsersSearch.js
  2. 2
      src/containers/basis/flight/plan/FlightPlanContainer.js
  3. 215
      src/containers/basis/group/BasisGroupUsersContainer.js
  4. 11
      src/modules/basis/group/actions/basisGroupAction.ts
  5. 14
      src/modules/basis/group/models/basisGroupModel.ts
  6. 7
      src/modules/basis/group/reducers/basisGroupReducer.ts

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

@ -49,7 +49,7 @@ export const BasisGroupUsersSearch = props => {
<CardBody className='pal-card-body'> <CardBody className='pal-card-body'>
<div className='search-cont'> <div className='search-cont'>
<dl> <dl>
<dt> {/* <dt>
<div className='search-box'> <div className='search-box'>
<div className='search-list-ti'>그룹명</div> <div className='search-list-ti'>그룹명</div>
<div className='search-list'> <div className='search-list'>
@ -74,7 +74,7 @@ export const BasisGroupUsersSearch = props => {
</div> </div>
</div> </div>
</div> </div>
</dt> </dt> */}
<dt> <dt>
<div className='search-box'> <div className='search-box'>
<div className='search-list-ti'>사용자 </div> <div className='search-list-ti'>사용자 </div>

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

@ -60,8 +60,6 @@ const FlightPlanContainer = () => {
})); }));
}; };
const handleGroupSelect = ({ groupId, groupNm, groupAuthCd }) => { const handleGroupSelect = ({ groupId, groupNm, groupAuthCd }) => {
// 권한 상관 없이 모두 조회 가능 // 권한 상관 없이 모두 조회 가능
const param = searchData; const param = searchData;

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

@ -1,27 +1,35 @@
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 { useHistory } from 'react-router-dom';
import { Button } from 'reactstrap'; import { Button, Row, Col } from 'reactstrap';
import { BasisGroupGrid } from '../../../components/basis/group/BasisGroupGrid';
import { BasisGroupUsersGrid } from '../../../components/basis/group/BasisGroupUsersGrid'; import { BasisGroupUsersGrid } from '../../../components/basis/group/BasisGroupUsersGrid';
import { BasisGroupUsersSearch } from '../../../components/basis/group/BasisGroupUsersSearch'; import { BasisGroupUsersSearch } from '../../../components/basis/group/BasisGroupUsersSearch';
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 { InfoModal } from '../../../components/modal/InfoModal';
import * as Actions from '../../../modules/basis/group/actions/basisGroupAction'; import * as Actions from '../../../modules/basis/group/actions/basisGroupAction';
export const BasisGroupUsersContainer = props => { export const BasisGroupUsersContainer = props => {
const { userList, userCount, joinList, joinListCount } = useSelector(
state => state.groupState
);
const { user } = useSelector(state => state.authState);
const dispatch = useDispatch(); const dispatch = useDispatch();
const history = useHistory(); const history = useHistory();
const {
joinList,
joinListCount,
selectGroup,
groupList,
groupListCount,
userList,
userListCount
} = useSelector(state => state.groupState);
const { user } = useSelector(state => state.authState);
const [params, setParams] = useState({ const [params, setParams] = useState({
cstmrSno: user?.cstmrSno cstmrSno: user?.cstmrSno,
groupId: '',
groupAuthCd: '',
aprvlYn: ''
}); });
const titleName = '사용자 관리'; const titleName = '사용자 관리';
const [saveData, setSaveData] = useState({ const [saveData, setSaveData] = useState({
@ -36,7 +44,76 @@ export const BasisGroupUsersContainer = props => {
desc: '' desc: ''
}); });
const [infoModal, setInfoModal] = useState({
isOpen: false,
title: '',
desc: ''
});
const columns = [ const columns = [
{
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: '',
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 (
<Button.Ripple
color='primary'
className='badge badge-primary'
onClick={() =>
handlerDetail(row?.groupId, row?.groupAuthCd, row?.aprvlYn)
}
>
상세보기
</Button.Ripple>
);
}
}
];
const userColumns = [
{ {
name: '그룹명', name: '그룹명',
selector: 'groupNm', selector: 'groupNm',
@ -68,7 +145,7 @@ export const BasisGroupUsersContainer = props => {
{ {
name: '사용자 ID', name: '사용자 ID',
selector: 'userId', selector: 'userId',
minWidth: '150px', minWidth: '120px',
sortable: true, sortable: true,
cell: row => { cell: row => {
return row?.userId; return row?.userId;
@ -78,7 +155,7 @@ export const BasisGroupUsersContainer = props => {
{ {
name: '권한명', name: '권한명',
selector: 'groupAuthCd', selector: 'groupAuthCd',
minWidth: '102px', minWidth: '105px',
sortable: true, sortable: true,
cell: row => { cell: row => {
return row?.groupAuthCd; return row?.groupAuthCd;
@ -87,7 +164,7 @@ export const BasisGroupUsersContainer = props => {
{ {
name: '가입 일시', name: '가입 일시',
selector: 'joinDt', selector: 'joinDt',
minWidth: '200px', minWidth: '150px',
sortable: true, sortable: true,
cell: row => { cell: row => {
return row?.joinDt; return row?.joinDt;
@ -166,38 +243,57 @@ export const BasisGroupUsersContainer = props => {
} }
]; ];
// useEffect(() => {
// handlerSearch();
// }, []);
const handlerSearch = () => {
if (params.cstmrSno && user?.cstmrSno) {
dispatch(
Actions.USER_LIST.request({
searchParams: params,
cstmrSno: user?.cstmrSno
})
);
}
};
useEffect(() => { useEffect(() => {
if (user?.cstmrSno) { if (user?.cstmrSno) {
dispatch(Actions.JOIN_LIST.request({ cstmrSno: user?.cstmrSno })); dispatch(Actions.JOIN_LIST.request({ cstmrSno: user?.cstmrSno }));
// setParams({ setParams({
// ...params, ...params,
// cstmrSno: user?.cstmrSno cstmrSno: user?.cstmrSno
// }); });
// dispatch(
// Actions.USER_LIST.request({
// searchParams: { cstmrSno: user?.cstmrSno }
// })
// );
} }
}, [user]); }, [user]);
// useEffect(() => { const handlerDetail = (groupId, groupAuthCd, aprvlYn) => {
if (
// }, [params]); groupAuthCd === 'MASTER' ||
user.authId === 'SUPER' ||
useEffect(() => { user.authId === 'ADMIN' ||
handlerSearch(); (aprvlYn === 'Y' && groupAuthCd === 'LEADER')
}, []); ) {
const param = params;
param.groupId = groupId;
param.groupAuthCd = groupAuthCd;
param.aprvlYn = aprvlYn;
const handlerSearch = () => {
if (params.cstmrSno && user?.cstmrSno) {
dispatch( dispatch(
Actions.USER_LIST.request({ Actions.USER_LIST.request({
searchParams: params, searchParams: param
cstmrSno: user?.cstmrSno
}) })
); );
console.log('볼 수 있음');
} else {
console.log('볼 수 없다');
setInfoModal({
isOpen: true,
title: '권한 확인',
desc: '사용자관리 확인을 위해서는 운영자 권한이 필요합니다. 운영자에게 권한을 부여받고 다시 시도해 주세요.'
});
} }
}; };
@ -274,7 +370,7 @@ export const BasisGroupUsersContainer = props => {
return ( return (
<CustomMainLayout title={titleName}> <CustomMainLayout title={titleName}>
<BasisGroupUsersSearch {/* <BasisGroupUsersSearch
handlerInput={handlerInput} handlerInput={handlerInput}
handlerSearch={handlerSearch} handlerSearch={handlerSearch}
params={params} params={params}
@ -284,10 +380,56 @@ export const BasisGroupUsersContainer = props => {
<BasisGroupUsersGrid <BasisGroupUsersGrid
data={userList} data={userList}
title={'사용자'} title={'사용자'}
columns={columns} columns={userColumns}
count={userCount} count={userCount}
pagination={false} pagination={false}
/> /> */}
<div className='pal-card-box'>
<Row>
<Col sm='4'>
<BasisGroupGrid
data={joinList}
title={'그룹'}
columns={columns}
count={joinListCount}
pagination={true}
/>
</Col>
<Col sm='8'>
{!userList ? (
<div className='no-dataTable'>
그룹 목록에서 상세보기를 클릭하세요.
</div>
) : (
<>
<BasisGroupUsersSearch
handlerInput={handlerInput}
// handlerSearch={handlerSearch}
params={params}
onKeyPress={onKeyPress}
setParams={setParams}
/>
{/* <BasisGroupUsersGrid
data={userList}
title={'그룹'}
columns={userColumns}
count={userListCount}
pagination={false}
/> */}
</>
)}
</Col>
<Col sm='12'>
<BasisGroupUsersGrid
data={userList}
title={'그룹'}
columns={userColumns}
count={userListCount}
pagination={false}
/>
</Col>
</Row>
</div>
<ConfirmModal <ConfirmModal
modal={modal} modal={modal}
@ -295,6 +437,7 @@ export const BasisGroupUsersContainer = props => {
handlerConfirm={handlerAuthSave} handlerConfirm={handlerAuthSave}
color='primary' color='primary'
/> />
{/* <InfoModal model={infoModal} setModal={setInfoModal} /> */}
</CustomMainLayout> </CustomMainLayout>
); );
}; };

11
src/modules/basis/group/actions/basisGroupAction.ts

@ -9,7 +9,8 @@ import {
UserGroupData, UserGroupData,
UserGroupState, UserGroupState,
GroupState, GroupState,
MainGroupData MainGroupData,
SelectGroupData
} from '../models/basisGroupModel'; } from '../models/basisGroupModel';
//# 나의 그룹 목록 조회 //# 나의 그룹 목록 조회
@ -101,6 +102,9 @@ const GROUP_MAIN_LIST_REQUEST = 'basis/group/GROUP_MAIN_LIST_REQUEST';
const GROUP_MAIN_LIST_SUCCESS = 'basis/group/GROUP_MAIN_LIST_SUCCESS'; const GROUP_MAIN_LIST_SUCCESS = 'basis/group/GROUP_MAIN_LIST_SUCCESS';
const GROUP_MAIN_LIST_FAILURE = 'basis/group/GROUP_MAIN_LIST_FAILURE'; const GROUP_MAIN_LIST_FAILURE = 'basis/group/GROUP_MAIN_LIST_FAILURE';
//# 그룹 선택
const ROUP_SELECT = 'basis/group/select';
export const MY_LIST = createAsyncAction( export const MY_LIST = createAsyncAction(
MY_LIST_REQUEST, MY_LIST_REQUEST,
MY_LIST_SUCCESS, MY_LIST_SUCCESS,
@ -207,6 +211,8 @@ export const USER_DELEGATE = createAsyncAction(
USER_DELEGATE_FAILURE USER_DELEGATE_FAILURE
)<UserGroupState, string, AxiosError>(); )<UserGroupState, string, AxiosError>();
export const USER_GROUP_SELECT = createAction(ROUP_SELECT)<SelectGroupData>();
const actions = { const actions = {
MY_LIST, MY_LIST,
JOIN_LIST, JOIN_LIST,
@ -225,7 +231,8 @@ const actions = {
USER_UPDATE, USER_UPDATE,
USER_DELEGATE, USER_DELEGATE,
GROUP_MYLIST, GROUP_MYLIST,
GROUP_MAIN_LIST GROUP_MAIN_LIST,
USER_GROUP_SELECT
}; };
export type GroupAction = ActionType<typeof actions>; export type GroupAction = ActionType<typeof actions>;

14
src/modules/basis/group/models/basisGroupModel.ts

@ -18,6 +18,13 @@ export interface GroupState {
newGroupId: String | ''; newGroupId: String | '';
searchParams: string | ''; searchParams: string | '';
error: ErrorModel | undefined; error: ErrorModel | undefined;
selectGroup: SelectGroupData | undefined;
}
export interface SelectGroupData {
cstmrSno: number;
groupId: string;
groupNm: string;
} }
export interface GroupSearchData { export interface GroupSearchData {
@ -111,5 +118,10 @@ export const initGroup = {
groupId: '', groupId: '',
newGroupId: '', newGroupId: '',
searchParams: '', searchParams: '',
error: undefined error: undefined,
selectGroup: {
cstmrSno: 0,
groupId: '',
groupNm: ''
}
}; };

7
src/modules/basis/group/reducers/basisGroupReducer.ts

@ -96,4 +96,11 @@ export const groupReducer = createReducer<GroupState, Actions.GroupAction>(
draft.userList = data; draft.userList = data;
draft.userCount = count; draft.userCount = count;
}) })
)
//그룹 선택
.handleAction(Actions.USER_GROUP_SELECT, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.selectGroup = data;
})
); );

Loading…
Cancel
Save