발전시물레이션 excel, pdf 다운 처리 추가
This commit is contained in:
parent
a6ccd78ad1
commit
d27ca6cd58
@ -38,6 +38,10 @@ import DocDownOptionPop from '../estimate/popup/DocDownOptionPop'
|
|||||||
import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider'
|
import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider'
|
||||||
import EstimateCopyPop from '../estimate/popup/EstimateCopyPop'
|
import EstimateCopyPop from '../estimate/popup/EstimateCopyPop'
|
||||||
|
|
||||||
|
import { floorPlanObjectState } from '@/store/floorPlanObjectAtom'
|
||||||
|
import { pwrGnrSimTypeState } from '@/store/simulatorAtom'
|
||||||
|
import { useAxios } from '@/hooks/useAxios'
|
||||||
|
|
||||||
export default function CanvasMenu(props) {
|
export default function CanvasMenu(props) {
|
||||||
const { menuNumber, setMenuNumber } = props
|
const { menuNumber, setMenuNumber } = props
|
||||||
const pathname = usePathname()
|
const pathname = usePathname()
|
||||||
@ -189,6 +193,54 @@ export default function CanvasMenu(props) {
|
|||||||
return ([2, 3].some((num) => num === canvasSetting?.roofSizeSet) && menu.index === 2) || (menuNumber === 4 && menu.index === 2)
|
return ([2, 3].some((num) => num === canvasSetting?.roofSizeSet) && menu.index === 2) || (menuNumber === 4 && menu.index === 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 발전시물레이션 Excel/PDF 다운
|
||||||
|
const { promisePost } = useAxios(globalLocale)
|
||||||
|
const objectRecoil = useRecoilValue(floorPlanObjectState)
|
||||||
|
const pwrGnrSimTypeRecoil = useRecoilValue(pwrGnrSimTypeState)
|
||||||
|
|
||||||
|
const { plans } = usePlan()
|
||||||
|
const plan = plans.find((plan) => plan.isCurrent === true)
|
||||||
|
|
||||||
|
const handleExcelPdfFileDown = async (donwloadType, drawingFlg) => {
|
||||||
|
const url = '/api/estimate/excel-download'
|
||||||
|
|
||||||
|
const params = {
|
||||||
|
objectNo: objectRecoil.floorPlanObjectNo,
|
||||||
|
planNo: plan?.id,
|
||||||
|
schDownload: donwloadType,
|
||||||
|
schDrawingFlg: drawingFlg,
|
||||||
|
pwrGnrSimType: pwrGnrSimTypeRecoil.type,
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = { responseType: 'blob' }
|
||||||
|
await promisePost({ url: url, data: params, option: options })
|
||||||
|
.then((resultData) => {
|
||||||
|
if (resultData) {
|
||||||
|
let fileName = 'unknow'
|
||||||
|
const blob = new Blob([resultData.data], { type: resultData.headers['content-type'] || 'application/octet-stream' })
|
||||||
|
const fileUrl = window.URL.createObjectURL(blob)
|
||||||
|
|
||||||
|
const link = document.createElement('a')
|
||||||
|
link.href = fileUrl
|
||||||
|
|
||||||
|
//서버에서 내려오는 파일명
|
||||||
|
const contentDisposition = resultData.headers['content-disposition']
|
||||||
|
if (contentDisposition) {
|
||||||
|
fileName = contentDisposition.split('filename=')[1].replace(/['"]/g, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
link.download = fileName
|
||||||
|
document.body.appendChild(link)
|
||||||
|
link.click()
|
||||||
|
link.remove()
|
||||||
|
window.URL.revokeObjectURL(fileUrl)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
alert('File does not exist.')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={`canvas-menu-wrap ${[2, 3, 4].some((num) => num === menuNumber) ? 'active' : ''}`}>
|
<div className={`canvas-menu-wrap ${[2, 3, 4].some((num) => num === menuNumber) ? 'active' : ''}`}>
|
||||||
<div className="canvas-menu-inner">
|
<div className="canvas-menu-inner">
|
||||||
@ -299,11 +351,11 @@ export default function CanvasMenu(props) {
|
|||||||
{menuNumber === 6 && (
|
{menuNumber === 6 && (
|
||||||
<>
|
<>
|
||||||
<div className="ico-btn-from">
|
<div className="ico-btn-from">
|
||||||
<button className="btn-frame gray ico-flx">
|
<button type="button" className="btn-frame gray ico-flx" onClick={() => handleExcelPdfFileDown('EXCEL', '2')}>
|
||||||
<span className="ico ico01"></span>
|
<span className="ico ico01"></span>
|
||||||
<span>{getMessage('plan.menu.simulation.excel')}</span>
|
<span>{getMessage('plan.menu.simulation.excel')}</span>
|
||||||
</button>
|
</button>
|
||||||
<button className="btn-frame gray ico-flx">
|
<button type="button" className="btn-frame gray ico-flx" onClick={() => handleExcelPdfFileDown('PDF', '2')}>
|
||||||
<span className="ico ico01"></span>
|
<span className="ico ico01"></span>
|
||||||
<span>{getMessage('plan.menu.simulation.pdf')}</span>
|
<span>{getMessage('plan.menu.simulation.pdf')}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -5,8 +5,9 @@ import { Bar } from 'react-chartjs-2'
|
|||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
import { useEffect, useState, useRef } from 'react'
|
import { useEffect, useState, useRef } from 'react'
|
||||||
import { useRecoilValue } from 'recoil'
|
import { useRecoilValue, useRecoilState } from 'recoil'
|
||||||
import { floorPlanObjectState } from '@/store/floorPlanObjectAtom'
|
import { floorPlanObjectState } from '@/store/floorPlanObjectAtom'
|
||||||
|
import { pwrGnrSimTypeState } from '@/store/simulatorAtom'
|
||||||
|
|
||||||
import { useAxios } from '@/hooks/useAxios'
|
import { useAxios } from '@/hooks/useAxios'
|
||||||
import { useMessage } from '@/hooks/useMessage'
|
import { useMessage } from '@/hooks/useMessage'
|
||||||
@ -107,6 +108,8 @@ export default function Simulator() {
|
|||||||
if (objectNo) {
|
if (objectNo) {
|
||||||
fetchObjectDetail(objectNo)
|
fetchObjectDetail(objectNo)
|
||||||
fetchSimulatorNotice()
|
fetchSimulatorNotice()
|
||||||
|
setPwrGnrSimType('D')
|
||||||
|
setPwrRecoil({ ...pwrRecoil, type: 'D' })
|
||||||
}
|
}
|
||||||
}, [objectNo, plan])
|
}, [objectNo, plan])
|
||||||
|
|
||||||
@ -168,8 +171,10 @@ export default function Simulator() {
|
|||||||
|
|
||||||
// 차트 데이터 변경 시, list type 셋팅
|
// 차트 데이터 변경 시, list type 셋팅
|
||||||
const [pwrGnrSimType, setPwrGnrSimType] = useState('D')
|
const [pwrGnrSimType, setPwrGnrSimType] = useState('D')
|
||||||
|
const [pwrRecoil, setPwrRecoil] = useRecoilState(pwrGnrSimTypeState)
|
||||||
|
|
||||||
const handleChartChangeData = (type) => {
|
const handleChartChangeData = (type) => {
|
||||||
setPwrGnrSimType(type)
|
setPwrRecoil({ ...pwrRecoil, type: type })
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'A':
|
case 'A':
|
||||||
setChartData(hatsudenryouAll)
|
setChartData(hatsudenryouAll)
|
||||||
@ -251,9 +256,11 @@ export default function Simulator() {
|
|||||||
<select
|
<select
|
||||||
style={{ width: '30%' }}
|
style={{ width: '30%' }}
|
||||||
className="select-light"
|
className="select-light"
|
||||||
|
value={pwrGnrSimType}
|
||||||
defaultValue={`D`}
|
defaultValue={`D`}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
handleChartChangeData(e.target.value)
|
handleChartChangeData(e.target.value)
|
||||||
|
setPwrGnrSimType(e.target.value)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<option value={`A`}>積雪考慮なし(ピークカットなし発電量)</option>
|
<option value={`A`}>積雪考慮なし(ピークカットなし発電量)</option>
|
||||||
|
|||||||
8
src/store/simulatorAtom.js
Normal file
8
src/store/simulatorAtom.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { atom } from 'recoil'
|
||||||
|
|
||||||
|
export const pwrGnrSimTypeState = atom({
|
||||||
|
key: 'pwrGnrSimType',
|
||||||
|
default: {
|
||||||
|
type: 'D',
|
||||||
|
},
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user