diff --git a/src/components/community/Table.jsx b/src/components/community/Table.jsx
index 9cca84ee..ffe68fa6 100644
--- a/src/components/community/Table.jsx
+++ b/src/components/community/Table.jsx
@@ -79,7 +79,7 @@ export default function Table({ clsCode }) {
>
{/* 번호 */}
- {board.rowNumber}
+ {board.totCnt - board.rowNumber + 1}
|
{/* 제목 */}
diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx
index cd655841..e3d389b2 100644
--- a/src/components/floor-plan/CanvasMenu.jsx
+++ b/src/components/floor-plan/CanvasMenu.jsx
@@ -34,9 +34,10 @@ import { addedRoofsState, basicSettingState, selectedRoofMaterialSelector, setti
import { placementShapeDrawingPointsState } from '@/store/placementShapeDrawingAtom'
import { commonUtilsState } from '@/store/commonUtilsAtom'
import { menusState, menuTypeState } from '@/store/menuAtom'
-import { estimateState, floorPlanObjectState } from '@/store/floorPlanObjectAtom'
+import { estimateState } from '@/store/floorPlanObjectAtom'
import { pwrGnrSimTypeState } from '@/store/simulatorAtom'
import { isObjectNotEmpty } from '@/util/common-utils'
+import { useSearchParams } from 'next/navigation'
import KO from '@/locales/ko.json'
import JA from '@/locales/ja.json'
@@ -86,14 +87,61 @@ export default function CanvasMenu(props) {
//견적서버튼 노출용
const [buttonStyle, setButtonStyle] = useState('')
- const onClickNav = (menu) => {
- setMenuNumber(menu.index)
- setCurrentMenu(menu.title)
+ // 발전시뮬레이션 메뉴 이동
+ const searchParams = useSearchParams()
+ const objectNo = searchParams.get('objectNo')
+ const pid = searchParams.get('pid')
+ // 발전시물레이션 Excel/PDF 다운
+ const { promiseGet, promisePost } = useAxios(globalLocale)
+ const pwrGnrSimTypeRecoil = useRecoilValue(pwrGnrSimTypeState)
+
+ const handleExcelPdfFileDown = async (donwloadType, drawingFlg) => {
+ const url = '/api/estimate/excel-download'
+
+ const params = {
+ objectNo: objectNo,
+ planNo: pid,
+ 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.')
+ })
+ }
+
+ const onClickNav = (menu) => {
switch (menu.index) {
case 1:
setType('placementShape')
onClickPlacementInitialMenu()
+
break
case 2:
setType('outline')
@@ -109,11 +157,31 @@ export default function CanvasMenu(props) {
setType('module')
break
case 6:
- router.push(`/floor-plan/simulator/${menu.index}`)
+ promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => {
+ if (res.status === 200) {
+ const planList = res.data.planList
+ const objectPlanDetail = planList.filter((row) => row.objectNo === objectNo && row.planNo === pid)
+
+ if (objectPlanDetail) {
+ if (objectPlanDetail[0].estimateDate) {
+ router.push(`/floor-plan/simulator/${menu.index}?pid=${pid}&objectNo=${objectNo}`)
+ setMenuNumber(menu.index)
+ setCurrentMenu(menu.title)
+ } else {
+ alert(getMessage('simulator.menu.move.valid1'))
+ }
+ }
+ }
+ })
break
}
- if (pathname !== '/floor-plan') router.push('/floor-plan')
+ if (menu.index !== 6) {
+ setMenuNumber(menu.index)
+ setCurrentMenu(menu.title)
+ }
+
+ if (pathname !== '/floor-plan') router.push(`/floor-plan?pid=${pid}&objectNo=${objectNo}`)
}
const changeSelectedRoofMaterial = (e) => {
@@ -215,54 +283,6 @@ export default function CanvasMenu(props) {
return (['2', '3'].includes(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.')
- })
- }
-
useEffect(() => {
if (isObjectNotEmpty(estimateRecoilState)) {
if (estimateRecoilState?.createUser === 'T01') {
diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx
index 141a2d3f..6588f54c 100644
--- a/src/components/management/StuffDetail.jsx
+++ b/src/components/management/StuffDetail.jsx
@@ -332,7 +332,7 @@ export default function StuffDetail() {
//createUser가 T01인데 로그인사용자가 T01이 아니면 버튼숨기기
setShowButton('none')
}
-
+ // console.log('상세::', res.data)
if (isObjectNotEmpty(res.data)) {
let surfaceTypeValue
if (res.data.surfaceType === 'Ⅲ・Ⅳ') {
diff --git a/src/components/myInfo/UserInfoModal.jsx b/src/components/myInfo/UserInfoModal.jsx
index 64677518..0d2d1898 100644
--- a/src/components/myInfo/UserInfoModal.jsx
+++ b/src/components/myInfo/UserInfoModal.jsx
@@ -39,6 +39,7 @@ export default function UserInfoModal({ userId, userInfoModal, setUserInfoModal
if (resultData) {
setInfo(resultData)
+ setPassword(resultData.password)
} else {
alert(getMessage('common.message.no.data'))
}
diff --git a/src/components/simulator/Simulator.jsx b/src/components/simulator/Simulator.jsx
index fcef3a08..c18d2138 100644
--- a/src/components/simulator/Simulator.jsx
+++ b/src/components/simulator/Simulator.jsx
@@ -5,31 +5,23 @@ import { Bar } from 'react-chartjs-2'
import dayjs from 'dayjs'
import { useEffect, useState, useRef } from 'react'
-import { useRecoilValue, useRecoilState } from 'recoil'
-import { floorPlanObjectState } from '@/store/floorPlanObjectAtom'
+import { useRecoilState } from 'recoil'
+import { useSearchParams } from 'next/navigation'
import { pwrGnrSimTypeState } from '@/store/simulatorAtom'
import { useAxios } from '@/hooks/useAxios'
import { useMessage } from '@/hooks/useMessage'
-import { usePlan } from '@/hooks/usePlan'
import { useCanvasMenu } from '@/hooks/common/useCanvasMenu'
import { convertNumberToPriceDecimal } from '@/util/common-utils'
export default function Simulator() {
- const { plans } = usePlan()
- const plan = plans.find((plan) => plan.isCurrent === true)
+ const searchParams = useSearchParams()
+ const objectNo = searchParams.get('objectNo')
+ const pid = searchParams.get('pid')
const chartRef = useRef(null)
- // recoil 물건번호
- const objectRecoil = useRecoilValue(floorPlanObjectState)
- const [objectNo, setObjectNo] = useState('')
-
- useEffect(() => {
- setObjectNo(objectRecoil.floorPlanObjectNo)
- }, [objectRecoil])
-
// 캔버스 메뉴 넘버 셋팅
const { setMenuNumber } = useCanvasMenu()
@@ -111,7 +103,7 @@ export default function Simulator() {
setPwrGnrSimType('D')
setPwrRecoil({ ...pwrRecoil, type: 'D' })
}
- }, [objectNo, plan])
+ }, [objectNo, pid])
// 물건 상세 정보 조회
const [objectDetail, setObjectDetail] = useState({})
@@ -129,7 +121,7 @@ export default function Simulator() {
const [hatsudenryouPeakcutAllSnow, setHatsudenryouPeakcutAllSnow] = useState([])
const fetchObjectDetail = async (objectNo) => {
- const apiUrl = `/api/pwrGnrSimulation/calculations?objectNo=${objectNo}&planNo=${plan?.id}`
+ const apiUrl = `/api/pwrGnrSimulation/calculations?objectNo=${objectNo}&planNo=${pid}`
const resultData = await get({ url: apiUrl })
if (resultData) {
@@ -201,7 +193,7 @@ export default function Simulator() {
{getMessage('simulator.title.sub1')}
- {objectDetail.objectNo} (Plan No: {plan?.id})
+ {objectDetail.objectNo} (Plan No: {pid})
{/* 작성일 */}
diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js
index 9008467f..ad6c3932 100644
--- a/src/hooks/floorPlan/estimate/useEstimateController.js
+++ b/src/hooks/floorPlan/estimate/useEstimateController.js
@@ -9,7 +9,7 @@ import { useMessage } from '@/hooks/useMessage'
import { useRouter } from 'next/navigation'
import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider'
import { QcastContext } from '@/app/QcastProvider'
-
+import { useSwal } from '@/hooks/useSwal'
// Constants
const ESTIMATE_API_ENDPOINT = '/api/estimate' // API 엔드포인트 정의
@@ -19,6 +19,7 @@ const updateItemInList = (itemList, dispOrder, updates) => {
}
export const useEstimateController = (planNo) => {
+ const { swalFire } = useSwal()
const [fileList, setFileList] = useState([])
const { setIsGlobalLoading } = useContext(QcastContext)
@@ -353,7 +354,6 @@ export const useEstimateController = (planNo) => {
estimateData.pkgAsp = estimateData.pkgAsp.replaceAll(',', '')
}
- console.log('최종저장::', estimateData)
//2. 상세데이터 저장
// return
try {
@@ -361,8 +361,9 @@ export const useEstimateController = (planNo) => {
setIsGlobalLoading(true)
if (res.status === 201) {
estimateData.newFileList = []
- alert(getMessage('estimate.detail.save.alertMsg'))
- //어디로 보낼지
+ //알럿창 변경
+ swalFire({ text: getMessage('estimate.detail.save.alertMsg'), type: 'alert' })
+ // alert(getMessage('estimate.detail.save.alertMsg'))
fetchSetting(objectRecoil.floorPlanObjectNo, estimateData.planNo)
}
})
@@ -400,8 +401,14 @@ export const useEstimateController = (planNo) => {
if (res.status === 201) {
if (isObjectNotEmpty(res.data)) {
let newObjectNo = res.data.objectNo
- alert(getMessage('estimate.detail.estimateCopyPopup.copy.alertMessage'))
- router.push(`/management/stuff/detail?objectNo=${newObjectNo.toString()}`, { scroll: false })
+ console.log('newObjectNo::', newObjectNo)
+ swalFire({
+ text: getMessage('estimate.detail.estimateCopyPopup.copy.alertMessage'),
+ type: 'alert',
+ confirmFn: () => {
+ router.push(`/management/stuff/detail?objectNo=${newObjectNo.toString()}`, { scroll: false })
+ },
+ })
}
}
})
diff --git a/src/locales/ja.json b/src/locales/ja.json
index 0fc32b81..60a8af1b 100644
--- a/src/locales/ja.json
+++ b/src/locales/ja.json
@@ -945,6 +945,7 @@
"simulator.table.sub9": "予測発電量 (kWh)",
"simulator.notice.sub1": "Hanwha Japan 年間発電量",
"simulator.notice.sub2": "シミュレーション案内事項",
+ "simulator.menu.move.valid1": "見積書を作成した後に、発電シミュレーションの結果を照会することができます。",
"master.moduletypeitem.message.error": "지붕재 코드를 입력하세요.",
"can.not.move.module": "모듈을 이동할 수 없습니다.(JA)",
"can.not.copy.module": "모듈을 복사할 수 없습니다.(JA)",
diff --git a/src/locales/ko.json b/src/locales/ko.json
index 13b93d59..4dbbef05 100644
--- a/src/locales/ko.json
+++ b/src/locales/ko.json
@@ -955,6 +955,7 @@
"simulator.table.sub9": "예측발전량 (kWh)",
"simulator.notice.sub1": "Hanwha Japan 연간 발전량",
"simulator.notice.sub2": "시뮬레이션 안내사항",
+ "simulator.menu.move.valid1": "견적서를 생성한 후에, 발전시뮬레이션 결과를 조회할 수 있습니다.",
"master.moduletypeitem.message.error": "지붕재 코드를 입력하세요.",
"can.not.move.module": "모듈을 이동할 수 없습니다.",
"can.not.copy.module": "모듈을 복사할 수 없습니다.",
|