From 5777a550a3d5f8cc1f37197ce6d4e13757627cc0 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 19 Feb 2025 09:45:34 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=F0=9F=93=8Cfix:=20production=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=20=EA=B8=B0=EB=8F=99=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- startscript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/startscript.js b/startscript.js index 37f52696..350b2c06 100644 --- a/startscript.js +++ b/startscript.js @@ -1,2 +1,2 @@ var exec = require('child_process').exec -exec('yarn start', { windowsHide: true }) +exec('yarn serve', { windowsHide: true }) From a731dc7dd44e1d9ff083fbabcfee31da77c86b66 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 19 Feb 2025 10:25:32 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EB=B0=B0=EC=B9=98?= =?UTF-8?q?=EB=A9=B4=20=EB=A9=94=EB=89=B4=20=EC=9D=B4=EB=8F=99=EC=8B=9C=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - confirm 창 띄우기 전 동작 금지 --- src/components/floor-plan/CanvasMenu.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 0b0f4b2d..2d4a323b 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -171,8 +171,6 @@ export default function CanvasMenu(props) { await reloadCanvasStatus(objectNo, pid) break case 3: - console.log('🚀 ~ onClickNav ~ menu:', menu) - console.log('🚀 ~ onClickNav ~ menuNumber:', menuNumber) if (menuNumber > menu.index) { const modules = canvas.getObjects().filter((module) => module.name === POLYGON_TYPE.MODULE) if (modules.length > 0) { @@ -199,6 +197,7 @@ export default function CanvasMenu(props) { return }, }) + return } else { setType('surface') } From 8b9a2a122c372e3b2ae1bc788e4eacd85d597fdc Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 10:53:22 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20=ED=83=AD?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B2=AC=EC=A0=81=EC=84=9C=20=ED=83=AD=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=EB=88=8C=EB=A0=80=EC=9D=84=EB=95=8C=20?= =?UTF-8?q?=EB=A1=9C=EB=94=A9=EB=B0=94false?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 4 +--- src/components/management/StuffSubHeader.jsx | 9 +++------ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 2d4a323b..21c7bedf 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -220,16 +220,14 @@ export default function CanvasMenu(props) { await reloadCanvasStatus(objectNo, pid) break case 5: - setIsGlobalLoading(true) - //로딩바해제는 견적서 상세조회쪽(useEstimateController.js)에서 setIsGlobalLoading(false) promiseGet({ url: `/api/estimate/${objectNo}/${selectedPlan.planNo}/detail` }).then((res) => { if (res.status === 200) { const estimateDetail = res.data - // if (estimateDetail.tempFlg === '0' && estimateDetail.estimateDate !== null) { if (estimateDetail.estimateDate !== null) { setMenuNumber(menu.index) setCurrentMenu(menu.title) setFloorPlanObjectNo({ floorPlanObjectNo: objectNo }) + setIsGlobalLoading(false) router.push(`/floor-plan/estimate/${menu.index}?pid=${selectedPlan.planNo}&objectNo=${objectNo}`) } else { setIsGlobalLoading(false) diff --git a/src/components/management/StuffSubHeader.jsx b/src/components/management/StuffSubHeader.jsx index bb6f48b9..368926a2 100644 --- a/src/components/management/StuffSubHeader.jsx +++ b/src/components/management/StuffSubHeader.jsx @@ -8,7 +8,6 @@ import { useRouter, useSearchParams } from 'next/navigation' import { useSetRecoilState } from 'recoil' -import { QcastContext } from '@/app/QcastProvider' import { useMessage } from '@/hooks/useMessage' import { floorPlanObjectState } from '@/store/floorPlanObjectAtom' import { isObjectNotEmpty, queryStringFormatter } from '@/util/common-utils' @@ -24,8 +23,6 @@ export default function StuffSubHeader({ type }) { const setFloorPlanObjectNo = useSetRecoilState(floorPlanObjectState) - const { isGlobalLoading } = useContext(QcastContext) - const { managementState } = useContext(GlobalDataContext) const [buttonStyle, setButtonStyle] = useState('') @@ -70,7 +67,7 @@ export default function StuffSubHeader({ type }) {
{type === 'list' && ( <> - +

{getMessage('header.menus.management')}

    @@ -92,7 +89,7 @@ export default function StuffSubHeader({ type }) { <>
    • - + {getMessage('stuff.temp.subTitle')}
    • @@ -116,7 +113,7 @@ export default function StuffSubHeader({ type }) { <>
      • - + {getMessage('stuff.temp.subTitle')}
      • From a69d2879f39ecddcaac657894c3a592c434d4010 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 12:07:00 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EB=8F=84=EB=A9=B4=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=ED=9B=84=20=EA=B2=AC=EC=A0=81=EC=84=9C=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=ED=83=AD=EB=8F=84=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/Estimate.jsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index aedb141b..6451498d 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -22,7 +22,7 @@ import { usePlan } from '@/hooks/usePlan' import { usePopup } from '@/hooks/usePopup' import { useSwal } from '@/hooks/useSwal' import { QcastContext } from '@/app/QcastProvider' - +import { useCanvasMenu } from '@/hooks/common/useCanvasMenu' export default function Estimate({}) { const [uniqueData, setUniqueData] = useState([]) const [handlePricingFlag, setHandlePricingFlag] = useState(false) @@ -87,7 +87,7 @@ export default function Estimate({}) { const { getMessage } = useMessage() const { closeAll } = usePopup() - + const { setMenuNumber } = useCanvasMenu() //새로 추가한 첨부파일 props const fileUploadProps = { uploadFiles: files, @@ -119,8 +119,6 @@ export default function Estimate({}) { if (estimateContextState?.itemList.length > 0) { tempList = estimateContextState.itemList.filter((item) => !res.some((resItem) => resItem.itemId === item.itemId)) updatedRes = [...res, ...tempList] - // console.log('tempList::::::::', tempList) - // console.log('updatedRes::::::::', updatedRes) } else { updatedRes = [...res] } @@ -144,6 +142,7 @@ export default function Estimate({}) { }, [selectedPlan]) useEffect(() => { + setMenuNumber(5) initEstimate() }, []) From 1e3ad6a2917363725330f5f55e76f41e3b5e89a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=8B=9D?= <43837214+Minsiki@users.noreply.github.com> Date: Wed, 19 Feb 2025 13:15:58 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=EC=A7=80=EB=B6=95=EB=A9=B4=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=8B=9C=20=EC=A7=91=EA=B3=84=ED=91=9C=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleSelection.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hooks/module/useModuleSelection.js b/src/hooks/module/useModuleSelection.js index 26bac8e8..23c201b0 100644 --- a/src/hooks/module/useModuleSelection.js +++ b/src/hooks/module/useModuleSelection.js @@ -1,4 +1,4 @@ -import { useRecoilState, useRecoilValue } from 'recoil' +import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil' import { useContext, useEffect, useState } from 'react' import { GlobalDataContext } from '@/app/GlobalDataProvider' import { useMasterController } from '@/hooks/common/useMasterController' @@ -7,6 +7,7 @@ import { selectedModuleState, moduleSelectionInitParamsState, moduleSelectionDat import { isObjectNotEmpty } from '@/util/common-utils' import { canvasState } from '@/store/canvasAtom' import { POLYGON_TYPE } from '@/common/common' +import { moduleStatisticsState } from '@/store/circuitTrestleAtom' export function useModuleSelection(props) { const canvas = useRecoilValue(canvasState) @@ -25,6 +26,7 @@ export function useModuleSelection(props) { const [moduleSelectionInitParams, setModuleSelectionInitParams] = useRecoilState(moduleSelectionInitParamsState) //모듈 기본 데이터 ex) 면조도, 높이등등 const { getModuleTypeItemList } = useMasterController() const { findCommonCode } = useCommonCode() + const resetStatisticsData = useResetRecoilState(moduleStatisticsState) const bindInitData = () => { setInstallHeight(managementState?.installHeight) @@ -98,6 +100,7 @@ export function useModuleSelection(props) { canvas.remove(moduleSurface) }) canvas.renderAll() + resetStatisticsData() } }, []) From fefddac1a9782e54f32ba59a9cafc9d9193927ef Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Wed, 19 Feb 2025 13:21:25 +0900 Subject: [PATCH 6/6] =?UTF-8?q?roofMaterials=EA=B0=80=20=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=20=ED=9B=84=20=EC=8B=A4=ED=96=89=20=EB=B0=B0=EC=B9=98=EB=A9=B4?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=EC=84=A4=EC=A0=95=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20setCanvasSetting=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 77 ++++++++++++++++------------ 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 5df718ec..08ac6470 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -140,8 +140,7 @@ export function useCanvasSetting() { const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) // 선택된 지붕재 정보 const { floorPlanState } = useContext(FloorPlanContext) // 플랜 상태 const { closeAll } = usePopup() // 팝업 닫기 - // const previousObjectNoRef = useRef(null) // 최초 데이터 설정 확인 - // const previousRoofMaterialsRef = useRef(null) // 최초 데이터 설정 확인 + const [isRoofMaterialsLoaded, setIsRoofMaterialsLoaded] = useState(false) // roofMaterials 로드 상태 확인 useEffect(() => { const tempFetchRoofMaterials = !fetchRoofMaterials @@ -153,6 +152,15 @@ export function useCanvasSetting() { } }, []) + /** + * roofMaterials가 변경될 때마다 로드 상태 업데이트 + */ + useEffect(() => { + if (roofMaterials.length > 0) { + setIsRoofMaterialsLoaded(true) + } + }, [roofMaterials]) + /** * 지붕재 초기세팅 */ @@ -188,26 +196,6 @@ export function useCanvasSetting() { setBasicSettings({ ...basicSetting, selectedRoofMaterial: selectedRoofMaterial }) } - // useEffect(() => { - // // 지붕재 select 정보가 존재해야 배치면초기설정 DB 정보 비교 후 지붕재 정보를 가져올 수 있음 - // if ( - // (!previousObjectNoRef.current && !correntObjectNo && previousObjectNoRef.current !== correntObjectNo) || - // (roofMaterials.length !== 0 && JSON.stringify(previousRoofMaterialsRef.current) !== JSON.stringify(roofMaterials)) - // ) { - // // 1회만 실행 - // if (roofMaterials && previousRoofMaterialsYn === 'N') { - // if (correntObjectNo) { - // //fetchBasicSettings() - // previousRoofMaterialsYn = 'Y' - // } - // } - - // // 이전 값을 업데이트 - // previousObjectNoRef.current = correntObjectNo - // previousRoofMaterialsRef.current = roofMaterials - // } - // }, [roofMaterials, correntObjectNo]) - /** * 배치면 초기설정 화면이 열리지 않아도 데이터 set 하기 위해서 추가 */ @@ -330,13 +318,24 @@ export function useCanvasSetting() { * 기본설정(PlacementShapeSetting) 조회 및 초기화 */ const fetchBasicSettings = async (planNo, openPoint) => { - /* roofMaterials가 로드될 때까지 대기 */ - if (!roofMaterials || roofMaterials.length === 0) { - console.log('Waiting for roofMaterials to load...') - return - } - try { + /* roofMaterials가 로드될 때까지 대기 후 실행 */ + if (!isRoofMaterialsLoaded) { + /* roofMaterials가 아직 로드되지 않았다면 */ + await new Promise((resolve) => { + /* 새로운 Promise 생성 */ + const checkInterval = setInterval(() => { + /* 100ms마다 체크하는 인터벌 설정 */ + console.log('roofMaterials loading... ', roofMaterials.length) + if (roofMaterials.length > 0) { + /* roofMaterials가 로드되었다면 */ + clearInterval(checkInterval) // 인터벌 중지 + resolve() // Promise 완료 + } + }, 100) + }) + } + await get({ url: `/api/canvas-management/canvas-basic-settings/by-object/${correntObjectNo}/${planNo}`, }).then((res) => { @@ -433,6 +432,7 @@ export function useCanvasSetting() { if (addRoofs.length > 0) { setAddedRoofs(addRoofs) + setBasicSettings({ ...basicSetting, roofMaterials: addRoofs[0], @@ -442,13 +442,23 @@ export function useCanvasSetting() { roofsData: roofsArray, selectedRoofMaterial: addRoofs.find((roof) => roof.selected), }) + + setCanvasSetting({ + ...basicSetting, + roofMaterials: addRoofs[0], + planNo: roofsRow[0].planNo, + roofSizeSet: roofsRow[0].roofSizeSet, + roofAngleSet: roofsRow[0].roofAngleSet, + roofsData: roofsArray, + selectedRoofMaterial: addRoofs.find((roof) => roof.selected), + }) } }) } catch (error) { console.error('Data fetching error:', error) } - setCanvasSetting({ ...basicSetting }) + // setCanvasSetting({ ...basicSetting }) } /** @@ -482,12 +492,15 @@ export function useCanvasSetting() { await post({ url: `/api/canvas-management/canvas-basic-settings`, data: patternData }).then((res) => { swalFire({ text: getMessage(res.returnMessage) }) - /* 배치면초기설정 조회 */ + /* BasicSettings Recoil 설정 */ setBasicSettings({ ...params }) }) - /* CanvasSetting Recoil 설정 */ - setCanvasSetting({ ...basicSetting }) + /* CanvasSetting Recoil 설정 - roofSizeSet을 문자열로 변환 */ + setCanvasSetting({ + ...basicSetting, + roofSizeSet: String(params.roofSizeSet), + }) /* 배치면초기설정 조회 */ fetchBasicSettings(params.planNo, null)