From a258f610931b12486ae758364cfce98fa39a293f Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 8 Jan 2026 14:46:21 +0900 Subject: [PATCH 01/11] =?UTF-8?q?=ED=83=AD=ED=82=A4,=20=EB=B0=A9=ED=96=A5?= =?UTF-8?q?=ED=82=A4=20=EA=B3=84=EC=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/input/CalcInput.jsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/components/common/input/CalcInput.jsx b/src/components/common/input/CalcInput.jsx index 37bd00ef..df41043f 100644 --- a/src/components/common/input/CalcInput.jsx +++ b/src/components/common/input/CalcInput.jsx @@ -340,12 +340,18 @@ export const CalculatorInput = forwardRef( // Tab 키는 계산기 숨기고 기본 동작 허용 if (e.key === 'Tab') { + if (hasOperation) { + handleCompute(true) // 계산 수행 + } setShowKeypad(false) return } // 모든 방향키는 기본 동작 허용 if (e.key === 'ArrowLeft' || e.key === 'ArrowRight' || e.key === 'ArrowUp' || e.key === 'ArrowDown') { + if (hasOperation) { + handleCompute(true) // 계산 수행 + } setShowKeypad(true) return } @@ -360,6 +366,12 @@ export const CalculatorInput = forwardRef( return } + // --- 여기서부터는 브라우저의 기본 입력을 막고 계산기 로직만 적용함 --- + if (e.key !== 'Process') { // 한글 입력 등 특수 상황 방지 (필요시) + // e.preventDefault() 호출 위치를 확인하세요. + } + + e.preventDefault() const calculator = calculatorRef.current const { allowDecimal } = options From 49253b766846709b0ba3ce4427b777227a2ee8df Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 8 Jan 2026 15:04:00 +0900 Subject: [PATCH 02/11] =?UTF-8?q?1390=20=E3=80=90HANASYS=20DESIGN=E3=80=91?= =?UTF-8?q?=EB=B3=B5=EB=8F=84=EC=97=90=EC=84=9C=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=ED=95=9C=20=EA=B2=BD=EC=9A=B0=20=EC=B9=98=EC=88=98=20=EC=B7=A8?= =?UTF-8?q?=EA=B8=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/fabric/QLine.js | 14 ++++++---- src/hooks/useLine.js | 6 ++-- src/hooks/usePolygon.js | 51 ++++++++++++++++++++++++++++++++-- src/util/qpolygon-utils.js | 11 ++++++++ 4 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/components/fabric/QLine.js b/src/components/fabric/QLine.js index 02448cd7..d1e1ada3 100644 --- a/src/components/fabric/QLine.js +++ b/src/components/fabric/QLine.js @@ -72,13 +72,17 @@ export const QLine = fabric.util.createClass(fabric.Line, { setLength() { // Ensure all required properties are valid numbers - const { x1, y1, x2, y2 } = this; + const { x1, y1, x2, y2 } = this if (isNaN(x1) || isNaN(y1) || isNaN(x2) || isNaN(y2)) { - logger.error('Invalid coordinates in QLine:', { x1, y1, x2, y2 }); - this.length = 0; - return; + logger.error('Invalid coordinates in QLine:', { x1, y1, x2, y2 }) + this.length = 0 + return } - this.length = calcLinePlaneSize({ x1, y1, x2, y2 }) / 10; + this.length = calcLinePlaneSize({ x1, y1, x2, y2 }) / 10 + }, + + setLengthByValue(length) { + this.length = length / 10 }, addLengthText() { diff --git a/src/hooks/useLine.js b/src/hooks/useLine.js index 66dff769..c9de0194 100644 --- a/src/hooks/useLine.js +++ b/src/hooks/useLine.js @@ -10,7 +10,7 @@ import { } from '@/store/canvasAtom' import { QLine } from '@/components/fabric/QLine' import { basicSettingState } from '@/store/settingAtom' -import { calcLineActualSize } from '@/util/qpolygon-utils' +import { calcLineActualSizeByLineLength } from '@/util/qpolygon-utils' import { getDegreeByChon } from '@/util/canvas-util' import { useText } from '@/hooks/useText' import { fontSelector } from '@/store/fontAtom' @@ -181,7 +181,7 @@ export const useLine = () => { if (isVertical) { line.attributes = { ...line.attributes, - actualSize: calcLineActualSize(line, getDegreeByChon(pitch)), + actualSize: calcLineActualSizeByLineLength(lineLength, getDegreeByChon(pitch)), } } else if (isDiagonal) { const yLength = Math.abs(y2 - y1) * 10 @@ -195,7 +195,7 @@ export const useLine = () => { if (isHorizontal) { line.attributes = { ...line.attributes, - actualSize: calcLineActualSize(line, getDegreeByChon(pitch)), + actualSize: calcLineActualSizeByLineLength(lineLength, getDegreeByChon(pitch)), } } else if (isDiagonal) { const xLength = Math.abs(x2 - x1) * 10 diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index 011b8852..8822fd5f 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -1,7 +1,19 @@ -import { ANGLE_TYPE, canvasState, currentAngleTypeSelector, globalPitchState, pitchTextSelector } from '@/store/canvasAtom' +import { + ANGLE_TYPE, + canvasState, + currentAngleTypeSelector, + globalPitchState, + pitchTextSelector, +} from '@/store/canvasAtom' import { useRecoilValue } from 'recoil' import { fabric } from 'fabric' -import { calculateIntersection, findAndRemoveClosestPoint, getDegreeByChon, getDegreeInOrientation, isPointOnLine } from '@/util/canvas-util' +import { + calculateIntersection, + findAndRemoveClosestPoint, + getDegreeByChon, + getDegreeInOrientation, + isPointOnLine, +} from '@/util/canvas-util' import { QPolygon } from '@/components/fabric/QPolygon' import { isSamePoint, removeDuplicatePolygons } from '@/util/qpolygon-utils' import { basicSettingState, flowDisplaySelector } from '@/store/settingAtom' @@ -1958,6 +1970,38 @@ export const usePolygon = () => { canvas.renderAll() } + /** + * 폴리곤의 라인 길이가 10 이하로 차이나는 경우 작은 값으로 통일 + * @param polygon + */ + const unifyLineLengths = (polygon) => { + if (!polygon.lines || polygon.lines.length === 0) { + return + } + + const lines = polygon.lines + + for (let i = 0; i < lines.length; i++) { + for (let j = i + 1; j < lines.length; j++) { + const length1 = lines[i].getLength() + const length2 = lines[j].getLength() + const diff = Math.abs(length1 - length2) + + if (diff > 0 && diff <= 10) { + const minLength = Math.min(length1, length2) + if (length1 > length2) { + lines[i].setLengthByValue(minLength) + } else { + lines[j].setLengthByValue(minLength) + } + } + } + } + + addLengthText(polygon) + canvas.renderAll() + } + /** * 폴리곤의 라인 속성을 복도치수, 실제치수에 따라 actualSize 설정 * @param polygon @@ -1966,7 +2010,7 @@ export const usePolygon = () => { if (!polygon.lines || polygon.lines.length === 0 || !polygon.roofMaterial) { return } - + unifyLineLengths(polygon) polygon.lines.forEach((line) => { setActualSize(line, polygon.direction, +polygon.roofMaterial?.pitch) }) @@ -1983,5 +2027,6 @@ export const usePolygon = () => { splitPolygonWithLines, splitPolygonWithSeparate, setPolygonLinesActualSize, + unifyLineLengths, } } diff --git a/src/util/qpolygon-utils.js b/src/util/qpolygon-utils.js index abcd66ce..e1ff8575 100644 --- a/src/util/qpolygon-utils.js +++ b/src/util/qpolygon-utils.js @@ -5992,6 +5992,17 @@ export const calcLineActualSize = (points, degree = 0) => { return Big(planeSize).div(theta).round().toNumber() } +/** + * 포인트와 기울기를 기준으로 선의 길이를 구한다. + * @param lineLength + * @param degree + * @returns number + */ +export const calcLineActualSizeByLineLength = (lineLength, degree = 0) => { + const theta = Big(Math.cos(Big(degree).times(Math.PI).div(180))) + return Big(lineLength).div(theta).round().toNumber() +} + export const createLinesFromPolygon = (points) => { const lines = [] for (let i = 0; i < points.length; i++) { From 9683b38cf0d60c170cfa05bf90f7260fe53214b2 Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 8 Jan 2026 15:15:17 +0900 Subject: [PATCH 03/11] =?UTF-8?q?=EB=B0=A9=ED=96=A5=ED=82=A4=EC=97=90=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=ED=8C=A8=EB=93=9C=20=EC=88=A8=EA=B9=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/input/CalcInput.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/input/CalcInput.jsx b/src/components/common/input/CalcInput.jsx index df41043f..9cfddfd4 100644 --- a/src/components/common/input/CalcInput.jsx +++ b/src/components/common/input/CalcInput.jsx @@ -352,7 +352,7 @@ export const CalculatorInput = forwardRef( if (hasOperation) { handleCompute(true) // 계산 수행 } - setShowKeypad(true) + setShowKeypad(false) return } From 12f442b3edeec26620ae269a21878a01dc453b0a Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 8 Jan 2026 15:17:45 +0900 Subject: [PATCH 04/11] =?UTF-8?q?=EB=B0=98=EC=98=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/lineTypes/DoublePitch.jsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/floor-plan/modal/lineTypes/DoublePitch.jsx b/src/components/floor-plan/modal/lineTypes/DoublePitch.jsx index 12ed66be..4919462b 100644 --- a/src/components/floor-plan/modal/lineTypes/DoublePitch.jsx +++ b/src/components/floor-plan/modal/lineTypes/DoublePitch.jsx @@ -26,17 +26,15 @@ export default function DoublePitch({ props }) { arrow2Ref, } = props - const getLength2 = () => { - const angle1Value = angle1Ref.current.value - const angle2Value = angle2Ref.current.value - const length1Value = length1Ref.current.value + const getLength2 = (angle1, angle2, length1) => { + const angle1Value = angle1 !== undefined ? angle1 : angle1Ref.current?.value + const angle2Value = angle2 !== undefined ? angle2 : angle2Ref.current?.value + const length1Value = length1 !== undefined ? length1 : length1Ref.current?.value const arrow1Value = arrow1Ref.current - const arrow2Value = arrow2Ref.current - if (angle1Value !== 0 && length1Value !== 0 && angle2Value !== 0 && arrow1Value !== '') { + if (!isNaN(Number(angle1Value)) && !isNaN(Number(length1Value)) && !isNaN(Number(angle2Value)) && arrow1Value) { const radian1 = (getDegreeByChon(angle1Value) * Math.PI) / 180 - const radian2 = (getDegreeByChon(angle2Value) * Math.PI) / 180 return Math.floor((Math.tan(radian1) * length1Value) / Math.tan(radian2)) } @@ -178,7 +176,7 @@ export default function DoublePitch({ props }) { ref={angle2Ref} onChange={(value) => { setAngle2(value) - setLength2(getLength2()) + setLength2(getLength2(angle1Ref.current?.value, value, length1Ref.current?.value)) }} placeholder="45" onFocus={() => (angle2Ref.current.value = '')} From 8d5d36fce6576f78d9856cbd6852242288898279 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 8 Jan 2026 16:41:11 +0900 Subject: [PATCH 05/11] =?UTF-8?q?=EC=8B=A4=EC=B9=98=EC=88=98=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EC=8B=9C=20=EC=86=8C=EC=88=98=EC=A0=90=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=EB=AC=B8=EC=A0=9C=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=AA=A8=EB=93=A0=20roof=20lines=EB=A5=BC?= =?UTF-8?q?=20=ED=99=95=EC=9D=B8=ED=95=98=EC=97=AC=20length=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePolygon.js | 78 +++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 50 deletions(-) diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index 8822fd5f..bc63c50c 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -1,19 +1,7 @@ -import { - ANGLE_TYPE, - canvasState, - currentAngleTypeSelector, - globalPitchState, - pitchTextSelector, -} from '@/store/canvasAtom' +import { ANGLE_TYPE, canvasState, currentAngleTypeSelector, globalPitchState, pitchTextSelector } from '@/store/canvasAtom' import { useRecoilValue } from 'recoil' import { fabric } from 'fabric' -import { - calculateIntersection, - findAndRemoveClosestPoint, - getDegreeByChon, - getDegreeInOrientation, - isPointOnLine, -} from '@/util/canvas-util' +import { calculateIntersection, findAndRemoveClosestPoint, getDegreeByChon, getDegreeInOrientation, isPointOnLine } from '@/util/canvas-util' import { QPolygon } from '@/components/fabric/QPolygon' import { isSamePoint, removeDuplicatePolygons } from '@/util/qpolygon-utils' import { basicSettingState, flowDisplaySelector } from '@/store/settingAtom' @@ -1392,6 +1380,8 @@ export const usePolygon = () => { // 나눠서 중복 제거된 roof return let newRoofs = getSplitRoofsPoints(allLines) + const createdRoofs = [] + newRoofs = newRoofs.filter((roof) => roof.length !== 0) newRoofs.forEach((roofPoint, index) => { let defense, pitch @@ -1634,8 +1624,8 @@ export const usePolygon = () => { }) }) - canvas.add(roof) - addLengthText(roof) + // canvas.add(roof) + createdRoofs.push(roof) canvas.remove(polygon) canvas.renderAll() }) @@ -1645,6 +1635,11 @@ export const usePolygon = () => { auxiliaryLines.forEach((line) => { canvas.remove(line) }) + + createdRoofs.forEach((roof) => { + canvas.add(roof) + }) + canvas.renderAll() canvas.discardActiveObject() } @@ -1970,38 +1965,6 @@ export const usePolygon = () => { canvas.renderAll() } - /** - * 폴리곤의 라인 길이가 10 이하로 차이나는 경우 작은 값으로 통일 - * @param polygon - */ - const unifyLineLengths = (polygon) => { - if (!polygon.lines || polygon.lines.length === 0) { - return - } - - const lines = polygon.lines - - for (let i = 0; i < lines.length; i++) { - for (let j = i + 1; j < lines.length; j++) { - const length1 = lines[i].getLength() - const length2 = lines[j].getLength() - const diff = Math.abs(length1 - length2) - - if (diff > 0 && diff <= 10) { - const minLength = Math.min(length1, length2) - if (length1 > length2) { - lines[i].setLengthByValue(minLength) - } else { - lines[j].setLengthByValue(minLength) - } - } - } - } - - addLengthText(polygon) - canvas.renderAll() - } - /** * 폴리곤의 라인 속성을 복도치수, 실제치수에 따라 actualSize 설정 * @param polygon @@ -2010,7 +1973,23 @@ export const usePolygon = () => { if (!polygon.lines || polygon.lines.length === 0 || !polygon.roofMaterial) { return } - unifyLineLengths(polygon) + + // createdRoofs들의 모든 lines를 확인해서 length값이 1이하인 차이가 있으면 통일 시킨다. + const allRoofs = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) + const allRoofLines = allRoofs.flatMap((roof) => roof.lines) + for (let i = 0; i < allRoofLines.length; i++) { + for (let j = i + 1; j < allRoofLines.length; j++) { + const line1 = allRoofLines[i] + const line2 = allRoofLines[j] + const diff = Math.abs(line1.length - line2.length) + if (diff > 0 && diff <= 1) { + const minLength = Math.min(line1.length, line2.length) + line1.setLengthByValue(minLength * 10) + line2.setLengthByValue(minLength * 10) + } + } + } + polygon.lines.forEach((line) => { setActualSize(line, polygon.direction, +polygon.roofMaterial?.pitch) }) @@ -2027,6 +2006,5 @@ export const usePolygon = () => { splitPolygonWithLines, splitPolygonWithSeparate, setPolygonLinesActualSize, - unifyLineLengths, } } From fbb1f352e9f8f7b686fa8a5f87d6c145ac4c18e9 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 8 Jan 2026 17:03:14 +0900 Subject: [PATCH 06/11] =?UTF-8?q?=EB=B2=BD=20=EB=9D=BC=EC=9D=B8=20wallLine?= =?UTF-8?q?=20=EC=86=8D=EC=84=B1=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=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 --- .../roofcover/useRoofAllocationSetting.js | 49 +++++-------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index 69479eef..70874765 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -323,42 +323,19 @@ export function useRoofAllocationSetting(id) { } const drawOriginRoofLine = () => { - // outerLinePoints 배열을 이용하여 빨간색 Line 객체들 생성 - if (outerLinePoints && outerLinePoints.length > 1) { - // 연속된 점들을 연결하여 라인 생성 - for (let i = 0; i < outerLinePoints.length - 1; i++) { - const point1 = outerLinePoints[i] - const point2 = outerLinePoints[i + 1] - - const line = new fabric.Line([point1.x, point1.y, point2.x, point2.y], { - stroke: 'black', - strokeDashArray: [5, 2], - strokeWidth: 1, - selectable: false, - name: 'originRoofOuterLine', - visible: outlineDisplay, - }) - - canvas.add(line) - } - - // 마지막 점과 첫 점을 연결하여 폐곡선 만들기 - if (outerLinePoints.length > 2) { - const lastPoint = outerLinePoints[outerLinePoints.length - 1] - const firstPoint = outerLinePoints[0] - - const closingLine = new fabric.Line([lastPoint.x, lastPoint.y, firstPoint.x, firstPoint.y], { - stroke: 'red', - strokeWidth: 2, - selectable: false, - name: 'originRoofOuterLine', - }) - - canvas.add(closingLine) - } - - canvas.renderAll() - } + const wallLines = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.WALL) + /** 벽면 삭제 */ + wallLines.forEach((wallLine) => { + wallLine.set({ + stroke: 'black', + strokeDashArray: [5, 2], + strokeWidth: 1, + selectable: false, + name: 'originRoofOuterLine', + visible: outlineDisplay, + }) + }) + canvas.renderAll() } /** From de707796a36ab3cc909632de934c8748b7384a57 Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 8 Jan 2026 18:12:10 +0900 Subject: [PATCH 07/11] =?UTF-8?q?=EB=8D=94=EB=B8=94=EA=B3=84=EC=82=B0?= =?UTF-8?q?=ED=8C=A8=EB=93=9C=EB=85=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/lineTypes/RightAngle.jsx | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/floor-plan/modal/lineTypes/RightAngle.jsx b/src/components/floor-plan/modal/lineTypes/RightAngle.jsx index ef2f00e2..a4356b4a 100644 --- a/src/components/floor-plan/modal/lineTypes/RightAngle.jsx +++ b/src/components/floor-plan/modal/lineTypes/RightAngle.jsx @@ -61,28 +61,40 @@ export default function RightAngle({ props }) {
Date: Fri, 9 Jan 2026 15:33:04 +0900 Subject: [PATCH 11/11] =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=A0=84=20quotatio?= =?UTF-8?q?nParam=20null=20=EC=84=B8=ED=8C=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useTrestle.js | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 658c8c22..0899afcb 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -44,6 +44,9 @@ export const useTrestle = () => { // exposedBottomPoints는 노출 최하면 들의 centerPoint 배열. const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + surfaces.forEach((surface) => { + surface.set({ quotationParam: null }) + }) // 기존 eaveBar를 삭제 canvas.getObjects().forEach((obj) => { if (obj.name === 'eaveBar' || obj.name === 'rack' || obj.name === 'halfEaveBar' || obj.name === 'smartRack') { @@ -744,18 +747,17 @@ export const useTrestle = () => { return } //itemList = data -// itemList에 northModuleYn 추가 - itemList = data.map(item => { - if (item.itemTpCd === "MODULE") { - const matchedModule = modules.find(module => module.moduleItemId === item.itemId); + // itemList에 northModuleYn 추가 + itemList = data.map((item) => { + if (item.itemTpCd === 'MODULE') { + const matchedModule = modules.find((module) => module.moduleItemId === item.itemId) return { ...item, - northModuleYn: matchedModule?.northModuleYn || 'N' - }; + northModuleYn: matchedModule?.northModuleYn || 'N', + } } - return item; - }); - + return item + }) //northArrangement 북면 설치 여부 const northArrangement = getNorthArrangement() @@ -820,11 +822,11 @@ export const useTrestle = () => { // 발전 시뮬레이션 용 각도 재계산 const getAzimuth = (parent) => { if (typeof parent === 'string') { - console.warn('getAzimuth: parent is string, expected object', parent); - return 0; // 또는 적절한 기본값 + console.warn('getAzimuth: parent is string, expected object', parent) + return 0 // 또는 적절한 기본값 } - const { moduleCompass, surfaceCompass, direction } = parent || {}; + const { moduleCompass, surfaceCompass, direction } = parent || {} if (surfaceCompass) { return -surfaceCompass @@ -2603,7 +2605,7 @@ export const useTrestle = () => { return { moduleTpCd: module.moduleInfo.itemTp, moduleItemId: module.moduleInfo.itemId, - northModuleYn: module?.moduleInfo?.northModuleYn || 'N' // 기본값 'N' + northModuleYn: module?.moduleInfo?.northModuleYn || 'N', // 기본값 'N' } }) @@ -2615,7 +2617,7 @@ export const useTrestle = () => { moduleTpCd: cur.moduleTpCd, moduleItemId: cur.moduleItemId, cnt: 0, - northModuleYn: cur.northModuleYn + northModuleYn: cur.northModuleYn, } } acc[key].cnt++ @@ -2628,7 +2630,7 @@ export const useTrestle = () => { moduleTpCd: groupedParam.moduleTpCd, moduleItemId: groupedParam.moduleItemId, moduleCnt: groupedParam.cnt, - northModuleYn: groupedParam.northModuleYn + northModuleYn: groupedParam.northModuleYn, // northModuleYn: params.find(p => // p.moduleTpCd === groupedParam.moduleTpCd && // p.moduleItemId === groupedParam.moduleItemId