|
|
|
@ -104,6 +104,8 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
text = '검토완료'; |
|
|
|
|
} else if (type === 'W') { |
|
|
|
|
text = '검토대기'; |
|
|
|
|
} else if (type === 'Q') { |
|
|
|
|
text = '검토요청'; |
|
|
|
|
} else if (type === 'C') { |
|
|
|
|
text = '검토취소'; |
|
|
|
|
} |
|
|
|
@ -498,6 +500,8 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
counts.unapproved += 1; |
|
|
|
|
} else if (item.reviewedType === 'R') { |
|
|
|
|
counts.reviewed += 1; |
|
|
|
|
} else if (item.reviewedType === 'Q') { |
|
|
|
|
counts.request += 1; |
|
|
|
|
} else if (item.reviewedType === 'W') { |
|
|
|
|
counts.wait += 1; |
|
|
|
|
} else if (item.reviewedType === 'C') { |
|
|
|
@ -505,7 +509,7 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
} |
|
|
|
|
return counts; |
|
|
|
|
}, |
|
|
|
|
{ reviewed: 0, wait: 0, cancel: 0, unapproved: 0 } |
|
|
|
|
{ reviewed: 0, wait: 0, cancel: 0, unapproved: 0, request: 0 } |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
@ -514,7 +518,10 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
<> |
|
|
|
|
검토완료: {approvalCounts.reviewed}건 <br /> |
|
|
|
|
검토대기:{approvalCounts.wait}건 <br /> |
|
|
|
|
검토취소: |
|
|
|
|
검토요청: |
|
|
|
|
{approvalCounts.request}건 |
|
|
|
|
<br /> |
|
|
|
|
검토요청취소: |
|
|
|
|
{approvalCounts.cancel}건 |
|
|
|
|
<br /> |
|
|
|
|
검토불필요: |
|
|
|
@ -765,7 +772,9 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
: text === 'R' |
|
|
|
|
? '검토완료' |
|
|
|
|
: text === 'C' |
|
|
|
|
? '검토취소' |
|
|
|
|
? '검토요청취소' |
|
|
|
|
: text === 'Q' |
|
|
|
|
? '검토요청' |
|
|
|
|
: '검토대기'; |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
@ -944,6 +953,7 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
dtl: record.dtl, |
|
|
|
|
era: record.era, |
|
|
|
|
rm: record.rm, |
|
|
|
|
reqRadius: record.reqRadius, |
|
|
|
|
...record |
|
|
|
|
}); |
|
|
|
|
setEditingKey(record.key); |
|
|
|
@ -968,7 +978,8 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
fltElev: row.fltElev || '', |
|
|
|
|
dtl: row.dtl || '', |
|
|
|
|
era: row.era || '', |
|
|
|
|
rm: row.rm || '' |
|
|
|
|
rm: row.rm || '', |
|
|
|
|
reqRadius: row.reqRadius || '' |
|
|
|
|
} |
|
|
|
|
]) |
|
|
|
|
); |
|
|
|
@ -1211,64 +1222,54 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
// 체크박스 업데이트 함수
|
|
|
|
|
const handleCheckbox = async type => { |
|
|
|
|
if (checkList.length === 0) { |
|
|
|
|
return handlerErrorModal( |
|
|
|
|
type === 'R' ? '재 요청 요청 실패' : '검토 요청 실패', |
|
|
|
|
type === 'R' |
|
|
|
|
? '재 요청 항목을 선택해주세요.' |
|
|
|
|
: '검토 항목을 선택해주세요.', |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
return handlerErrorModal('검토 실패', '검토 항목을 선택해주세요.', false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const planAreaSnoList = [ |
|
|
|
|
...new Set( |
|
|
|
|
checkList |
|
|
|
|
.filter(item => item.startsWith('child_')) // 'child_'로 시작하는 항목 필터링
|
|
|
|
|
.map(item => item.split('_').pop()) // 마지막 언더바 이후의 숫자 추출
|
|
|
|
|
.filter(item => item.startsWith('child_')) |
|
|
|
|
.map(item => item.split('_').pop()) |
|
|
|
|
) |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
// res에서 planAreaSnoList에 해당하는 데이터만 추출 2차원 배열 말고 1차원 배열로 추출
|
|
|
|
|
const res = laancAprvList.flatMap(item => |
|
|
|
|
item.areaList.filter(area => |
|
|
|
|
planAreaSnoList.includes(area.planAreaSno.toString()) |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (type === 'A') { |
|
|
|
|
const check = !res.some(item => item.approvalCd !== 'R'); |
|
|
|
|
if (!check) { |
|
|
|
|
return handlerErrorModal( |
|
|
|
|
'재 요청 요청 실패', |
|
|
|
|
'검토결과 완료인 신청건만 재 요청이 가능합니다.' |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
// 검토 요청, 재 요청 조건
|
|
|
|
|
const checkCondition = { |
|
|
|
|
A: item => item.reviewedType !== 'R', |
|
|
|
|
Q: item => item.reviewedType !== 'W' |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 요청 실패 시 에러 메시지
|
|
|
|
|
const errorMessages = { |
|
|
|
|
A: [ |
|
|
|
|
'재 요청 요청 실패', |
|
|
|
|
'검토결과 완료인 신청건만 재 요청이 가능합니다.' |
|
|
|
|
], |
|
|
|
|
Q: ['검토 요청 실패', '검토결과 대기인 신청건만 요청이 가능합니다.'] |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 요청 성공 시 액션 핸들러
|
|
|
|
|
const actionHandlers = { |
|
|
|
|
A: () => { |
|
|
|
|
setCheckData(res); |
|
|
|
|
setIsCheckBoxModal(true); |
|
|
|
|
} |
|
|
|
|
} else if (type === 'R') { |
|
|
|
|
const check = res.some( |
|
|
|
|
item => item.approvalCd !== 'R' && item.approvalCd !== 'C' |
|
|
|
|
); |
|
|
|
|
if (!check) { |
|
|
|
|
return handlerErrorModal( |
|
|
|
|
'검토 요청 실패', |
|
|
|
|
'검토결과 대기인 신청건만 요청이 가능합니다.' |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
}, |
|
|
|
|
Q: async () => { |
|
|
|
|
try { |
|
|
|
|
dispatch( |
|
|
|
|
updateLaancAprvReview({ planAreaSnoList, reviewedType: 'R' }) |
|
|
|
|
).then(() => { |
|
|
|
|
props.handlerSearch( |
|
|
|
|
props.filterId, |
|
|
|
|
{ |
|
|
|
|
startDate: props.startDate, |
|
|
|
|
endDate: props.endDate |
|
|
|
|
}, |
|
|
|
|
props.filterArea |
|
|
|
|
); |
|
|
|
|
}); |
|
|
|
|
await dispatch( |
|
|
|
|
updateLaancAprvReview({ planAreaSnoList, reviewedType: 'Q' }) |
|
|
|
|
); |
|
|
|
|
props.handlerSearch( |
|
|
|
|
props.filterId, |
|
|
|
|
{ startDate: props.startDate, endDate: props.endDate }, |
|
|
|
|
props.filterArea |
|
|
|
|
); |
|
|
|
|
setCheckList([]); |
|
|
|
|
} catch (error) { |
|
|
|
|
return handlerErrorModal( |
|
|
|
@ -1278,8 +1279,17 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 요청 실패 시 에러 메시지 핸들러
|
|
|
|
|
if (res.some(checkCondition[type])) { |
|
|
|
|
return handlerErrorModal(...errorMessages[type]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 요청 성공 시 액션 핸들러 실행
|
|
|
|
|
await actionHandlers[type](); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<div className='layer-content'> |
|
|
|
|
<div className='layer-ti'> |
|
|
|
@ -1324,7 +1334,7 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
</span> |
|
|
|
|
</div> |
|
|
|
|
<div className='download'> |
|
|
|
|
<Button color='primary' size='sm' onClick={() => handleCheckbox('R')}> |
|
|
|
|
<Button color='primary' size='sm' onClick={() => handleCheckbox('Q')}> |
|
|
|
|
검토 요청 |
|
|
|
|
</Button> |
|
|
|
|
<Button color='primary' size='sm' onClick={() => handleCheckbox('A')}> |
|
|
|
|