From 690ab8454f093c30e050e90b47789502c5771716 Mon Sep 17 00:00:00 2001 From: basssy Date: Mon, 17 Mar 2025 15:20:18 +0900 Subject: [PATCH 01/13] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=20=EC=A0=95=EB=A0=AC*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/Stuff.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index 43446209..c1835874 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -301,7 +301,6 @@ export default function Stuff() { } else if (stuffSearchParams?.code === 'E') { stuffSearchParams.startRow = (stuffSearch.pageNo - 1) * stuffSearchParams.pageSize + 1 stuffSearchParams.endRow = stuffSearchParams.pageNo * stuffSearchParams.pageSize - stuffSearchParams.schSortType = defaultSortType stuffSearchParams.pageNo = stuffSearchParams.pageNo if (!stuffSearchParams.saleStoreId) { From dcb99eecf8d3c72d31db6f195d81d961a0fe5b64 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Mon, 17 Mar 2025 17:47:32 +0900 Subject: [PATCH 02/13] =?UTF-8?q?chore:=20=EC=9A=B4=EC=98=81=EC=9A=A9=20?= =?UTF-8?q?=ED=8F=AC=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 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index bf52888e..a32ba7b9 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start -p 3000", - "start:dev": "next start -p 3001", + "start": "next start -p 5000", + "start:dev": "next start -p 5010", "lint": "next lint", "serve": "node server.js" }, From f915dab239d6c3b22973d2edbf74173cb3e74dd4 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Mon, 17 Mar 2025 18:25:28 +0900 Subject: [PATCH 03/13] =?UTF-8?q?chore:=20ecosystem=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecosystem.config.js | 10 ++++++++++ package.json | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 ecosystem.config.js diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 00000000..97676e2e --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,10 @@ +module.exports = { + apps: [ + { + name: 'qcast-front-production', + script: 'npm run start', + instance: 2, + exec_mode: 'cluster', + }, + ], +} diff --git a/package.json b/package.json index a32ba7b9..1f31b9d3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start -p 5000", + "start:cluster1": "next start -p 5000", + "start:cluster2": "next start -p 5001", "start:dev": "next start -p 5010", "lint": "next lint", "serve": "node server.js" From c467fc7fa84aac08356e9661b4f1c8635035fc1f Mon Sep 17 00:00:00 2001 From: yjnoh Date: Tue, 18 Mar 2025 09:36:11 +0900 Subject: [PATCH 04/13] =?UTF-8?q?=ED=9D=A1=EC=B0=A9=EC=A0=90=20=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 160 ++++++++++++++-------- 1 file changed, 102 insertions(+), 58 deletions(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 5db1963e..8ac88a31 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -549,6 +549,7 @@ export function useModuleBasicSetting(tabNum) { * 스냅기능 */ let snapDistance = flowDirection === 'south' || flowDirection === 'north' ? 70 : 40 + let sideSnapDistance = 15 let trestleSnapDistance = 15 let intvHor = @@ -588,51 +589,102 @@ export function useModuleBasicSetting(tabNum) { const holdCellCenterX = holdCellLeft + toFixedWithoutRounding(cell.width / 2, 2) const holdCellCenterY = holdCellTop + toFixedWithoutRounding(cell.height / 2, 2) + //흐름방향따라 달라야 한다. + if (flowDirection === 'south' || flowDirection === 'north') { + if (Math.abs(smallCenterX - holdCellCenterX) < snapDistance) { + //움직이는 모듈 가운데 -> 설치 모듈 가운데 + tempModule.left = holdCellCenterX - toFixedWithoutRounding(width / 2, 2) + } + + //움직이는 모듈왼쪽 -> 가운데 + if (Math.abs(smallLeft - holdCellCenterX) < snapDistance) { + tempModule.left = holdCellCenterX + intvHor / 2 + } + // 오른쪽 -> 가운데 + if (Math.abs(smallRight - holdCellCenterX) < snapDistance) { + tempModule.left = holdCellCenterX - width - intvHor / 2 + } + + //설치된 셀에 좌측에 스냅 + if (Math.abs(smallRight - holdCellLeft) < snapDistance) { + // console.log('모듈 좌측 스냅') + tempModule.left = holdCellLeft - width - intvHor + } + + //설치된 셀에 우측에 스냅 + if (Math.abs(smallLeft - holdCellRight) < snapDistance) { + // console.log('모듈 우측 스냅') + tempModule.left = holdCellRight + intvHor + } + //설치된 셀에 위쪽에 스냅 + if (Math.abs(smallBottom - holdCellTop) < sideSnapDistance) { + tempModule.top = holdCellTop - height - intvVer + } + + //설치된 셀에 밑쪽에 스냅 + if (Math.abs(smallTop - holdCellBottom) < sideSnapDistance) { + tempModule.top = holdCellBottom + intvVer + } + + //설치된 셀에 윗쪽에 스냅 + if (Math.abs(smallTop - holdCellTop) < sideSnapDistance) { + tempModule.top = holdCellTop + } + } else { + //흐름방향 west, east + + //가운데 가운데 + if (Math.abs(smallCenterY - holdCellCenterY) < snapDistance) { + tempModule.top = holdCellCenterY - toFixedWithoutRounding(width / 2, 2) + } + + //위쪽 -> 가운데 + if (Math.abs(smallTop - holdCellCenterY) < snapDistance) { + // console.log('holdCellCenterX', holdCellCenterX) + // console.log('smallLeft', smallLeft) + + // console.log('모듈 센터에 스냅') + tempModule.top = holdCellCenterY + intvHor / 2 + + // console.log('tempModule.left', tempModule.left) + } + // 밑 -> 가운데 + if (Math.abs(smallBottom - holdCellCenterY) < snapDistance) { + tempModule.top = holdCellCenterY - height - intvHor / 2 + } + + //설치된 셀에 좌측에 스냅 + if (Math.abs(smallRight - holdCellLeft) < snapDistance) { + // console.log('모듈 좌측 스냅') + tempModule.left = holdCellLeft - width - intvHor + } + + //설치된 셀에 우측에 스냅 + if (Math.abs(smallLeft - holdCellRight) < snapDistance) { + // console.log('모듈 우측 스냅') + tempModule.left = holdCellRight + intvHor + } + //설치된 셀에 위쪽에 스냅 + if (Math.abs(smallBottom - holdCellTop) < sideSnapDistance) { + tempModule.top = holdCellTop - height - intvVer + } + + //설치된 셀에 밑쪽에 스냅 + if (Math.abs(smallTop - holdCellBottom) < sideSnapDistance) { + tempModule.top = holdCellBottom + intvVer + } + + //설치된 셀에 윗쪽에 스냅 + if (Math.abs(smallTop - holdCellTop) < sideSnapDistance) { + tempModule.top = holdCellTop + } + + if (Math.abs(smallLeft - holdCellLeft) < snapDistance) { + tempModule.left = holdCellLeft + } + } + //가운데 -> 가운대 - if (Math.abs(smallCenterX - holdCellCenterX) < snapDistance) { - tempModule.left = holdCellCenterX - toFixedWithoutRounding(width / 2, 2) - } - - //왼쪽 -> 가운데 - if (Math.abs(smallLeft - holdCellCenterX) < snapDistance) { - // console.log('holdCellCenterX', holdCellCenterX) - // console.log('smallLeft', smallLeft) - - // console.log('모듈 센터에 스냅') - tempModule.left = holdCellCenterX + intvHor / 2 - - // console.log('tempModule.left', tempModule.left) - } - // 오른쪽 -> 가운데 - if (Math.abs(smallRight - holdCellCenterX) < snapDistance) { - tempModule.left = holdCellCenterX - width - intvHor / 2 - } - - //설치된 셀에 좌측에 스냅 - if (Math.abs(smallRight - holdCellLeft) < snapDistance) { - // console.log('모듈 좌측 스냅') - tempModule.left = holdCellLeft - width - intvHor - } - - //설치된 셀에 우측에 스냅 - if (Math.abs(smallLeft - holdCellRight) < snapDistance) { - // console.log('모듈 우측 스냅') - tempModule.left = holdCellRight + intvHor - } - //설치된 셀에 위쪽에 스냅 - if (Math.abs(smallBottom - holdCellTop) < 10) { - tempModule.top = holdCellTop - height - intvVer - } - - //설치된 셀에 밑쪽에 스냅 - if (Math.abs(smallTop - holdCellBottom) < 10) { - tempModule.top = holdCellBottom + intvVer - } - - //설치된 셀에 윗쪽에 스냅 - if (Math.abs(smallTop - holdCellTop) < 10) { - tempModule.top = holdCellTop - } //세로 가운데 -> 가운데 // if (Math.abs(smallCenterY - holdCellCenterY) < snapDistance) { @@ -641,11 +693,6 @@ export function useModuleBasicSetting(tabNum) { // //위쪽 -> 가운데 // if (Math.abs(smallTop - holdCellCenterY) < cellSnapDistance) { // tempModule.top = holdCellCenterY - // } - // //아랫쪽 -> 가운데 - // if (Math.abs(smallBottom - holdCellCenterY) < cellSnapDistance) { - // tempModule.top = holdCellCenterY - height - // } }) } @@ -673,22 +720,19 @@ export function useModuleBasicSetting(tabNum) { // if (Math.abs(smallLeft - (trestleLeft + moduleSetupSurfaces[i].width / 2)) < snapDistance) { // tempModule.left = trestleLeft + moduleSetupSurfaces[i].width / 2 // } - // 모듈이 가운데가 세로중앙선에 붙게 스냅 - if (Math.abs(smallCenterX - (trestleLeft + moduleSetupSurfaces[i].width / 2)) < trestleSnapDistance) { - tempModule.left = trestleLeft + moduleSetupSurfaces[i].width / 2 - tempModule.width / 2 - } - + // if (Math.abs(smallCenterX - (trestleLeft + moduleSetupSurfaces[i].width / 2)) < trestleSnapDistance) { + // tempModule.left = trestleLeft + moduleSetupSurfaces[i].width / 2 - tempModule.width / 2 + // } // 모듈오른쪽이 세로중앙선에 붙게 스냅 // if (Math.abs(smallRight - (trestleLeft + moduleSetupSurfaces[i].width / 2)) < trestleSnapDistance) { // tempModule.left = trestleLeft + moduleSetupSurfaces[i].width / 2 - tempModule.width * tempModule.scaleX // } } else { // 모듈이 가로중앙선에 스냅 - if (Math.abs(smallTop + tempModule.height / 2 - bigCenterY) < trestleSnapDistance) { - tempModule.top = bigCenterY - tempModule.height / 2 - } - + // if (Math.abs(smallTop + tempModule.height / 2 - bigCenterY) < trestleSnapDistance) { + // tempModule.top = bigCenterY - tempModule.height / 2 + // } // if (Math.abs(smallTop - (trestleTop + moduleSetupSurfaces[i].height / 2)) < trestleSnapDistance) { // tempModule.top = trestleTop + moduleSetupSurfaces[i].height / 2 // } From 9be21fc2b28760b9b27fa1f0ea33779483e0b097 Mon Sep 17 00:00:00 2001 From: LEEYONGJAE Date: Tue, 18 Mar 2025 09:52:14 +0900 Subject: [PATCH 05/13] =?UTF-8?q?=EB=B2=88=EC=97=AD=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20#914?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/ja.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/ja.json b/src/locales/ja.json index 0028a047..d6670702 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -558,7 +558,7 @@ "board.faq.title": "FAQ", "board.faq.sub.title": "FAQリスト", "board.archive.title": "各種資料ダウンロード", - "board.archive.sub.title": "見積書一覧", + "board.archive.sub.title": "掲載資料一覧", "board.list.header.rownum": "番号", "board.list.header.title": "タイトル", "board.list.header.regDt": "登録日", From 3432d64a3ca1a6c117d78c08245a2ee17e993dab Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 18 Mar 2025 10:23:42 +0900 Subject: [PATCH 06/13] =?UTF-8?q?8=EA=B0=81=20=EC=95=88=EB=82=98=EB=88=A0?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=9E=91=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/usePolygon.js | 2 +- src/util/canvas-util.js | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index 54de877b..fd5b5a69 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -767,7 +767,7 @@ export const usePolygon = () => { obj.type === 'QLine' && obj.attributes?.type !== 'pitchSizeLine' && obj.attributes?.roofId === polygon.id && - (innerLineTypes.includes(obj.name) || !obj.name), + innerLineTypes.includes(obj.name), ) innerLines = [...polygon.innerLines] diff --git a/src/util/canvas-util.js b/src/util/canvas-util.js index 935097b0..1146afa7 100644 --- a/src/util/canvas-util.js +++ b/src/util/canvas-util.js @@ -518,14 +518,23 @@ export const sortedPointLessEightPoint = (points) => { */ // 직선의 방정식. // 방정식은 ax + by + c = 0이며, 점의 좌표를 대입하여 계산된 값은 직선과 점 사이의 관계를 나타낸다. -export function isPointOnLine(line, point) { - const a = line.y2 - line.y1 +export function isPointOnLine({ x1, y1, x2, y2 }, { x, y }) { + /*const a = line.y2 - line.y1 const b = line.x1 - line.x2 const c = line.x2 * line.y1 - line.x1 * line.y2 const result = Math.abs(a * point.x + b * point.y + c) / 100 // 점이 선 위에 있는지 확인 - return result <= 10 + return result <= 10*/ + // 직선 방정식 만족 여부 확인 + const crossProduct = (y - y1) * (x2 - x1) - (x - x1) * (y2 - y1) + if (Math.abs(crossProduct) > 5) return false // 작은 오차 허용 + + // 점이 선분의 범위 내에 있는지 확인 + const withinXRange = Math.min(x1, x2) <= x && x <= Math.max(x1, x2) + const withinYRange = Math.min(y1, y2) <= y && y <= Math.max(y1, y2) + + return withinXRange && withinYRange } /** * 점과 가까운 line 찾기 From 7c15da2b4c40133e471d3d936d2fe424f89f88ce Mon Sep 17 00:00:00 2001 From: basssy Date: Tue, 18 Mar 2025 10:29:26 +0900 Subject: [PATCH 07/13] =?UTF-8?q?YJSS=20=EA=B8=88=EC=95=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/floorPlan/estimate/useEstimateController.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js index d509a1e0..5ed1cd8f 100644 --- a/src/hooks/floorPlan/estimate/useEstimateController.js +++ b/src/hooks/floorPlan/estimate/useEstimateController.js @@ -291,6 +291,12 @@ export const useEstimateController = (planNo, flag) => { setIsGlobalLoading(false) return swalFire({ text: getMessage('estimate.detail.save.requiredSalePrice'), type: 'alert', icon: 'warning' }) } + + if (item.salePrice < 1) { + itemFlg = false + setIsGlobalLoading(false) + return swalFire({ text: getMessage('estimate.detail.save.requiredSalePrice'), type: 'alert', icon: 'warning' }) + } } } } From 06fa1766d6dd076fcc90e8bc624e2f9a3ce856a9 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 18 Mar 2025 10:56:37 +0900 Subject: [PATCH 08/13] =?UTF-8?q?=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EA=B2=80=EC=82=AC=20=EB=AA=BB?= =?UTF-8?q?=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/qpolygon-utils.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/util/qpolygon-utils.js b/src/util/qpolygon-utils.js index cded90ee..34bc2320 100644 --- a/src/util/qpolygon-utils.js +++ b/src/util/qpolygon-utils.js @@ -305,6 +305,9 @@ export function removeDuplicatePolygons(polygons) { } export const isSamePoint = (a, b) => { + if (!a || !b) { + return false + } return Math.abs(Math.round(a.x) - Math.round(b.x)) <= 2 && Math.abs(Math.round(a.y) - Math.round(b.y)) <= 2 } From 1fa02de62ffab0c4bd83ffb8bf7e9185e7978cf3 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 18 Mar 2025 11:33:45 +0900 Subject: [PATCH 09/13] =?UTF-8?q?=EC=A7=80=EB=B6=95=EB=A9=B4=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=EC=88=9C=EC=84=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useRoofAllocationSetting.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index 536a2127..fb7d2114 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -1,6 +1,6 @@ import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil' import { canvasState, currentAngleTypeSelector, currentMenuState, currentObjectState } from '@/store/canvasAtom' -import { useEffect, useRef, useState } from 'react' +import { useContext, useEffect, useRef, useState } from 'react' import { useAxios } from '@/hooks/useAxios' import { useSwal } from '@/hooks/useSwal' import { usePolygon } from '@/hooks/usePolygon' @@ -26,6 +26,7 @@ import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util' import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' import { outerLinePointsState } from '@/store/outerLineAtom' +import { QcastContext } from '@/app/QcastProvider' export function useRoofAllocationSetting(id) { const canvas = useRecoilValue(canvasState) @@ -49,7 +50,7 @@ export function useRoofAllocationSetting(id) { const { get, post } = useAxios(globalLocaleState) const { getMessage } = useMessage() const { swalFire } = useSwal() - + const { setIsGlobalLoading } = useContext(QcastContext) const { setSurfaceShapePattern } = useRoofFn() const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState) @@ -200,6 +201,7 @@ export function useRoofAllocationSetting(id) { */ const basicSettingSave = async () => { try { + setIsGlobalLoading(true) const patternData = { objectNo: correntObjectNo, planNo: Number(basicSetting.planNo), @@ -222,6 +224,7 @@ export function useRoofAllocationSetting(id) { await post({ url: `/api/canvas-management/roof-allocation-settings`, data: patternData }).then((res) => { swalFire({ text: getMessage(res.returnMessage) }) + setIsGlobalLoading(false) }) //Recoil 설정 @@ -270,8 +273,6 @@ export function useRoofAllocationSetting(id) { * 선택한 지붕재로 할당 */ const handleSave = () => { - basicSettingSave() - /** * 모두 actualSize 있으면 바로 적용 없으면 actualSize 설정 */ @@ -280,6 +281,7 @@ export function useRoofAllocationSetting(id) { } else { apply() resetPoints() + basicSettingSave() } } @@ -287,7 +289,6 @@ export function useRoofAllocationSetting(id) { * 지붕재 오른쪽 마우스 클릭 후 단일로 지붕재 변경 필요한 경우 */ const handleSaveContext = () => { - basicSettingSave() const newRoofList = currentRoofList.map((roof, idx) => { return { ...roof, index: idx, raft: roof.raft ? roof.raft : roof.raftBaseCd } }) @@ -304,6 +305,7 @@ export function useRoofAllocationSetting(id) { drawDirectionArrow(currentObject) modifyModuleSelectionData() closeAll() + basicSettingSave() } /** @@ -361,6 +363,7 @@ export function useRoofAllocationSetting(id) { splitPolygonWithLines(roofBase) } } catch (e) { + console.log(e) return } From 57446fa6d8e5e8725551dc43587639b5efddff38 Mon Sep 17 00:00:00 2001 From: basssy Date: Tue, 18 Mar 2025 12:54:36 +0900 Subject: [PATCH 10/13] =?UTF-8?q?=EC=A3=BC=ED=83=9D=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/floorPlan/estimate/useEstimateController.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js index 5ed1cd8f..d509a1e0 100644 --- a/src/hooks/floorPlan/estimate/useEstimateController.js +++ b/src/hooks/floorPlan/estimate/useEstimateController.js @@ -291,12 +291,6 @@ export const useEstimateController = (planNo, flag) => { setIsGlobalLoading(false) return swalFire({ text: getMessage('estimate.detail.save.requiredSalePrice'), type: 'alert', icon: 'warning' }) } - - if (item.salePrice < 1) { - itemFlg = false - setIsGlobalLoading(false) - return swalFire({ text: getMessage('estimate.detail.save.requiredSalePrice'), type: 'alert', icon: 'warning' }) - } } } } From 84e8af50b8479074aab6f3699d66526e0a0fd452 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 18 Mar 2025 15:55:11 +0900 Subject: [PATCH 11/13] =?UTF-8?q?QSelectbox=20key=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/select/QSelectBox.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/select/QSelectBox.jsx b/src/components/common/select/QSelectBox.jsx index f1041da3..a027cb55 100644 --- a/src/components/common/select/QSelectBox.jsx +++ b/src/components/common/select/QSelectBox.jsx @@ -87,7 +87,7 @@ export default function QSelectBox({
    {options?.length > 0 && options?.map((option, index) => ( -
  • handleClickSelectOption(option)}> +
  • handleClickSelectOption(option)}>
  • ))} From 521bfd4303c6453833d7d7fe28e0864339503ce1 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Wed, 19 Mar 2025 11:10:12 +0900 Subject: [PATCH 12/13] =?UTF-8?q?=EB=B0=98=EA=B0=81=EB=A7=8C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EA=B0=80=EB=8A=A5=20=EB=AC=B8=EA=B5=AC=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 --- .../modal/placementShape/PlacementShapeSetting.jsx | 6 +++++- src/locales/ja.json | 3 ++- src/locales/ko.json | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index a70a8c65..25ca72b8 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -271,7 +271,11 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla {getMessage('modal.placement.initial.setting.plan.drawing')} - {getMessage('modal.placement.initial.setting.plan.drawing.size.stuff')} + + {getMessage('modal.placement.initial.setting.plan.drawing.size.stuff')} +         + {getMessage('modal.placement.initial.setting.plan.drawing.only.number')} + diff --git a/src/locales/ja.json b/src/locales/ja.json index d6670702..0e290001 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1034,5 +1034,6 @@ "roof.exceed.count": "屋根材は4つまで選択可能です。", "outerLine.property.fix": "外壁線の属性設定 を完了しますか?", "outerLine.property.close": "外壁線の属性設定 を終了しますか?", - "want.to.complete.auxiliary.creation": "보補助線の作成を完了しますか?" + "want.to.complete.auxiliary.creation": "보補助線の作成を完了しますか?", + "modal.placement.initial.setting.plan.drawing.only.number": "(※数字は[半角]入力のみ可能です。)" } diff --git a/src/locales/ko.json b/src/locales/ko.json index 4c051305..013050d4 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1034,5 +1034,6 @@ "roof.exceed.count": "지붕재는 4개까지 선택 가능합니다.", "outerLine.property.fix": "외벽선 속성 설정을 완료하시겠습니까?", "outerLine.property.close": "외벽선 속성 설정을 종료하시겠습니까?", - "want.to.complete.auxiliary.creation": "보조선 작성을 완료하시겠습니까?" + "want.to.complete.auxiliary.creation": "보조선 작성을 완료하시겠습니까?", + "modal.placement.initial.setting.plan.drawing.only.number": "(※ 숫자는 [반각]입력만 가능합니다.)" } From 325c2c1cc0a5188889ebf61b836597600eed2798 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Wed, 19 Mar 2025 13:28:20 +0900 Subject: [PATCH 13/13] =?UTF-8?q?=EB=B2=88=EC=97=AD=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useAuxiliaryDrawing.js | 2 +- src/hooks/roofcover/useEavesGableEdit.js | 2 +- src/hooks/roofcover/useRoofShapePassivitySetting.js | 2 +- src/hooks/roofcover/useRoofShapeSetting.js | 2 +- src/hooks/roofcover/useWallLineOffsetSetting.js | 2 +- src/locales/ja.json | 8 +++++--- src/locales/ko.json | 4 +++- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/hooks/roofcover/useAuxiliaryDrawing.js b/src/hooks/roofcover/useAuxiliaryDrawing.js index 6023bce8..37d1aa7a 100644 --- a/src/hooks/roofcover/useAuxiliaryDrawing.js +++ b/src/hooks/roofcover/useAuxiliaryDrawing.js @@ -84,7 +84,7 @@ export function useAuxiliaryDrawing(id, isUseEffect = true) { // innerLines가 있을경우 삭제 const roofs = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) if (roofs.length === 0) { - swalFire({ text: '지붕형상이 없습니다.' }) + swalFire({ text: getMessage('roof.line.not.found') }) closePopup(id) return } diff --git a/src/hooks/roofcover/useEavesGableEdit.js b/src/hooks/roofcover/useEavesGableEdit.js index ff0073ae..37b8017c 100644 --- a/src/hooks/roofcover/useEavesGableEdit.js +++ b/src/hooks/roofcover/useEavesGableEdit.js @@ -52,7 +52,7 @@ export function useEavesGableEdit(id) { useEffect(() => { const outerLines = canvas.getObjects().filter((obj) => obj.name === 'outerLine') if (!outerLineFix || outerLines.length === 0) { - swalFire({ text: '외벽선이 없습니다.' }) + swalFire({ text: getMessage('wall.line.not.found') }) closePopup(id) } }, []) diff --git a/src/hooks/roofcover/useRoofShapePassivitySetting.js b/src/hooks/roofcover/useRoofShapePassivitySetting.js index 33d5d953..c5077a32 100644 --- a/src/hooks/roofcover/useRoofShapePassivitySetting.js +++ b/src/hooks/roofcover/useRoofShapePassivitySetting.js @@ -51,7 +51,7 @@ export function useRoofShapePassivitySetting(id) { useEffect(() => { const outerLines = canvas.getObjects().filter((obj) => obj.name === 'outerLine') if (!outerLineFix || outerLines.length === 0) { - swalFire({ text: '외벽선이 없습니다.' }) + swalFire({ text: getMessage('wall.line.not.found') }) closePopup(id) return } diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js index 1167aac9..1881b184 100644 --- a/src/hooks/roofcover/useRoofShapeSetting.js +++ b/src/hooks/roofcover/useRoofShapeSetting.js @@ -191,7 +191,7 @@ export function useRoofShapeSetting(id) { let direction if (outerLines.length < 2) { - swalFire({ text: '외벽선이 없습니다.', icon: 'error' }) + swalFire({ text: getMessage('wall.line.not.found') }) return } diff --git a/src/hooks/roofcover/useWallLineOffsetSetting.js b/src/hooks/roofcover/useWallLineOffsetSetting.js index 01fbec09..245a7f15 100644 --- a/src/hooks/roofcover/useWallLineOffsetSetting.js +++ b/src/hooks/roofcover/useWallLineOffsetSetting.js @@ -60,7 +60,7 @@ export function useWallLineOffsetSetting(id) { useEffect(() => { const outerLines = canvas.getObjects().filter((obj) => obj.name === 'outerLine') if (outerLines.length === 0) { - swalFire({ text: '외벽선이 없습니다.' }) + swalFire({ text: getMessage('wall.line.not.found') }) closePopup(id) return } diff --git a/src/locales/ja.json b/src/locales/ja.json index 0e290001..80850e4b 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -37,7 +37,7 @@ "modal.roof.shape.setting.patten.a": "Aパターン", "modal.roof.shape.setting.patten.b": "Bパターン", "modal.roof.shape.setting.side": "別に設定", - "plan.menu.roof.cover": "屋根作図", + "plan.menu.roof.cover": "伏せ図入力", "plan.menu.roof.cover.outline.drawing": "外壁線を描く", "plan.menu.roof.cover.roof.shape.setting": "屋根形状の設定", "plan.menu.roof.cover.roof.shape.passivity.setting": "屋根形状の手動設定", @@ -72,7 +72,7 @@ "common.setting.rollback": "前に戻る", "modal.cover.outline.remove": "外壁の取り外し", "modal.cover.outline.select.move": "外壁選択の移動", - "plan.menu.placement.surface": "配置面", + "plan.menu.placement.surface": "実測値入力", "plan.menu.placement.surface.slope.setting": "傾斜設定", "plan.menu.placement.surface.drawing": "配置面の描画", "modal.placement.surface.drawing.straight.line": "直線", @@ -1035,5 +1035,7 @@ "outerLine.property.fix": "外壁線の属性設定 を完了しますか?", "outerLine.property.close": "外壁線の属性設定 を終了しますか?", "want.to.complete.auxiliary.creation": "보補助線の作成を完了しますか?", - "modal.placement.initial.setting.plan.drawing.only.number": "(※数字は[半角]入力のみ可能です。)" + "modal.placement.initial.setting.plan.drawing.only.number": "(※数字は[半角]入力のみ可能です。)", + "wall.line.not.found": "外壁がありません", + "roof.line.not.found": "屋根形状がありません" } diff --git a/src/locales/ko.json b/src/locales/ko.json index 013050d4..e5c98ce5 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1035,5 +1035,7 @@ "outerLine.property.fix": "외벽선 속성 설정을 완료하시겠습니까?", "outerLine.property.close": "외벽선 속성 설정을 종료하시겠습니까?", "want.to.complete.auxiliary.creation": "보조선 작성을 완료하시겠습니까?", - "modal.placement.initial.setting.plan.drawing.only.number": "(※ 숫자는 [반각]입력만 가능합니다.)" + "modal.placement.initial.setting.plan.drawing.only.number": "(※ 숫자는 [반각]입력만 가능합니다.)", + "wall.line.not.found": "외벽선이 없습니다.", + "roof.line.not.found": "지붕형상이 없습니다." }