From 9c0c74128757bea24ec14d28808e4f04a374488b 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: Tue, 18 Feb 2025 18:18:50 +0900 Subject: [PATCH 01/47] =?UTF-8?q?=EB=A9=B4=ED=98=95=EC=83=81=20=EB=B0=B0?= =?UTF-8?q?=EC=B9=98=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../placementSurface/PlacementSurface.jsx | 47 +++++++++++++------ .../PlacementSurfaceSetting.jsx | 6 +-- src/hooks/surface/useSurfaceShapeBatch.js | 31 ++++++++++-- 3 files changed, 64 insertions(+), 20 deletions(-) diff --git a/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx b/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx index c06386b5..a4722bff 100644 --- a/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx +++ b/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx @@ -11,23 +11,42 @@ const PlacementSurface = forwardRef((props, refs) => { const num = ['①', '②', '③', '④', '⑤'] const getImageUrl = () => { + // re_는 normal의 y축 대칭 이미지 + const imageName = id < 10 ? '0' + id : id + let imageRotate = 0 if (xInversion && !yInversion) { - return `/static/images/canvas/shape/re_${rotate % 4 !== 0 ? Math.abs(rotate % 4) * 90 + 'deg' : 'normal'}/plane_tab${id < 10 ? '0' + id : id}.svg` + if (rotate % 2 === 0 || rotate < 0) { + imageRotate = Math.abs(rotate % 4) + } else { + if (rotate < 0) { + imageRotate = Math.abs((rotate - 2) % 4) + } else { + imageRotate = Math.abs((rotate + 2) % 4) + } + } + } else if (xInversion && yInversion) { + imageRotate = Math.abs((rotate + 4) % 4) + } else if (xInversion !== yInversion && rotate < 0) { + imageRotate = Math.abs(rotate) + } else if (!xInversion && yInversion) { + if (rotate % 2 === 0 || rotate < 0) { + imageRotate = Math.abs(rotate % 4) + } else { + if (rotate < 0) { + imageRotate = Math.abs((rotate + 2) % 4) + } else { + imageRotate = Math.abs((rotate - 2) % 4) + } + } + } else { + imageRotate = (rotate + 4) % 4 } - - if (!xInversion && yInversion) { - return `/static/images/canvas/shape/re_${rotate % 4 !== 0 ? Math.abs(rotate % 4) * 90 + 'deg' : 'normal'}/plane_tab${id < 10 ? '0' + id : id}.svg` + const rotateType = imageRotate % 4 !== 0 ? (imageRotate % 4) * 90 + 'deg' : 'normal' + if (xInversion !== yInversion) { + return `/static/images/canvas/shape/re_${rotateType}/plane_tab${imageName}.svg` + } else { + return `/static/images/canvas/shape/${rotateType}/plane_tab${imageName}.svg` } - - if (xInversion && yInversion) { - return `/static/images/canvas/shape/${rotate % 4 !== 0 ? Math.abs(rotate % 4) * 90 + 'deg' : 'normal'}/plane_tab${id < 10 ? '0' + id : id}.svg` - } - - if (rotate < 0) { - return `/static/images/canvas/shape/${rotate !== 0 ? Math.abs((rotate + 4) * 90) + 'deg' : 'normal'}/plane_tab${id < 10 ? '0' + id : id}.svg` - } - - return `/static/images/canvas/shape/${rotate !== 0 ? Math.abs(rotate * 90) + 'deg' : 'normal'}/plane_tab${id < 10 ? '0' + id : id}.svg` } const azimuthButton = (direction, e) => { diff --git a/src/components/floor-plan/modal/placementSurface/PlacementSurfaceSetting.jsx b/src/components/floor-plan/modal/placementSurface/PlacementSurfaceSetting.jsx index 58ab430a..967d849e 100644 --- a/src/components/floor-plan/modal/placementSurface/PlacementSurfaceSetting.jsx +++ b/src/components/floor-plan/modal/placementSurface/PlacementSurfaceSetting.jsx @@ -239,12 +239,11 @@ export default function PlacementSurfaceSetting({ id, pos = { x: 50, y: 230 } }) applySurfaceShape(surfaceRefs, selectedType, id) } - const handleRotate = () => {} - const handleInversion = (type) => { if (type === 'x') { + const x = xInversion setXInversion(!xInversion) - setRotate(xInversion ? rotate + 2 : rotate - 2) + setRotate(x ? rotate + 2 : rotate - 2) // setXInversion(!xInversion) } else if (type === 'y') { // setRotate(rotate + 2) @@ -295,6 +294,7 @@ export default function PlacementSurfaceSetting({ id, pos = { x: 50, y: 230 } })
+ {/* */} {/* */} diff --git a/src/hooks/surface/useSurfaceShapeBatch.js b/src/hooks/surface/useSurfaceShapeBatch.js index 298ef982..6f7d1dfa 100644 --- a/src/hooks/surface/useSurfaceShapeBatch.js +++ b/src/hooks/surface/useSurfaceShapeBatch.js @@ -101,15 +101,40 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { lockScalingX: true, // X 축 크기 조정 잠금 lockScalingY: true, // Y 축 크기 조정 잠금 name: MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH_TEMP, - flipX: xInversion !== yInversion ? yInversion : false, - flipY: xInversion !== yInversion ? xInversion : false, - angle: xInversion && yInversion ? Math.abs((rotate + 180) % 360) : Math.abs(rotate), + flipX: xInversion !== yInversion, + // angle: xInversion && yInversion ? Math.abs((rotate + 180) % 360) : Math.abs(rotate), + // angle: rotate, originX: 'center', originY: 'center', pitch: globalPitch, } obj = new QPolygon(points, options) + let imageRotate = 0 + if (xInversion && !yInversion) { + if (rotate % 180 === 0 || rotate < 0) { + imageRotate = Math.abs(rotate % 360) + } else { + imageRotate = Math.abs((rotate - 180) % 4) + } + } else if (xInversion && yInversion) { + imageRotate = Math.abs((rotate + 360) % 360) + } else if (xInversion !== yInversion && rotate < 0) { + imageRotate = Math.abs(rotate) + } else if (!xInversion && yInversion) { + if (rotate % 180 === 0 || rotate < 0) { + imageRotate = Math.abs(rotate % 360) + } else { + if (rotate < 0) { + imageRotate = Math.abs((rotate + 180) % 360) + } else { + imageRotate = Math.abs((rotate - 180) % 360) + } + } + } else { + imageRotate = (rotate + 360) % 360 + } + obj.set({ angle: imageRotate }) obj.setCoords() //좌표 변경 적용 canvas?.add(obj) From 0f56016daa8a7be47cd5dab7a453fd4dc82f8986 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 09:15:53 +0900 Subject: [PATCH 02/47] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EC=83=81=EC=84=B8&?= =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20=EB=AC=B8=EC=84=9C=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C=20=ED=8C=9D=EC=97=85=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=85=B8=EC=B6=9C=EC=A1=B0=EA=B1=B4=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 20 +++++++++----------- src/components/management/StuffDetail.jsx | 9 ++++----- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 59f2b673..0b0f4b2d 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -435,21 +435,16 @@ export default function CanvasMenu(props) { useEffect(() => { if (isObjectNotEmpty(estimateContextState)) { - const { createUser, tempFlg, lockFlg } = estimateContextState - + const { createUser, tempFlg, lockFlg, docNo } = estimateContextState if (createUser && tempFlg && lockFlg) { - if (createUser === 'T01') { - if (sessionState.storeId !== 'T01') { - setAllButtonStyles('none') - } else { - handleButtonStyles(tempFlg, lockFlg) - } + if (createUser === 'T01' && sessionState.storeId !== 'T01') { + setAllButtonStyles('none') } else { - handleButtonStyles(tempFlg, lockFlg) + handleButtonStyles(tempFlg, lockFlg, docNo) } } } - }, [estimateContextState?.createUser, estimateContextState?.tempFlg, estimateContextState?.lockFlg]) + }, [estimateContextState?.createUser, estimateContextState?.tempFlg, estimateContextState?.lockFlg, estimateContextState.docNo]) const setAllButtonStyles = (style) => { setButtonStyle1(style) @@ -459,7 +454,7 @@ export default function CanvasMenu(props) { setButtonStyle5(style) } - const handleButtonStyles = (tempFlg, lockFlg) => { + const handleButtonStyles = (tempFlg, lockFlg, docNo) => { if (tempFlg === '1') { setAllButtonStyles('none') setButtonStyle2('') @@ -472,6 +467,9 @@ export default function CanvasMenu(props) { setButtonStyle4('') setButtonStyle5('') } + if (!docNo) { + setButtonStyle1('none') + } } /** diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 748de71c..078873d3 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -291,15 +291,14 @@ export default function StuffDetail() { buttonStyle = 'none' buttonStyle2 = 'none' } else { - if (params?.data?.createSaleStoreId === 'T01') { - if (session?.storeId !== 'T01') { - buttonStyle = 'none' - } + if (params?.data?.createSaleStoreId === 'T01' && session?.storeId !== 'T01') { + buttonStyle = 'none' } - if (params?.data?.tempFlg === '1') { + if (params?.data?.tempFlg === '1' || !params?.data?.docNo) { buttonStyle2 = 'none' } } + return ( <>
From 5777a550a3d5f8cc1f37197ce6d4e13757627cc0 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 19 Feb 2025 09:45:34 +0900 Subject: [PATCH 03/47] =?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 04/47] =?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 05/47] =?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 06/47] =?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 07/47] =?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 08/47] =?UTF-8?q?roofMaterials=EA=B0=80=20=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=ED=9B=84=20=EC=8B=A4=ED=96=89=20=EB=B0=B0=EC=B9=98?= =?UTF-8?q?=EB=A9=B4=EC=B4=88=EA=B8=B0=EC=84=A4=EC=A0=95=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20setCanvasSetting?= =?UTF-8?q?=20=EC=88=98=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) From 993ca373a2fb03c4c072d5683228c6ef313c2067 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 19 Feb 2025 13:38:16 +0900 Subject: [PATCH 09/47] =?UTF-8?q?#782=20-=20=EB=B3=80=EB=B3=84=EB=A1=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=EC=9C=BC=EB=A1=9C=20=EC=A7=80=EB=B6=95?= =?UTF-8?q?=ED=98=95=EC=83=81=20=EC=9E=90=EB=8F=99=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=ED=9B=84=20=EC=A7=80=EB=B6=95=ED=98=95=EC=83=81=20=EC=88=98?= =?UTF-8?q?=EB=8F=99=EC=84=A4=EC=A0=95=20=ED=8C=9D=EC=97=85=EC=B0=BD=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=20=EC=98=A4=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useLine.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/useLine.js b/src/hooks/useLine.js index e2667e80..b447d4f0 100644 --- a/src/hooks/useLine.js +++ b/src/hooks/useLine.js @@ -40,7 +40,7 @@ export const useLine = () => { }) canvas ?.getObjects() - .find((obj) => obj.parent === line) + .find((obj) => obj.parentId === line.id) .set({ visible: false, }) @@ -53,7 +53,7 @@ export const useLine = () => { }) canvas ?.getObjects() - .find((obj) => obj.parent === line) + .find((obj) => obj.parentId === line.id) .set({ visible: true, }) From 84c9f3914ef0760be216bdc2f29d70a4658058d1 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 13:49:43 +0900 Subject: [PATCH 10/47] #756 --- src/components/floor-plan/CanvasMenu.jsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 21c7bedf..a5fd5587 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -215,6 +215,9 @@ export default function CanvasMenu(props) { setType('module') } } else { + //menuNumber가 모듈,회로 구성(4) 보다 큰 경우. (견적서:5, 발전시뮬:6) + //화면은 이동되는데 MenuDapth01 type이 null로 들어가서 모듈/가대설정, 회로설정 하위뎁스메뉴 안나오는 문제 수정 + setType('module') router.push(`/floor-plan?pid=${pid}&objectNo=${objectNo}`) } await reloadCanvasStatus(objectNo, pid) From 3ed6aaa468b44502733f99d826236919c705cccf 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 14:24:07 +0900 Subject: [PATCH 11/47] =?UTF-8?q?=F0=9F=9A=A8chore:=20Sync=20Sass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/_modal.scss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/styles/_modal.scss b/src/styles/_modal.scss index b6e2d322..a19aba2e 100644 --- a/src/styles/_modal.scss +++ b/src/styles/_modal.scss @@ -769,6 +769,13 @@ $alert-color: #101010; background-color: #365f6e; } } + &.gray{ + background-color: #535353; + border: 1px solid #9e9e9e; + &:hover{ + background-color: #6b6b6b; + } + } } } } From 5027e7355d789a9b18563e0485635f37800b5f96 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 14:24:51 +0900 Subject: [PATCH 12/47] =?UTF-8?q?-=20=EB=B0=B0=EC=B9=98=EB=A9=B4=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EA=B8=B0=20=EC=9D=B4=ED=9B=84=20=EC=84=A0?= =?UTF-8?q?=EC=86=8D=EC=84=B1=20=EC=84=A4=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20-=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PlacementSurfaceLineProperty.jsx | 74 +++++++++ .../surface/useRoofLinePropertySetting.js | 151 ++++++++++++++++++ src/locales/ja.json | 4 + src/locales/ko.json | 4 + 4 files changed, 233 insertions(+) create mode 100644 src/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty.jsx create mode 100644 src/hooks/surface/useRoofLinePropertySetting.js diff --git a/src/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty.jsx b/src/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty.jsx new file mode 100644 index 00000000..00f00e80 --- /dev/null +++ b/src/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty.jsx @@ -0,0 +1,74 @@ +import WithDraggable from '@/components/common/draggable/WithDraggable' +import { useMessage } from '@/hooks/useMessage' +import { usePopup } from '@/hooks/usePopup' +import { useRoofLinePropertySetting } from '@/hooks/surface/useRoofLinePropertySetting' +import { useEffect } from 'react' +import { LINE_TYPE } from '@/common/common' +import { useSwal } from '@/hooks/useSwal' + +export default function PlacementSurfaceLineProperty(props) { + const { id, pos = { x: 50, y: 230 }, roof } = props + const { closePopup } = usePopup() + // const { handleSetEaves, handleSetGable, handleRollback, handleFix, closeModal } = usePropertiesSetting(id) + const { roofLinesInit, handleSetRidge, handleSetEaves, handleSetGable, handleRollback, handleFix } = useRoofLinePropertySetting(id, roof) + const { getMessage } = useMessage() + const { swalFire } = useSwal() + + useEffect(() => { + roofLinesInit(roof) + }, []) + + const handleClose = () => { + const notSettingLines = roof.lines.filter( + (line) => + !line.attributes.type || ![LINE_TYPE.WALLLINE.EAVES, LINE_TYPE.WALLLINE.GABLE, LINE_TYPE.SUBLINE.RIDGE].includes(line.attributes.type), + ) + if (notSettingLines.length > 0) { + swalFire({ text: getMessage('modal.canvas.setting.roofline.properties.setting.not.setting'), type: 'alert', icon: 'warning' }) + return + } + + closePopup(id) + } + + return ( + +
        +
        +

        {getMessage('modal.canvas.setting.roofline.properties.setting')}

        + +
        +
        +
        +
        +
        {getMessage('modal.canvas.setting.roofline.properties.setting.info')}
        +
        +
        {getMessage('setting')}
        +
        + + + +
        +
        +
        + + +
        +
        +
        +
        +
        + ) +} diff --git a/src/hooks/surface/useRoofLinePropertySetting.js b/src/hooks/surface/useRoofLinePropertySetting.js new file mode 100644 index 00000000..184d7f4e --- /dev/null +++ b/src/hooks/surface/useRoofLinePropertySetting.js @@ -0,0 +1,151 @@ +import { LINE_TYPE } from '@/common/common' +import { canvasState, currentObjectState } from '@/store/canvasAtom' +import { useEffect, useRef } from 'react' +import { useRecoilValue } from 'recoil' +import { usePopup } from '../usePopup' +import useSWR from 'swr' +import { useSwal } from '../useSwal' +import { useMessage } from '../useMessage' + +const LINE_COLOR = { + EAVES: '#45CD7D', + GABLE: '#3FBAE6', + RIDGE: '#9e9e9e', + DEFAULT: '#000000', +} + +export function useRoofLinePropertySetting(id, roof) { + const canvas = useRecoilValue(canvasState) + const currentObject = useRecoilValue(currentObjectState) + const history = useRef([]) + const { closePopup } = usePopup() + const { swalFire } = useSwal() + const { getMessage } = useMessage() + + useEffect(() => { + if (currentObject) { + currentObject.set({ + stroke: '#EA10AC', + strokeWidth: 4, + }) + } + }, [currentObject]) + + const roofLinesInit = () => { + roof.lines.forEach((line) => { + line.set({ + stroke: '#000000', + strokeWidth: 4, + visible: true, + }) + line.bringToFront() + line.setViewLengthText(false) + }) + canvas.renderAll() + } + + const handleSetEaves = () => { + currentObject.set({ + attributes: { + ...currentObject.attributes, + type: LINE_TYPE.WALLLINE.EAVES, + }, + stroke: LINE_COLOR.EAVES, + }) + + history.current.push(currentObject) + nextLineFocus(currentObject) + canvas.renderAll() + } + + const handleSetGable = () => { + currentObject.set({ + attributes: { + ...currentObject.attributes, + type: LINE_TYPE.WALLLINE.GABLE, + }, + stroke: LINE_COLOR.GABLE, + }) + + history.current.push(currentObject) + nextLineFocus(currentObject) + canvas.renderAll() + } + + const handleSetRidge = () => { + currentObject.set({ + attributes: { + ...currentObject.attributes, + type: LINE_TYPE.SUBLINE.RIDGE, + }, + stroke: LINE_COLOR.RIDGE, + }) + + history.current.push(currentObject) + nextLineFocus(currentObject) + canvas.renderAll() + } + + const handleRollback = () => { + if (history.current.length === 0) { + return + } + const lastLine = history.current.pop() + + delete lastLine.attributes + lastLine.set({ + stroke: LINE_COLOR.DEFAULT, + strokeWidth: 4, + }) + + canvas.setActiveObject(lastLine) + canvas.renderAll() + } + + const handleFix = () => { + // const roof = canvas.getObjects().find((obj) => currentObject.parentId === obj.id) + const notSettingLines = roof.lines.filter( + (line) => + !line.attributes.type || ![LINE_TYPE.WALLLINE.EAVES, LINE_TYPE.WALLLINE.GABLE, LINE_TYPE.SUBLINE.RIDGE].includes(line.attributes.type), + ) + if (notSettingLines.length > 0) { + swalFire({ text: getMessage('modal.canvas.setting.roofline.properties.setting.not.setting'), type: 'alert', icon: 'warning' }) + return + } + + roof.lines.forEach((line) => { + line.set({ + stroke: LINE_COLOR.DEFAULT, + strokeWidth: 4, + visible: false, + }) + }) + + canvas.renderAll() + closePopup(id) + } + + const nextLineFocus = (selectedLine) => { + // const roof = canvas.getObjects().find((obj) => currentObject.parentId === obj.id) + const lines = roof?.lines + if (!lines) return + const index = lines.findIndex((line) => line === selectedLine) + + const nextLine = lines[index + 1] || lines[0] + if (!nextLine.attributes?.type) { + canvas.setActiveObject(nextLine) + } else { + //activeObject 해제 + canvas.discardActiveObject() + } + } + + return { + roofLinesInit, + handleSetEaves, + handleSetGable, + handleSetRidge, + handleRollback, + handleFix, + } +} diff --git a/src/locales/ja.json b/src/locales/ja.json index 9f06310e..7c3333c3 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -269,6 +269,10 @@ "modal.canvas.setting.wallline.properties.setting.info": "※属性を変更する外壁線を選択し、軒で設定またはケラバで設定\nボタンをクリックして設定値を適用してください。\n", "modal.canvas.setting.wallline.properties.setting.eaves": "軒で設定", "modal.canvas.setting.wallline.properties.setting.edge": "ケラバに設定", + "modal.canvas.setting.wallline.properties.setting.ridge": "용마루로 설정(JA)", + "modal.canvas.setting.roofline.properties.setting": "지붕선 속성 설정(JA)", + "modal.canvas.setting.roofline.properties.setting.info": "※ 속성을 변경할 지붕선을 선택하고 처마로 설정 또는 케라바로 설정\n 버튼을 클릭하여 설정값을 적용하십시오.\n(JA)", + "modal.canvas.setting.roofline.properties.setting.not.setting": "설정하지 않은 라인이 존재합니다.(JA)", "modal.eaves.gable.edit": "軒/ケラバ変更", "modal.eaves.gable.edit.basic": "通常", "modal.eaves.gable.edit.wall.merge.info": "河屋などの壁に面する屋根を作成します。", diff --git a/src/locales/ko.json b/src/locales/ko.json index b43e6853..d4ea7929 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -269,6 +269,10 @@ "modal.canvas.setting.wallline.properties.setting.info": "※ 속성을 변경할 외벽선을 선택하고 처마로 설정 또는 케라바로 설정\n 버튼을 클릭하여 설정값을 적용하십시오.\n", "modal.canvas.setting.wallline.properties.setting.eaves": "처마로 설정", "modal.canvas.setting.wallline.properties.setting.edge": "케라바로 설정", + "modal.canvas.setting.wallline.properties.setting.ridge": "용마루로 설정", + "modal.canvas.setting.roofline.properties.setting": "지붕선 속성 설정", + "modal.canvas.setting.roofline.properties.setting.info": "※ 속성을 변경할 지붕선을 선택하고 처마로 설정 또는 케라바로 설정\n 버튼을 클릭하여 설정값을 적용하십시오.\n", + "modal.canvas.setting.roofline.properties.setting.not.setting": "설정하지 않은 라인이 존재합니다.", "modal.eaves.gable.edit": "처마/케라바 변경", "modal.eaves.gable.edit.basic": "통상", "modal.eaves.gable.edit.wall.merge.info": "하옥 등 벽에 접하는 지붕을 작성합니다.", From dfccb516931ce81aac4ea6b50d81143fa21c754c 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 14:25:21 +0900 Subject: [PATCH 13/47] =?UTF-8?q?-=20=ED=9A=8C=EB=A1=9C=EB=B2=88=ED=98=B8?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=ED=9B=84=20=ED=9A=8C=EB=A1=9C?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20infinity=20=EB=B2=84=EA=B7=B8=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 --- .../circuitTrestle/step/type/PassivityCircuitAllocation.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx index 6ec3ba25..ee118601 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -262,12 +262,13 @@ export default function PassivityCircuitAllocation(props) { const circuitModules = canvas.getObjects().filter((obj) => obj.name === 'module' && obj.circuit?.circuitInfo?.id === selectedPcs.id) const circuitNumbers = circuitModules.map((obj) => { const circuitNumber = obj.circuitNumber.replace(/[()]/g, '').split('-') - return parseInt(circuitNumber[circuitNumber.length - 1]) + return parseInt(circuitNumber[0]) }) const minCircuitNumber = Math.min(...circuitNumbers) canvas.remove(...circuitModules.map((module) => module.circuit)) circuitModules.forEach((obj) => { obj.circuit = null + obj.circuitNumber = null obj.pcsItemId = null }) setCircuitNumber(minCircuitNumber) @@ -293,9 +294,11 @@ export default function PassivityCircuitAllocation(props) { canvas.remove(...circuitModules.map((module) => module.circuit)) circuitModules.forEach((obj) => { obj.circuit = null + obj.circuitNumber = null obj.pcsItemId = null }) canvas.renderAll() + setCircuitNumber(1) setTargetModules([]) setModuleStatisticsData() }, From f0a9c5963f2282c08ee2baa59dc5140109c7dbc8 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 14:26:29 +0900 Subject: [PATCH 14/47] =?UTF-8?q?-=20=EB=B0=B0=EC=B9=98=EB=A9=B4=20?= =?UTF-8?q?=ED=99=95=EC=A0=95=20=ED=9B=84=20=EC=A7=80=EB=B6=95=EC=84=A0=20?= =?UTF-8?q?=EC=86=8D=EC=84=B1=20=EC=84=A4=EC=A0=95=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/surface/usePlacementShapeDrawing.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hooks/surface/usePlacementShapeDrawing.js b/src/hooks/surface/usePlacementShapeDrawing.js index dee54673..c2b7ff98 100644 --- a/src/hooks/surface/usePlacementShapeDrawing.js +++ b/src/hooks/surface/usePlacementShapeDrawing.js @@ -34,6 +34,7 @@ import { usePopup } from '@/hooks/usePopup' import { roofDisplaySelector } from '@/store/settingAtom' import { useRoofFn } from '@/hooks/common/useRoofFn' +import PlacementSurfaceLineProperty from '@/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty' // 면형상 배치 export function usePlacementShapeDrawing(id) { @@ -76,7 +77,7 @@ export function usePlacementShapeDrawing(id) { const isFix = useRef(false) - const { closePopup } = usePopup() + const { closePopup, addPopup } = usePopup() const globalPitch = useRecoilValue(globalPitchState) @@ -244,7 +245,8 @@ export function usePlacementShapeDrawing(id) { setPoints([]) canvas?.renderAll() - closePopup(id) + + addPopup(id, 1, , false) } if (points.length < 3) { From 966f7db9b846eadb4bcf62dcf991d72e1be5522c Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 19 Feb 2025 14:29:44 +0900 Subject: [PATCH 15/47] =?UTF-8?q?=EC=A7=80=EB=B6=95=EB=A9=B4=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=EC=8B=9C=20lineType=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePolygon.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index 99845d46..1dc3f231 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -7,7 +7,7 @@ import { isSamePoint, removeDuplicatePolygons } from '@/util/qpolygon-utils' import { flowDisplaySelector } from '@/store/settingAtom' import { fontSelector } from '@/store/fontAtom' import { QLine } from '@/components/fabric/QLine' -import { POLYGON_TYPE } from '@/common/common' +import { LINE_TYPE, POLYGON_TYPE } from '@/common/common' export const usePolygon = () => { const canvas = useRecoilValue(canvasState) @@ -909,6 +909,29 @@ export const usePolygon = () => { const allLines = [...polygonLines, ...innerLines] + // 2025-02-19 대각선은 케라바, 직선은 용마루로 세팅 + innerLines.forEach((innerLine) => { + const startPoint = innerLine.startPoint + const endPoint = innerLine.endPoint + + // startPoint와 endPoint의 각도가 0,90,180,270이면 직선으로 판단 + if (Math.abs(startPoint.x - endPoint.x) < 2 || Math.abs(startPoint.y - endPoint.y) < 2) { + if (!innerLine.attributes || !innerLine.attributes.type) { + innerLine.attributes = { + ...innerLine.attributes, + type: LINE_TYPE.SUBLINE.RIDGE, + } + } + } else { + if (!innerLine.attributes || !innerLine.attributes.type) { + innerLine.attributes = { + ...innerLine.attributes, + type: LINE_TYPE.SUBLINE.GABLE, + } + } + } + }) + /** * 왼쪽 상단을 startPoint로 전부 변경 */ From 0f07b885d5f04eaf4d7698d7f6df735bdb8d2ca7 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 15:27:57 +0900 Subject: [PATCH 16/47] =?UTF-8?q?docNo=EC=A0=95=EC=B1=85=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index a5fd5587..065a827e 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -498,16 +498,11 @@ export default function CanvasMenu(props) { estimateRecoilState.lockFlg = estimateRecoilState.lockFlg === '0' ? '1' : '0' const { createUser, tempFlg, lockFlg } = estimateRecoilState if (createUser && tempFlg && lockFlg) { - if (createUser === 'T01') { - if (sessionState.storeId !== 'T01') { - setAllButtonStyles('none') - } else { - setEstimateContextState({ tempFlg: estimateRecoilState.tempFlg, lockFlg: estimateRecoilState.lockFlg }) - handleButtonStyles(estimateRecoilState.tempFlg, estimateRecoilState.lockFlg) - } + if (createUser === 'T01' && sessionState.storeId !== 'T01') { + setAllButtonStyles('none') } else { setEstimateContextState({ tempFlg: estimateRecoilState.tempFlg, lockFlg: estimateRecoilState.lockFlg }) - handleButtonStyles(estimateRecoilState.tempFlg, estimateRecoilState.lockFlg) + handleButtonStyles(estimateRecoilState.tempFlg, estimateRecoilState.lockFlg, estimateContextState.docNo) } } } From c35bc134b80cccbfd2abceb8ae5227493d45d6d0 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 15:59:26 +0900 Subject: [PATCH 17/47] =?UTF-8?q?#754=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 065a827e..cb46640e 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -215,9 +215,6 @@ export default function CanvasMenu(props) { setType('module') } } else { - //menuNumber가 모듈,회로 구성(4) 보다 큰 경우. (견적서:5, 발전시뮬:6) - //화면은 이동되는데 MenuDapth01 type이 null로 들어가서 모듈/가대설정, 회로설정 하위뎁스메뉴 안나오는 문제 수정 - setType('module') router.push(`/floor-plan?pid=${pid}&objectNo=${objectNo}`) } await reloadCanvasStatus(objectNo, pid) From 074b405abacc898fcb491e7b19e2833260657bff Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 16:38:02 +0900 Subject: [PATCH 18/47] =?UTF-8?q?=EB=B0=9C=EC=A0=84=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=85=98=20=ED=83=AD=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=B0=9C=EC=A0=84=EC=8B=9C=EB=AE=AC=EB=A0=88=EC=9D=B4=EC=85=98?= =?UTF-8?q?=20=ED=83=AD=20=EB=8B=A4=EC=8B=9C=20=EB=88=8C=EB=A0=80=EC=9D=84?= =?UTF-8?q?=EB=95=8C=20=EB=A1=9C=EB=94=A9=EB=B0=94=20=ED=95=B4=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 1 + src/components/management/StuffSearchCondition.jsx | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index cb46640e..b3b461b3 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -246,6 +246,7 @@ export default function CanvasMenu(props) { setMenuNumber(menu.index) setCurrentMenu(menu.title) router.push(`/floor-plan/simulator/${menu.index}?pid=${selectedPlan.planNo}&objectNo=${objectNo}`) + setIsGlobalLoading(false) } else { setIsGlobalLoading(false) swalFire({ text: getMessage('simulator.menu.move.valid1') }) diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index 58be659c..05c00a13 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -761,6 +761,15 @@ export default function StuffSearchCondition() { setSchSelSaleStoreId('') setOtherSaleStoreId('') } else { + setObjectNo(stuffSearch.schObjectNo ? stuffSearch.schObjectNo : objectNo) + setSaleStoreName(stuffSearch.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName) + setDispCompanyName(stuffSearch.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName) + setObjectName(stuffSearch.schObjectName ? stuffSearch.schObjectName : objectName) + setReceiveUser(stuffSearch.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser) + setAddress(stuffSearch.schAddress ? stuffSearch.schAddress : address) + setDateType(stuffSearch.schDateType ? stuffSearch.schDateType : dateType) + setStartDate(stuffSearch?.schFromDt ? stuffSearch.schFromDt : dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD')) + setEndDate(stuffSearch?.schToDt ? stuffSearch.schToDt : dayjs(new Date()).format('YYYY-MM-DD')) setTempFlg(stuffSearch.schTempFlg ? stuffSearch.schTempFlg : tempFlg) } } else { From 575b507262027e11f9d1f62e69a3e73bbc8109bb Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 19 Feb 2025 16:47:02 +0900 Subject: [PATCH 19/47] =?UTF-8?q?textVisbile=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/common.js | 1 + src/components/fabric/QLine.js | 5 +++++ src/components/fabric/QPolygon.js | 1 + src/hooks/surface/useRoofLinePropertySetting.js | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/common.js b/src/common/common.js index 9aad21d6..0424fcfd 100644 --- a/src/common/common.js +++ b/src/common/common.js @@ -187,6 +187,7 @@ export const SAVE_KEY = [ 'circuit', 'onlyOffset', 'isChidory', + 'textVisible', ] export const OBJECT_PROTOTYPE = [fabric.Line.prototype, fabric.Polygon.prototype, fabric.Triangle.prototype] diff --git a/src/components/fabric/QLine.js b/src/components/fabric/QLine.js index 7fc1afc1..9c9791c9 100644 --- a/src/components/fabric/QLine.js +++ b/src/components/fabric/QLine.js @@ -13,6 +13,7 @@ export const QLine = fabric.util.createClass(fabric.Line, { area: 0, children: [], padding: 5, + textVisible: true, initialize: function (points, options, length = 0) { // 소수점 전부 제거 @@ -29,6 +30,7 @@ export const QLine = fabric.util.createClass(fabric.Line, { this.idx = options.idx ?? 0 this.direction = options.direction ?? getDirectionByPoint({ x: this.x1, y: this.y1 }, { x: this.x2, y: this.y2 }) this.textMode = options.textMode ?? 'plane' // plane:복시도, actual:실측, none:표시안함 + this.textVisible = options.textVisible ?? true if (length !== 0) { this.length = length } else { @@ -40,6 +42,9 @@ export const QLine = fabric.util.createClass(fabric.Line, { }, init: function () { + if (!this.textVisible) { + return + } this.addLengthText() this.on('moving', () => { diff --git a/src/components/fabric/QPolygon.js b/src/components/fabric/QPolygon.js index 23e0de55..b0c46798 100644 --- a/src/components/fabric/QPolygon.js +++ b/src/components/fabric/QPolygon.js @@ -177,6 +177,7 @@ export const QPolygon = fabric.util.createClass(fabric.Polygon, { attributes: { offset: 0, }, + textVisible: false, parent: this, parentId: this.id, direction: getDirectionByPoint(point, nextPoint), diff --git a/src/hooks/surface/useRoofLinePropertySetting.js b/src/hooks/surface/useRoofLinePropertySetting.js index 184d7f4e..22fde4b6 100644 --- a/src/hooks/surface/useRoofLinePropertySetting.js +++ b/src/hooks/surface/useRoofLinePropertySetting.js @@ -33,13 +33,14 @@ export function useRoofLinePropertySetting(id, roof) { const roofLinesInit = () => { roof.lines.forEach((line) => { + canvas.add(line) line.set({ stroke: '#000000', strokeWidth: 4, visible: true, }) line.bringToFront() - line.setViewLengthText(false) + // line.setViewLengthText(false) }) canvas.renderAll() } From 9a68559323535d98600c806224e4c699aacc7198 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 19 Feb 2025 16:55:58 +0900 Subject: [PATCH 20/47] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EA=B2=AC=EC=A0=81?= =?UTF-8?q?=EC=84=9C/=EB=B0=9C=EC=A0=84=20=EC=8B=9C=EB=AE=AC=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=97=90=EC=84=9C=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=9D=B4=EB=8F=99=EC=8B=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 서브 메뉴 안나오던 문제 해결 --- src/components/floor-plan/CanvasMenu.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index b3b461b3..e2b997ce 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -216,6 +216,7 @@ export default function CanvasMenu(props) { } } else { router.push(`/floor-plan?pid=${pid}&objectNo=${objectNo}`) + setType('module') } await reloadCanvasStatus(objectNo, pid) break From fdf834260d9eb510a8e7ad90f71e55f504d99a10 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 17:05:31 +0900 Subject: [PATCH 21/47] =?UTF-8?q?-=20=EB=A9=B4=ED=98=95=EC=83=81=20?= =?UTF-8?q?=EB=B0=B0=EC=B9=98=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/placementSurface/PlacementSurface.jsx | 4 ++-- src/hooks/surface/useSurfaceShapeBatch.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx b/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx index a4722bff..7ab89106 100644 --- a/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx +++ b/src/components/floor-plan/modal/placementSurface/PlacementSurface.jsx @@ -33,9 +33,9 @@ const PlacementSurface = forwardRef((props, refs) => { imageRotate = Math.abs(rotate % 4) } else { if (rotate < 0) { - imageRotate = Math.abs((rotate + 2) % 4) - } else { imageRotate = Math.abs((rotate - 2) % 4) + } else { + imageRotate = Math.abs((rotate + 2) % 4) } } } else { diff --git a/src/hooks/surface/useSurfaceShapeBatch.js b/src/hooks/surface/useSurfaceShapeBatch.js index 6f7d1dfa..6ad9861e 100644 --- a/src/hooks/surface/useSurfaceShapeBatch.js +++ b/src/hooks/surface/useSurfaceShapeBatch.js @@ -113,9 +113,9 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { let imageRotate = 0 if (xInversion && !yInversion) { if (rotate % 180 === 0 || rotate < 0) { - imageRotate = Math.abs(rotate % 360) + imageRotate = Math.abs((rotate - 180) % 360) } else { - imageRotate = Math.abs((rotate - 180) % 4) + imageRotate = Math.abs((rotate + 180) % 4) } } else if (xInversion && yInversion) { imageRotate = Math.abs((rotate + 360) % 360) @@ -126,9 +126,9 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { imageRotate = Math.abs(rotate % 360) } else { if (rotate < 0) { - imageRotate = Math.abs((rotate + 180) % 360) - } else { imageRotate = Math.abs((rotate - 180) % 360) + } else { + imageRotate = Math.abs((rotate + 180) % 360) } } } else { From 4507e6f9de0447ea02ec67654b6e7c2d08e0bfbe 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 17:06:04 +0900 Subject: [PATCH 22/47] =?UTF-8?q?-=20=EA=B2=BD=EC=82=AC=20type=20number=20?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx | 2 +- .../circuitTrestle/step/type/PassivityCircuitAllocation.jsx | 2 +- src/hooks/useCirCuitTrestle.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index d8fa01e5..239487e9 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -322,7 +322,7 @@ export default function StepUp(props) { moduleList: formatModuleList(rsf.moduleList), roofSurface: rsf.roofSurface ? rsf.roofSurface : '', roofSurfaceId: rsf.roofSurfaceId ? rsf.roofSurfaceId : '', - roofSurfaceIncl: rsf.roofSurfaceIncl ? rsf.roofSurfaceIncl : '', + roofSurfaceIncl: rsf.roofSurfaceIncl ? +rsf.roofSurfaceIncl : '', })) } // PCS MatModule 포맷 diff --git a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx index ee118601..36fdad35 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -175,7 +175,7 @@ export default function PassivityCircuitAllocation(props) { return { roofSurfaceId: surface.id, roofSurface: surface.direction, - roofSurfaceIncl: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].pitch, + roofSurfaceIncl: +canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].pitch, moduleList: surface.modules.map((module) => { return { itemId: module.moduleInfo.itemId, diff --git a/src/hooks/useCirCuitTrestle.js b/src/hooks/useCirCuitTrestle.js index 0d811dfd..aacc7e5d 100644 --- a/src/hooks/useCirCuitTrestle.js +++ b/src/hooks/useCirCuitTrestle.js @@ -83,7 +83,7 @@ export function useCircuitTrestle() { .getObjects() .filter((o) => o.id === obj.parentId)[0] .directionText.replace(/[0-9]/g, ''), - roofSurfaceIncl: canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch, + roofSurfaceIncl: +canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch, moduleList: getModuleList(obj).map((module) => { return { itemId: module.moduleInfo.itemId, From 03be41ceba4f9a282b4fac1d128d0590f18f9a78 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 19 Feb 2025 17:17:51 +0900 Subject: [PATCH 23/47] =?UTF-8?q?=EB=A9=B4=ED=98=95=EC=83=81=20=EB=B0=B0?= =?UTF-8?q?=EC=B9=98=20=ED=9B=84=20=EC=83=9D=EC=84=B1=EB=90=9C=20object=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=EB=90=9C=20=EC=83=81=ED=83=9C=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/surface/useSurfaceShapeBatch.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/surface/useSurfaceShapeBatch.js b/src/hooks/surface/useSurfaceShapeBatch.js index 6f7d1dfa..dc073bde 100644 --- a/src/hooks/surface/useSurfaceShapeBatch.js +++ b/src/hooks/surface/useSurfaceShapeBatch.js @@ -184,6 +184,7 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { direction: direction, }) canvas?.add(batchSurface) + canvas.setActiveObject(batchSurface) setSurfaceShapePattern(batchSurface, roofDisplay.column) drawDirectionArrow(batchSurface) From c5c05a0504d9da397d3aa9393a3db8f742a0f759 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 17:43:25 +0900 Subject: [PATCH 24/47] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=20=ED=94=8C=EB=9E=9C=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EA=B0=80?= =?UTF-8?q?=EB=8C=80=20=EC=96=B8=EC=96=B4=ED=8C=A9=20=EC=98=A4=ED=83=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffDetail.jsx | 5 ++--- src/locales/ja.json | 2 +- src/locales/ko.json | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 078873d3..a95f34d2 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -229,9 +229,8 @@ export default function StuffDetail() { }, { // 가대 - // field: 'supportMethodIdMulti', - field: 'standTypeNo', - headerName: getMessage('stuff.detail.planGridHeader.standTypeNo'), + field: 'supportMethodIdMulti', + headerName: getMessage('stuff.detail.planGridHeader.supportMethodIdMulti'), wrapText: true, autoHeight: true, cellStyle: { alignItems: 'flex-start' /* 좌측정렬*/, cursor: 'pointer' }, diff --git a/src/locales/ja.json b/src/locales/ja.json index 7c3333c3..e78f57d7 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -787,7 +787,7 @@ "stuff.detail.planGridHeader.capacity": "システム容量", "stuff.detail.planGridHeader.roofMaterialIdMulti": "屋根材", "stuff.detail.planGridHeader.constructSpecificationMulti": "施工方法", - "stuff.detail.planGridHeader.supprotMethodIdMulti": "架台", + "stuff.detail.planGridHeader.supportMethodIdMulti": "架台", "stuff.detail.planGridHeader.pcTypeNo": "パワーコンディショナー", "stuff.detail.planGridHeader.management": "管理", "stuff.detail.planGrid.btn1": "見積書の照会", diff --git a/src/locales/ko.json b/src/locales/ko.json index d4ea7929..f898200a 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -787,7 +787,7 @@ "stuff.detail.planGridHeader.capacity": "시스템용량", "stuff.detail.planGridHeader.roofMaterialIdMulti": "지붕재", "stuff.detail.planGridHeader.constructSpecificationMulti": "시공방법", - "stuff.detail.planGridHeader.supprotMethodIdMulti": "가대", + "stuff.detail.planGridHeader.supportMethodIdMulti": "가대", "stuff.detail.planGridHeader.pcTypeNo": "파워컨디셔너", "stuff.detail.planGridHeader.management": "관리", "stuff.detail.planGrid.btn1": "견적서 조회", From 7a17daff1100113d945f8c971cf1d1a3f4af826e Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 19 Feb 2025 17:53:26 +0900 Subject: [PATCH 25/47] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20YJSS?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20TO-DO=20=EC=A3=BC=EC=84=9D=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/Estimate.jsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index 6451498d..f4214e68 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -1139,7 +1139,6 @@ export default function Estimate({}) {
        {getMessage('estimate.detail.objectNo')}
        - {/* {objectNo} (Plan No: {estimateContextState.planNo}) */} {currentObjectNo} (Plan No: {planNo})
        @@ -1568,9 +1567,7 @@ export default function Estimate({}) { {/* 견적특이사항 선택한 내용 영역끝 */}
- {/* 견적 특이사항 코드영역 끝 */} - {/* 견적특이사항 영역끝 */} {/* 제품정보 시작 */}
@@ -1580,10 +1577,6 @@ export default function Estimate({}) {
- {/*
-
{getMessage('estimate.detail.sepcialEstimateProductInfo.totAmount')}
-
{convertNumberToPriceDecimal(estimateContextState?.totAmount)}
-
*/}
{getMessage('estimate.detail.sepcialEstimateProductInfo.totVolKw')}
{convertNumberToPriceDecimalToFixed(estimateContextState?.totVolKw, 2)}
@@ -1602,6 +1595,7 @@ export default function Estimate({}) {
+ {/* //todo: 추후 YJSS가 다시 나타날 경우 주석 풀기 */} {/* YJOD면 아래영역 숨김 */} {/*
@@ -1882,7 +1876,6 @@ export default function Estimate({}) {
- {/* html테이블끝 */}
From dac1795aed60f206fe79091b652acb02b03869a3 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 19 Feb 2025 17:59:36 +0900 Subject: [PATCH 26/47] =?UTF-8?q?#786=20=EB=B0=B0=EC=B9=98=EB=A9=B4=20?= =?UTF-8?q?=EB=B3=B5=EC=82=AC=20=EC=8B=9C,=20=EB=B3=B5=EC=82=AC=ED=95=9C?= =?UTF-8?q?=20=EB=B0=B0=EC=B9=98=EB=A9=B4=20=EB=AA=A8=EB=93=88=20=EB=B0=B0?= =?UTF-8?q?=EC=B9=98=20=EC=95=88=EB=90=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=20=EC=9A=94=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useCommonUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/common/useCommonUtils.js b/src/hooks/common/useCommonUtils.js index 60bbb9ec..b7e944c5 100644 --- a/src/hooks/common/useCommonUtils.js +++ b/src/hooks/common/useCommonUtils.js @@ -592,7 +592,7 @@ export function useCommonUtils() { if (obj.name === 'roof') { clonedObj.setCoords() clonedObj.fire('polygonMoved') - clonedObj.set({ direction: obj.direction, directionText: obj.directionText }) + clonedObj.set({ direction: obj.direction, directionText: obj.directionText, roofMaterial: obj.roofMaterial }) canvas.renderAll() addLengthText(clonedObj) //수치 추가 drawDirectionArrow(clonedObj) //방향 화살표 추가 From c2a063cf9ed1302c7b00082e0f47479c1bd43221 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 19 Feb 2025 18:17:47 +0900 Subject: [PATCH 27/47] =?UTF-8?q?=EC=9C=A1=EC=A7=80=EB=B6=95=20=EB=8C=80?= =?UTF-8?q?=EC=9D=91=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 20 ++++++++++++++----- .../placementShape/PlacementShapeSetting.jsx | 8 ++++++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index e2b997ce..df43d7bb 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -565,16 +565,26 @@ export default function CanvasMenu(props) {
{ { - return { ...roof, name: globalLocale === 'ko' ? roof.roofMatlNm : roof.roofMatlNmJp } - })} - //showKey={'roofMatlNm'} + title={ + +basicSetting.roofSizeSet === 3 + ? getMessage('modal.placement.initial.setting.size.none.pitch') + : globalLocale === 'ko' + ? selectedRoofMaterial?.roofMatlNm + : selectedRoofMaterial?.roofMatlNmJp + } + options={ + +basicSetting.roofSizeSet === 3 + ? [] + : addedRoofs.map((roof) => { + return { ...roof, name: globalLocale === 'ko' ? roof.roofMatlNm : roof.roofMatlNmJp } + }) + } showKey={'name'} value={selectedRoofMaterial} onChange={changeSelectedRoofMaterial} sourceKey={'index'} targetKey={'index'} + disabled={+basicSetting.roofSizeSet === 3} /> }
diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index 9f8c54b2..140c9abd 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -170,6 +170,10 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla } const handleRoofLayoutChange = (value) => { + if (+currentRoof.roofSizeSet === 3) { + setCurrentRoof({ ...currentRoof, layout: ROOF_MATERIAL_LAYOUT.PARALLEL }) + return + } setCurrentRoof({ ...currentRoof, layout: value }) } @@ -451,7 +455,7 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla