From 7d7692968912e5aeaba348383587fd7a55b46634 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Thu, 3 Apr 2025 11:23:37 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=A0=EB=8F=84=ED=99=94=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EC=84=A4=EC=B9=98=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/BasicSetting.jsx | 2 +- .../modal/basic/step/Orientation.jsx | 2 +- .../floor-plan/modal/basic/step/Placement.jsx | 16 +++++--- .../floor-plan/modal/basic/step/Trestle.jsx | 11 ++++-- src/hooks/module/useModuleBasicSetting.js | 39 +++++++++++++------ src/store/canvasAtom.js | 6 +++ 6 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index 57264d89..3e22c508 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -95,7 +95,7 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { addedRoofs.map((roof, index) => { return { ...roof, - ...roofsStore[index].addRoof, + ...roofsStore[index]?.addRoof, } }), ) diff --git a/src/components/floor-plan/modal/basic/step/Orientation.jsx b/src/components/floor-plan/modal/basic/step/Orientation.jsx index 6dcadde8..2ce0d536 100644 --- a/src/components/floor-plan/modal/basic/step/Orientation.jsx +++ b/src/components/floor-plan/modal/basic/step/Orientation.jsx @@ -321,7 +321,7 @@ export const Orientation = forwardRef((props, ref) => { - {Array.from({ length: 2 }).map((_, index) => { + {Array.from({ length: 3 }).map((_, index) => { return selectedModules && selectedModules?.itemList && selectedModules?.itemList?.length >= index + 1 ? ( diff --git a/src/components/floor-plan/modal/basic/step/Placement.jsx b/src/components/floor-plan/modal/basic/step/Placement.jsx index b7ba409e..726d3c24 100644 --- a/src/components/floor-plan/modal/basic/step/Placement.jsx +++ b/src/components/floor-plan/modal/basic/step/Placement.jsx @@ -5,6 +5,7 @@ import { checkedModuleState, isManualModuleLayoutSetupState, isManualModuleSetupState, + moduleRowColArrayState, moduleSetupOptionState, toggleManualSetupModeState, } from '@/store/canvasAtom' @@ -36,6 +37,7 @@ const Placement = forwardRef((props, refs) => { const resetModuleSetupOption = useResetRecoilState(moduleSetupOptionState) const [colspan, setColspan] = useState(1) + const [moduleRowColArray, setModuleRowColArray] = useRecoilState(moduleRowColArrayState) //모듈 배치면 생성 useEffect(() => { @@ -62,6 +64,10 @@ const Placement = forwardRef((props, refs) => { } }, []) + useEffect(() => { + console.log('moduleRowColArray', moduleRowColArray) + }, [moduleRowColArray]) + //최초 지입시 체크 useEffect(() => { if (isObjectNotEmpty(moduleSelectionData)) { @@ -342,18 +348,18 @@ const Placement = forwardRef((props, refs) => { - {moduleSelectionData.roofConstructions.map((item) => ( + {moduleSelectionData.roofConstructions.map((item, index) => (
- + {item.addRoof.roofMatlNmJp}
- {selectedModules.itemList.map((item) => ( + {moduleRowColArray[index]?.map((item) => ( <> - 7 - {colspan > 1 && 5} + {item.moduleMaxRows} + {colspan > 1 && {item.mixModuleMaxRows}} ))} diff --git a/src/components/floor-plan/modal/basic/step/Trestle.jsx b/src/components/floor-plan/modal/basic/step/Trestle.jsx index a7bb39d9..529b2fcb 100644 --- a/src/components/floor-plan/modal/basic/step/Trestle.jsx +++ b/src/components/floor-plan/modal/basic/step/Trestle.jsx @@ -1,5 +1,6 @@ import { GlobalDataContext } from '@/app/GlobalDataProvider' import QSelectBox from '@/components/common/select/QSelectBox' +import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' import { useModuleTrestle } from '@/hooks/module/useModuleTrestle' import { useMessage } from '@/hooks/useMessage' import { currentAngleTypeSelector, pitchTextSelector } from '@/store/canvasAtom' @@ -52,11 +53,15 @@ const Trestle = forwardRef((props, ref) => { const [selectedConstruction, setSelectedConstruction] = useState(null) const [selectedRoofBase, setSelectedRoofBase] = useState(null) const { managementState } = useContext(GlobalDataContext) + const { restoreModuleInstArea } = useModuleBasicSetting() useEffect(() => { if (roofs && !selectedRoof) { setSelectedRoof(roofs[0]) } + + //모듈 설치 영역 복구 + restoreModuleInstArea() }, [roofs]) useEffect(() => { @@ -263,16 +268,16 @@ const Trestle = forwardRef((props, ref) => { roofConstructions: newAddedRoofs.map((roof, index) => { return { addRoof: { + ...moduleSelectionData.roofConstructions[index]?.addRoof, ...roof.addRoof, - ...moduleSelectionData.roofConstructions[index].addRoof, }, trestle: { ...roof.trestle, - ...moduleSelectionData.roofConstructions[index].trestle, + ...moduleSelectionData.roofConstructions[index]?.trestle, }, construction: { ...roof.construction, - ...moduleSelectionData.roofConstructions[index].construction, + ...moduleSelectionData.roofConstructions[index]?.construction, }, trestleDetail: { ...roof.trestleDetail, diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index bb966f4e..6e8d5fce 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -10,6 +10,7 @@ import { isManualModuleSetupState, moduleSetupOptionState, toggleManualSetupModeState, + moduleRowColArrayState, } from '@/store/canvasAtom' import { rectToPolygon, polygonToTurfPolygon, calculateVisibleModuleHeight, getDegreeByChon, toFixedWithoutRounding } from '@/util/canvas-util' @@ -61,6 +62,7 @@ export function useModuleBasicSetting(tabNum) { const { drawDirectionArrow } = usePolygon() const moduleSetupOption = useRecoilValue(moduleSetupOptionState) const setManualSetupMode = useSetRecoilState(toggleManualSetupModeState) + const [moduleRowColArray, setModuleRowColArray] = useRecoilState(moduleRowColArrayState) useEffect(() => { return () => { @@ -81,6 +83,8 @@ export function useModuleBasicSetting(tabNum) { //모듈 선택에서 선택된 값들 넘어옴 const makeModuleInitArea = () => { + console.log('moduleSelectionData', moduleSelectionData) + if (isObjectNotEmpty(moduleSelectionData) && tabNum === 3) { if (canvasSetting.roofSizeSet !== '3') { const common = moduleSelectionData.common @@ -90,11 +94,11 @@ export function useModuleBasicSetting(tabNum) { const listParams = roofConstructions.map((item) => { return { ...common, - roofMatlCd: item.trestle.roofMatlCd, - trestleMkrCd: item.trestle.trestleMkrCd, - constMthdCd: item.trestle.constMthdCd, - roofBaseCd: item.trestle.roofBaseCd, - constTp: item.construction.constTp, + roofMatlCd: item.addRoof.roofMatlCd, + trestleMkrCd: item.addRoof.trestleMkrCd, + constMthdCd: item.addRoof.constMthdCd, + roofBaseCd: item.addRoof.roofBaseCd, + constTp: item.addRoof.constTp, mixMatlNo: selectedModules.mixMatlNo, roofPitch: item.addRoof.hajebichi ? item.addRoof.hajebichi : 0, inclCd: String(item.addRoof.pitch), @@ -140,6 +144,7 @@ export function useModuleBasicSetting(tabNum) { //가대 상세 데이터 들어오면 실행 useEffect(() => { if (trestleDetailList.length > 0) { + let rowColArray = [] //지붕을 가져옴 canvas .getObjects() @@ -147,26 +152,38 @@ export function useModuleBasicSetting(tabNum) { .forEach((roof) => { if (!roof.roofMaterial) return const roofIndex = roof.roofMaterial.index //지붕의 지붕재의 순번 + + console.log('moduleSelectionData', moduleSelectionData) + trestleDetailList.forEach((detail) => { if (detail.data !== null) { + const moduleRowArray = [] if (Number(detail.data.roofIndex) === roofIndex) { //roof에 상세 데이터 추가 - roof.set({ trestleDetail: detail.data, stroke: roofOutlineColor(roofIndex), strokeWidth: 7, }) + + const offsetObjects = moduleSelectionData.roofConstructions.find((item) => item.addRoof.index === roofIndex) + + console.log('offsetObjects', offsetObjects) + roof.lines.forEach((line) => { - line.attributes = { ...line.attributes, offset: getOffset(detail.data, line.attributes.type) } + line.attributes = { ...line.attributes, offset: getOffset(offsetObjects.addRoof, line.attributes.type) } }) //배치면 설치 영역 makeModuleInstArea(roof, detail.data) - //surface에 상세 데이터 추가 } + detail.data.module.forEach((module) => { + moduleRowArray.push({ moduleMaxRows: module.moduleMaxRows, mixModuleMaxRows: module.mixModuleMaxRows }) + }) + rowColArray.push(moduleRowArray) } }) }) + setModuleRowColArray(rowColArray) } }, [trestleDetailList]) @@ -185,12 +202,12 @@ export function useModuleBasicSetting(tabNum) { const getOffset = (data, type) => { switch (type) { case LINE_TYPE.WALLLINE.EAVES: - return data.eaveIntvl / 10 + return data.eavesMargin / 10 case LINE_TYPE.WALLLINE.GABLE: - return data.kerabaIntvl / 10 + return data.kerabaMargin / 10 case LINE_TYPE.SUBLINE.RIDGE: case LINE_TYPE.WALLLINE.SHED: - return data.ridgeIntvl / 10 + return data.ridgeMargin / 10 default: return 200 / 10 } diff --git a/src/store/canvasAtom.js b/src/store/canvasAtom.js index 0679938f..c8bb1ad0 100644 --- a/src/store/canvasAtom.js +++ b/src/store/canvasAtom.js @@ -402,3 +402,9 @@ export const toggleManualSetupModeState = atom({ key: 'toggleManualSetupModeState', default: '', }) + +export const moduleRowColArrayState = atom({ + key: 'moduleRowColArrayState', + default: [], + dangerouslyAllowMutability: true, +})