|
|
|
@ -4,9 +4,6 @@ import { Button, Card } from '@component/ui';
|
|
|
|
|
import { openModal } from '@src/redux/features/comn/message/messageSlice'; |
|
|
|
|
import { FaAngleDown, FaAngleUp } from 'react-icons/fa'; |
|
|
|
|
import { Form, Input, Table, Typography } from 'antd'; |
|
|
|
|
import { HOST } from '../../configs/constants'; |
|
|
|
|
import axios from 'axios'; |
|
|
|
|
import { getAccessToken } from '../../utility/authService/jwtTokenUtil'; |
|
|
|
|
import { |
|
|
|
|
updateLaancAprv, |
|
|
|
|
getLaancAprvList |
|
|
|
@ -51,6 +48,7 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
|
|
|
|
|
// 유효성 기체 데이터
|
|
|
|
|
const [validData, setValidData] = useState(); |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
let approvalCdValue = { S: 0, F: 0, C: 0, U: 0 }; |
|
|
|
|
|
|
|
|
@ -80,60 +78,6 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
} |
|
|
|
|
}, [laancAprvList]); |
|
|
|
|
|
|
|
|
|
// 수정 이벤트
|
|
|
|
|
const edit = record => { |
|
|
|
|
form.setFieldsValue({ |
|
|
|
|
planAreaSno: record.planAreaSno, |
|
|
|
|
bufferZone: record.bufferZone, |
|
|
|
|
fltElev: record.fltElev, |
|
|
|
|
dtl: record.dtl, |
|
|
|
|
era: record.era, |
|
|
|
|
rm: record.rm, |
|
|
|
|
...record |
|
|
|
|
}); |
|
|
|
|
setEditingKey(record.key); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 취소 이벤트
|
|
|
|
|
const cancel = () => { |
|
|
|
|
setEditingKey(''); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 저장 이벤트
|
|
|
|
|
const save = async (key, type) => { |
|
|
|
|
try { |
|
|
|
|
const row = await form.validateFields(); |
|
|
|
|
const index = { ...row, planAreaSno: selectedRowKey }; |
|
|
|
|
|
|
|
|
|
const updateRes = await dispatch( |
|
|
|
|
updateLaancAprv([ |
|
|
|
|
{ |
|
|
|
|
planAreaSno: selectedRowKey, |
|
|
|
|
bufferZone: row.bufferZone, |
|
|
|
|
fltElev: row.fltElev, |
|
|
|
|
dtl: row.dtl || '', |
|
|
|
|
era: row.era || '', |
|
|
|
|
rm: row.rm || '' |
|
|
|
|
} |
|
|
|
|
]) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (updateRes.meta.requestStatus === 'fulfilled') { |
|
|
|
|
setEditingKey(''); |
|
|
|
|
await dispatch( |
|
|
|
|
getLaancAprvList({ |
|
|
|
|
searchStDt: props.startDate, |
|
|
|
|
searchEndDt: props.endDate |
|
|
|
|
}) |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
handlerErrorModal(ERROR_TITLE, ERROR_MESSAGE); |
|
|
|
|
} |
|
|
|
|
} catch (errInfo) { |
|
|
|
|
handlerErrorModal(ERROR_TITLE, ERROR_MESSAGE); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 데이터
|
|
|
|
|
const columns = [ |
|
|
|
|
{ |
|
|
|
@ -922,6 +866,60 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 수정 이벤트
|
|
|
|
|
const edit = record => { |
|
|
|
|
form.setFieldsValue({ |
|
|
|
|
planAreaSno: record.planAreaSno, |
|
|
|
|
bufferZone: record.bufferZone, |
|
|
|
|
fltElev: record.fltElev, |
|
|
|
|
dtl: record.dtl, |
|
|
|
|
era: record.era, |
|
|
|
|
rm: record.rm, |
|
|
|
|
...record |
|
|
|
|
}); |
|
|
|
|
setEditingKey(record.key); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 취소 이벤트
|
|
|
|
|
const cancel = () => { |
|
|
|
|
setEditingKey(''); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 저장 이벤트
|
|
|
|
|
const save = async (key, type) => { |
|
|
|
|
try { |
|
|
|
|
const row = await form.validateFields(); |
|
|
|
|
const index = { ...row, planAreaSno: selectedRowKey }; |
|
|
|
|
|
|
|
|
|
const updateRes = await dispatch( |
|
|
|
|
updateLaancAprv([ |
|
|
|
|
{ |
|
|
|
|
planAreaSno: selectedRowKey, |
|
|
|
|
bufferZone: row.bufferZone, |
|
|
|
|
fltElev: row.fltElev, |
|
|
|
|
dtl: row.dtl || '', |
|
|
|
|
era: row.era || '', |
|
|
|
|
rm: row.rm || '' |
|
|
|
|
} |
|
|
|
|
]) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (updateRes.meta.requestStatus === 'fulfilled') { |
|
|
|
|
setEditingKey(''); |
|
|
|
|
await dispatch( |
|
|
|
|
getLaancAprvList({ |
|
|
|
|
searchStDt: props.startDate, |
|
|
|
|
searchEndDt: props.endDate |
|
|
|
|
}) |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
handlerErrorModal(ERROR_TITLE, ERROR_MESSAGE); |
|
|
|
|
} |
|
|
|
|
} catch (errInfo) { |
|
|
|
|
handlerErrorModal(ERROR_TITLE, ERROR_MESSAGE); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 모달 오픈 핸들러
|
|
|
|
|
const handlerOpenModal = (approval, fltElev, fltElevMax) => { |
|
|
|
|
if (approval === 'F') { |
|
|
|
@ -1031,70 +1029,6 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const handleFileDownload = async type => { |
|
|
|
|
try { |
|
|
|
|
const fileDetails = { |
|
|
|
|
pdf: { |
|
|
|
|
url: `${HOST}api/bas/dos/plan/download/pdf?searchStDt=${ |
|
|
|
|
props.startDate |
|
|
|
|
}&searchEndDt=${props.endDate}&selectZone=${props.filterArea}${ |
|
|
|
|
props.filterId ? '&approvalCd=${props.filterId}' : '' |
|
|
|
|
}`,
|
|
|
|
|
name: '비행승인 관련 검토결과.pdf' |
|
|
|
|
}, |
|
|
|
|
excel: { |
|
|
|
|
url: `${HOST}api/bas/dos/plan/download/excel?searchStDt=${ |
|
|
|
|
props.startDate |
|
|
|
|
}&searchEndDt=${props.endDate}&selectZone=${props.filterArea}${ |
|
|
|
|
props.filterId ? '&approvalCd=${props.filterId}' : '' |
|
|
|
|
}`,
|
|
|
|
|
name: '비행승인 검토.xlsx' |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (!fileDetails[type]) { |
|
|
|
|
throw new Error('Invalid file type specified.'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const { url: fileUrl, name: fileName } = fileDetails[type]; |
|
|
|
|
const accessToken = await getAccessToken(); |
|
|
|
|
|
|
|
|
|
const res = await axios({ |
|
|
|
|
url: fileUrl, |
|
|
|
|
method: 'GET', |
|
|
|
|
responseType: 'blob', |
|
|
|
|
headers: { |
|
|
|
|
'Content-Type': 'application/json', |
|
|
|
|
Authorization: `${accessToken}` // Bearer 추가
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
if (!res.headers) { |
|
|
|
|
throw new Error('No response headers.'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const contentType = |
|
|
|
|
res.headers['content-type'] || 'application/octet-stream'; |
|
|
|
|
|
|
|
|
|
const blob = new Blob([res.data], { type: contentType }); |
|
|
|
|
const downloadUrl = window.URL.createObjectURL(blob); |
|
|
|
|
|
|
|
|
|
const link = document.createElement('a'); |
|
|
|
|
link.href = downloadUrl; |
|
|
|
|
link.style.display = 'none'; |
|
|
|
|
link.download = fileName; |
|
|
|
|
|
|
|
|
|
document.body.appendChild(link); |
|
|
|
|
link.click(); |
|
|
|
|
document.body.removeChild(link); |
|
|
|
|
|
|
|
|
|
window.URL.revokeObjectURL(downloadUrl); |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error('File download failed:', error); |
|
|
|
|
console.error(error.message); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 유효성 검사 모달창
|
|
|
|
|
const handleIsModal = record => { |
|
|
|
|
setValidData({ |
|
|
|
@ -1136,22 +1070,6 @@ export default function OperationApprovalsTable(props) {
|
|
|
|
|
건 |
|
|
|
|
</span> |
|
|
|
|
</div> |
|
|
|
|
<div className='download'> |
|
|
|
|
<Button |
|
|
|
|
color='primary' |
|
|
|
|
size='sm' |
|
|
|
|
onClick={() => handleFileDownload('pdf')} |
|
|
|
|
> |
|
|
|
|
한글 다운로드 |
|
|
|
|
</Button> |
|
|
|
|
<Button |
|
|
|
|
color='primary' |
|
|
|
|
size='sm' |
|
|
|
|
onClick={() => handleFileDownload('excel')} |
|
|
|
|
> |
|
|
|
|
엑셀 다운로드 |
|
|
|
|
</Button> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div className='search-case-list'> |
|
|
|
|
<div> |
|
|
|
|