From 517eb7266ea8928b8930c25044da5179c82eea52 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: Mon, 3 Feb 2025 19:25:23 +0900 Subject: [PATCH 001/213] =?UTF-8?q?=ED=95=A0=EB=8B=B9=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=88=98=EC=A0=95,=20=EC=84=A0=ED=83=9D=EC=8B=9C?= =?UTF-8?q?=20=ED=9A=8C=EB=A1=9C=20=EB=B2=88=ED=98=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/circuitTrestle/step/StepUp.jsx | 200 +++++++++++------- 1 file changed, 122 insertions(+), 78 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 71dd3e30..d5b19b77 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -9,6 +9,7 @@ import { useRecoilState, useRecoilValue } from 'recoil' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' import { canvasPopupStatusStore } from '@/store/canvasPopupStatusAtom' import { useMasterController } from '@/hooks/common/useMasterController' +import { v4 as uuidv4 } from 'uuid' export default function StepUp(props) { const { getMessage } = useMessage() @@ -97,7 +98,7 @@ export default function StepUp(props) { pcsItemList: formatPcsItemList(stepUps.pcsItemList), selectedPcsItem: formatPcsItemList(stepUps.pcsItemList), })) - + console.log('๐Ÿš€ ~ formatStepUpListData ~ formattedData:', formattedData) // ์ดˆ๊ธฐ ์ถ”์ฒœ ๊ฐ’๋“ค์„ selectedValues์— ์ €์žฅ const initialSelectedValues = {} formattedData.forEach((stepUp) => { @@ -173,11 +174,13 @@ export default function StepUp(props) { // PCS ์‹œ๋ฆฌ์ฆˆ ํฌ๋งท const formatSerQtyList = (serQtyList = []) => { return serQtyList?.map((qty) => ({ + code: uuidv4(), serQty: qty.serQty ? qty.serQty : 0, paralQty: qty.paralQty ? qty.paralQty : 0, rmdYn: qty.rmdYn ? qty.rmdYn : 'N', usePossYn: qty.usePossYn ? qty.usePossYn : 'Y', roofSurfaceList: formatRoofSurfaceList(qty.roofSurfaceList), + selected: qty.rmdYn === 'Y', })) } @@ -209,75 +212,123 @@ export default function StepUp(props) { } // ํ–‰ ์„ ํƒ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ์ถ”๊ฐ€ - const handleRowClick = (goodsNo, pcsIdx, serQtyIdx, serQty, paralQty) => { - const rowKey = `${goodsNo}_${pcsIdx}_${serQtyIdx}` - const pcsKey = `${goodsNo}_${pcsIdx}` - - console.log('goodsNo >> ', goodsNo, serQty, paralQty) - - // ํ˜„์žฌ ์„ ํƒ๋œ PCS ์•„์ดํ…œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ - const pcsItem = stepUpListData.find((stepUp) => stepUp.pcsItemList.find((item) => item.goodsNo === goodsNo))?.pcsItemList[pcsIdx] - - if (!pcsItem) { - console.error('PCS item not found:', { goodsNo, pcsIdx }) - return - } - - // ์„ ํƒ๋œ ๊ฐ’๋“ค ์—…๋ฐ์ดํŠธ - ๋” ์ž์„ธํ•œ ์ •๋ณด ํฌํ•จ - const selectionData = { - goodsNo: goodsNo, - pcsInfo: { - itemId: pcsItem?.itemId, - goodsNo: pcsItem?.goodsNo, - pcsMkrCd: pcsItem?.pcsMkrCd, - pcsSerCd: pcsItem?.pcsSerCd, - }, - allocation: { - serQty: serQty, - paralQty: paralQty, - }, - } - - // ์„ ํƒ๋œ ๊ฐ’๋“ค ์—…๋ฐ์ดํŠธ - setSelectedValues((prev) => ({ - ...prev, - [goodsNo]: { - ...prev[goodsNo], - [pcsKey]: selectionData, - }, - })) - - // ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— ์„ ํƒ๋œ ๊ฐ’๋“ค ์ „๋‹ฌ - if (props.onValuesSelected) { - props.onValuesSelected(selectionData) - } - - setSelectedRows((prev) => { - // ํ˜„์žฌ stepUpId์— ๋Œ€ํ•œ ์„ ํƒ ์ƒํƒœ๊ฐ€ ์—†์œผ๋ฉด ๋นˆ ๊ฐ์ฒด๋กœ ์ดˆ๊ธฐํ™” - const currentStepUpSelections = prev[goodsNo] || {} - - // ์ด๋ฏธ ์„ ํƒ๋œ ํ–‰์„ ๋‹ค์‹œ ํด๋ฆญํ•˜๋Š” ๊ฒฝ์šฐ, ์„ ํƒ์„ ํ•ด์ œํ•˜์ง€ ์•Š์Œ - if (currentStepUpSelections[pcsKey] === rowKey) { - return prev + // const handleRowClick = (goodsNo, pcsIdx, serQtyIdx, serQty, paralQty) => { + const handleRowClick = (mainIdx, subIdx) => { + // const rowKey = `${goodsNo}_${pcsIdx}_${serQtyIdx}` + // const pcsKey = `${goodsNo}_${pcsIdx}` + // setSelectedRow(rowKey) + // item.selected = !item.selected\ + let tempStepUpListData = [...stepUpListData] + let selectedData = {} + tempStepUpListData[0].pcsItemList[mainIdx].serQtyList.forEach((item, index) => { + if (index === subIdx) { + selectedData = item } + item.selected = index === subIdx + }) + setStepUpListData(tempStepUpListData) + console.log('๐Ÿš€ ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData) + console.log('๐Ÿš€ ~ handleRowClick ~ selectedData:', selectedData) - return { - ...prev, - [goodsNo]: { - ...currentStepUpSelections, - [pcsKey]: rowKey, - }, - } + selectedData.roofSurfaceList.forEach((roofSurface) => { + const targetSurface = canvas.getObjects().filter((obj) => obj.id === roofSurface.roofSurfaceId)[0] + const moduleIds = targetSurface.modules.map((module) => { + return module.id + }) + console.log(moduleIds) + canvas + .getObjects() + .filter((obj) => moduleIds.includes(obj.parentId)) + .map((text) => { + console.log('๐Ÿš€ ~ handleRowClick ~ text:', text) + canvas.remove(text) + }) + + canvas.renderAll() + roofSurface.moduleList.forEach((module) => { + console.log('๐Ÿš€ ~ handleRowClick ~ module:', module.uniqueId) + + const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0] + const moduleCircuitText = new fabric.Text(module.circuit, { + left: targetModule.left + targetModule.width / 2, + top: targetModule.top + targetModule.height / 2, + fill: 'black', + fontSize: 20, + width: targetModule.width, + height: targetModule.height, + textAlign: 'center', + originX: 'center', + originY: 'center', + name: 'circuitNumber', + parentId: targetModule.id, + circuitInfo: module.pcsItemId, + }) + targetModule.circuit = moduleCircuitText + targetModule.circuitNumber = module.circuit + canvas.add(moduleCircuitText) + }) }) - // ์ˆ˜๋™ ์„ ํƒ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋˜, ๊ธฐ์กด ์ถ”์ฒœ ์„ ํƒ์€ ์œ ์ง€ - setIsManualSelection((prev) => ({ - ...prev, - [goodsNo]: { - ...prev[goodsNo], - [pcsKey]: true, - }, - })) + canvas.renderAll() + // console.log('goodsNo >> ', goodsNo, serQty, paralQty) + // ํ˜„์žฌ ์„ ํƒ๋œ PCS ์•„์ดํ…œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ + // const pcsItem = stepUpListData.find((stepUp) => stepUp.pcsItemList.find((item) => item.goodsNo === goodsNo))?.pcsItemList[pcsIdx] + + // ์„ ํƒ๋œ ๊ฐ’๋“ค ์—…๋ฐ์ดํŠธ - ๋” ์ž์„ธํ•œ ์ •๋ณด ํฌํ•จ + // const selectionData = { + // goodsNo: tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo, + // pcsInfo: { + // itemId: tempStepUpListData[mainIdx].pcsItemList[subIdx].itemId, + // goodsNo: tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo, + // pcsMkrCd: tempStepUpListData[mainIdx].pcsItemList[subIdx].pcsMkrCd, + // pcsSerCd: tempStepUpListData[mainIdx].pcsItemList[subIdx].pcsSerCd, + // }, + // allocation: { + // serQty: tempStepUpListData[mainIdx].pcsItemList[subIdx].serQtyList[subIdx].serQty, + // paralQty: tempStepUpListData[mainIdx].pcsItemList[subIdx].serQtyList[subIdx]. paralQty, + // }, + // } + + // // ์„ ํƒ๋œ ๊ฐ’๋“ค ์—…๋ฐ์ดํŠธ + // setSelectedValues((prev) => ({ + // ...prev, + // [tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo]: { + // ...prev[tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo], + // [pcsKey]: selectionData, + // }, + // })) + + // // ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— ์„ ํƒ๋œ ๊ฐ’๋“ค ์ „๋‹ฌ + // if (props.onValuesSelected) { + // props.onValuesSelected(selectionData) + // } + + // setSelectedRows((prev) => { + // // ํ˜„์žฌ stepUpId์— ๋Œ€ํ•œ ์„ ํƒ ์ƒํƒœ๊ฐ€ ์—†์œผ๋ฉด ๋นˆ ๊ฐ์ฒด๋กœ ์ดˆ๊ธฐํ™” + // const currentStepUpSelections = prev[goodsNo] || {} + + // // ์ด๋ฏธ ์„ ํƒ๋œ ํ–‰์„ ๋‹ค์‹œ ํด๋ฆญํ•˜๋Š” ๊ฒฝ์šฐ, ์„ ํƒ์„ ํ•ด์ œํ•˜์ง€ ์•Š์Œ + // if (currentStepUpSelections[pcsKey] === rowKey) { + // return prev + // } + + // return { + // ...prev, + // [goodsNo]: { + // ...currentStepUpSelections, + // [pcsKey]: rowKey, + // }, + // } + // }) + + // // ์ˆ˜๋™ ์„ ํƒ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋˜, ๊ธฐ์กด ์ถ”์ฒœ ์„ ํƒ์€ ์œ ์ง€ + // setIsManualSelection((prev) => ({ + // ...prev, + // [goodsNo]: { + // ...prev[goodsNo], + // [pcsKey]: true, + // }, + // })) } // ํ˜„์žฌ ์„ ํƒ๋œ ๊ฐ’๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€ @@ -310,7 +361,7 @@ export default function StepUp(props) { {/* 3๊ฐœ์ผ๋•Œ className = by-max */} {stepUpListData.map((stepUp, index) => (
- {stepUp?.pcsItemList.map((_, idx) => ( + {stepUp?.pcsItemList.map((pcsItem, idx) => (
{stepUp.pcsItemList[idx].goodsNo}
@@ -323,19 +374,12 @@ export default function StepUp(props) { - {stepUp.pcsItemList[idx].serQtyList.map((item, serQtyIdx) => { - const rowKey = `${stepUp.pcsItemList[idx].goodsNo}_${idx}_${serQtyIdx}` - const pcsKey = `${stepUp.pcsItemList[idx].goodsNo}_${idx}` + {pcsItem.serQtyList.map((item, serQtyIdx) => { return ( handleRowClick(stepUp.pcsItemList[idx].goodsNo, idx, serQtyIdx, item.serQty, item.paralQty)} + key={`row-${serQtyIdx}`} + className={`${item.selected ? 'on' : ''}`} + onClick={() => handleRowClick(idx, serQtyIdx)} style={{ cursor: 'pointer' }} > {item.serQty} From c7c614b02e58a4cb7b2c38dc2e5418f364857a4b 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: Mon, 3 Feb 2025 19:30:01 +0900 Subject: [PATCH 002/213] =?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/_main.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/_main.scss b/src/styles/_main.scss index 4322b535..e3ccabeb 100644 --- a/src/styles/_main.scss +++ b/src/styles/_main.scss @@ -254,7 +254,7 @@ font-weight: 600; margin-bottom: 25px; line-height: 24px; - word-break: keep-all; + word-break: break-all; } .notice-contents{ font-size: 12px; From 950e502e893e06d8ffcd2b33f894b957aad21136 Mon Sep 17 00:00:00 2001 From: basssy Date: Mon, 3 Feb 2025 19:31:30 +0900 Subject: [PATCH 003/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=EB=AC=BC=EA=B1=B4=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/Stuff.jsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index 2155331c..4e095cea 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -149,7 +149,22 @@ export default function Stuff() { cellStyle: { textAlign: 'left' }, }, { field: 'saleStoreName', minWidth: 300, headerName: getMessage('stuff.gridHeader.saleStoreName'), cellStyle: { textAlign: 'left' } }, - { field: 'address', headerName: getMessage('stuff.gridHeader.address'), cellStyle: { textAlign: 'left' } }, + { + field: 'address', + headerName: getMessage('stuff.gridHeader.address'), + cellStyle: { textAlign: 'left' }, + cellRenderer: (params) => { + let prefName = params?.data?.prefName + let address = params?.data?.address + let showAddress + if (params?.data?.prefName && params?.data?.address) { + showAddress = prefName + ' ' + address + } else { + showAddress = null + } + return showAddress + }, + }, { field: 'dispCompanyName', headerName: getMessage('stuff.gridHeader.dispCompanyName'), cellStyle: { textAlign: 'left' } }, { field: 'receiveUser', headerName: getMessage('stuff.gridHeader.receiveUser'), cellStyle: { textAlign: 'left' } }, { From c7c6ac7e98de80aec31c1b7e49ba56625c0aa423 Mon Sep 17 00:00:00 2001 From: basssy Date: Mon, 3 Feb 2025 19:36:55 +0900 Subject: [PATCH 004/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EB=85=B8=EC=B6=9C=20=EC=A1=B0=EA=B1=B4=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 | 46 ++++++---- .../management/StuffSearchCondition.jsx | 92 +++++++++++++------ src/components/management/StuffSubHeader.jsx | 13 ++- 3 files changed, 99 insertions(+), 52 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index e4ef732c..bb820b7c 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -347,13 +347,15 @@ export default function StuffDetail() { } promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => { if (res.status === 200) { - if (res?.data?.createUser === 'T01' && session?.userId !== 'T01') { - //createUser๊ฐ€ T01์ธ๋ฐ ๋กœ๊ทธ์ธ์‚ฌ์šฉ์ž๊ฐ€ T01์ด ์•„๋‹ˆ๋ฉด ๋ฒ„ํŠผ์ˆจ๊ธฐ๊ธฐ + // if (res?.data?.createSaleStoreId === 'T01' && session?.storeId !== 'T01') { + // setShowButton('none') + // } else { + // if (session.storeId !== res?.data?.createSaleStoreId) { + // setShowButton('none') + // } + // } + if (res?.data?.createSaleStoreId !== session?.storeId) { setShowButton('none') - } else { - if (session.userId !== res?.data?.createUser) { - setShowButton('none') - } } if (isObjectNotEmpty(res.data)) { let surfaceTypeValue @@ -362,7 +364,7 @@ export default function StuffDetail() { } else if (res.data.surfaceType === 'โ…ก') { surfaceTypeValue = '2' } - setManagementState({ ...res.data, surfaceTypeValue: surfaceTypeValue, firstFlag: 'Y' }) + setManagementState({ ...res.data, surfaceTypeValue: surfaceTypeValue }) } else { setManagementState({}) swalFire({ @@ -1420,7 +1422,8 @@ export default function StuffDetail() { text: getMessage('stuff.detail.save'), type: 'alert', confirmFn: () => { - callDetailApi(objectNo) + setManagementState(res?.data) + // callDetailApi(objectNo) }, }) } @@ -1434,13 +1437,18 @@ export default function StuffDetail() { const callDetailApi = async (objectNo) => { await promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => { - if (res?.data?.createUser === 'T01' && session?.userId !== 'T01') { + // if (res?.data?.createSaleStoreId === 'T01' && session?.storeId !== 'T01') { + // setShowButton('none') + // } else { + // if (session.storeId !== res?.data?.createSaleStoreId) { + // setShowButton('none') + // } + // } + + if (res?.data?.createSaleStoreId !== session?.storeId) { setShowButton('none') - } else { - if (session.userId !== res?.data?.createUser) { - setShowButton('none') - } } + let surfaceTypeValue if (res.data.surfaceType === 'โ…ขใƒปโ…ฃ') { surfaceTypeValue = '3' @@ -1638,10 +1646,14 @@ export default function StuffDetail() { // ๊ทธ๋ฆฌ๋“œ ๋”๋ธ” ํด๋ฆญ ํ•ด๋‹นํ”Œ๋žœ์˜ ๋„๋ฉด์ž‘์„ฑ ํ™”๋ฉด์œผ๋กœ ์ด๋™ const getCellDoubleClicked = (params) => { //#474์ •์ฑ… - if (managementState.createUser === 'T01') { - if (session.userId !== 'T01') { - return false - } + // if (managementState.createUser === 'T01') { + // if (session.userId !== 'T01') { + // return false + // } + // } + + if (managementState?.createSaleStoreId !== session?.storeId) { + return false } if (params?.column?.colId !== 'estimateDate') { diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index 19c26521..133eb30e 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -122,8 +122,10 @@ export default function StuffSearchCondition() { schAddress: address ? address.trim() : '', schObjectName: objectName ? objectName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', - schSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? '' : stuffSearch.schSelSaleStoreId, - schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '', + // schSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? '' : stuffSearch.schSelSaleStoreId, + // schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '', + schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, + schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schReceiveUser: receiveUser ? receiveUser.trim() : '', schDateType: dateType, schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด @@ -144,8 +146,10 @@ export default function StuffSearchCondition() { schAddress: address ? address.trim() : '', schObjectName: objectName ? objectName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', - schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '', - schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '', + // schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '', + // schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '', + schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, + schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schReceiveUser: receiveUser ? receiveUser.trim() : '', schDateType: dateType, schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด @@ -183,27 +187,53 @@ export default function StuffSearchCondition() { }) } else if (stuffSearch.code === 'E') { if (session.storeId !== 'T01' && session.storeLvl === '1') { - setStuffSearch({ - schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(), - schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(), - schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(), - schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(), - schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(), - schSelSaleStoreId: myDataCheck ? schSelSaleStoreId : otherSaleStoreId ? schSelSaleStoreId : '', - schOtherSelSaleStoreId: myDataCheck ? '' : otherSaleStoreId, - schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(), - schDateType: dateType, - schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด - schMyDataCheck: myDataCheck, - schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '', - schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '', - code: 'E', - startRow: stuffSearch?.startRow ? stuffSearch.startRow : 1, - endRow: stuffSearch?.endRow ? stuffSearch.endRow : 100, - schSortType: stuffSearch?.schSortType ? stuffSearch.schSortType : 'U', - pageNo: stuffSearch?.pageNo, - pageSize: stuffSearch?.pageSize, - }) + if (stuffSearch.pageNo !== 1) { + setStuffSearch({ + schObjectNo: objectNo ? objectNo.trim() : stuffSearch.schObjectNo.trim(), + schSaleStoreName: saleStoreName ? saleStoreName.trim() : '', + schAddress: address ? address.trim() : '', + schObjectName: objectName ? objectName.trim() : '', + schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', + // schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '', + // schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '', + schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, + schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, + schReceiveUser: receiveUser ? receiveUser.trim() : '', + schDateType: dateType, + schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด + schMyDataCheck: myDataCheck, + schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '', + schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '', + code: 'E', + startRow: 1, + endRow: 1 * stuffSearch?.pageSize, + schSortType: 'U', + pageNo: 1, + pageSize: stuffSearch?.pageSize, + }) + } else { + setStuffSearch({ + schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(), + schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(), + schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(), + schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(), + schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(), + schSelSaleStoreId: myDataCheck ? schSelSaleStoreId : otherSaleStoreId ? schSelSaleStoreId : '', + schOtherSelSaleStoreId: myDataCheck ? '' : otherSaleStoreId, + schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(), + schDateType: dateType, + schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด + schMyDataCheck: myDataCheck, + schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '', + schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '', + code: 'E', + startRow: stuffSearch?.startRow ? stuffSearch.startRow : 1, + endRow: stuffSearch?.endRow ? stuffSearch.endRow : 100, + schSortType: stuffSearch?.schSortType ? stuffSearch.schSortType : 'U', + pageNo: stuffSearch?.pageNo, + pageSize: stuffSearch?.pageSize, + }) + } } else if (session.storeId === 'T01') { if (stuffSearch.pageNo !== 1) { setStuffSearch({ @@ -212,8 +242,10 @@ export default function StuffSearchCondition() { schAddress: address ? address.trim() : '', schObjectName: objectName ? objectName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', - schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '', - schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '', + // schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '', + // schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '', + schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, + schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schReceiveUser: receiveUser ? receiveUser.trim() : '', schDateType: dateType, schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด @@ -600,7 +632,7 @@ export default function StuffSearchCondition() { if (isObjectNotEmpty(key)) { setOtherSaleStoreId('') setSchSelSaleStoreId(key.saleStoreId) - stuffSearch.schSelSaleStoreId = key.saleStoreId + // stuffSearch.schSelSaleStoreId = key.saleStoreId //๊ณ ๋ฅธ 1์ฐจ์ ์˜ saleStoreId๋กœ 2์ฐจ์  APIํ˜ธ์ถœํ•˜๊ธฐ let url = `/api/object/saleStore/${key.saleStoreId}/list?firstFlg=0&userId=${session?.userId}` let otherList @@ -645,11 +677,11 @@ export default function StuffSearchCondition() { stuffSearch.schMyDataCheck = false if (isObjectNotEmpty(key)) { setOtherSaleStoreId(key.saleStoreId) - stuffSearch.schOtherSelSaleStoreId = key.saleStoreId + // stuffSearch.schOtherSelSaleStoreId = key.saleStoreId //2์ฐจ์  ๊ณจ๋ž์„๋•Œ 1์ฐจ์  ๊ฐ’ if (session.storeId === 'T01') { - stuffSearch.schSelSaleStoreId = schSelSaleStoreId + // stuffSearch.schSelSaleStoreId = schSelSaleStoreId } else { stuffSearch.schSelSaleStoreId = '' } diff --git a/src/components/management/StuffSubHeader.jsx b/src/components/management/StuffSubHeader.jsx index 8e61e259..d6c0f480 100644 --- a/src/components/management/StuffSubHeader.jsx +++ b/src/components/management/StuffSubHeader.jsx @@ -38,11 +38,14 @@ export default function StuffSubHeader({ type }) { useEffect(() => { if (isObjectNotEmpty(managementState)) { - if (managementState.createUser === 'T01') { - if (session.userId !== 'T01') { - //๋„๋ฉด ์ž‘์„ฑ์€ ์ด๋™ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ #457 ๋‹ค์‹œ ๋ชปํ•˜๋„๋ก ๋ณ€๊ฒฝ#474 - setButtonStyle('none') - } + // if (managementState.createUser === 'T01') { + // if (session.userId !== 'T01') { + // //๋„๋ฉด ์ž‘์„ฑ์€ ์ด๋™ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ #457 ๋‹ค์‹œ ๋ชปํ•˜๋„๋ก ๋ณ€๊ฒฝ#474 + // setButtonStyle('none') + // } + // } + if (managementState.createSaleStoreId !== session?.storeId) { + setButtonStyle('none') } } }, [managementState]) From d0c8b10ec62648f8ac1effae252cda56270680fc Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 3 Feb 2025 19:54:18 +0900 Subject: [PATCH 005/213] =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EB=93=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=ED=9B=84=20=EB=8F=84=EB=A9=B4=20=ED=81=AC=EA=B8=B0?= =?UTF-8?q?=20=EC=B6=95=EC=86=8C=20=ED=96=88=EC=9D=84=20=EC=8B=9C,=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EB=93=9C=20=EC=9E=91=EC=95=84=EC=A7=80?= =?UTF-8?q?=EB=8A=94=20=ED=98=84=EC=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useGrid.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/hooks/common/useGrid.js b/src/hooks/common/useGrid.js index abd2a6e0..29a5edea 100644 --- a/src/hooks/common/useGrid.js +++ b/src/hooks/common/useGrid.js @@ -71,10 +71,10 @@ export function useGrid() { const backgroundPolygon = new fabric.Polygon( [ - { x: 0, y: 0 }, - { x: canvas.width, y: 0 }, - { x: canvas.width, y: canvas.height }, - { x: 0, y: canvas.height }, + { x: -1500, y: -1500 }, + { x: 2500, y: -1500 }, + { x: 2500, y: 2500 }, + { x: -1500, y: 2500 }, ], { fill: pattern, @@ -90,9 +90,14 @@ export function useGrid() { } if (patternData.lineGridDisplay) { - for (let i = 0; i < canvas.height / patternData.gridVertical + 1; i++) { + for (let i = 0; i < 5000 / patternData.gridVertical + 1; i++) { const horizontalLine = new fabric.Line( - [0, i * patternData.gridVertical - patternData.gridVertical / 2, canvas.width, i * patternData.gridVertical - patternData.gridVertical / 2], + [ + -1500, + -1500 + i * patternData.gridVertical - patternData.gridVertical / 2, + 3000, + -1500 + i * patternData.gridVertical - patternData.gridVertical / 2, + ], { stroke: gridColor, strokeWidth: 1, @@ -113,9 +118,14 @@ export function useGrid() { canvas.add(horizontalLine) } - for (let i = 0; i < canvas.width / patternData.gridHorizon + 1; i++) { + for (let i = 0; i < 5000 / patternData.gridHorizon + 1; i++) { const verticalLine = new fabric.Line( - [i * patternData.gridHorizon - patternData.gridHorizon / 2, 0, i * patternData.gridHorizon - patternData.gridHorizon / 2, canvas.height], + [ + -1500 + i * patternData.gridHorizon - patternData.gridHorizon / 2, + -1500, + -1500 + i * patternData.gridHorizon - patternData.gridHorizon / 2, + 3000, + ], { stroke: gridColor, strokeWidth: 1, From a2237de250225f325b36d4dc43ba326ab74760d2 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Mon, 3 Feb 2025 20:23:08 +0900 Subject: [PATCH 006/213] =?UTF-8?q?=EA=B0=80=EB=8C=80=20=EB=94=94=ED=85=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=A1=B0=ED=9A=8C=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useCommonUtils.js | 12 ++++++++++++ src/hooks/module/useModulePlace.js | 2 +- src/hooks/module/useModuleTabContents.js | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/hooks/common/useCommonUtils.js b/src/hooks/common/useCommonUtils.js index 22694c4d..c790da89 100644 --- a/src/hooks/common/useCommonUtils.js +++ b/src/hooks/common/useCommonUtils.js @@ -9,6 +9,7 @@ import { canvasState } from '@/store/canvasAtom' import { v4 as uuidv4 } from 'uuid' import { usePopup } from '@/hooks/usePopup' import Distance from '@/components/floor-plan/modal/distance/Distance' +import { usePolygon } from '@/hooks/usePolygon' export function useCommonUtils() { const canvas = useRecoilValue(canvasState) @@ -20,6 +21,7 @@ export function useCommonUtils() { const commonTextFont = useRecoilValue(fontSelector('commonText')) const [commonUtils, setCommonUtilsState] = useRecoilState(commonUtilsState) const { addPopup } = usePopup() + const { drawDirectionArrow } = usePolygon() useEffect(() => { // initEvent() @@ -609,6 +611,16 @@ export function useCommonUtils() { if (clonedObj.type === 'group') clonedObj.set({ groupId: uuidv4() }) initEvent() + + //๋ฐฐ์น˜๋ฉด์ผ ๊ฒฝ์šฐ + if (obj.name === 'roof') { + clonedObj.setCoords() + clonedObj.fire('polygonMoved') + clonedObj.set({ direction: obj.direction, directionText: obj.directionText }) + clonedObj.addLengthText() + canvas.renderAll() + drawDirectionArrow(clonedObj) + } }) } } diff --git a/src/hooks/module/useModulePlace.js b/src/hooks/module/useModulePlace.js index 8b1940f9..bc9913f6 100644 --- a/src/hooks/module/useModulePlace.js +++ b/src/hooks/module/useModulePlace.js @@ -39,7 +39,7 @@ export function useModulePlace() { roofBaseCd: item.trestle.roofBaseCd, constTp: item.construction.constTp, mixMatlNo: selectedModules.mixMatlNo, - roofPitch: item.addRoof.roofPchBase ? item.addRoof.roofPchBase : null, + roofPitch: item.addRoof.hajebichi ? item.addRoof.hajebichi : 0, inclCd: String(item.addRoof.pitch), roofIndex: item.addRoof.index, workingWidth: item.addRoof.lenBase, diff --git a/src/hooks/module/useModuleTabContents.js b/src/hooks/module/useModuleTabContents.js index f15e643f..95317cdd 100644 --- a/src/hooks/module/useModuleTabContents.js +++ b/src/hooks/module/useModuleTabContents.js @@ -343,9 +343,9 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab const handleHajebichiAndLength = (e, type) => { if (type === 'length') { - setLengthBase(e.target.value) + setLengthBase(Number(e.target.value)) } else { - setHajebichi(e.target.value) + setHajebichi(Number(e.target.value)) } resetSelected() } From 679d9f8a3290542c41bcdf0d7944fee5030b5e88 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 3 Feb 2025 20:34:36 +0900 Subject: [PATCH 007/213] =?UTF-8?q?=EA=B0=80=EB=8C=80=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=20=ED=9B=84=20=EB=B9=BD=20=ED=95=A0=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EA=B0=80=EB=8C=80=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A7=80=EC=9A=B0=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/common.js | 1 + .../floor-plan/modal/basic/step/Orientation.jsx | 10 ++++++---- src/hooks/common/useMenu.js | 3 +++ src/hooks/module/useTrestle.js | 10 +++++++++- src/hooks/useTempGrid.js | 4 ++-- src/util/canvas-util.js | 2 +- 6 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/common/common.js b/src/common/common.js index a35dc8c4..2578e138 100644 --- a/src/common/common.js +++ b/src/common/common.js @@ -177,6 +177,7 @@ export const SAVE_KEY = [ 'moduleRowsTotCnt', 'seq', 'smartRackId', + 'directionText', 'quotationParam', 'pcses', ] diff --git a/src/components/floor-plan/modal/basic/step/Orientation.jsx b/src/components/floor-plan/modal/basic/step/Orientation.jsx index 590c9d46..d06b6b39 100644 --- a/src/components/floor-plan/modal/basic/step/Orientation.jsx +++ b/src/components/floor-plan/modal/basic/step/Orientation.jsx @@ -28,8 +28,10 @@ export const Orientation = forwardRef(({ tabNum }, ref) => { }, [compasDeg]) const checkDegree = (e) => { - if (numberCheck(Number(e)) && Number(e) >= -180 && Number(e) <= 180) { - setCompasDeg(Number(e)) + if (Number(e) >= -180 && Number(e) <= 180) { + if (numberCheck(Number(e))) { + setCompasDeg(Number(e)) + } } else { setCompasDeg(compasDeg) } @@ -46,8 +48,8 @@ export const Orientation = forwardRef(({ tabNum }, ref) => { {Array.from({ length: 180 / 15 }).map((dot, index) => (
setCompasDeg(15 * (12 + index))} + className={`circle ${getDegreeInOrientation(compasDeg) === -1 * (-15 * index + 180) ? 'act' : ''}`} + onClick={() => setCompasDeg(-1 * (-15 * index + 180))} > {index === 0 && 180ยฐ} {index === 6 && -90ยฐ} diff --git a/src/hooks/common/useMenu.js b/src/hooks/common/useMenu.js index c0a4e1d5..5eadcf18 100644 --- a/src/hooks/common/useMenu.js +++ b/src/hooks/common/useMenu.js @@ -19,6 +19,7 @@ import { useSurfaceShapeBatch } from '@/hooks/surface/useSurfaceShapeBatch' import { useRecoilValue } from 'recoil' import { currentMenuState } from '@/store/canvasAtom' import { MENU } from '@/common/common' +import { useTrestle } from '@/hooks/module/useTrestle' export default function useMenu() { const menus = [] @@ -26,6 +27,7 @@ export default function useMenu() { const [popupId, setPopupId] = useState(uuidv4()) const { addPopup } = usePopup() const { deleteAllSurfacesAndObjects } = useSurfaceShapeBatch({}) + const { clear: trestleClear } = useTrestle() const handleMenu = (type) => { if (type === 'outline') { switch (currentMenu) { @@ -79,6 +81,7 @@ export default function useMenu() { if (type === 'module') { switch (currentMenu) { case MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING: + trestleClear() addPopup(popupId, 1, ) break case MENU.MODULE_CIRCUIT_SETTING.CIRCUIT_TRESTLE_SETTING: diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 2fd95ba2..f9aa1de0 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -1882,5 +1882,13 @@ export const useTrestle = () => { } } - return { apply, getTrestleParams } + const clear = () => { + canvas.getObjects().forEach((obj) => { + if (obj.name === 'eaveBar' || obj.name === 'rack' || obj.name === 'halfEaveBar' || obj.name === 'smartRack') { + canvas.remove(obj) + } + }) + } + + return { apply, getTrestleParams, clear } } diff --git a/src/hooks/useTempGrid.js b/src/hooks/useTempGrid.js index 7bfcf263..d43a19c0 100644 --- a/src/hooks/useTempGrid.js +++ b/src/hooks/useTempGrid.js @@ -13,7 +13,7 @@ export function useTempGrid() { //์ž„์˜ ๊ทธ๋ฆฌ๋“œ ๋ชจ๋“œ์ผ ๊ฒฝ์šฐ let pointer = canvas.getPointer(e.e) - const tempGrid = new fabric.Line([pointer.x, 0, pointer.x, canvas.height], { + const tempGrid = new fabric.Line([pointer.x, -1500, pointer.x, 2500], { stroke: gridColor, strokeWidth: 1, selectable: true, @@ -41,7 +41,7 @@ export function useTempGrid() { //์ž„์˜ ๊ทธ๋ฆฌ๋“œ ๋ชจ๋“œ์ผ ๊ฒฝ์šฐ let pointer = { x: e.offsetX, y: e.offsetY } - const tempGrid = new fabric.Line([0, pointer.y, canvas.width, pointer.y], { + const tempGrid = new fabric.Line([-1500, pointer.y, 2500, pointer.y], { stroke: gridColor, strokeWidth: 1, selectable: true, diff --git a/src/util/canvas-util.js b/src/util/canvas-util.js index 5df32879..2204eaec 100644 --- a/src/util/canvas-util.js +++ b/src/util/canvas-util.js @@ -957,7 +957,7 @@ export const getAllRelatedObjects = (id, canvas) => { // ๋ชจ๋“ˆ,ํšŒ๋กœ ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” degree ๋ฒ”์œ„ ๋ณ„ ๊ฐ’ export const getDegreeInOrientation = (degree) => { - if (degree >= 352) { + if (degree >= 180 || degree < -180) { return 0 } if (degree % 15 === 0) return degree From 6ad459e4cac7379e6ed0f2b03ba80cf98d1f8b06 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Mon, 3 Feb 2025 20:40:49 +0900 Subject: [PATCH 008/213] =?UTF-8?q?=EB=B0=B0=EC=B9=98=EB=A9=B4=20=EB=B3=B5?= =?UTF-8?q?=EC=82=AC=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useCommonUtils.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hooks/common/useCommonUtils.js b/src/hooks/common/useCommonUtils.js index c790da89..baaa7dfe 100644 --- a/src/hooks/common/useCommonUtils.js +++ b/src/hooks/common/useCommonUtils.js @@ -21,7 +21,7 @@ export function useCommonUtils() { const commonTextFont = useRecoilValue(fontSelector('commonText')) const [commonUtils, setCommonUtilsState] = useRecoilState(commonUtilsState) const { addPopup } = usePopup() - const { drawDirectionArrow } = usePolygon() + const { drawDirectionArrow, addLengthText } = usePolygon() useEffect(() => { // initEvent() @@ -610,17 +610,17 @@ export function useCommonUtils() { //๊ฐ์ฒด๊ฐ€ ๊ทธ๋ฃน์ผ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ฃน ์•„์ด๋””๋ฅผ ๋”ฐ๋กœ ๋„ฃ์–ด์ค€๋‹ค if (clonedObj.type === 'group') clonedObj.set({ groupId: uuidv4() }) - initEvent() - //๋ฐฐ์น˜๋ฉด์ผ ๊ฒฝ์šฐ if (obj.name === 'roof') { clonedObj.setCoords() clonedObj.fire('polygonMoved') clonedObj.set({ direction: obj.direction, directionText: obj.directionText }) - clonedObj.addLengthText() canvas.renderAll() - drawDirectionArrow(clonedObj) + addLengthText(clonedObj) //์ˆ˜์น˜ ์ถ”๊ฐ€ + drawDirectionArrow(clonedObj) //๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ ์ถ”๊ฐ€ } + + initEvent() }) } } From 12e615717a0911f99ab7bc6aabed69eebfb8a1f2 Mon Sep 17 00:00:00 2001 From: basssy Date: Mon, 3 Feb 2025 20:45:50 +0900 Subject: [PATCH 009/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=20=EB=85=B8=EC=B6=9C=20&=20=EC=A0=80=EC=9E=A5=EC=8B=9C=20?= =?UTF-8?q?=ED=97=A4=EB=8D=94=20=EA=B4=80=EB=A0=A8=20=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 | 68 ++++++-------------- src/components/management/StuffHeader.jsx | 2 +- src/components/management/StuffSubHeader.jsx | 12 ++-- 3 files changed, 25 insertions(+), 57 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index bb820b7c..c352b9a5 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -283,15 +283,19 @@ export default function StuffDetail() { cellStyle: { justifyContent: 'center' }, cellRenderer: (params) => { let buttonStyle + let buttonStyle2 if (params.value == null) { buttonStyle = { display: 'none', } - } - if (managementState?.createUser === 'T01') { - if (session.userId !== 'T01') { - // #474 - buttonStyle = { display: 'none' } + buttonStyle2 = { + display: 'none', + } + } else { + if (managementState?.createSaleStoreId === 'T01') { + if (session?.storeId !== 'T01') { + buttonStyle = { display: 'none' } + } } } return ( @@ -312,7 +316,7 @@ export default function StuffDetail() { {getMessage('stuff.detail.planGrid.btn1')}
- +
)) || ( diff --git a/src/components/main/MainContents.jsx b/src/components/main/MainContents.jsx index 3c1e184b..2985484e 100644 --- a/src/components/main/MainContents.jsx +++ b/src/components/main/MainContents.jsx @@ -14,10 +14,9 @@ import { useMainContentsController } from '@/hooks/main/useMainContentsControlle import { QcastContext } from '@/app/QcastProvider' import { useSwal } from '@/hooks/useSwal' -import BoardDetailModal from '../community/modal/BoardDetailModal' import { handleFileDown } from '@/util/board-utils' -export default function MainContents() { +export default function MainContents({ setFaqOpen, setFaqModalNoticeNo }) { const { swalFire } = useSwal() const { getMessage } = useMessage() @@ -116,10 +115,6 @@ export default function MainContents() { } } - // FAQ ํŒ์—… ๊ด€๋ จ - const [open, setOpen] = useState(false) - const [modalNoticeNo, setModalNoticeNo] = useState('') - return (
@@ -178,7 +173,6 @@ export default function MainContents() {
- {open && }
{recentFaqList.length > 0 ? ( @@ -192,8 +186,8 @@ export default function MainContents() { className="faq-title pre" style={{ cursor: 'pointer' }} onClick={() => { - setOpen(true) - setModalNoticeNo(row.noticeNo) + setFaqOpen(true) + setFaqModalNoticeNo(row.noticeNo) }} > {row.title} From d0126343b9e2d37aeeed7c0fc814f75ccdbf0929 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 4 Feb 2025 10:26:15 +0900 Subject: [PATCH 018/213] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=A7=8C=EB=93=A4=EA=B8=B0=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useTrestle.js | 52 ++++++++++++++++++++++++++++++---- src/store/estimateAtom.js | 23 +++++++++++++++ 2 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 src/store/estimateAtom.js diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 8f1ed94c..eb7ecbc2 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -1,16 +1,18 @@ -import { useRecoilValue } from 'recoil' +import { useRecoilState, useRecoilValue } from 'recoil' import { canvasState } from '@/store/canvasAtom' import { POLYGON_TYPE } from '@/common/common' import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { getDegreeByChon, getTrestleLength } from '@/util/canvas-util' import { v4 as uuidv4 } from 'uuid' import { useMasterController } from '@/hooks/common/useMasterController' +import { estimateParamAtom } from '@/store/estimateAtom' // ํšŒ๋กœ ๋ฐ ๊ฐ€๋Œ€์„ค์ • export const useTrestle = () => { const canvas = useRecoilValue(canvasState) const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ตœ์ข… ๋ฐ์ดํ„ฐ const { getQuotationItem } = useMasterController() + const [estimateParam, setEstimateParam] = useRecoilState(estimateParamAtom) const apply = () => { //์ฒ˜๋งˆ๋ ฅ๋ฐ”๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ exposedBottomPoints๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋งˆ๋ ฅ๋ฐ” ๊ทธ๋ ค์ค˜์•ผํ•จ. @@ -54,6 +56,10 @@ export const useTrestle = () => { }) const result = calculateForApi(surface) + + if (!result) { + return + } const centerPoints = result.centerPoints const exposedBottomModules = [] // ์•„๋ž˜ ๋‘๋ฉด์ด ๋ชจ๋‘ ๋…ธ์ถœ ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ @@ -439,16 +445,50 @@ export const useTrestle = () => { const quotationParam = getTrestleParams(surface) surface.set({ quotationParam }) - getQuoationItems() + }) + setQuoationItem() + } + + // itemList ์กฐํšŒ ํ›„ estimateParam์— ์ €์žฅ + const setQuoationItem = () => { + const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + //surfaces.pcses๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฌถ๋Š”๋‹ค + const pcses = surfaces[0].pcses + surfaces.forEach((surface, index) => { + if (index !== 0) { + pcses.concat(surface.pcses) + } + }) + const params = { trestles: surfaces.map((surface) => surface.quotationParam), pcses } + //๊ฒฌ์ ์„œ itemList ์กฐํšŒ + getQuotationItem(params).then((res) => { + if (!res.data) { + return + } + const itemList = res.data + //northArrangement ๋ถ๋ฉด ์„ค์น˜ ์—ฌ๋ถ€ + const northArrangement = getNorthArrangement() + + setEstimateParam({ ...estimateParam, itemList, northArrangement }) }) } - const getQuoationItems = () => { + const getNorthArrangement = () => { const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - const params = { trestles: surfaces.map((surface) => surface.quotationParam), pcses: surfaces[0].pcses ?? [] } - getQuotationItem(params).then((res) => { - console.log('res', res) + let northArrangement = '0' + + surfaces.forEach((surface) => { + const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId) + const directionText = parent.directionText + // ['่ฅฟๅŒ—่ฅฟ','ๆฑๅŒ—ๆฑ'] ์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๅŒ—์ด ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ ์ „๋ถ€ ๋ถ๋ฉด์œผ๋กœ ๊ฐ„์ฃผ + if (directionText.includes('ๅŒ—') && !directionText.includes('่ฅฟๅŒ—่ฅฟ') && !directionText.includes('ๆฑๅŒ—ๆฑ')) { + if (surface.modules.length > 0) { + northArrangement = '1' + } + } }) + + return northArrangement } const findNextModule = (currentPoint, centerPoints, direction) => { diff --git a/src/store/estimateAtom.js b/src/store/estimateAtom.js new file mode 100644 index 00000000..20cdaa7c --- /dev/null +++ b/src/store/estimateAtom.js @@ -0,0 +1,23 @@ +import { atom } from 'recoil' + +export const estimateParamAtom = atom({ + // ๊ฒฌ์ ์„œ post parameter + key: 'estimateParamAtom', + default: { + saleStoreId: '', + objectNo: '', + planNo: '', + slope: '', + angle: '', + surfaceType: '', + setupHeight: '', + standardWindSpeedId: '', + snowfall: '', + northArrangement: '', + drawingFlg: '', + userId: '', + roofSurfaceList: [], + circuitItemList: [], + itemList: [], + }, +}) From eca01e68966801670d8038761dd98167297e1703 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Tue, 4 Feb 2025 11:01:14 +0900 Subject: [PATCH 019/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=ED=95=9C=EA=B5=AD?= =?UTF-8?q?=EC=96=B4=20=EB=AC=B8=EA=B5=AC=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/ko.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/ko.json b/src/locales/ko.json index 35b62925..f389807c 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -50,8 +50,8 @@ "modal.movement.flow.line.updown.up": "์ž๋ฆฟ์ˆ˜๋ฅผ ์˜ฌ๋ฆฌ๋‹ค", "modal.movement.flow.line.updown.down": "์ž๋ฆฟ์ˆ˜๋ฅผ ๋‚ฎ์ถ”๋‹ค", "modal.movement.flow.line.info": "๋™์„ ์„ ์„ ํƒํ•˜๊ณ  ์ด๋™ ํญ์„ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค", - "modal.movement.flow.line.bottom.left": "\"๋†’์ด๋ณ€๊ฒฝ : ์•„๋ž˜\": \"์™ผ์ชฝ\"", - "modal.movement.flow.line.top.right": "\"๋†’์ด๋ณ€๊ฒฝ : ์œ„\": \"์˜ค๋ฅธ์ชฝ\"", + "modal.movement.flow.line.bottom.left": "๋†’์ด ๋ณ€๊ฒฝ: ์•„๋ž˜, ์™ผ์ชฝ", + "modal.movement.flow.line.top.right": "๋†’์ด ๋ณ€๊ฒฝ: ์œ„, ์˜ค๋ฅธ์ชฝ", "plan.menu.roof.cover.outline.edit.offset": "์™ธ๋ฒฝ์„  ํŽธ์ง‘ ๋ฐ ์˜คํ”„์…‹", "plan.menu.roof.cover.roof.surface.alloc": "์ง€๋ถ•๋ฉด ํ• ๋‹น", "plan.menu.roof.cover.roof.shape.edit": "์ง€๋ถ•ํ˜•์ƒ ํŽธ์ง‘", @@ -84,8 +84,8 @@ "plan.menu.placement.surface.arrangement": "๋ฉดํ˜•์ƒ ๋ฐฐ์น˜", "plan.menu.placement.surface.object": "์˜ค๋ธŒ์ ํŠธ ๋ฐฐ์น˜", "plan.menu.placement.surface.all.remove": "๋ฐฐ์น˜๋ฉด ์ „์ฒด ์‚ญ์ œ", - "plan.menu.module.circuit.setting": "\"๋ชจ๋“ˆ\": \"ํšŒ๋กœ ๊ตฌ์„ฑ\"", - "plan.menu.module.circuit.setting.default": "๋ชจ๋“ˆ/๊ฐ€๋Œ€์„ค์ •", + "plan.menu.module.circuit.setting": "๋ชจ๋“ˆยทํšŒ๋กœ ๊ตฌ์„ฑ", + "plan.menu.module.circuit.setting.default": "๋ชจ๋“ˆยท๊ฐ€๋Œ€์„ค์ •", "modal.module.basic.setting.orientation.setting": "๋ฐฉ์œ„ ์„ค์ •", "modal.module.basic.setting.orientation.setting.info": "โ€ป์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณ„์‚ฐ์šฉ ๋ฐฉ์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚จ์ชฝ์˜ ๋ฐฉ์œ„๋ฅผ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.", "modal.module.basic.setting.orientation.setting.angle.passivity": "๊ฐ๋„๋ฅผ ์ง์ ‘ ์ž…๋ ฅ", From df05a7d12969b823f3189f98c4378083b9542081 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, 4 Feb 2025 11:32:48 +0900 Subject: [PATCH 020/213] =?UTF-8?q?-=20=EB=AA=A8=EB=93=88=EC=97=90=20pcsIt?= =?UTF-8?q?emId=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/circuitTrestle/step/StepUp.jsx | 1 + .../circuitTrestle/step/type/PassivityCircuitAllocation.jsx | 6 +++--- 2 files changed, 4 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 9f558f16..7d2da472 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -248,6 +248,7 @@ export default function StepUp(props) { circuitInfo: module.pcsItemId, }) targetModule.circuit = moduleCircuitText + targetModule.pcsItemId = module.pcsItemId targetModule.circuitNumber = module.circuit canvas.add(moduleCircuitText) }) 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 77404733..ded6c61f 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -249,8 +249,8 @@ export default function PassivityCircuitAllocation(props) { }), } }) - - const pcsItemList = selectedModels.map((model) => { + console.log('uniqueCircuitNumbers', uniqueCircuitNumbers) + const pcsItemList = selectedModels.map((model, index) => { return { pcsMkrCd: model.pcsMkrCd, pcsSerCd: model.pcsSerCd, @@ -260,7 +260,7 @@ export default function PassivityCircuitAllocation(props) { serQtyList: [ { serQty: targetModules.length, - paralQty: 0, + paralQty: uniqueCircuitNumbers.length, rmdYn: 'Y', usePossYn: 'Y', roofSurfaceList: roofSurfaceList, From ed25bc6b533d5a6cd3e29f3327a9ab81c10d8185 Mon Sep 17 00:00:00 2001 From: basssy Date: Tue, 4 Feb 2025 11:53:44 +0900 Subject: [PATCH 021/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/Stuff.jsx | 2 - .../management/StuffSearchCondition.jsx | 37 ++++++++++--------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index 9b5bc193..51154e92 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -230,8 +230,6 @@ export default function Stuff() { startRow: (stuffSearch.pageNo - 1) * stuffSearchParams.pageSize + 1, endRow: stuffSearchParams?.endRow, schSaleStoreId: stuffSearchParams?.schMyDataCheck ? stuffSearchParams.schSaleStoreId : '', - // schSelSaleStoreId: stuffSearchParams?.schSelSaleStoreId ? stuffSearchParams.schSelSaleStoreId : '', - // schOtherSelSaleStoreId: stuffSearchParams?.schOtherSelSaleStoreId ? stuffSearchParams.schOtherSelSaleStoreId : '', schSelSaleStoreId: stuffSearchParams?.schMyDataCheck ? '' : stuffSearchParams.schSelSaleStoreId, schOtherSelSaleStoreId: stuffSearchParams?.schMyDataCheck ? '' : stuffSearchParams.schOtherSelSaleStoreId, schSortType: stuffSearchParams.schSortType, diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index d9aaba6e..62b75483 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -204,14 +204,14 @@ export default function StuffSearchCondition() { }) } else { setStuffSearch({ - schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(), - schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(), - schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(), - schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(), - schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(), + schObjectNo: objectNo ? objectNo.trim() : '', + schSaleStoreName: saleStoreName ? saleStoreName.trim() : '', + schAddress: address ? address.trim() : '', + schObjectName: objectName ? objectName.trim() : '', + schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schSelSaleStoreId: myDataCheck ? schSelSaleStoreId : otherSaleStoreId ? schSelSaleStoreId : '', schOtherSelSaleStoreId: myDataCheck ? '' : otherSaleStoreId, - schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(), + schReceiveUser: receiveUser ? receiveUser.trim() : '', schDateType: dateType, schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด schMyDataCheck: myDataCheck, @@ -250,14 +250,14 @@ export default function StuffSearchCondition() { }) } else { setStuffSearch({ - schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(), - schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(), - schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(), - schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(), - schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(), + schObjectNo: objectNo ? objectNo.trim() : '', + schSaleStoreName: saleStoreName ? saleStoreName.trim() : '', + schAddress: address ? address.trim() : '', + schObjectName: objectName ? objectName.trim() : '', + schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schSelSaleStoreId: schSelSaleStoreId, schOtherSelSaleStoreId: otherSaleStoreId, - schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(), + schReceiveUser: receiveUser ? receiveUser.trim() : '', schDateType: dateType, schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด schMyDataCheck: myDataCheck, @@ -273,14 +273,15 @@ export default function StuffSearchCondition() { } } else { setStuffSearch({ - schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(), - schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(), - schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(), - schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(), - schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(), + schObjectNo: objectNo ? objectNo.trim() : '', + schSaleStoreName: saleStoreName ? saleStoreName.trim() : '', + schAddress: address ? address.trim() : '', + schObjectName: objectName ? objectName.trim() : '', + schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schSelSaleStoreId: schSelSaleStoreId, schOtherSelSaleStoreId: otherSaleStoreId, - schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(), + schReceiveUser: receiveUser ? receiveUser.trim() : '', + schDateType: dateType, schTempFlg: tempFlg, //์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด schMyDataCheck: myDataCheck, From 20b6d8db979d66b84e3bf937b73dbe7b8376fc72 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 4 Feb 2025 12:32:38 +0900 Subject: [PATCH 022/213] =?UTF-8?q?=EB=8F=84=EB=A9=B4=20=EA=B2=AC=EC=A0=81?= =?UTF-8?q?=EC=84=9C=20=EC=A0=80=EC=9E=A5=20param=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 5 +- src/hooks/module/useTrestle.js | 790 ++++++++++-------- src/store/estimateAtom.js | 2 +- 3 files changed, 432 insertions(+), 365 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 109da999..7301f0d7 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -356,7 +356,7 @@ export default function CircuitTrestleSetting({ id }) { } // ํšŒ๋กœํ• ๋‹น(์Šน์••์„ค์ •) ์ €์žฅ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ - const onApply = () => { + const onApply = async () => { canvas .getObjects() .filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) @@ -364,8 +364,7 @@ export default function CircuitTrestleSetting({ id }) { obj.pcses = getStepUpListData() }) - console.log(canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)) - apply() + const result = await apply() } const onClickPrev = () => { diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index eb7ecbc2..98113f08 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -1,5 +1,5 @@ import { useRecoilState, useRecoilValue } from 'recoil' -import { canvasState } from '@/store/canvasAtom' +import { canvasState, currentAngleTypeSelector } from '@/store/canvasAtom' import { POLYGON_TYPE } from '@/common/common' import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { getDegreeByChon, getTrestleLength } from '@/util/canvas-util' @@ -13,220 +13,207 @@ export const useTrestle = () => { const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ตœ์ข… ๋ฐ์ดํ„ฐ const { getQuotationItem } = useMasterController() const [estimateParam, setEstimateParam] = useRecoilState(estimateParamAtom) + const currentAngleType = useRecoilValue(currentAngleTypeSelector) const apply = () => { - //์ฒ˜๋งˆ๋ ฅ๋ฐ”๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ exposedBottomPoints๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋งˆ๋ ฅ๋ฐ” ๊ทธ๋ ค์ค˜์•ผํ•จ. - // exposedBottomPoints๋Š” ๋…ธ์ถœ ์ตœํ•˜๋ฉด ๋“ค์˜ centerPoint ๋ฐฐ์—ด. + try { + //์ฒ˜๋งˆ๋ ฅ๋ฐ”๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ exposedBottomPoints๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋งˆ๋ ฅ๋ฐ” ๊ทธ๋ ค์ค˜์•ผํ•จ. + // exposedBottomPoints๋Š” ๋…ธ์ถœ ์ตœํ•˜๋ฉด ๋“ค์˜ centerPoint ๋ฐฐ์—ด. - const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - // ๊ธฐ์กด eaveBar๋ฅผ ์‚ญ์ œ - canvas.getObjects().forEach((obj) => { - if (obj.name === 'eaveBar' || obj.name === 'rack' || obj.name === 'halfEaveBar' || obj.name === 'smartRack') { - canvas.remove(obj) - } - }) - canvas.getObjects().forEach((obj) => { - if (obj.name === 'bracket') { - canvas.remove(obj) - } - }) - surfaces.forEach((surface) => { - const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId) - const roofMaterialIndex = parent.roofMaterial.index - const construction = moduleSelectionData?.roofConstructions?.find((construction) => construction.roofIndex === roofMaterialIndex).construction - if (!construction) { - alert('์•ž์—์„œ ์…‹ํŒ… ์•ˆ๋จ') - return - } - - let moduleRowsTotCnt = 0 - let isEaveBar = construction.setupCover - let isSnowGuard = construction.setupSnowCover - const direction = parent.direction - const rack = surface.trestleDetail.rack - let { rackQty, rackIntvlPct, rackYn, cvrPlvrYn } = surface.trestleDetail - - if (!rack) { - //25/01/16 ๊ธฐ์ค€ ๋ž™์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ์•ˆ๊ทธ๋ ค์ค€๋‹ค. - return - } - - const rackInfos = Object.keys(rack).map((key) => { - return { key, value: rack[key] } - }) - - const result = calculateForApi(surface) - - if (!result) { - return - } - const centerPoints = result.centerPoints - - const exposedBottomModules = [] // ์•„๋ž˜ ๋‘๋ฉด์ด ๋ชจ๋‘ ๋…ธ์ถœ ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ - const leftExposedHalfBottomModules = [] // ์™ผ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ - const rightExposedHalfBottomPoints = [] // ์˜ค๋ฅธ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ - const leftExposedHalfTopModules = [] // ์™ผ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ - const rightExposedHalfTopPoints = [] // ์˜ค๋ฅธ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ - const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) - - modules.forEach((module) => { - const { x, y } = module.getCenterPoint() - const isExposedBottom = result.exposedBottomPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) - const isLeftExposedHalfBottom = result.leftExposedHalfBottomPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) - const isRightExposedHalfBottom = result.rightExposedHalfBottomPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) - const isRightExposedHalfTop = result.rightExposedHalfTopPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) - const isLeftExposedHalfTop = result.leftExposedHalfTopPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) - if (isExposedBottom) { - exposedBottomModules.push(module) - } - if (isLeftExposedHalfBottom) { - leftExposedHalfBottomModules.push(module) - } - if (isRightExposedHalfBottom) { - rightExposedHalfBottomPoints.push(module) - } - if (isRightExposedHalfTop) { - leftExposedHalfTopModules.push(module) - } - if (isLeftExposedHalfTop) { - rightExposedHalfTopPoints.push(module) - } - }) - - // 4๊ฐœ์ค‘ ํ•œ๊ฐœ๋ผ๋„ ์žˆ๋Š” ๊ฒฝ์šฐ ์น˜์กฐ๋ฐฐ์น˜๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. - const isChidory = - leftExposedHalfBottomModules.length > 0 || - rightExposedHalfBottomPoints.length > 0 || - leftExposedHalfTopModules.length > 0 || - rightExposedHalfTopPoints.length > 0 - - surface.set({ isChidory: isChidory }) - - canvas - .getObjects() - .filter((obj) => ['eaveBar', 'halfEaveBar'].includes(obj.name) && obj.parentId === surface.id) - .forEach((obj) => { + const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + // ๊ธฐ์กด eaveBar๋ฅผ ์‚ญ์ œ + canvas.getObjects().forEach((obj) => { + if (obj.name === 'eaveBar' || obj.name === 'rack' || obj.name === 'halfEaveBar' || obj.name === 'smartRack') { canvas.remove(obj) + } + }) + canvas.getObjects().forEach((obj) => { + if (obj.name === 'bracket') { + canvas.remove(obj) + } + }) + surfaces.forEach((surface) => { + const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId) + const roofMaterialIndex = parent.roofMaterial.index + const construction = moduleSelectionData?.roofConstructions?.find((construction) => construction.roofIndex === roofMaterialIndex).construction + if (!construction) { + alert('์•ž์—์„œ ์…‹ํŒ… ์•ˆ๋จ') + return + } + + let moduleRowsTotCnt = 0 + let isEaveBar = construction.setupCover + let isSnowGuard = construction.setupSnowCover + const direction = parent.direction + const rack = surface.trestleDetail.rack + let { rackQty, rackIntvlPct, rackYn, cvrPlvrYn } = surface.trestleDetail + + if (!rack) { + //25/01/16 ๊ธฐ์ค€ ๋ž™์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ์•ˆ๊ทธ๋ ค์ค€๋‹ค. + return + } + + const rackInfos = Object.keys(rack).map((key) => { + return { key, value: rack[key] } }) - if (isEaveBar) { - // ์ฒ˜๋งˆ๋ ฅ๋ฐ”์„ค์น˜ true์ธ ๊ฒฝ์šฐ ์„ค์น˜ - exposedBottomModules.forEach((module) => { - //TODO : ๋ฐฉํ–ฅ๋ณ„๋กœ ์ฒ˜๋งˆ๋ ฅ๋ฐ” ์„ค์น˜ํ•ด์•ผํ•จ - const bottomPoints = findTopTwoPoints([...module.points], direction) - if (!bottomPoints) return - const eaveBar = new fabric.Line([bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y], { - parent: surface, - name: 'eaveBar', - stroke: 'blue', - strokeWidth: 4, - selectable: false, - surfaceId: surface.id, - parentId: module.id, + const result = calculateForApi(surface) + + if (!result) { + return + } + const centerPoints = result.centerPoints + + const exposedBottomModules = [] // ์•„๋ž˜ ๋‘๋ฉด์ด ๋ชจ๋‘ ๋…ธ์ถœ ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ + const leftExposedHalfBottomModules = [] // ์™ผ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ + const rightExposedHalfBottomPoints = [] // ์˜ค๋ฅธ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ + const leftExposedHalfTopModules = [] // ์™ผ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ + const rightExposedHalfTopPoints = [] // ์˜ค๋ฅธ์ชฝ ๋ฉด๋งŒ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ + const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + + modules.forEach((module) => { + const { x, y } = module.getCenterPoint() + const isExposedBottom = result.exposedBottomPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) + const isLeftExposedHalfBottom = result.leftExposedHalfBottomPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) + const isRightExposedHalfBottom = result.rightExposedHalfBottomPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) + const isRightExposedHalfTop = result.rightExposedHalfTopPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) + const isLeftExposedHalfTop = result.leftExposedHalfTopPoints.some((point) => Math.abs(point.x - x) < 2 && Math.abs(point.y - y) < 2) + if (isExposedBottom) { + exposedBottomModules.push(module) + } + if (isLeftExposedHalfBottom) { + leftExposedHalfBottomModules.push(module) + } + if (isRightExposedHalfBottom) { + rightExposedHalfBottomPoints.push(module) + } + if (isRightExposedHalfTop) { + leftExposedHalfTopModules.push(module) + } + if (isLeftExposedHalfTop) { + rightExposedHalfTopPoints.push(module) + } + }) + + // 4๊ฐœ์ค‘ ํ•œ๊ฐœ๋ผ๋„ ์žˆ๋Š” ๊ฒฝ์šฐ ์น˜์กฐ๋ฐฐ์น˜๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. + const isChidory = + leftExposedHalfBottomModules.length > 0 || + rightExposedHalfBottomPoints.length > 0 || + leftExposedHalfTopModules.length > 0 || + rightExposedHalfTopPoints.length > 0 + + surface.set({ isChidory: isChidory }) + + canvas + .getObjects() + .filter((obj) => ['eaveBar', 'halfEaveBar'].includes(obj.name) && obj.parentId === surface.id) + .forEach((obj) => { + canvas.remove(obj) }) - canvas.add(eaveBar) - canvas.renderAll() - }) - if (isChidory && cvrPlvrYn === 'Y') { - leftExposedHalfBottomModules.forEach((module) => { + if (isEaveBar) { + // ์ฒ˜๋งˆ๋ ฅ๋ฐ”์„ค์น˜ true์ธ ๊ฒฝ์šฐ ์„ค์น˜ + exposedBottomModules.forEach((module) => { + //TODO : ๋ฐฉํ–ฅ๋ณ„๋กœ ์ฒ˜๋งˆ๋ ฅ๋ฐ” ์„ค์น˜ํ•ด์•ผํ•จ const bottomPoints = findTopTwoPoints([...module.points], direction) - let barPoints = [] - //์„ค์น˜ํ•ด์•ผํ•  ๋ฐ˜์ฒ˜๋งˆ์ปค๋ฒ„ ํฌ์ธํŠธ๋ฅผ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์„ค์ • - - if (direction === 'south') { - barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x - module.width / 2, bottomPoints[1].y] - } else if (direction === 'north') { - barPoints = [bottomPoints[0].x + module.width / 2, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y] - } else if (direction === 'east') { - barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[0].y - module.height / 2] - } else if (direction === 'west') { - barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y - module.height / 2] - } - if (!bottomPoints) return - const halfEaveBar = new fabric.Line(barPoints, { + const eaveBar = new fabric.Line([bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y], { parent: surface, - name: 'halfEaveBar', + name: 'eaveBar', stroke: 'blue', strokeWidth: 4, selectable: false, surfaceId: surface.id, parentId: module.id, }) - canvas.add(halfEaveBar) + canvas.add(eaveBar) canvas.renderAll() }) - rightExposedHalfBottomPoints.forEach((module) => { - const bottomPoints = findTopTwoPoints([...module.points], direction) - let barPoints = [] - //์„ค์น˜ํ•ด์•ผํ•  ๋ฐ˜์ฒ˜๋งˆ์ปค๋ฒ„ ํฌ์ธํŠธ๋ฅผ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์„ค์ • + if (isChidory && cvrPlvrYn === 'Y') { + leftExposedHalfBottomModules.forEach((module) => { + const bottomPoints = findTopTwoPoints([...module.points], direction) + let barPoints = [] + //์„ค์น˜ํ•ด์•ผํ•  ๋ฐ˜์ฒ˜๋งˆ์ปค๋ฒ„ ํฌ์ธํŠธ๋ฅผ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์„ค์ • - if (direction === 'south') { - barPoints = [bottomPoints[0].x + module.width / 2, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y] - } else if (direction === 'north') { - barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[0].x + module.width / 2, bottomPoints[1].y] - } else if (direction === 'east') { - barPoints = [bottomPoints[0].x, bottomPoints[1].y + module.height / 2, bottomPoints[1].x, bottomPoints[1].y] - } else if (direction === 'west') { - barPoints = [bottomPoints[0].x, bottomPoints[1].y - module.height / 2, bottomPoints[1].x, bottomPoints[1].y] - } + if (direction === 'south') { + barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x - module.width / 2, bottomPoints[1].y] + } else if (direction === 'north') { + barPoints = [bottomPoints[0].x + module.width / 2, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y] + } else if (direction === 'east') { + barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[0].y - module.height / 2] + } else if (direction === 'west') { + barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y - module.height / 2] + } - if (!bottomPoints) return - const halfEaveBar = new fabric.Line(barPoints, { - parent: surface, - name: 'halfEaveBar', - stroke: 'blue', - strokeWidth: 4, - selectable: false, - parentId: module.id, + if (!bottomPoints) return + const halfEaveBar = new fabric.Line(barPoints, { + parent: surface, + name: 'halfEaveBar', + stroke: 'blue', + strokeWidth: 4, + selectable: false, + surfaceId: surface.id, + parentId: module.id, + }) + canvas.add(halfEaveBar) + canvas.renderAll() }) - canvas.add(halfEaveBar) - canvas.renderAll() - }) + + rightExposedHalfBottomPoints.forEach((module) => { + const bottomPoints = findTopTwoPoints([...module.points], direction) + let barPoints = [] + //์„ค์น˜ํ•ด์•ผํ•  ๋ฐ˜์ฒ˜๋งˆ์ปค๋ฒ„ ํฌ์ธํŠธ๋ฅผ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์„ค์ • + + if (direction === 'south') { + barPoints = [bottomPoints[0].x + module.width / 2, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y] + } else if (direction === 'north') { + barPoints = [bottomPoints[0].x, bottomPoints[0].y, bottomPoints[0].x + module.width / 2, bottomPoints[1].y] + } else if (direction === 'east') { + barPoints = [bottomPoints[0].x, bottomPoints[1].y + module.height / 2, bottomPoints[1].x, bottomPoints[1].y] + } else if (direction === 'west') { + barPoints = [bottomPoints[0].x, bottomPoints[1].y - module.height / 2, bottomPoints[1].x, bottomPoints[1].y] + } + + if (!bottomPoints) return + const halfEaveBar = new fabric.Line(barPoints, { + parent: surface, + name: 'halfEaveBar', + stroke: 'blue', + strokeWidth: 4, + selectable: false, + parentId: module.id, + }) + canvas.add(halfEaveBar) + canvas.renderAll() + }) + } } - } - const horizontal = ['south', 'north'].includes(direction) ? surface.trestleDetail.moduleIntvlHor : surface.trestleDetail.moduleIntvlVer + const horizontal = ['south', 'north'].includes(direction) ? surface.trestleDetail.moduleIntvlHor : surface.trestleDetail.moduleIntvlVer - const vertical = ['south', 'north'].includes(direction) ? surface.trestleDetail.moduleIntvlVer : surface.trestleDetail.moduleIntvlHor + const vertical = ['south', 'north'].includes(direction) ? surface.trestleDetail.moduleIntvlVer : surface.trestleDetail.moduleIntvlHor - let mostRowsModule = 0 // ๋ชจ๋“ˆ ์ตœ๋Œ€ ๋‹จ ์ˆ˜ - // ๊ฐ€๋Œ€ ์„ค์น˜๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ์•„๋ž˜ ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ์œ„๋กœ ๋ช‡๋‹จ์ธ์ง€ ๊ณ„์‚ฐ - // ์˜ค๋ฅธ์ชฝ,์™ผ์ชฝ ๋‘˜ ๋‹ค ์•„๋ž˜์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š”, ์ฒ˜๋งˆ ์ปค๋ฒ„๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋“ˆ - exposedBottomModules.forEach((module) => { - let { width, height } = { ...module } - width = Math.floor(width) - height = Math.floor(height) - let { x: startX, y: startY } = { ...module.getCenterPoint() } - let { x, y } = { ...module.getCenterPoint() } + let mostRowsModule = 0 // ๋ชจ๋“ˆ ์ตœ๋Œ€ ๋‹จ ์ˆ˜ + // ๊ฐ€๋Œ€ ์„ค์น˜๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ์•„๋ž˜ ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ์œ„๋กœ ๋ช‡๋‹จ์ธ์ง€ ๊ณ„์‚ฐ + // ์˜ค๋ฅธ์ชฝ,์™ผ์ชฝ ๋‘˜ ๋‹ค ์•„๋ž˜์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š”, ์ฒ˜๋งˆ ์ปค๋ฒ„๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋“ˆ + exposedBottomModules.forEach((module) => { + let { width, height } = { ...module } + width = Math.floor(width) + height = Math.floor(height) + let { x: startX, y: startY } = { ...module.getCenterPoint() } + let { x, y } = { ...module.getCenterPoint() } - let leftRows = 1 - let rightRows = 1 - let centerRows = 1 - let hasNextModule = true - let findLeft = true - let findRight = true + let leftRows = 1 + let rightRows = 1 + let centerRows = 1 + let hasNextModule = true + let findLeft = true + let findRight = true - //์šฐ์„  ์ ˆ๋ฐ˜์„ ๋‚˜๋ˆˆ ๋’ค ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค. - while (hasNextModule) { - //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - - if (nextModule) { - // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. - leftRows++ - x = nextModule.x - y = nextModule.y - } else { - // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. - if (findLeft) { - nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findLeft = false - } else { - nextModule = findNextRightModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findLeft = true - } + //์šฐ์„  ์ ˆ๋ฐ˜์„ ๋‚˜๋ˆˆ ๋’ค ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค. + while (hasNextModule) { + //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) if (nextModule) { // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. @@ -234,126 +221,126 @@ export const useTrestle = () => { x = nextModule.x y = nextModule.y } else { - hasNextModule = false + // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. + if (findLeft) { + nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + findLeft = false + } else { + nextModule = findNextRightModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + findLeft = true + } + + if (nextModule) { + // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. + leftRows++ + x = nextModule.x + y = nextModule.y + } else { + hasNextModule = false + } } } - } - hasNextModule = true - x = startX - y = startY + hasNextModule = true + x = startX + y = startY - // ์˜ค๋ฅธ์ชฝ ์ฐพ๋Š”๋‹ค. - while (hasNextModule) { - //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - - if (nextModule) { - // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. - rightRows++ - x = nextModule.x - y = nextModule.y - } else { - // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. - if (findRight) { - nextModule = findNextRightModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findRight = false - } else { - nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findRight = true - } + // ์˜ค๋ฅธ์ชฝ ์ฐพ๋Š”๋‹ค. + while (hasNextModule) { + //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) if (nextModule) { // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. rightRows++ x = nextModule.x y = nextModule.y + } else { + // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. + if (findRight) { + nextModule = findNextRightModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + findRight = false + } else { + nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + findRight = true + } + + if (nextModule) { + // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. + rightRows++ + x = nextModule.x + y = nextModule.y + } else { + hasNextModule = false + } + } + } + + hasNextModule = true + x = startX + y = startY + + // ์„ผํ„ฐ ์ฐพ๋Š”๋‹ค. + while (hasNextModule) { + //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + + if (nextModule) { + // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. + centerRows++ + x = nextModule.x + y = nextModule.y } else { hasNextModule = false } } - } - hasNextModule = true - x = startX - y = startY + // ๋ชจ๋“ˆ์˜ ์™ผ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. + const leftRacks = rackInfos.find((rack) => { + return rack.value.moduleRows === leftRows + })?.value.racks - // ์„ผํ„ฐ ์ฐพ๋Š”๋‹ค. - while (hasNextModule) { - //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + // ๋ชจ๋“ˆ์˜ ์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. + const rightRacks = rackInfos.find((rack) => { + return rack.value.moduleRows === rightRows + })?.value.racks + // ํ•ด๋‹น rack์œผ๋กœ ๊ทธ๋ ค์ค€๋‹ค. - if (nextModule) { - // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. - centerRows++ - x = nextModule.x - y = nextModule.y - } else { - hasNextModule = false - } - } + const centerRacks = rackInfos.find((rack) => { + return rack.value.moduleRows === centerRows + })?.value.racks - // ๋ชจ๋“ˆ์˜ ์™ผ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. - const leftRacks = rackInfos.find((rack) => { - return rack.value.moduleRows === leftRows - })?.value.racks + mostRowsModule = Math.max(leftRows, rightRows, centerRows, mostRowsModule) - // ๋ชจ๋“ˆ์˜ ์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. - const rightRacks = rackInfos.find((rack) => { - return rack.value.moduleRows === rightRows - })?.value.racks - // ํ•ด๋‹น rack์œผ๋กœ ๊ทธ๋ ค์ค€๋‹ค. + if (rackYn === 'Y') { + drawRacks(leftRacks, rackQty, rackIntvlPct, module, direction, 'L', rackYn) + drawRacks(rightRacks, rackQty, rackIntvlPct, module, direction, 'R', rackYn) - const centerRacks = rackInfos.find((rack) => { - return rack.value.moduleRows === centerRows - })?.value.racks - - mostRowsModule = Math.max(leftRows, rightRows, centerRows, mostRowsModule) - - if (rackYn === 'Y') { - drawRacks(leftRacks, rackQty, rackIntvlPct, module, direction, 'L', rackYn) - drawRacks(rightRacks, rackQty, rackIntvlPct, module, direction, 'R', rackYn) - - if (rackQty === 3) { - //rack ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ์ธ ๊ฒฝ์šฐ๋Š” ์ค‘๊ฐ„๋ ‰๋„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•จ - drawRacks(centerRacks, rackQty, rackIntvlPct, module, direction, 'C', rackYn) - } else if (rackQty === 4) { - drawRacks(leftRacks, rackQty, rackIntvlPct / 3, module, direction, 'L', rackYn) - drawRacks(rightRacks, rackQty, rackIntvlPct / 3, module, direction, 'R', rackYn) - } - } - module.set({ leftRows, rightRows, centerRows }) - }) - // ์™ผ์ชฝ์•„๋ž˜์— ๋ชจ๋“ˆ์ด ์—†๋Š” ๋ชจ๋“ˆ๋“ค - leftExposedHalfBottomModules.forEach((module) => { - const { width, height } = module - let { x: startX, y: startY } = { ...module.getCenterPoint() } - let { x, y } = { ...module.getCenterPoint() } - //TODO : ๋ฐฉํ–ฅ๋ณ„๋กœ ๊ฐ€๋Œ€ ์„ค์น˜ํ•ด์•ผํ•จ - - let leftRows = 1 - let hasNextModule = true - let findLeft = true - - //์šฐ์„  ์ ˆ๋ฐ˜์„ ๋‚˜๋ˆˆ ๋’ค ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค. - while (hasNextModule) { - //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - - if (nextModule) { - // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. - leftRows++ - x = nextModule.x - y = nextModule.y - } else { - // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. - if (findLeft) { - nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findLeft = false - } else { - nextModule = nextModule = findNextRightModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findLeft = true + if (rackQty === 3) { + //rack ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ์ธ ๊ฒฝ์šฐ๋Š” ์ค‘๊ฐ„๋ ‰๋„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•จ + drawRacks(centerRacks, rackQty, rackIntvlPct, module, direction, 'C', rackYn) + } else if (rackQty === 4) { + drawRacks(leftRacks, rackQty, rackIntvlPct / 3, module, direction, 'L', rackYn) + drawRacks(rightRacks, rackQty, rackIntvlPct / 3, module, direction, 'R', rackYn) } + } + module.set({ leftRows, rightRows, centerRows }) + }) + // ์™ผ์ชฝ์•„๋ž˜์— ๋ชจ๋“ˆ์ด ์—†๋Š” ๋ชจ๋“ˆ๋“ค + leftExposedHalfBottomModules.forEach((module) => { + const { width, height } = module + let { x: startX, y: startY } = { ...module.getCenterPoint() } + let { x, y } = { ...module.getCenterPoint() } + //TODO : ๋ฐฉํ–ฅ๋ณ„๋กœ ๊ฐ€๋Œ€ ์„ค์น˜ํ•ด์•ผํ•จ + + let leftRows = 1 + let hasNextModule = true + let findLeft = true + + //์šฐ์„  ์ ˆ๋ฐ˜์„ ๋‚˜๋ˆˆ ๋’ค ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค. + while (hasNextModule) { + //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) if (nextModule) { // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. @@ -361,52 +348,63 @@ export const useTrestle = () => { x = nextModule.x y = nextModule.y } else { - hasNextModule = false + // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. + if (findLeft) { + nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + findLeft = false + } else { + nextModule = nextModule = findNextRightModule( + { + x, + y, + width, + height, + horizontal, + vertical, + }, + centerPoints, + direction, + ) + findLeft = true + } + + if (nextModule) { + // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. + leftRows++ + x = nextModule.x + y = nextModule.y + } else { + hasNextModule = false + } } } - } - // ๋ชจ๋“ˆ์˜ ์™ผ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. - const leftRacks = rackInfos.find((rack) => { - return rack.value.moduleRows === leftRows - })?.value.racks - mostRowsModule = Math.max(leftRows, mostRowsModule) - if (rackYn === 'Y') { - drawRacks(leftRacks, rackQty, rackIntvlPct, module, direction, 'L', rackYn) - } + // ๋ชจ๋“ˆ์˜ ์™ผ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. + const leftRacks = rackInfos.find((rack) => { + return rack.value.moduleRows === leftRows + })?.value.racks + mostRowsModule = Math.max(leftRows, mostRowsModule) + if (rackYn === 'Y') { + drawRacks(leftRacks, rackQty, rackIntvlPct, module, direction, 'L', rackYn) + } - module.set({ leftRows }) - }) - // ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์— ๋ชจ๋“ˆ์ด ์—†๋Š” ๋ชจ๋“ˆ๋“ค - rightExposedHalfBottomPoints.forEach((module) => { - const { width, height } = module - let { x: startX, y: startY } = { ...module.getCenterPoint() } - let { x, y } = { ...module.getCenterPoint() } - //TODO : ๋ฐฉํ–ฅ๋ณ„๋กœ ๊ฐ€๋Œ€ ์„ค์น˜ํ•ด์•ผํ•จ + module.set({ leftRows }) + }) + // ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์— ๋ชจ๋“ˆ์ด ์—†๋Š” ๋ชจ๋“ˆ๋“ค + rightExposedHalfBottomPoints.forEach((module) => { + const { width, height } = module + let { x: startX, y: startY } = { ...module.getCenterPoint() } + let { x, y } = { ...module.getCenterPoint() } + //TODO : ๋ฐฉํ–ฅ๋ณ„๋กœ ๊ฐ€๋Œ€ ์„ค์น˜ํ•ด์•ผํ•จ - let rightRows = 1 - let hasNextModule = true - let findRight = true + let rightRows = 1 + let hasNextModule = true + let findRight = true - // ์˜ค๋ฅธ์ชฝ ์ฐพ๋Š”๋‹ค. - while (hasNextModule) { - //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. - let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - - if (nextModule) { - // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. - rightRows++ - x = nextModule.x - y = nextModule.y - } else { - // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. - if (findRight) { - nextModule = findNextRightModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findRight = false - } else { - nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) - findRight = true - } + // ์˜ค๋ฅธ์ชฝ ์ฐพ๋Š”๋‹ค. + while (hasNextModule) { + //๋ฐ”๋กœ ์œ„์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. + let nextModule = findNextModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) if (nextModule) { // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. @@ -414,43 +412,62 @@ export const useTrestle = () => { x = nextModule.x y = nextModule.y } else { - hasNextModule = false + // ๋ฐ”๋กœ ์œ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋จผ์ € ์™ผ์ชฝ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ๋‹ค. + if (findRight) { + nextModule = findNextRightModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + findRight = false + } else { + nextModule = findNextLeftModule({ x, y, width, height, horizontal, vertical }, centerPoints, direction) + findRight = true + } + + if (nextModule) { + // ๋ฐ”๋กœ ์œ„ ๋ชจ๋“ˆ์„ ์ฐพ๋Š”๋‹ค. + rightRows++ + x = nextModule.x + y = nextModule.y + } else { + hasNextModule = false + } } } + + // ๋ชจ๋“ˆ์˜ ์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. + const rightRacks = rackInfos.find((rack) => { + return rack.value.moduleRows === rightRows + })?.value.racks + + mostRowsModule = Math.max(rightRows, mostRowsModule) + // ํ•ด๋‹น rack์œผ๋กœ ๊ทธ๋ ค์ค€๋‹ค. + if (rackYn === 'Y') { + drawRacks(rightRacks, rackQty, rackIntvlPct, module, direction, 'R', rackYn) + } + + module.set({ rightRows }) + }) + + surface.set({ moduleRowsTotCnt: mostRowsModule }) + + if (rackYn === 'N') { + // rack์ด ์—†์„๊ฒฝ์šฐ + installBracketWithOutRack(surface, exposedBottomModules, leftExposedHalfBottomModules, rightExposedHalfBottomPoints, isChidory) + } else if (rackYn === 'Y') { + installBracket(surface) } - // ๋ชจ๋“ˆ์˜ ์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ ๊ทธ๋ฆด ๋ž™ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. - const rightRacks = rackInfos.find((rack) => { - return rack.value.moduleRows === rightRows - })?.value.racks + const quotationParam = getTrestleParams(surface) - mostRowsModule = Math.max(rightRows, mostRowsModule) - // ํ•ด๋‹น rack์œผ๋กœ ๊ทธ๋ ค์ค€๋‹ค. - if (rackYn === 'Y') { - drawRacks(rightRacks, rackQty, rackIntvlPct, module, direction, 'R', rackYn) - } - - module.set({ rightRows }) + surface.set({ quotationParam }) }) - surface.set({ moduleRowsTotCnt: mostRowsModule }) - - if (rackYn === 'N') { - // rack์ด ์—†์„๊ฒฝ์šฐ - installBracketWithOutRack(surface, exposedBottomModules, leftExposedHalfBottomModules, rightExposedHalfBottomPoints, isChidory) - } else if (rackYn === 'Y') { - installBracket(surface) - } - - const quotationParam = getTrestleParams(surface) - - surface.set({ quotationParam }) - }) - setQuoationItem() + return setEstimateData() + } catch (e) { + return false + } } // itemList ์กฐํšŒ ํ›„ estimateParam์— ์ €์žฅ - const setQuoationItem = () => { + const setEstimateData = async () => { const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) //surfaces.pcses๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฌถ๋Š”๋‹ค const pcses = surfaces[0].pcses @@ -461,16 +478,67 @@ export const useTrestle = () => { }) const params = { trestles: surfaces.map((surface) => surface.quotationParam), pcses } //๊ฒฌ์ ์„œ itemList ์กฐํšŒ - getQuotationItem(params).then((res) => { - if (!res.data) { - return - } - const itemList = res.data - //northArrangement ๋ถ๋ฉด ์„ค์น˜ ์—ฌ๋ถ€ - const northArrangement = getNorthArrangement() + const res = await getQuotationItem(params) + if (!res.data) { + return false + } + const itemList = res.data + //northArrangement ๋ถ๋ฉด ์„ค์น˜ ์—ฌ๋ถ€ + const northArrangement = getNorthArrangement() + // circuitItemList์˜ ๊ฒฝ์šฐ๋Š” moduleList์—์„œ circuitId๋งŒ groupByํ•œ๋‹ค. + let circuitItemList = [] - setEstimateParam({ ...estimateParam, itemList, northArrangement }) + // roofSurfaceList ์ƒ์„ฑ + const roofSurfaceList = surfaces.map((surface) => { + const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId) + const { directionText, roofMaterial, pitch: slope, moduleCompass, surfaceCompass } = parent + const roofMaterialIndex = parent.roofMaterial.index + const { nameJp: roofMaterialIdMulti } = roofMaterial + const moduleSelection = moduleSelectionData?.roofConstructions?.find((construction) => construction.roofIndex === roofMaterialIndex) + const { constTp: constructSpecification, constTpJp: constructSpecificationMulti } = moduleSelection.construction + const { + trestleMkrCd, + constMthdCd: supportMethodId, + roofBaseCd, + trestleMkrCdJp: supportMeaker, + constMthdCdJp: supportMethodIdMulti, + } = moduleSelection.trestle + + const modules = surface.modules + const moduleList = modules.map((module) => { + circuitItemList.push(module.pcsItemId) + return { + itemId: module.moduleInfo.itemId, + circuit: module.circuitNumber, + pcItemId: module.pcsItemId, + } + }) + + return { + roofSurfaceId: surface.id, + roofSurface: directionText.replace(/[^0-9]/g, ''), + roofMaterialId: roofMaterial.roofMatlCd, + supportMethodId, + constructSpecification, + constructSpecificationMulti, + roofMaterialIdMulti, + supportMethodIdMulti, + supportMeaker, + slope, + classType: currentAngleType === 'slope' ? '0' : '1', + angle: getDegreeByChon(slope), + azimuth: surfaceCompass ?? moduleCompass ?? 0, + moduleList, + } }) + + // circuitItemList ์ค‘๋ณต์ œ๊ฑฐ + circuitItemList = circuitItemList.filter((item, index) => circuitItemList.indexOf(item) === index) + + setEstimateParam({ ...estimateParam, itemList, northArrangement, roofSurfaceList, circuitItemList }) + + // ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ ๋˜๋ฉด true ๋ฐ˜ํ™˜ + return true } const getNorthArrangement = () => { diff --git a/src/store/estimateAtom.js b/src/store/estimateAtom.js index 20cdaa7c..410921fc 100644 --- a/src/store/estimateAtom.js +++ b/src/store/estimateAtom.js @@ -14,7 +14,7 @@ export const estimateParamAtom = atom({ standardWindSpeedId: '', snowfall: '', northArrangement: '', - drawingFlg: '', + drawingFlg: '1', userId: '', roofSurfaceList: [], circuitItemList: [], From d52367107488d54ae7eabf5a1a43942a5d075a9e Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 4 Feb 2025 13:21:25 +0900 Subject: [PATCH 023/213] =?UTF-8?q?=EC=A7=80=EB=B6=95=EB=A9=B4=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=EC=95=88=EB=90=98=EB=8A=94=20=EA=B2=BD=EC=9A=B0=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/hooks/roofcover/useRoofAllocationSetting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index ee865d65..88af737b 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -273,7 +273,7 @@ export function useRoofAllocationSetting(id) { setRoofList(newRoofList) const selectedRoofMaterial = newRoofList.find((roof) => roof.selected) - setSurfaceShapePattern(currentObject, roofDisplay.column, false, selectedRoofMaterial) + setSurfaceShapePattern(currentObject, roofDisplay.column, false, selectedRoofMaterial, true) modifyModuleSelectionData() closeAll() } From 2ba2a67f3fde1c5fe025bff6ec5c780a05e60012 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Tue, 4 Feb 2025 13:22:22 +0900 Subject: [PATCH 024/213] =?UTF-8?q?=F0=9F=9A=A8fix:=20canvas=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePlan.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index 6b468405..b904611d 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -129,7 +129,7 @@ export function usePlan(params = {}) { * objectNo์— ํ•ด๋‹นํ•˜๋Š” canvas ๋ชฉ๋ก์„ ์กฐํšŒ */ const getCanvasByObjectNo = async (userId, objectNo, planNo) => { - return await get({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}/${userId}` }).then((res) => + return await get({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}` }).then((res) => res.map((item) => ({ id: item.id, objectNo: item.objectNo, From 2cffd3540f02790ceab859dc25a4b3570968bdab Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 4 Feb 2025 13:23:05 +0900 Subject: [PATCH 025/213] =?UTF-8?q?=EC=B4=8C=EC=88=98=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=20=EC=95=88=EB=90=98=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useRoofAllocationSetting.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index 88af737b..6471f644 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -274,6 +274,7 @@ export function useRoofAllocationSetting(id) { setRoofList(newRoofList) const selectedRoofMaterial = newRoofList.find((roof) => roof.selected) setSurfaceShapePattern(currentObject, roofDisplay.column, false, selectedRoofMaterial, true) + drawDirectionArrow(currentObject) modifyModuleSelectionData() closeAll() } From eace9074123c4083b580c6bcc81417e99fea11fb Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Tue, 4 Feb 2025 13:38:14 +0900 Subject: [PATCH 026/213] =?UTF-8?q?=EB=8F=99,=EC=84=9C,=EB=82=A8,=EB=B6=81?= =?UTF-8?q?=20=EC=9D=BC=EB=B3=B8=EC=96=B4=20=EB=B2=88=EC=97=AD=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/ja.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/ja.json b/src/locales/ja.json index 0d13f153..067b92a6 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -515,9 +515,9 @@ "common.finish": "ๅฎŒไบ†", "common.ok": "็ขบ่ช", "common.cancel": "ใ‚ญใƒฃใƒณใ‚ปใƒซ", - "commons.west": "็ซ‹ใค", - "commons.east": "ใƒ‰ใƒณ", - "commons.south": "M", + "commons.west": "่ฅฟ", + "commons.east": "ๆฑ", + "commons.south": "ๅ—", "commons.north": "ๅŒ—", "commons.none": "้ธๆŠžใ—ใชใ„", "common.type": "ๅˆ†้กž", From 9a074b9c43cabd5a4c6c1951829c3ce9884523db Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 4 Feb 2025 14:00:42 +0900 Subject: [PATCH 027/213] =?UTF-8?q?key=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 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 98113f08..083c24c3 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -534,6 +534,11 @@ export const useTrestle = () => { // circuitItemList ์ค‘๋ณต์ œ๊ฑฐ circuitItemList = circuitItemList.filter((item, index) => circuitItemList.indexOf(item) === index) + circuitItemList = circuitItemList.map((circuitId) => { + return { + itemId: circuitId, + } + }) setEstimateParam({ ...estimateParam, itemList, northArrangement, roofSurfaceList, circuitItemList }) From 016a432eab5f3cc683a78a53c748aa611260052e Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Tue, 4 Feb 2025 14:18:11 +0900 Subject: [PATCH 028/213] =?UTF-8?q?QSelectBox=20=ED=95=9C/=EC=9D=BC=20?= =?UTF-8?q?=EC=96=B8=EC=96=B4=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 8 ++++++-- .../modal/placementShape/PlacementShapeSetting.jsx | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 52afaf8e..5611f296 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -508,8 +508,12 @@ export default function CanvasMenu(props) {
{ { + return { ...roof, name: globalLocale === 'ko' ? roof.roofMatlNm : roof.roofMatlNmJp } + })} + //showKey={'roofMatlNm'} + showKey={'name'} value={selectedRoofMaterial} onChange={changeSelectedRoofMaterial} sourceKey={'index'} diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index 1a5ea92a..5439b303 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -258,7 +258,11 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, set
{ From b2a17d21f8b30d6380837542fecf20c5e65e7adf Mon Sep 17 00:00:00 2001 From: yjnoh Date: Tue, 4 Feb 2025 14:46:14 +0900 Subject: [PATCH 029/213] =?UTF-8?q?=EB=B6=81=EB=A9=B4=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=20=EB=B6=88=EA=B0=80=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/select/QSelectBox.jsx | 9 +- src/components/floor-plan/CanvasMenu.jsx | 23 +- .../floor-plan/modal/basic/BasicSetting.jsx | 2 +- .../modal/basic/step/ModuleTabContents.jsx | 6 +- .../floor-plan/modal/basic/step/Placement.jsx | 5 +- src/hooks/common/useMasterController.js | 4 +- src/hooks/module/useModuleBasicSetting.js | 284 +++++++++++++++++- src/hooks/module/useModulePlace.js | 210 +------------ src/hooks/module/useModuleSelection.js | 15 + src/hooks/module/useModuleTabContents.js | 1 + src/locales/ko.json | 3 +- 11 files changed, 332 insertions(+), 230 deletions(-) diff --git a/src/components/common/select/QSelectBox.jsx b/src/components/common/select/QSelectBox.jsx index 12c72b5e..f1041da3 100644 --- a/src/components/common/select/QSelectBox.jsx +++ b/src/components/common/select/QSelectBox.jsx @@ -1,6 +1,7 @@ 'use client' import { useEffect, useRef, useState } from 'react' import { useOnClickOutside } from 'usehooks-ts' +import { useMessage } from '@/hooks/useMessage' /** * @@ -26,13 +27,15 @@ export default function QSelectBox({ showKey = '', params = {}, }) { + const { getMessage } = useMessage() + /** * ์ดˆ๊ธฐ ์ƒํƒœ ์ฒ˜๋ฆฌ * useState ์ดˆ๊ธฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์„œ useState ๋ณด๋‹ค ์œ„์— ์ž‘์„ฑ * @returns {string} ์ดˆ๊ธฐ ์ƒํƒœ */ const handleInitState = () => { - if (options.length === 0) return title !== '' ? title : '์„ ํƒํ•˜์„ธ์š”.' + if (options.length === 0) return title !== '' ? title : getMessage('selectbox.title') if (showKey !== '' && !value) { //value๊ฐ€ ์—†์œผ๋ฉด showKey๊ฐ€ ์žˆ์œผ๋ฉด ์šฐ์„  ๋ณด์—ฌ์ค€๋‹ค // return options[0][showKey] @@ -44,13 +47,13 @@ export default function QSelectBox({ return option[sourceKey] === value[targetKey] }) if (!option) { - return title !== '' ? title : '์„ ํƒํ•˜์„ธ์š”.' + return title !== '' ? title : getMessage('selectbox.title') } else { return option[showKey] } } else { //์ผ์น˜ํ•˜๋Š” ์กฐ๊ฑด์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค. - return title !== '' ? title : '์„ ํƒํ•˜์„ธ์š”.' + return title !== '' ? title : getMessage('selectbox.title') } } diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 52afaf8e..4dd46ea3 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -25,26 +25,29 @@ import { useCommonUtils } from '@/hooks/common/useCommonUtils' import useMenu from '@/hooks/common/useMenu' import { useEstimateController } from '@/hooks/floorPlan/estimate/useEstimateController' import { useAxios } from '@/hooks/useAxios' -import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' import { canvasSettingState, canvasState, canvasZoomState, currentMenuState, verticalHorizontalModeState } from '@/store/canvasAtom' import { sessionStore } from '@/store/commonAtom' import { outerLinePointsState } from '@/store/outerLineAtom' import { appMessageStore, globalLocaleStore } from '@/store/localeAtom' -import { addedRoofsState, basicSettingState, selectedRoofMaterialSelector, settingModalFirstOptionsState } from '@/store/settingAtom' +import { + addedRoofsState, + basicSettingState, + corridorDimensionSelector, + selectedRoofMaterialSelector, + settingModalFirstOptionsState, +} from '@/store/settingAtom' import { placementShapeDrawingPointsState } from '@/store/placementShapeDrawingAtom' import { commonUtilsState } from '@/store/commonUtilsAtom' import { menusState, menuTypeState } from '@/store/menuAtom' import { estimateState, floorPlanObjectState } from '@/store/floorPlanObjectAtom' import { pwrGnrSimTypeState } from '@/store/simulatorAtom' import { isObjectNotEmpty } from '@/util/common-utils' +import { POLYGON_TYPE } from '@/common/common' import KO from '@/locales/ko.json' import JA from '@/locales/ja.json' -import { MENU, POLYGON_TYPE } from '@/common/common' - import { QcastContext } from '@/app/QcastProvider' - export default function CanvasMenu(props) { const { menuNumber, setMenuNumber } = props const pathname = usePathname() @@ -238,6 +241,16 @@ export default function CanvasMenu(props) { if (menuNumber === 1) { onClickPlacementInitialMenu() } + if (menuNumber === 3) { + const moduleSurfacesArray = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + if (moduleSurfacesArray.length > 0) { + moduleSurfacesArray.forEach((moduleSurface) => { + moduleSurface.modules = [] + canvas.remove(moduleSurface) + }) + canvas.renderAll() + } + } }, [menuNumber, type]) // ์ €์žฅ๋ฒ„ํŠผ(btn08) ํด๋ฆญ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index f4fc830d..67e2faa1 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -34,7 +34,7 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) // const { initEvent } = useContext(EventContext) - const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting() + const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting(1) const { updateObjectDate } = useMasterController() const handleBtnNextStep = () => { if (tabNum === 1) { diff --git a/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx b/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx index 706fad9f..149ffbd9 100644 --- a/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx +++ b/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx @@ -120,7 +120,7 @@ export default function ModuleTabContents({ tabIndex, addRoof, setAddedRoofs, ro value={selectedTrestle} sourceKey={'trestleMkrCd'} targetKey={'trestleMkrCd'} - showKey={'trestleMkrCdNm'} + showKey={'trestleMkrCdJp'} onChange={handleChangeTrestle} /> )} @@ -138,7 +138,7 @@ export default function ModuleTabContents({ tabIndex, addRoof, setAddedRoofs, ro value={selectedConstMthd} sourceKey={'constMthdCd'} targetKey={'constMthdCd'} - showKey={'constMthdCdNm'} + showKey={'constMthdCdJp'} onChange={handleChangeConstMthd} /> )} @@ -156,7 +156,7 @@ export default function ModuleTabContents({ tabIndex, addRoof, setAddedRoofs, ro value={selectedRoofBase} sourceKey={'roofBaseCd'} targetKey={'roofBaseCd'} - showKey={'roofBaseCdNm'} + showKey={'roofBaseCdJp'} onChange={handleChangeRoofBase} /> )} diff --git a/src/components/floor-plan/modal/basic/step/Placement.jsx b/src/components/floor-plan/modal/basic/step/Placement.jsx index eff568cd..d7d31ffa 100644 --- a/src/components/floor-plan/modal/basic/step/Placement.jsx +++ b/src/components/floor-plan/modal/basic/step/Placement.jsx @@ -4,20 +4,17 @@ import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' import { checkedModuleState, currentCanvasPlanState } from '@/store/canvasAtom' import { useRecoilValue, useSetRecoilState } from 'recoil' import { moduleSelectionDataState } from '@/store/selectedModuleOptions' -import { useModulePlace } from '@/hooks/module/useModulePlace' const Placement = forwardRef((props, refs) => { const { getMessage } = useMessage() const [isChidori, setIsChidori] = useState(false) const [isChidoriNotAble, setIsChidoriNotAble] = useState(false) - const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) const [setupLocation, setSetupLocation] = useState('center') const [isMaxSetup, setIsMaxSetup] = useState('false') const [selectedItems, setSelectedItems] = useState({}) - const { makeModuleInstArea } = useModuleBasicSetting() - const { selectedModules } = useModulePlace() + const { selectedModules } = useModuleBasicSetting(3) const setCheckedModules = useSetRecoilState(checkedModuleState) const moduleSelectionData = useRecoilValue(moduleSelectionDataState) diff --git a/src/hooks/common/useMasterController.js b/src/hooks/common/useMasterController.js index b090df81..f2ca3adf 100644 --- a/src/hooks/common/useMasterController.js +++ b/src/hooks/common/useMasterController.js @@ -229,9 +229,7 @@ export function useMasterController() { * @returns */ const updateObjectDate = async (params = null) => { - return await put({ url: '/api/object/update-object-date', data: params }).then((res) => { - console.log('updateObjectDate', res) - }) + return await put({ url: '/api/object/update-object-date', data: params }) } return { diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index f003982c..20575fd7 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -1,5 +1,6 @@ +import { useState } from 'react' import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' -import { canvasSettingState, canvasState, checkedModuleState, isManualModuleSetupState, selectedModuleState } from '@/store/canvasAtom' +import { canvasSettingState, canvasState, checkedModuleState, isManualModuleSetupState } from '@/store/canvasAtom' import { rectToPolygon, polygonToTurfPolygon, calculateVisibleModuleHeight, getDegreeByChon } from '@/util/canvas-util' import { basicSettingState, roofDisplaySelector } from '@/store/settingAtom' import offsetPolygon, { calculateAngle } from '@/util/qpolygon-utils' @@ -15,14 +16,17 @@ import { useRoofFn } from '@/hooks/common/useRoofFn' import { useEffect } from 'react' import { useMessage } from '@/hooks/useMessage' import { moduleStatisticsState } from '@/store/circuitTrestleAtom' +import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' +import { useMasterController } from '@/hooks/common/useMasterController' +import { v4 as uuidv4 } from 'uuid' -export function useModuleBasicSetting() { +export function useModuleBasicSetting(tabNum) { const canvas = useRecoilValue(canvasState) const { getMessage } = useMessage() const roofDisplay = useRecoilValue(roofDisplaySelector) const [moduleSetupSurface, setModuleSetupSurface] = useRecoilState(moduleSetupSurfaceState) const [moduleIsSetup, setModuleIsSetup] = useRecoilState(moduleIsSetupState) - const { addCanvasMouseEventListener, initEvent, removeMouseEvent } = useEvent() + const { addCanvasMouseEventListener, initEvent, removeMouseEvent, addTargetMouseEventListener } = useEvent() const { swalFire } = useSwal() const compasDeg = useRecoilValue(compasDegAtom) @@ -34,6 +38,13 @@ export function useModuleBasicSetting() { const canvasSetting = useRecoilValue(canvasSettingState) + const moduleSelectionData = useRecoilValue(moduleSelectionDataState) + const [trestleDetailParams, setTrestleDetailParams] = useState([]) + const [trestleDetailList, setTrestleDetailList] = useState([]) + const selectedModules = useRecoilValue(selectedModuleState) + const { getTrestleDetailList } = useMasterController() + const [saleStoreNorthFlg, setSaleStoreNorthFlg] = useState(false) + useEffect(() => { // console.log('basicSetting', basicSetting) if (canvas) { @@ -47,6 +58,247 @@ export function useModuleBasicSetting() { // const { addTargetMouseEventListener, addCanvasMouseEventListener, initEvent } = useContext(EventContext) + //๋ชจ๋“ˆ ์„ ํƒ์—์„œ ์„ ํƒ๋œ ๊ฐ’๋“ค ๋„˜์–ด์˜ด + useEffect(() => { + if (moduleSelectionData && tabNum === 3) { + const common = moduleSelectionData.common + + const roofConstructions = moduleSelectionData.roofConstructions + + const listParams = roofConstructions.map((item) => { + return { + ...common, + moduleTpCd: selectedModules.itemTp, + roofMatlCd: item.trestle.roofMatlCd, + trestleMkrCd: item.trestle.trestleMkrCd, + constMthdCd: item.trestle.constMthdCd, + roofBaseCd: item.trestle.roofBaseCd, + constTp: item.construction.constTp, + mixMatlNo: selectedModules.mixMatlNo, + roofPitch: item.addRoof.hajebichi ? item.addRoof.hajebichi : 0, + inclCd: String(item.addRoof.pitch), + roofIndex: item.addRoof.index, + workingWidth: item.addRoof.lenBase, + } + }) + setTrestleDetailParams(listParams) + + //๋ถ๋ฉด ์„ค์น˜ ๊ฐ€๋Šฅ ํŒ๋งค์  + if (moduleSelectionData.common.saleStoreNorthFlg === '1') { + setSaleStoreNorthFlg(true) + } + } + }, [moduleSelectionData]) + + //๊ฐ€๋Œ€ ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์กฐํšŒ + const getTrestleDetailListData = async () => { + const trestleDetailList = await getTrestleDetailList(trestleDetailParams) + if (trestleDetailList.length > 0) { + setTrestleDetailList(trestleDetailList) + } + } + + //๊ฐ€๋Œ€ ์ƒ์„ธ ๋ฐ์ดํ„ฐ ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋‹ด๊ธฐ๋ฉด ์‹คํ–‰ + useEffect(() => { + if (trestleDetailParams.length > 0) { + getTrestleDetailListData(trestleDetailParams) + } + }, [trestleDetailParams]) + + //๊ฐ€๋Œ€ ์ƒ์„ธ ๋ฐ์ดํ„ฐ ๋“ค์–ด์˜ค๋ฉด ์‹คํ–‰ + useEffect(() => { + if (trestleDetailList.length > 0) { + //์ง€๋ถ•์„ ๊ฐ€์ ธ์˜ด + canvas + .getObjects() + .filter((roof) => roof.name === 'roof') + .forEach((roof) => { + const roofIndex = roof.roofMaterial.index //์ง€๋ถ•์˜ ์ง€๋ถ•์žฌ์˜ ์ˆœ๋ฒˆ + trestleDetailList.forEach((detail) => { + if (detail.data !== null) { + if (Number(detail.data.roofIndex) === roofIndex) { + //roof์— ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ + roof.set({ trestleDetail: detail.data }) + //๋ฐฐ์น˜๋ฉด ์„ค์น˜ ์˜์—ญ + makeModuleInstArea(roof, detail.data) + //surface์— ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ + } else { + console.log('๊ฐ€๋Œ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋„ค์š”...') + } + } + }) + }) + } + }, [trestleDetailList]) + + //๊ฐ€๋Œ€ ์ƒ์„ธ ๋ฐ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“ˆ ์„ค์น˜ ๋ฐฐ์น˜๋ฉด ์ƒ์„ฑ + const makeModuleInstArea = (roof, trestleDetail) => { + //์ง€๋ถ• ๊ฐ์ฒด ๋ฐ˜ํ™˜ + + if (!roof) { + return + } + + //๋„๋จธ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ์•„์›ƒ๋ผ์ธ ๋‚ธ๋‹ค + const batchObjects = canvas + ?.getObjects() + .filter( + (obj) => + obj.name === BATCH_TYPE.OPENING || + obj.name === BATCH_TYPE.SHADOW || + obj.name === BATCH_TYPE.TRIANGLE_DORMER || + obj.name === BATCH_TYPE.PENTAGON_DORMER, + ) //๋„๋จธs ๊ฐ์ฒด + + //๋„๋จธ๋„ ์™ธ๊ณฝ์„ ๋”ฐ์•ผํ•œ๋‹ค + const batchObjectOptions = { + stroke: 'red', + fill: 'transparent', + strokeDashArray: [10, 4], + strokeWidth: 1, + lockMovementX: true, + lockMovementY: true, + lockRotation: true, + lockScalingX: true, + lockScalingY: true, + selectable: true, + name: POLYGON_TYPE.OBJECT_SURFACE, + originX: 'center', + originY: 'center', + } + + //๋„๋จธ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ์•„์›ƒ๋ผ์ธ ๋‚ธ๋‹ค + batchObjects.forEach((obj) => { + //๋„๋จธ์ผ๋•Œ + if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) { + const groupPoints = obj.groupPoints + const offsetObjects = offsetPolygon(groupPoints, 10) + const dormerOffset = new QPolygon(offsetObjects, batchObjectOptions) + dormerOffset.setViewLengthText(false) + canvas.add(dormerOffset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ + } else { + //๊ฐœ๊ตฌ, ๊ทธ๋ฆผ์ž์ผ๋•Œ + const points = obj.points + const offsetObjects = offsetPolygon(points, 10) + const offset = new QPolygon(offsetObjects, batchObjectOptions) + offset.setViewLengthText(false) + canvas.add(offset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ + } + }) + + const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id) + if (isExistSurface) { + return + } + + let offsetLength = canvasSetting.roofSizeSet === 3 ? -90 : (trestleDetail.eaveIntvl / 10) * -1 + setSurfaceShapePattern(roof, roofDisplay.column, true) //ํŒจํ„ด ๋ณ€๊ฒฝ + const offsetPoints = offsetPolygon(roof.points, offsetLength) //์•ˆ์ชฝ offset + //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ + + const surfaceId = uuidv4() + + let isNorth = false + + //๋ถ๋ฉด์ด ์žˆ์ง€๋งŒ + if (roof.directionText && roof.directionText.indexOf('ๅŒ—') > -1) { + //๋ถ์ชฝ์ผ๋•Œ ํ•ด๋‹น ์„œ๋ถ์„œ, ๋™๋ถ๋™์€ ์ œ์™ธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค + if (!(roof.directionText.indexOf('่ฅฟๅŒ—่ฅฟ') > -1 || roof.directionText.indexOf('ๆฑๅŒ—ๆฑ') > -1)) { + isNorth = true + } + } + + //๋ชจ๋“ˆ์„ค์น˜๋ฉด ์ƒ์„ฑ + let setupSurface = new QPolygon(offsetPoints, { + stroke: 'red', + fill: 'rgba(255,255,255,0.1)', + strokeDashArray: [10, 4], + strokeWidth: 1, + lockMovementX: true, + lockMovementY: true, + lockRotation: true, + lockScalingX: true, + lockScalingY: true, + selectable: true, + parentId: roof.id, //๊ฐ€๋Œ€ ํด๋ฆฌ๊ณค์˜ ์ž„์‹œ ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์คŒ + name: POLYGON_TYPE.MODULE_SETUP_SURFACE, + flowDirection: roof.direction, + direction: roof.direction, + flipX: roof.flipX, + flipY: roof.flipY, + surfaceId: surfaceId, + originX: 'center', + originY: 'center', + modules: [], + roofMaterial: roof.roofMaterial, + trestleDetail: trestleDetail, + isNorth: isNorth, + perPixelTargetFind: true, + // angle: -compasDeg, + }) + + setupSurface.setViewLengthText(false) + canvas.add(setupSurface) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ + + //์ง€๋ถ•๋ฉด ์„ ํƒ ๊ธˆ์ง€ + roof.set({ + selectable: false, //์„ ํƒ ๊ธˆ์ง€ + evented: false, //ํด๋ฆญ ์ด๋ฒคํŠธ๋„ ๊ธˆ์ง€ + }) + + canvas.renderAll() + + //๋ชจ๋“ˆ์„ค์น˜๋ฉด ํด๋ฆญ์ด๋ฒคํŠธ + addTargetMouseEventListener('mousedown', setupSurface, function () { + toggleSelection(setupSurface) + }) + } + + let selectedModuleInstSurfaceArray = [] + + //์„ค์น˜ ๋ฒ”์œ„ ์ง€์ • ํด๋ฆญ ์ด๋ฒคํŠธ + const toggleSelection = (setupSurface) => { + const isExist = selectedModuleInstSurfaceArray.some((obj) => obj.parentId === setupSurface.parentId) + //์ตœ์ดˆ ์„ ํƒ์ผ๋•Œ + if (!isExist) { + //์„ค์น˜๋ฉด์ด ๋ถ๋ฉด์ด๊ณ  ๋ถ๋ฉด์„ค์น˜ ํ—ˆ์šฉ์ ์ด ์•„๋‹ˆ๋ฉด + if (setupSurface.isNorth && !saleStoreNorthFlg) { + swalFire({ text: getMessage('module.not.batch.north'), icon: 'warning' }) + return + } + + //๊ธฐ๋ณธ ์„ ํƒ์ด๋ž‘ ์ŠคํŠธ๋กœํฌ ๊ตต๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ์„ ํƒ ์•ˆ๋จ์œผ๋กœ ๋ด„ + setupSurface.set({ + ...setupSurface, + strokeWidth: 3, + strokeDashArray: [0], + fill: 'rgba(255,255,255,0.1)', + }) + canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ + //์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š”๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ + + canvas?.renderAll() + selectedModuleInstSurfaceArray.push(setupSurface) + } else { + //์„ ํƒํ›„ ์žฌ์„ ํƒํ•˜๋ฉด ์„ ํƒ์•ˆ๋จ์œผ๋กœ ๋ณ€๊ฒฝ + setupSurface.set({ + ...setupSurface, + fill: 'rgba(255,255,255,0.1)', + strokeDashArray: [10, 4], + strokeWidth: 1, + }) + canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ + + //ํด๋ฆฌ๊ณค์— ์ปค์Šคํ…€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ•จ + const removeIndex = setupSurface.parentId + const removeArrayIndex = selectedModuleInstSurfaceArray.findIndex((obj) => obj.parentId === removeIndex) + selectedModuleInstSurfaceArray.splice(removeArrayIndex, 1) + } + + canvas?.renderAll() + setModuleSetupSurface([...selectedModuleInstSurfaceArray]) + } + //๋ชจ๋“ˆ,ํšŒ๋กœ์—์„œ ๋‹ค๋ฅธ๋ฉ”๋‰ด -> ๋ฐฐ์น˜๋ฉด์œผ๋กœ ๊ฐˆ ๊ฒฝ์ˆ˜ ์ดˆ๊ธฐํ™” const restoreModuleInstArea = () => { //์„ค์น˜๋ฉด ์‚ญ์ œ @@ -76,6 +328,7 @@ export function useModuleBasicSetting() { */ const manualModuleSetup = () => { // console.log('isManualModuleSetup', isManualModuleSetup) + const moduleSetupSurfaces = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) //๋ชจ๋“ˆ์„ค์น˜๋ฉด๋ฅผ ๊ฐ€์ ธ์˜ด if (isManualModuleSetup) { if (checkedModule.length === 0) { @@ -90,8 +343,14 @@ export function useModuleBasicSetting() { return } - const moduleSetupSurfaces = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) //๋ชจ๋“ˆ์„ค์น˜๋ฉด๋ฅผ ๊ฐ€์ ธ์˜ด const batchObjects = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.OBJECT_SURFACE) //๋„๋จธs ๊ฐ์ฒด + //์ˆ˜๋™๋ชจ๋“œ ๋ชจ๋“ˆ ์„ค์น˜๋ฉด ์„ ํƒ ์ž ๊ธˆ + moduleSetupSurfaces.forEach((obj) => { + obj.set({ + selectable: false, + evented: false, + }) + }) const moduleOptions = { fill: checkedModule[0].color, @@ -168,7 +427,12 @@ export function useModuleBasicSetting() { parentId: moduleSetupSurfaces[i].parentId, }) - canvas?.add(tempModule) //์›€์ง์—ฌ๊ฐ€๋ฉด์„œ ์ถ”๊ฐ€๋จ + //๋ถ๋ฉด์ด๊ณ  ๋ถ๋ฉด์„ค์น˜์ƒ์ ์ด ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ return + if (trestlePolygon.isNorth && !saleStoreNorthFlg) { + return + } else { + canvas?.add(tempModule) //์›€์ง์—ฌ๊ฐ€๋ฉด์„œ ์ถ”๊ฐ€๋จ + } /** * ์Šค๋ƒ…๊ธฐ๋Šฅ @@ -361,6 +625,7 @@ export function useModuleBasicSetting() { const isOverlap = manualDrawModules.some((module) => turf.booleanOverlap(tempTurfModule, polygonToTurfPolygon(module))) //๊ฒน์น˜๋Š”์ง€ ํ™•์ธ if (!isOverlap) { canvas?.remove(tempModule) + //์•ˆ๊ฒน์น˜๋ฉด ๋„ฃ๋Š”๋‹ค // tempModule.setCoords() moduleOptions.surfaceId = trestlePolygon.id @@ -379,6 +644,14 @@ export function useModuleBasicSetting() { }) } } else { + //์ˆ˜๋™๋ชจ๋“œ ํ•ด์ œ์‹œ ๋ชจ๋“ˆ ์„ค์น˜๋ฉด ์„ ํƒ ์ž ๊ธˆ + moduleSetupSurfaces.forEach((obj) => { + obj.set({ + selectable: true, + evented: true, + }) + }) + removeMouseEvent('mouse:up') removeMouseEvent('mouse:move') canvas?.remove(...canvas?.getObjects().filter((obj) => obj.name === 'tempModule')) //์›€์ง์ผ๋•Œ ์ผ๋‹จ ์ง€์›Œ๊ฐ€๋ฉด์„œ ์›€์ง์ž„ @@ -2209,6 +2482,7 @@ export function useModuleBasicSetting() { } return { + selectedModules, manualModuleSetup, autoModuleSetup, restoreModuleInstArea, diff --git a/src/hooks/module/useModulePlace.js b/src/hooks/module/useModulePlace.js index bc9913f6..38e628a0 100644 --- a/src/hooks/module/useModulePlace.js +++ b/src/hooks/module/useModulePlace.js @@ -10,6 +10,8 @@ import offsetPolygon from '@/util/qpolygon-utils' import { v4 as uuidv4 } from 'uuid' import { QPolygon } from '@/components/fabric/QPolygon' import { useEvent } from '@/hooks/useEvent' +import { useSwal } from '@/hooks/useSwal' +import { useMessage } from '@/hooks/useMessage' export function useModulePlace() { const canvas = useRecoilValue(canvasState) @@ -23,211 +25,9 @@ export function useModulePlace() { const roofDisplay = useRecoilValue(roofDisplaySelector) const { addTargetMouseEventListener } = useEvent() const setModuleSetupSurface = useSetRecoilState(moduleSetupSurfaceState) - - useEffect(() => { - if (moduleSelectionData) { - const common = moduleSelectionData.common - const roofConstructions = moduleSelectionData.roofConstructions - - const listParams = roofConstructions.map((item) => { - return { - ...common, - moduleTpCd: selectedModules.itemTp, - roofMatlCd: item.trestle.roofMatlCd, - trestleMkrCd: item.trestle.trestleMkrCd, - constMthdCd: item.trestle.constMthdCd, - roofBaseCd: item.trestle.roofBaseCd, - constTp: item.construction.constTp, - mixMatlNo: selectedModules.mixMatlNo, - roofPitch: item.addRoof.hajebichi ? item.addRoof.hajebichi : 0, - inclCd: String(item.addRoof.pitch), - roofIndex: item.addRoof.index, - workingWidth: item.addRoof.lenBase, - } - }) - setTrestleDetailParams(listParams) - } - }, [moduleSelectionData]) - - const getTrestleDetailListData = async () => { - const trestleDetailList = await getTrestleDetailList(trestleDetailParams) - if (trestleDetailList.length > 0) { - setTrestleDetailList(trestleDetailList) - } - } - - useEffect(() => { - if (trestleDetailParams.length > 0) { - getTrestleDetailListData(trestleDetailParams) - } - }, [trestleDetailParams]) - - useEffect(() => { - if (trestleDetailList.length > 0) { - //์ง€๋ถ•์„ ๊ฐ€์ ธ์˜ด - canvas - .getObjects() - .filter((roof) => roof.name === 'roof') - .forEach((roof) => { - const roofIndex = roof.roofMaterial.index //์ง€๋ถ•์˜ ์ง€๋ถ•์žฌ์˜ ์ˆœ๋ฒˆ - trestleDetailList.forEach((detail) => { - if (detail.data !== null) { - if (Number(detail.data.roofIndex) === roofIndex) { - //roof์— ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ - roof.set({ trestleDetail: detail.data }) - //๋ฐฐ์น˜๋ฉด ์„ค์น˜ ์˜์—ญ - makeModuleInstArea(roof, detail.data) - //surface์— ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ - } else { - console.log('๊ฐ€๋Œ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋„ค์š”...') - } - } - }) - }) - } - }, [trestleDetailList]) - - const makeModuleInstArea = (roof, trestleDetail) => { - //์ง€๋ถ• ๊ฐ์ฒด ๋ฐ˜ํ™˜ - - if (!roof) { - return - } - - const batchObjects = canvas - ?.getObjects() - .filter( - (obj) => - obj.name === BATCH_TYPE.OPENING || - obj.name === BATCH_TYPE.SHADOW || - obj.name === BATCH_TYPE.TRIANGLE_DORMER || - obj.name === BATCH_TYPE.PENTAGON_DORMER, - ) //๋„๋จธs ๊ฐ์ฒด - - //๋„๋จธ๋„ ์™ธ๊ณฝ์„ ๋”ฐ์•ผํ•œ๋‹ค - - const batchObjectOptions = { - stroke: 'red', - fill: 'transparent', - strokeDashArray: [10, 4], - strokeWidth: 1, - lockMovementX: true, - lockMovementY: true, - lockRotation: true, - lockScalingX: true, - lockScalingY: true, - selectable: true, - name: POLYGON_TYPE.OBJECT_SURFACE, - originX: 'center', - originY: 'center', - } - - batchObjects.forEach((obj) => { - if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) { - const groupPoints = obj.groupPoints - const offsetObjects = offsetPolygon(groupPoints, 10) - const dormerOffset = new QPolygon(offsetObjects, batchObjectOptions) - dormerOffset.setViewLengthText(false) - canvas.add(dormerOffset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ - } else { - const points = obj.points - const offsetObjects = offsetPolygon(points, 10) - const offset = new QPolygon(offsetObjects, batchObjectOptions) - offset.setViewLengthText(false) - canvas.add(offset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ - } - }) - - const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id) - if (isExistSurface) { - return - } - - let offsetLength = canvasSetting.roofSizeSet === 3 ? -90 : (trestleDetail.eaveIntvl / 10) * -1 - setSurfaceShapePattern(roof, roofDisplay.column, true) //ํŒจํ„ด ๋ณ€๊ฒฝ - const offsetPoints = offsetPolygon(roof.points, offsetLength) //์•ˆ์ชฝ offset - //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ - - const surfaceId = uuidv4() - - let setupSurface = new QPolygon(offsetPoints, { - stroke: 'red', - fill: 'transparent', - strokeDashArray: [10, 4], - strokeWidth: 1, - lockMovementX: true, - lockMovementY: true, - lockRotation: true, - lockScalingX: true, - lockScalingY: true, - selectable: true, - parentId: roof.id, //๊ฐ€๋Œ€ ํด๋ฆฌ๊ณค์˜ ์ž„์‹œ ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์คŒ - name: POLYGON_TYPE.MODULE_SETUP_SURFACE, - flowDirection: roof.direction, - direction: roof.direction, - flipX: roof.flipX, - flipY: roof.flipY, - surfaceId: surfaceId, - originX: 'center', - originY: 'center', - modules: [], - roofMaterial: roof.roofMaterial, - trestleDetail: trestleDetail, - // angle: -compasDeg, - }) - - setupSurface.setViewLengthText(false) - canvas.add(setupSurface) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ - - //์ง€๋ถ•๋ฉด ์„ ํƒ ๊ธˆ์ง€ - roof.set({ - selectable: false, - }) - - //๋ชจ๋“ˆ์„ค์น˜๋ฉด ํด๋ฆญ์ด๋ฒคํŠธ - addTargetMouseEventListener('mousedown', setupSurface, function () { - toggleSelection(setupSurface) - }) - } - - let selectedModuleInstSurfaceArray = [] - - //์„ค์น˜ ๋ฒ”์œ„ ์ง€์ • ํด๋ฆญ ์ด๋ฒคํŠธ - const toggleSelection = (setupSurface) => { - const isExist = selectedModuleInstSurfaceArray.some((obj) => obj.parentId === setupSurface.parentId) - //์ตœ์ดˆ ์„ ํƒ์ผ๋•Œ - if (!isExist) { - //๊ธฐ๋ณธ ์„ ํƒ์ด๋ž‘ ์ŠคํŠธ๋กœํฌ ๊ตต๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ์„ ํƒ ์•ˆ๋จ์œผ๋กœ ๋ด„ - setupSurface.set({ - ...setupSurface, - strokeWidth: 3, - strokeDashArray: [0], - fill: 'transparent', - }) - canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ - //์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š”๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ - - canvas?.renderAll() - selectedModuleInstSurfaceArray.push(setupSurface) - } else { - //์„ ํƒํ›„ ์žฌ์„ ํƒํ•˜๋ฉด ์„ ํƒ์•ˆ๋จ์œผ๋กœ ๋ณ€๊ฒฝ - setupSurface.set({ - ...setupSurface, - fill: 'transparent', - strokeDashArray: [10, 4], - strokeWidth: 1, - }) - canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ - - //ํด๋ฆฌ๊ณค์— ์ปค์Šคํ…€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ•จ - const removeIndex = setupSurface.parentId - const removeArrayIndex = selectedModuleInstSurfaceArray.findIndex((obj) => obj.parentId === removeIndex) - selectedModuleInstSurfaceArray.splice(removeArrayIndex, 1) - } - - canvas?.renderAll() - setModuleSetupSurface([...selectedModuleInstSurfaceArray]) - } + const [saleStoreNorthFlg, setSaleStoreNorthFlg] = useState(false) + const { swalFire } = useSwal() + const { getMessage } = useMessage() return { selectedModules, diff --git a/src/hooks/module/useModuleSelection.js b/src/hooks/module/useModuleSelection.js index 0321abaa..d0b812e5 100644 --- a/src/hooks/module/useModuleSelection.js +++ b/src/hooks/module/useModuleSelection.js @@ -5,8 +5,11 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { useCommonCode } from '@/hooks/common/useCommonCode' import { selectedModuleState, moduleSelectionInitParamsState, moduleSelectionDataState } from '@/store/selectedModuleOptions' import { isObjectNotEmpty } from '@/util/common-utils' +import { canvasState } from '@/store/canvasAtom' +import { POLYGON_TYPE } from '@/common/common' export function useModuleSelection(props) { + const canvas = useRecoilValue(canvasState) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const [roughnessCodes, setRoughnessCodes] = useState([]) //๋ฉด์กฐ๋„ ๋ชฉ๋ก @@ -41,6 +44,7 @@ export function useModuleSelection(props) { instHt: managementState?.installHeight, //์„ค์น˜๋†’์ด stdWindSpeed: managementState?.standardWindSpeedId, //๊ธฐ์ค€ํ’์† stdSnowLd: managementState?.verticalSnowCover, //๊ธฐ์ค€์ ์„ค๋Ÿ‰ + saleStoreNorthFlg: managementState?.saleStoreNorthFlg, //๋ถ์ชฝ ์„ค์น˜ ์—ฌ๋ถ€ } if (selectedModules) { @@ -62,6 +66,7 @@ export function useModuleSelection(props) { // 202000 ํ’์† const windCodeList = findCommonCode('202000') + windCodeList.forEach((obj) => { obj.name = obj.clCodeNm obj.id = obj.clCode @@ -83,6 +88,16 @@ export function useModuleSelection(props) { } getModuleData(roofsIds) + + //๋ฉ”๋‰ด ์ด๋™์‹œ ๋ฐฐ์น˜๋ฉด ์‚ญ์ œ + const moduleSurfacesArray = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + if (moduleSurfacesArray.length > 0) { + moduleSurfacesArray.forEach((moduleSurface) => { + moduleSurface.module = [] + canvas.remove(moduleSurface) + }) + canvas.renderAll() + } }, []) const getModuleData = async (roofsIds) => { diff --git a/src/hooks/module/useModuleTabContents.js b/src/hooks/module/useModuleTabContents.js index 95317cdd..63ab7722 100644 --- a/src/hooks/module/useModuleTabContents.js +++ b/src/hooks/module/useModuleTabContents.js @@ -299,6 +299,7 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab //๊ฑฐ๋Œ€๋ฉ”์ด์ปค, ๊ณต๋ฒ•, ์ง€๋ถ•๋ฐ‘๋ฐ”ํƒ• api ์กฐํšŒ const getModuleOptionsListData = async (params, type) => { const optionsList = await getTrestleList(params) + console.log('optionsList', optionsList) if (optionsList.data.length > 0) { if (type === 'trestle') { diff --git a/src/locales/ko.json b/src/locales/ko.json index f389807c..5552dbb0 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -997,5 +997,6 @@ "construction.length.difference": "์ง€๋ถ•๋ฉด ๊ณต๋ฒ•์„ ์ „๋ถ€ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", "menu.validation.canvas.roof": "ํŒจ๋„์„ ๋ฐฐ์น˜ํ•˜๋ ค๋ฉด ์ง€๋ถ•๋ฉด์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", "batch.object.outside.roof": "์˜ค๋ธŒ์ ํŠธ๋Š” ์ง€๋ถ•๋‚ด์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", - "batch.object.notinstall.cross": "์˜ค๋ธŒ์ ํŠธ๋Š” ๊ฒน์ณ์„œ ์„ค์น˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." + "batch.object.notinstall.cross": "์˜ค๋ธŒ์ ํŠธ๋Š” ๊ฒน์ณ์„œ ์„ค์น˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." } From 77157e34df4ffec2af294d65871db0a1f1555dda 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, 4 Feb 2025 15:49:22 +0900 Subject: [PATCH 030/213] =?UTF-8?q?-=20=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 | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/styles/_modal.scss b/src/styles/_modal.scss index 61f631cd..7c959e83 100644 --- a/src/styles/_modal.scss +++ b/src/styles/_modal.scss @@ -259,6 +259,12 @@ $alert-color: #101010; border-bottom: 1px solid #424242; } } +.grid-check-form-block{ + display: block; + > div{ + margin-bottom: 10px; + } +} .grid-option-overflow{ max-height: 350px; overflow-y: auto; @@ -305,6 +311,25 @@ $alert-color: #101010; } .grid-option-block-form{ flex: 1; + .flex-ment{ + position: relative; + padding-right: 70px; + flex: 1 1 auto; + span{ + width: 70px; + &.absol{ + width: fit-content; + position: absolute; + top: 50%; + right: 0; + transform: translateY(-50%); + + } + } + .input-grid{ + flex: 1; + } + } } } .select-form{ @@ -312,6 +337,7 @@ $alert-color: #101010; } .grid-select{ flex: 1; + height: 30px; &.no-flx{ flex: unset; } @@ -2013,7 +2039,7 @@ $alert-color: #101010; } } .roof-module-tab2-overflow{ - max-height: 500px; + max-height: 650px; overflow-y: auto; padding-bottom: 15px; border-bottom: 1px solid #4D4D4D; @@ -2088,17 +2114,3 @@ $alert-color: #101010; justify-content: flex-end; } } - -.reset-word-wrap{ - display: flex; - align-items: center; - .grid-btn-wrap{ - margin-left: auto; - } -} -.reset-word{ - font-size: 12px; - color: #FFCACA; - font-weight: 400; - margin-top: 10px; -} \ No newline at end of file From 0491c14fb45f766bf9dbc41f44ea3dd151dce7f4 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, 4 Feb 2025 15:49:48 +0900 Subject: [PATCH 031/213] =?UTF-8?q?-=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8(Unit=20Test)=20#554=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/step/Module.jsx | 2 - .../modal/basic/step/ModuleTabContents.jsx | 2 +- .../roofAllocation/RoofAllocationSetting.jsx | 70 +++++++++++-------- .../modal/roofShape/type/option/Wall.jsx | 1 - 4 files changed, 40 insertions(+), 35 deletions(-) diff --git a/src/components/floor-plan/modal/basic/step/Module.jsx b/src/components/floor-plan/modal/basic/step/Module.jsx index eb4f0177..4823ab6e 100644 --- a/src/components/floor-plan/modal/basic/step/Module.jsx +++ b/src/components/floor-plan/modal/basic/step/Module.jsx @@ -156,7 +156,6 @@ export default function Module({ setTabNum }) {
-
{getMessage('modal.module.basic.setting.module.stuff.info')}
{getMessage('modal.module.basic.setting.module.surface.type')}
@@ -271,7 +270,6 @@ export default function Module({ setTabNum }) {
{/* ์„ค์ • ์˜ค๋ฅ˜์‹œ ๋…ธ์ถœ */} -
โ€ป ๆ–ฝๅทฅๆ–นๆณ•ใŒ้ธๆŠžใงใใพใ›ใ‚“ใ€‚ ๅŸบๆบ–้ขจ้€ŸใพใŸใฏๅŸบๆบ–็ฉ้›ช้‡ใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚
diff --git a/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx b/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx index 706fad9f..24845bbf 100644 --- a/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx +++ b/src/components/floor-plan/modal/basic/step/ModuleTabContents.jsx @@ -203,7 +203,7 @@ export default function ModuleTabContents({ tabIndex, addRoof, setAddedRoofs, ro ๅผทๅŒ–ๆ–ฝๅทฅ
-
+
-
+
handleChangeRoofMaterial(e, index)} />
- {index === 0 && {getMessage('modal.roof.alloc.default.roof.material')}} - {index !== 0 && } + {index === 0 && {getMessage('modal.roof.alloc.default.roof.material')}} + {index !== 0 && ( + + + + )}
{getMessage('slope')} -
+
- {pitchText} + {pitchText}
{(roof.widAuth || roof.lenAuth) && ( -
+ <> {roof.widAuth && ( -
- W -
- handleChangeInput(e, 'width', index)} - readOnly={roof.widAuth === 'R'} - /> +
+
+ W +
+ handleChangeInput(e, 'width', index)} + readOnly={roof.widAuth === 'R'} + /> +
)} {roof.lenAuth && ( -
- L -
- handleChangeInput(e, 'length', index)} - readOnly={roof.lenAuth === 'R'} - /> +
+
+ L +
+ handleChangeInput(e, 'length', index)} + readOnly={roof.lenAuth === 'R'} + /> +
)} -
+ )} {(roof.raftAuth || roof.roofPchAuth) && ( -
+ <> {roof.raftAuth && (
{getMessage('modal.placement.initial.setting.rafter')} {raftCodes.length > 0 && ( -
+
{getMessage('hajebichi')} -
+
)} -
+ )}
diff --git a/src/components/floor-plan/modal/roofShape/type/option/Wall.jsx b/src/components/floor-plan/modal/roofShape/type/option/Wall.jsx index c7b04b2d..f78fe95d 100644 --- a/src/components/floor-plan/modal/roofShape/type/option/Wall.jsx +++ b/src/components/floor-plan/modal/roofShape/type/option/Wall.jsx @@ -6,7 +6,6 @@ export default function Wall({ sleeveOffset, setSleeveOffset, hasSleeve, setHasS const { getMessage } = useMessage() return ( <> - {hasSleeve}
From bc06d35bcf8b9d7a0f9aabd4e2824972a15b02e9 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, 4 Feb 2025 15:51:38 +0900 Subject: [PATCH 032/213] =?UTF-8?q?-=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8(Unit=20Test)=20#557=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/PowerConditionalSelect.jsx | 4 +- .../step/type/PassivityCircuitAllocation.jsx | 74 ++++++++++++++----- 2 files changed, 56 insertions(+), 22 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 407c5e34..5496a0d5 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -38,7 +38,7 @@ export default function PowerConditionalSelect(props) { const { swalFire } = useSwal() const modelHeader = [ { name: getMessage('์‹œ๋ฆฌ์ฆˆ'), width: '15%', prop: 'pcsSerNm', type: 'color-box' }, - { name: getMessage('๋ช…์นญ'), width: '15%', prop: 'itemNm', type: 'color-box' }, + { name: getMessage('๋ช…์นญ'), width: '15%', prop: 'goodsNo', type: 'color-box' }, { name: `${getMessage('modal.circuit.trestle.setting.power.conditional.select.rated.output')} (kW)`, width: '10%', @@ -240,7 +240,7 @@ export default function PowerConditionalSelect(props) {
{selectedModels?.map((model) => ( - {model.itemNm} + {model.goodsNo} ))}
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 ded6c61f..7cbca2da 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -14,6 +14,7 @@ export default function PassivityCircuitAllocation(props) { tabNum, setTabNum, selectedModels, + setSelectedModels, getOptYn: getApiProps, getUseModuleItemList: getSelectedModuleList, getSelectModelList: getSelectModelList, @@ -201,6 +202,7 @@ export default function PassivityCircuitAllocation(props) { } } + let tempSelectedPcs = { ...selectedPcs } canvas.discardActiveObject() canvas .getObjects() @@ -229,6 +231,8 @@ export default function PassivityCircuitAllocation(props) { obj.pcsItemId = selectedPcs.itemId obj.circuit = moduleCircuitText obj.circuitNumber = getCircuitNumber() + tempSelectedPcs.used = true + setSelectedPcs(tempSelectedPcs) canvas.add(moduleCircuitText) }) @@ -249,25 +253,47 @@ export default function PassivityCircuitAllocation(props) { }), } }) + console.log('uniqueCircuitNumbers', uniqueCircuitNumbers) - const pcsItemList = selectedModels.map((model, index) => { - return { - pcsMkrCd: model.pcsMkrCd, - pcsSerCd: model.pcsSerCd, - itemId: model.itemId, - itemNm: model.itemNm, - goodsNo: model.goodsNo, - serQtyList: [ - { - serQty: targetModules.length, - paralQty: uniqueCircuitNumbers.length, - rmdYn: 'Y', - usePossYn: 'Y', - roofSurfaceList: roofSurfaceList, - }, - ], - } - }) + const usedPcses = selectedModels.filter((model) => model.isUsed) + const pcsItemList = + usedPcses.length === 0 + ? [ + { + pcsMkrCd: selectedPcs.pcsMkrCd, + pcsSerCd: selectedPcs.pcsSerCd, + itemId: selectedPcs.itemId, + itemNm: selectedPcs.itemNm, + goodsNo: selectedPcs.goodsNo, + serQtyList: [ + { + serQty: targetModules.length, + paralQty: uniqueCircuitNumbers.length, + rmdYn: 'Y', + usePossYn: 'Y', + roofSurfaceList: roofSurfaceList, + }, + ], + }, + ] + : selectedModels.map((model, index) => { + return { + pcsMkrCd: model.pcsMkrCd, + pcsSerCd: model.pcsSerCd, + itemId: model.itemId, + itemNm: model.itemNm, + goodsNo: model.goodsNo, + serQtyList: [ + { + serQty: targetModules.length, + paralQty: uniqueCircuitNumbers.length, + rmdYn: 'Y', + usePossYn: 'Y', + roofSurfaceList: roofSurfaceList, + }, + ], + } + }) const params = { ...getApiProps(), @@ -276,6 +302,7 @@ export default function PassivityCircuitAllocation(props) { } getPcsManualConfChk(params).then((res) => { + console.log('targetModules', targetModules) if (res.resultCode === 'E') { swalFire({ text: res.resultMsg, @@ -295,10 +322,17 @@ export default function PassivityCircuitAllocation(props) { canvas.renderAll() }, }) - + setSelectedPcs({ ...selectedPcs, used: false }) + setTargetModules([]) return } + setSelectedModels( + selectedModels.map((model) => { + return { ...model, isUsed: model.id === selectedPcs.id ? true : model.isUsed } + }), + ) + setTargetModules([]) setCircuitNumber(+circuitNumber + 1) setTableData() @@ -512,7 +546,7 @@ export default function PassivityCircuitAllocation(props) { onChange={() => setSelectedPcs(model)} />
@@ -226,7 +226,7 @@ export default function Module({ setTabNum }) { onChange={(e) => setInputVerticalSnowCover(e.target.value)} />
- mm + cm
diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 67a5e467..bf4d4a86 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -324,6 +324,18 @@ export function useModuleBasicSetting(tabNum) { }) } + useEffect(() => { + console.log('๋ฆฌ์ฝ”์ผ ๋ฐ”๋€Œ๋ƒ??') + console.log('isManualModuleSetup', isManualModuleSetup) + console.log('saleStoreNorthFlg', saleStoreNorthFlg) + + if (moduleSelectionData.common.saleStoreNorthFlg === '1') { + setSaleStoreNorthFlg(true) + } + + manualModuleSetup() + }, [isManualModuleSetup]) + /** * trestle์—์„œ ์˜์—ญ์„ ๊ฐ€์ ธ์™€ mouse:move ์ด๋ฒคํŠธ๋กœ ํ•ด๋‹น ์˜์—ญ์— ์ง„์ž…ํ–ˆ์„๋•Œ booleanPointInPolygon ๋กœ ์ง„์ž…์—ฌ๋ถ€๋ฅผ ํ™•์ธ * ํ™•์ธ ํ›„ ์…€์„ ์ด๋™์‹œํ‚ด @@ -364,7 +376,7 @@ export function useModuleBasicSetting(tabNum) { lockRotation: true, // ํšŒ์ „ ์ž ๊ธˆ lockScalingX: true, // X ์ถ• ํฌ๊ธฐ ์กฐ์ • ์ž ๊ธˆ lockScalingY: true, // Y ์ถ• ํฌ๊ธฐ ์กฐ์ • ์ž ๊ธˆ - name: 'module', + name: POLYGON_TYPE.MODULE, } if (moduleSetupSurfaces.length !== 0) { @@ -429,6 +441,10 @@ export function useModuleBasicSetting(tabNum) { parentId: moduleSetupSurfaces[i].parentId, }) + console.log('trestlePolygon', trestlePolygon) + console.log('saleStoreNorthFlg', saleStoreNorthFlg) + console.log('trestlePolygon.isNorth', trestlePolygon.isNorth) + //๋ถ๋ฉด์ด๊ณ  ๋ถ๋ฉด์„ค์น˜์ƒ์ ์ด ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ return if (trestlePolygon.isNorth && !saleStoreNorthFlg) { return @@ -646,13 +662,15 @@ export function useModuleBasicSetting(tabNum) { }) } } else { - //์ˆ˜๋™๋ชจ๋“œ ํ•ด์ œ์‹œ ๋ชจ๋“ˆ ์„ค์น˜๋ฉด ์„ ํƒ ์ž ๊ธˆ - moduleSetupSurfaces.forEach((obj) => { - obj.set({ - selectable: true, - evented: true, + if (moduleSetupSurfaces) { + //์ˆ˜๋™๋ชจ๋“œ ํ•ด์ œ์‹œ ๋ชจ๋“ˆ ์„ค์น˜๋ฉด ์„ ํƒ ์ž ๊ธˆ + moduleSetupSurfaces.forEach((obj) => { + obj.set({ + selectable: true, + evented: true, + }) }) - }) + } removeMouseEvent('mouse:up') removeMouseEvent('mouse:move') @@ -1693,7 +1711,7 @@ export function useModuleBasicSetting(tabNum) { lockScalingY: true, // Y ์ถ• ํฌ๊ธฐ ์กฐ์ • ์ž ๊ธˆ parentId: moduleSetupSurface.parentId, surfaceId: moduleSetupSurface.id, - name: 'module', + name: POLYGON_TYPE.MODULE, } if (moduleSetupSurfaces.length !== 0) { @@ -2102,7 +2120,7 @@ export function useModuleBasicSetting(tabNum) { lockScalingY: true, // Y ์ถ• ํฌ๊ธฐ ์กฐ์ • ์ž ๊ธˆ parentId: moduleSetupSurface.parentId, surfaceId: moduleSetupSurface.id, - name: 'module', + name: POLYGON_TYPE.MODULE, } let leftMargin, bottomMargin, square diff --git a/src/hooks/module/useModuleSelection.js b/src/hooks/module/useModuleSelection.js index d0b812e5..3208a71a 100644 --- a/src/hooks/module/useModuleSelection.js +++ b/src/hooks/module/useModuleSelection.js @@ -89,11 +89,12 @@ export function useModuleSelection(props) { getModuleData(roofsIds) - //๋ฉ”๋‰ด ์ด๋™์‹œ ๋ฐฐ์น˜๋ฉด ์‚ญ์ œ - const moduleSurfacesArray = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + //ํ•ด๋‹น ๋ฉ”๋‰ด ์ด๋™์‹œ ๋ฐฐ์น˜๋ฉด ์‚ญ์ œ + const moduleSurfacesArray = canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE || obj.name === POLYGON_TYPE.MODULE) if (moduleSurfacesArray.length > 0) { moduleSurfacesArray.forEach((moduleSurface) => { - moduleSurface.module = [] canvas.remove(moduleSurface) }) canvas.renderAll() diff --git a/src/locales/ja.json b/src/locales/ja.json index 38723da7..47257675 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -999,5 +999,6 @@ "construction.length.difference": "ๅฑ‹ๆ น้ขๅทฅๆณ•ใ‚’ใ™ในใฆ้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", "menu.validation.canvas.roof": "ใƒ‘ใƒใƒซใ‚’้…็ฝฎใ™ใ‚‹ใซใฏใ€ๅฑ‹ๆ น้ขใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "batch.object.outside.roof": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏๅฑ‹ๆ นใซ่จญ็ฝฎใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", - "batch.object.notinstall.cross": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏ้‡่ค‡ใ—ใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใงใใพใ›ใ‚“ใ€‚" + "batch.object.notinstall.cross": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏ้‡่ค‡ใ—ใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใงใใพใ›ใ‚“ใ€‚", + "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." } diff --git a/src/locales/ko.json b/src/locales/ko.json index 5c7c17d6..7249b0f5 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -90,7 +90,7 @@ "modal.module.basic.setting.orientation.setting.info": "โ€ป์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณ„์‚ฐ์šฉ ๋ฐฉ์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚จ์ชฝ์˜ ๋ฐฉ์œ„๋ฅผ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.", "modal.module.basic.setting.orientation.setting.angle.passivity": "๊ฐ๋„๋ฅผ ์ง์ ‘ ์ž…๋ ฅ", "modal.module.basic.setting.module.roof.material": "์ง€๋ถ•์žฌ", - "modal.module.basic.setting.module.trestle.maker": "๊ฐ€๋Œ€๋ฉ”์ด๊ฑฐ", + "modal.module.basic.setting.module.trestle.maker": "๊ฐ€๋Œ€๋ฉ”์ด์ปค", "modal.module.basic.setting.module.rafter.margin": "์„œ๊นŒ๋ž˜ ๊ฐ„๊ฒฉ", "modal.module.basic.setting.module.construction.method": "๊ณต๋ฒ•", "modal.module.basic.setting.module.under.roof": "์ง€๋ถ•๋ฐ‘๋ฐ”ํƒ•", From bb85d2ed6b39562e963c6ba204278e520dc13c3b Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 5 Feb 2025 09:11:18 +0900 Subject: [PATCH 044/213] =?UTF-8?q?=EB=B6=81=EB=A9=B4=EC=84=A4=EC=B9=98=20?= =?UTF-8?q?=ED=94=8C=EB=9E=98=EA=B7=B8=20=EA=B4=80=EB=A0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/Estimate.jsx | 3 ++ src/components/management/StuffDetail.jsx | 22 +++++++------ .../management/StuffSearchCondition.jsx | 13 ++++---- .../estimate/useEstimateController.js | 31 ++++++++++++------- 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index a97cb4cb..b5d8bce0 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -1366,6 +1366,9 @@ export default function Estimate({}) { {getMessage('estimate.detail.fileFlg')}
+ {estimateContextState?.northArrangement === '1' && ( +
{getMessage('estimate.detail.dragFileGuide')}
+ )}
diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 191b3156..fe8fea47 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -411,11 +411,12 @@ export default function StuffDetail() { if (session?.storeId === 'T01') { url = `/api/object/saleStore/${session?.storeId}/firstList?userId=${session?.userId}` } else { - if (session.storeLvl === '1') { - url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - } else { - url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - } + // if (session.storeLvl === '1') { + // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` + // } else { + // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` + // } + url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` } get({ url: url }).then((res) => { @@ -523,11 +524,12 @@ export default function StuffDetail() { if (session?.storeId === 'T01') { url = `/api/object/saleStore/${session?.storeId}/firstList?userId=${session?.userId}` } else { - if (session.storeLvl === '1') { - url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - } else { - url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - } + // if (session.storeLvl === '1') { + // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` + // } else { + // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` + // } + url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` } get({ url: url }).then((res) => { if (!isEmptyArray(res)) { diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index 62b75483..5021548d 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -474,12 +474,13 @@ export default function StuffSearchCondition() { //T01์ผ๋–„ url = `/api/object/saleStore/${session?.storeId}/firstList?userId=${session?.userId}` } else { - if (session.storeLvl === '1') { - //T01์•„๋‹Œ 1์ฐจ์ ์ผ๋•Œ - url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - } else { - url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - } + // if (session.storeLvl === '1') { + // //T01์•„๋‹Œ 1์ฐจ์ ์ผ๋•Œ + // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` + // } else { + // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` + // } + url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` } get({ url: url }).then((res) => { diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js index ebd1ad88..7654f3ba 100644 --- a/src/hooks/floorPlan/estimate/useEstimateController.js +++ b/src/hooks/floorPlan/estimate/useEstimateController.js @@ -80,7 +80,6 @@ export const useEstimateController = (planNo) => { res.data.pkgAsp = roundedNumber.toString() } - setEstimateContextState(res.data) } } @@ -155,7 +154,7 @@ export const useEstimateController = (planNo) => { }) .catch((error) => { console.log('::FileDownLoad Error::', error) - alert('File does not exist.') + return swalFire({ text: getMessage('File does not exist'), type: 'alert' }) }) } @@ -169,19 +168,19 @@ export const useEstimateController = (planNo) => { if (estimateData?.charger === null || estimateData?.charger?.trim().length === 0) { flag = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredCharger')) + return swalFire({ text: getMessage('estimate.detail.save.requiredCharger'), type: 'alert' }) } if (estimateData?.objectName === null || estimateData?.objectName?.trim().length === 0) { flag = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredObjectName')) + return swalFire({ text: getMessage('estimate.detail.save.requiredObjectName'), type: 'alert' }) } if (isNaN(Date.parse(estimateData.estimateDate))) { flag = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredEstimateDate')) + return swalFire({ text: getMessage('estimate.detail.save.requiredEstimateDate'), type: 'alert' }) } if (estimateData.estimateType === 'YJSS') { @@ -189,7 +188,7 @@ export const useEstimateController = (planNo) => { if (pkgAsp === '0') { flag = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredPkgAsp')) + return swalFire({ text: getMessage('estimate.detail.save.requiredPkgAsp'), type: 'alert' }) } } @@ -209,6 +208,14 @@ export const useEstimateController = (planNo) => { //๊ธฐ์กด์— ์ฒจ๋ถ€๋œ ํŒŒ์ผ์ด ์—†์œผ๋ฉด if (isEmptyArray(estimateData.newFileList)) { //์ƒˆ๋กœ ์ฒจ๋ถ€ํ•œ ํŒŒ์ผ์ด ์—†์œผ๋ฉด + + //๋ถ๋ฉด ๋จผ์ € ์ฒดํฌ + if (estimateData?.northArrangement === '1') { + fileFlg = false + setIsGlobalLoading(false) + return swalFire({ text: getMessage('estimate.detail.save.requiredNorthArrangementFileUpload'), type: 'alert' }) + } + if (estimateData.itemList.length > 1) { estimateData.itemList.map((row) => { if (row.delFlg === '0') { @@ -217,7 +224,7 @@ export const useEstimateController = (planNo) => { if (estimateData.fileFlg === '0') { fileFlg = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredFileUpload')) + return swalFire({ text: getMessage('estimate.detail.save.requiredFileUpload'), type: 'alert' }) } } } @@ -235,7 +242,7 @@ export const useEstimateController = (planNo) => { if (item.itemId === '') { itemFlg = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredItemId')) + return swalFire({ text: getMessage('estimate.detail.save.requiredItemId'), type: 'alert' }) } } @@ -251,7 +258,7 @@ export const useEstimateController = (planNo) => { if (item.amount < 1) { itemFlg = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredAmount')) + return swalFire({ text: getMessage('estimate.detail.save.requiredAmount'), type: 'alert' }) } if (estimateData.estimateType !== 'YJSS') { @@ -263,7 +270,7 @@ export const useEstimateController = (planNo) => { if (item.salePrice < 1) { itemFlg = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredSalePrice')) + return swalFire({ text: getMessage('estimate.detail.save.requiredSalePrice'), type: 'alert' }) } } @@ -274,7 +281,7 @@ export const useEstimateController = (planNo) => { if (isNaN(item.salePrice)) { itemFlg = false setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredSalePrice')) + return swalFire({ text: getMessage('estimate.detail.save.requiredSalePrice'), type: 'alert' }) } } } @@ -292,7 +299,7 @@ export const useEstimateController = (planNo) => { }) if (delCnt === estimateData.itemList.length) { setIsGlobalLoading(false) - return alert(getMessage('estimate.detail.save.requiredItem')) + return swalFire({ text: getMessage('estimate.detail.save.requiredItem'), type: 'alert' }) } } From d92493b4e869719098b9e988cec02e982ebab759 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, 5 Feb 2025 09:54:08 +0900 Subject: [PATCH 045/213] =?UTF-8?q?=ED=8D=BC=EB=B8=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ContextRoofAllocationSetting.jsx | 325 +++++++++--------- 1 file changed, 169 insertions(+), 156 deletions(-) diff --git a/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx b/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx index 5bfad3e4..88188887 100644 --- a/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx +++ b/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx @@ -45,175 +45,188 @@ export default function ContextRoofAllocationSetting(props) { return (
-
-

{getMessage('plan.menu.estimate.roof.alloc')}

- -
-
-
{getMessage('modal.roof.alloc.info')}
-
- {getMessage('modal.roof.alloc.select.roof.material')} -
- { - // const selected = roofMaterials.find((roofMaterial) => roofMaterial.roofMatlCd === e.id) - setCurrentRoofMaterial(e) - }} - showKey={'roofMatlNm'} - sourceKey={'roofMatlCd'} - targetKey={'roofMatlCd'} - /> + {currentRoofList && ( + <> +
+

{getMessage('plan.menu.estimate.roof.alloc')}

+
- -
-
- {currentRoofList.length > 0 && - currentRoofList.map((roof, index) => { - return ( -
-
- - -
-
-
-
-
- handleChangeRoofMaterial(e, index)} - /> -
- {index === 0 && {getMessage('modal.roof.alloc.default.roof.material')}} - {index !== 0 && } +
+
{getMessage('modal.roof.alloc.info')}
+
+ {getMessage('modal.roof.alloc.select.roof.material')} +
+ { + // const selected = roofMaterials.find((roofMaterial) => roofMaterial.roofMatlCd === e.id) + setCurrentRoofMaterial(e) + }} + showKey={'roofMatlNm'} + sourceKey={'roofMatlCd'} + targetKey={'roofMatlCd'} + /> +
+ +
+
+
+ {currentRoofList.map((roof, index) => { + return ( +
+
+ +
-
-
-
- {getMessage('slope')} -
- { - handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) - }} - defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} - /> -
- {pitchText} -
-
- {(roof.widAuth || roof.lenAuth) && ( -
- {roof.widAuth && ( +
+
- W -
- +
+ handleChangeRoofMaterial(e, index)} + />
+ {index === 0 && {getMessage('modal.roof.alloc.default.roof.material')}} + {index !== 0 && ( + + + + )}
- )} - {roof.lenAuth && ( +
+
- L -
- + {getMessage('slope')} +
+ { + handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) + }} + defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} + />
+ {pitchText}
- )} -
- )} - {(roof.raftAuth || roof.roofPchAuth) && ( -
- {roof.raftAuth && ( -
-
- {getMessage('modal.placement.initial.setting.rafter')} - {raftCodes.length > 0 && ( -
- +
+ {(roof.widAuth || roof.lenAuth) && ( + <> + {roof.widAuth && ( +
+
+ W +
+ +
- )} -
-
- )} - {roof.roofPchAuth && ( -
-
- {getMessage('hajebichi')} -
-
-
-
+ )} + {roof.lenAuth && ( +
+
+ L +
+ +
+
+
+ )} + )} -
- )} -
-
- - + {(roof.raftAuth || roof.roofPchAuth) && ( + <> + {roof.raftAuth && ( +
+
+ {getMessage('modal.placement.initial.setting.rafter')} + {raftCodes.length > 0 && ( +
+ +
+ )} +
+
+ )} + {roof.roofPchAuth && ( +
+
+ {getMessage('hajebichi')} +
+ +
+
+
+ )} + + )} +
+
+ + +
+
-
-
- ) - })} -
-
- -
-
+ ) + })} +
+
+
+ +
+
+ + )}
From 14d6c91f37343c501dfa40253d2b77061f454b00 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, 5 Feb 2025 09:55:12 +0900 Subject: [PATCH 046/213] =?UTF-8?q?=EC=A7=91=EA=B3=84=ED=91=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95,=20W=EB=8B=A8=EC=9C=84=20->=20kW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasFrame.jsx | 1 - .../circuitTrestle/CircuitTrestleSetting.jsx | 18 ++- .../step/type/PassivityCircuitAllocation.jsx | 133 ++---------------- src/hooks/module/useModule.js | 93 +++++++++++- src/hooks/module/useModuleBasicSetting.js | 6 +- src/store/circuitTrestleAtom.js | 5 +- 6 files changed, 125 insertions(+), 131 deletions(-) diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index 31698b1a..85315a23 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -28,7 +28,6 @@ export default function CanvasFrame() { const { currentCanvasPlan } = usePlan() const totalDisplay = useRecoilValue(totalDisplaySelector) // ์ง‘๊ณ„ํ‘œ ํ‘œ์‹œ ์—ฌ๋ถ€ const { setIsGlobalLoading } = useContext(QcastContext) - const [moduleStatistics, setModuleStatistics] = useRecoilState(moduleStatisticsState) const reset = useResetRecoilState(moduleStatisticsState) const loadCanvas = () => { if (canvas) { diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index adeb0300..2c5927fe 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -273,22 +273,28 @@ export default function CircuitTrestleSetting({ id }) { id: uuidv4(), } }) - const PcsVoltageChkParams = { + const pcsVoltageChkParams = { ...getOptYn(), useModuleItemList: getUseModuleItemList(), roofSurfaceList: getRoofSurfaceList(), pcsItemList: getPcsItemList(), } setSelectedModels(selectedModels) - getPcsVoltageChk(PcsVoltageChkParams).then((res) => {}) + getPcsVoltageChk(pcsVoltageChkParams).then((res) => { + setAllocationType(ALLOCATION_TYPE.PASSIVITY) + }) } else { swalFire({ - title: 'ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์„ธ์š”.', + title: res.result.resultMsg, type: 'alert', + confirmFn: () => { + return + }, }) + return } }) - } else if (pcsCheck.max) { + } else { const moduleStdQty = selectedModels.reduce((acc, model) => { return acc + parseInt(model.moduleStdQty) }, 0) @@ -306,9 +312,9 @@ export default function CircuitTrestleSetting({ id }) { }) return } - } - setAllocationType(ALLOCATION_TYPE.PASSIVITY) + setAllocationType(ALLOCATION_TYPE.PASSIVITY) + } } // StepUp์—์„œ ์„ ํƒ๋œ ๊ฐ’๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜ ์ˆ˜์ • 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 7cbca2da..aa151d9c 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -1,6 +1,7 @@ import { GlobalDataContext } from '@/app/GlobalDataProvider' import { POLYGON_TYPE } from '@/common/common' import { useMasterController } from '@/hooks/common/useMasterController' +import { useModule } from '@/hooks/module/useModule' import { useMessage } from '@/hooks/useMessage' import { useSwal } from '@/hooks/useSwal' import { canvasState } from '@/store/canvasAtom' @@ -11,37 +12,29 @@ import { useRecoilState, useRecoilValue } from 'recoil' export default function PassivityCircuitAllocation(props) { const { - tabNum, - setTabNum, selectedModels, setSelectedModels, getOptYn: getApiProps, getUseModuleItemList: getSelectedModuleList, getSelectModelList: getSelectModelList, - getRoofSurfaceList, - getModelList, } = props const { swalFire } = useSwal() const { getMessage } = useMessage() const canvas = useRecoilValue(canvasState) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const selectedModules = useRecoilValue(selectedModuleState) - const [moduleStatistics, setModuleStatistics] = useRecoilState(moduleStatisticsState) - // const [totalWpout, setTotalWpout] = useState(0) const [selectedPcs, setSelectedPcs] = useState(selectedModels[0]) - // const { header, rows: row } = moduleStatistics - const [header, setHeader] = useState(moduleStatistics.header) - const [rows, setRows] = useState(moduleStatistics.rows) - const [footer, setFooter] = useState(['ํ•ฉ๊ณ„']) + const { header, rows, footer } = useRecoilValue(moduleStatisticsState) const [circuitNumber, setCircuitNumber] = useState(1) const [targetModules, setTargetModules] = useState([]) + const { setModuleStatisticsData } = useModule() const { getPcsManualConfChk } = useMasterController() useEffect(() => { console.log('header, rows', header, rows) console.log('selectedModels', selectedModels) // setSurfaceInfo() - setTableData() + setModuleStatisticsData() if (!managementState) { setManagementState(managementStateLoaded) } @@ -158,7 +151,14 @@ export default function PassivityCircuitAllocation(props) { } const handleCircuitNumberFix = () => { - let uniqueCircuitNumbers = null + let uniqueCircuitNumbers = [ + ...new Set( + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuitNumber) + .map((obj) => obj.circuitNumber), + ), + ] if (!circuitNumber || circuitNumber === 0) { swalFire({ text: 'ํšŒ๋กœ๋ฒˆํ˜ธ๋ฅผ 1 ์ด์ƒ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.', @@ -174,15 +174,6 @@ export default function PassivityCircuitAllocation(props) { }) return } else if (selectedModels.length > 1) { - uniqueCircuitNumbers = [ - ...new Set( - canvas - .getObjects() - .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuitNumber) - .map((obj) => obj.circuitNumber), - ), - ] - let result = false uniqueCircuitNumbers.forEach((number) => { if ( @@ -335,7 +326,7 @@ export default function PassivityCircuitAllocation(props) { setTargetModules([]) setCircuitNumber(+circuitNumber + 1) - setTableData() + setModuleStatisticsData() }) } @@ -347,100 +338,6 @@ export default function PassivityCircuitAllocation(props) { } } - const setTableData = () => { - const tempHeader = [ - { name: getMessage('simulator.table.sub1'), prop: 'name' }, - { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.circuit'), prop: 'circuit' }, - ...selectedModules.itemList.map((module) => { - return { - name: module.itemNm, - prop: module.itemId, - } - }), - { name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' }, - ] - - const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - const surfaceIds = surfaces.map((surface) => surface.parentId) - const surfaceObjects = {} - const rows = surfaces.map((surface) => { - const moduleObject = {} - surfaceObjects[surface.id] = { - roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, - circuit: '-', - amount: 0, - wpOut: 0, - circuits: {}, - } - - surface.modules.forEach((module) => { - if (!surfaceObjects[surface.id][module.moduleInfo.itemId]) { - // ์ง€๋ถ•๋ฉด์— ๋ชจ๋“ˆ ์กด์žฌ ์—ฌ๋ถ€ - surfaceObjects[surface.id][module.moduleInfo.itemId] = 0 // ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™” - } - - surfaceObjects[surface.id][module.moduleInfo.itemId]++ - surfaceObjects[surface.id].wpOut += +module.moduleInfo.wpOut - if (module.circuit) { - if (!surfaceObjects[surface.id].circuits[module.circuitNumber]) { - surfaceObjects[surface.id].circuits[module.circuitNumber] = { - circuit: module.circuitNumber, - wpOut: 0, - circuits: { wpOut: 0 }, - } - - if (!surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]) { - surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId] = 0 - } - } - surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]++ - surfaceObjects[surface.id].circuits[module.circuitNumber].circuits.wpOut += +module.moduleInfo.wpOut - surfaceObjects[surface.id].wpOut -= +module.moduleInfo.wpOut - surfaceObjects[surface.id][module.moduleInfo.itemId]-- - } - }) - }) - console.log('rows', rows) - console.log('surfaceObjects', surfaceObjects) - let tempRows = [] - Object.keys(surfaceObjects).forEach((key) => { - let tempRow = { - name: surfaceObjects[key].roofSurface, - circuit: surfaceObjects[key].circuit, - wpOut: surfaceObjects[key].wpOut, - } - selectedModules.itemList.forEach((module) => { - tempRow[module.itemId] = surfaceObjects[key][module.itemId] - }) - tempRows.push(tempRow) - - Object.keys(surfaceObjects[key].circuits).forEach((circuit) => { - let row = { - name: surfaceObjects[key].roofSurface, - circuit: surfaceObjects[key].circuits[circuit].circuit, - wpOut: surfaceObjects[key].circuits[circuit].circuits.wpOut, - } - selectedModules.itemList.forEach((module) => { - row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] - }) - tempRows.push(row) - }) - }) - const tempFooter = { - name: '์ดํ•ฉ', - circuit: '-', - wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0), - } - selectedModules.itemList.forEach((module) => { - tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + row[module.itemId], 0) - }) - - setHeader(tempHeader) - setRows(tempRows.filter((row) => row.wpOut !== 0)) - setFooter(tempFooter) - setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter }) - } - const initSelectedPcsCircuitNumber = () => { swalFire({ title: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.init.info'), @@ -516,9 +413,7 @@ export default function PassivityCircuitAllocation(props) { {header.map((header, i) => ( - {typeof footer[header.prop] === 'number' - ? footer[header.prop].toLocaleString('ko-KR', { maximumFractionDigits: 4 }) - : footer[header.prop]} + {footer[header.prop]} ))} diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index de64c404..80aa17d7 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -1,12 +1,14 @@ import { BATCH_TYPE, POLYGON_TYPE } from '@/common/common' import { canvasState } from '@/store/canvasAtom' import { isOverlap, polygonToTurfPolygon, rectToPolygon } from '@/util/canvas-util' -import { useRecoilValue } from 'recoil' +import { useRecoilValue, useSetRecoilState } from 'recoil' import { v4 as uuidv4 } from 'uuid' import * as turf from '@turf/turf' import { useSwal } from '../useSwal' import { useModuleBasicSetting } from './useModuleBasicSetting' import { useMessage } from '../useMessage' +import { selectedModuleState } from '@/store/selectedModuleOptions' +import { moduleStatisticsState } from '@/store/circuitTrestleAtom' export const MODULE_REMOVE_TYPE = { LEFT: 'left', @@ -35,6 +37,8 @@ export function useModule() { const { swalFire } = useSwal() const { getMessage } = useMessage() const { checkModuleDisjointObjects } = useModuleBasicSetting() + const selectedModules = useRecoilValue(selectedModuleState) + const setModuleStatistics = useSetRecoilState(moduleStatisticsState) const moduleMove = (length, direction) => { const selectedObj = canvas.getActiveObjects() //์„ ํƒ๋œ ๊ฐ์ฒด๋“ค์„ ๊ฐ€์ ธ์˜ด @@ -929,6 +933,92 @@ export function useModule() { .filter((obj) => [BATCH_TYPE.OPENING, BATCH_TYPE.TRIANGLE_DORMER, BATCH_TYPE.PENTAGON_DORMER, BATCH_TYPE.SHADOW].includes(obj.name)) } + const setModuleStatisticsData = () => { + const tempHeader = [ + { name: getMessage('simulator.table.sub1'), prop: 'name' }, + { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.circuit'), prop: 'circuit' }, + ...selectedModules.itemList.map((module) => { + return { + name: module.itemNm, + prop: module.itemId, + } + }), + { name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' }, + ] + const surfaceObjects = {} + const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + const rows = surfaces.map((surface) => { + surfaceObjects[surface.id] = { + roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, + circuit: '-', + amount: 0, + wpOut: 0, + circuits: {}, + } + + surface.modules.forEach((module) => { + if (!surfaceObjects[surface.id][module.moduleInfo.itemId]) { + // ์ง€๋ถ•๋ฉด์— ๋ชจ๋“ˆ ์กด์žฌ ์—ฌ๋ถ€ + surfaceObjects[surface.id][module.moduleInfo.itemId] = 0 // ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™” + } + + surfaceObjects[surface.id][module.moduleInfo.itemId]++ + surfaceObjects[surface.id].wpOut += +module.moduleInfo.wpOut + if (module.circuit) { + if (!surfaceObjects[surface.id].circuits[module.circuitNumber]) { + surfaceObjects[surface.id].circuits[module.circuitNumber] = { + circuit: module.circuitNumber, + wpOut: 0, + circuits: { wpOut: 0 }, + } + + if (!surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]) { + surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId] = 0 + } + } + surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]++ + surfaceObjects[surface.id].circuits[module.circuitNumber].circuits.wpOut += +module.moduleInfo.wpOut + surfaceObjects[surface.id].wpOut -= +module.moduleInfo.wpOut + surfaceObjects[surface.id][module.moduleInfo.itemId]-- + } + }) + }) + let tempRows = [] + Object.keys(surfaceObjects).forEach((key) => { + let tempRow = { + name: surfaceObjects[key].roofSurface, + circuit: surfaceObjects[key].circuit, + wpOut: parseInt((surfaceObjects[key].wpOut / 1000).toFixed(3)), + } + selectedModules.itemList.forEach((module) => { + tempRow[module.itemId] = surfaceObjects[key][module.itemId] + }) + tempRows.push(tempRow) + + Object.keys(surfaceObjects[key].circuits).forEach((circuit) => { + let row = { + name: surfaceObjects[key].roofSurface, + circuit: surfaceObjects[key].circuits[circuit].circuit, + wpOut: parseInt((surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000).toFixed(3)), + } + selectedModules.itemList.forEach((module) => { + row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] + }) + tempRows.push(row) + }) + }) + + const tempFooter = { + name: getMessage('modal.panel.batch.statistic.total'), + circuit: '-', + wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0), + } + selectedModules.itemList.forEach((module) => { + tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + row[module.itemId], 0) + }) + setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter }) + } + return { moduleMove, moduleMultiMove, @@ -942,5 +1032,6 @@ export function useModule() { muduleRowInsert, modulesRemove, alignModule, + setModuleStatisticsData, } } diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 20575fd7..9665955e 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -2452,7 +2452,7 @@ export function useModuleBasicSetting(tabNum) { ...surface, name: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, // ์ง€๋ถ•๋ฉด // powerGeneration: wpOut.toLocaleString('ko-KR', { maximumFractionDigits: 4 }), - wpOut: wpOut, + wpOut: (wpOut / 1000).toFixed(3), } }) @@ -2465,7 +2465,7 @@ export function useModuleBasicSetting(tabNum) { }), { name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' }, ] - let footer = ['ํ•ฉ๊ณ„'] + let footer = [getMessage('modal.panel.batch.statistic.total')] let footerData = {} rows.forEach((row) => { Object.keys(moduleInfo).map((key) => { @@ -2476,7 +2476,7 @@ export function useModuleBasicSetting(tabNum) { Object.keys(footerData).forEach((key) => { footer.push(footerData[key]) }) - footer.push(totalWpout) + footer.push((totalWpout / 1000).toFixed(3)) console.log({ header: header, rows, footer: footer }) setModuleStatistics({ header: header, rows, footer: footer }) } diff --git a/src/store/circuitTrestleAtom.js b/src/store/circuitTrestleAtom.js index ea54835a..d1477e13 100644 --- a/src/store/circuitTrestleAtom.js +++ b/src/store/circuitTrestleAtom.js @@ -40,7 +40,10 @@ export const moduleStatisticsState = atom({ { name: `๋ฐœ์ „๋Ÿ‰(kW)`, prop: 'amount' }, ], rows: [], - footer: ['ํ•ฉ๊ณ„', '0'], + footer: [ + { name: '-', prop: 'name' }, + { name: 0, prop: 'amount' }, + ], }, dangerouslyAllowMutability: true, }) From 870a39d74d1edaac0e913d8d6bda7871ca211537 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 5 Feb 2025 09:58:05 +0900 Subject: [PATCH 047/213] =?UTF-8?q?=F0=9F=93=83test:=20=EA=B2=AC=EC=A0=81?= =?UTF-8?q?=EC=84=9C=20=EC=9D=B4=EB=8F=99=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Playground.jsx | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/components/Playground.jsx b/src/components/Playground.jsx index b2e64edc..8a365646 100644 --- a/src/components/Playground.jsx +++ b/src/components/Playground.jsx @@ -28,6 +28,8 @@ import useSWRMutation from 'swr/mutation' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' import { canvasPopupStatusStore } from '@/store/canvasPopupStatusAtom' import { moduleSelectionDataPlanListState } from '@/store/selectedModuleOptions' +import { useRouter } from 'next/navigation' +import { QcastContext } from '@/app/QcastProvider' export default function Playground() { const [useCadFile, setUseCadFile] = useRecoilState(useCadFileState) @@ -56,6 +58,13 @@ export default function Playground() { const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) + const router = useRouter() + const { setIsGlobalLoading } = useContext(QcastContext) + + useEffect(() => { + setIsGlobalLoading(false) + }, []) + useEffect(() => { console.log('textInput:', textInput) }, [textInput]) @@ -891,6 +900,19 @@ export default function Playground() { Test Data insert
+
+ +
) From 10f77a4acdea7df168ecfb5672a72caf5c492594 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 10:08:26 +0900 Subject: [PATCH 048/213] =?UTF-8?q?=EB=B3=B5=EC=8B=9C=EB=8F=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=9D=B4=20=EC=95=84=EB=8B=8C=20=EA=B2=BD=EC=9A=B0?= =?UTF-8?q?=EB=8A=94=20=EA=B0=81=EB=8F=84=20=EA=B3=84=EC=82=B0=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=20x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useTrestle.js | 14 +++++++++++++- src/util/canvas-util.js | 5 ----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 9c580971..fffe27c9 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -2,9 +2,10 @@ import { useRecoilValue } from 'recoil' import { canvasState, currentAngleTypeSelector } from '@/store/canvasAtom' import { POLYGON_TYPE } from '@/common/common' import { moduleSelectionDataState } from '@/store/selectedModuleOptions' -import { getDegreeByChon, getTrestleLength } from '@/util/canvas-util' +import { getDegreeByChon } from '@/util/canvas-util' import { v4 as uuidv4 } from 'uuid' import { useMasterController } from '@/hooks/common/useMasterController' +import { basicSettingState } from '@/store/settingAtom' // ํšŒ๋กœ ๋ฐ ๊ฐ€๋Œ€์„ค์ • export const useTrestle = () => { @@ -12,6 +13,7 @@ export const useTrestle = () => { const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ตœ์ข… ๋ฐ์ดํ„ฐ const { getQuotationItem } = useMasterController() const currentAngleType = useRecoilValue(currentAngleTypeSelector) + const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet const apply = () => { try { @@ -1787,6 +1789,16 @@ export const useTrestle = () => { return groups } + // ๊ฐ๋„์— ๋”ฐ๋ฅธ ๊ธธ์ด ๋ฐ˜ํ™˜ + function getTrestleLength(length, degree) { + if (roofSizeSet !== 1) { + // ๋ณต์‹œ๋„ ์ž…๋ ฅ์ด ์•„๋‹Œ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ๊ธธ์ด return + return length + } + const radians = (degree * Math.PI) / 180 + return length * Math.cos(radians) + } + // ๊ฒฌ์ ์„œ ์•„์ดํ…œ ์กฐํšŒ api parameter ์ƒ์„ฑ const getTrestleParams = (surface) => { const result = calculateForApi(surface) diff --git a/src/util/canvas-util.js b/src/util/canvas-util.js index 2204eaec..a0442d9f 100644 --- a/src/util/canvas-util.js +++ b/src/util/canvas-util.js @@ -1031,8 +1031,3 @@ export function calculateVisibleModuleHeight(sourceWidth, sourceHeight, angle, d height: Number(visibleHeight.toFixed(1)), // ์†Œ์ˆ˜์  ๋‘ ์ž๋ฆฌ๋กœ ๊ณ ์ • } } - -export function getTrestleLength(length, degree) { - const radians = (degree * Math.PI) / 180 - return length * Math.cos(radians) -} From cbdaaba2cef5a02b23344fec1d8be5d6d9ca765a Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 5 Feb 2025 10:23:22 +0900 Subject: [PATCH 049/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EB=B2=88=EC=97=AD=ED=8C=8C=EC=9D=BC=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/ja.json | 190 ++++++++++++++++++++++---------------------- src/locales/ko.json | 14 ++-- 2 files changed, 100 insertions(+), 104 deletions(-) diff --git a/src/locales/ja.json b/src/locales/ja.json index 47257675..0514e960 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -5,11 +5,11 @@ "header.menus.management": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจๅ›ณ้ขใฎ็ฎก็†", "header.menus.management.newStuff": "ๆ–ฐ่ฆ็‰ฉไปถ็™ป้Œฒ", "header.menus.management.detail": "็‰ฉไปถ่ฉณ็ดฐ", - "header.menus.management.stuffList": "็‰ฉไปถใฎ็พ็Šถ", + "header.menus.management.stuffList": "่ฆ‹็ฉ็Šถๆณ", "header.menus.community": "ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃ", "header.menus.community.notice": "ใŠ็Ÿฅใ‚‰ใ›", "header.menus.community.faq": "FAQ", - "header.menus.community.archive": "ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", + "header.menus.community.archive": "ๆ–‡ๆ›ธใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", "header.logout": "ใƒญใ‚ฐใ‚ขใ‚ฆใƒˆ", "header.go": "็งปๅ‹•", "header.online.warranty.system": "ใ‚ชใƒณใƒฉใ‚คใƒณไฟ่จผใ‚ทใ‚นใƒ†ใƒ ", @@ -17,23 +17,23 @@ "plan.menu.plan.drawing": "็‰ฉไปถๆƒ…ๅ ฑ", "plan.menu.placement.surface.initial.setting": "้…็ฝฎ้ขๅˆๆœŸ่จญๅฎš", "modal.placement.initial.setting.plan.drawing": "ๅ›ณ้ขใฎไฝœๆˆๆ–นๆณ•", - "modal.placement.initial.setting.plan.drawing.size.stuff": "ๅฏธๆณ•ๅ…ฅๅŠ›ใซใ‚ˆใ‚‹ๅ“็›ฎไฝœๆˆ", + "modal.placement.initial.setting.plan.drawing.size.stuff": "ๅฏธๆณ•ๅ…ฅๅŠ›ใซใ‚ˆใ‚‹็‰ฉไปถไฝœๆˆ", "modal.placement.initial.setting.size": "ๅฏธๆณ•ๅ…ฅๅŠ›ๆ–นๆณ•", "modal.placement.initial.setting.size.info": "ๅฏธๆณ•ๅ…ฅๅŠ›ๆ–นๆณ•ๆกˆๅ†…", - "modal.placement.initial.setting.size.roof": "่ค‡่ฆ–ๅ›ณๅ…ฅๅŠ›", + "modal.placement.initial.setting.size.roof": "ไผๅ›ณๅ…ฅๅŠ›", "modal.placement.initial.setting.size.roof.info": "ๅนณ้ขใฎๅค–ๅฃ็ทšใจ็ซ‹้ขใฎๅฑ‹ๆ นๅ‹พ้…ใซๅŸบใฅใ„ใฆไฝœ็”ปใ™ใ‚‹ๅ ดๅˆ้ธๆŠž", "modal.placement.initial.setting.size.actual": "ๅฎŸๆธฌๅ€คๅ…ฅๅŠ›", - "modal.placement.initial.setting.size.actual.info": "็พๅœฐๅฑ‹ๆ นใฎๅค–ๅ‘จๅฏธๆณ•ใ‚’ๅ…ฅๅŠ›ใ—ใฆไฝœ็”ปใ™ใ‚‹ๅ ดๅˆ้ธๆŠž", - "modal.placement.initial.setting.size.none.pitch": "้™ธไธŠๅฑ‹ๆ น", + "modal.placement.initial.setting.size.actual.info": "ๅฑ‹ๆ นใฎๅค–ๅ‘จๅฏธๆณ•ใ‚’ๅ…ฅๅŠ›ใ—ใฆไฝœ็”ปใ™ใ‚‹ๅ ดๅˆ้ธๆŠž", + "modal.placement.initial.setting.size.none.pitch": "้™ธๅฑ‹ๆ น", "modal.placement.initial.setting.size.none.pitch.info": "ๅ‚พๆ–œใฎใชใ„ๅนณ้ขๅฝข็Šถใฎๅฑ‹ๆ นใซใƒ‘ใƒใƒซใ‚’้…็ฝฎใ™ใ‚‹ๅ ดๅˆใซ้ธๆŠž", - "modal.placement.initial.setting.roof.angle.setting": "ๅฑ‹ๆ น่ง’ๅบฆ่จญๅฎš", + "modal.placement.initial.setting.roof.angle.setting": "่ง’ๅบฆ่จญๅฎš", "modal.placement.initial.setting.roof.pitch": "ๅ‚พๆ–œ", "modal.placement.initial.setting.roof.angle": "่ง’ๅบฆ", "modal.placement.initial.setting.roof.material": "ๅฑ‹ๆ นๆ้ธๆŠž๏ผˆๅ˜ไฝmm๏ผ‰", "modal.placement.initial.setting.roof.material.info": "ๅฏพๅฟœๅฏ่ƒฝใชๅฑ‹ๆ นๆใ‚„่ถณๅ ดใฏ้™ๅฎšใ•ใ‚Œใพใ™ใฎใงใ€ๅฟ…ใšไบ‹ๅ‰ใƒžใƒ‹ใƒฅใ‚ขใƒซใ‚’ใ”็ขบ่ชใใ ใ•ใ„ใ€‚", "modal.placement.initial.setting.rafter": "ๅž‚ๆœจ", "modal.roof.shape.setting": "ๅฑ‹ๆ นๅฝข็Šถใฎ่จญๅฎš", - "modal.roof.shape.setting.ridge": "้พไธธ", + "modal.roof.shape.setting.ridge": "ๆฃŸ", "modal.roof.shape.setting.patten.a": "Aใƒ‘ใ‚ฟใƒผใƒณ", "modal.roof.shape.setting.patten.b": "Bใƒ‘ใ‚ฟใƒผใƒณ", "modal.roof.shape.setting.side": "ๅˆฅใซ่จญๅฎš", @@ -42,14 +42,14 @@ "plan.menu.roof.cover.roof.shape.setting": "ๅฑ‹ๆ นๅฝข็Šถใฎ่จญๅฎš", "plan.menu.roof.cover.roof.shape.passivity.setting": "ๅฑ‹ๆ นๅฝข็Šถใฎๆ‰‹ๅ‹•่จญๅฎš", "plan.menu.roof.cover.eaves.kerava.edit": "่ป’ใƒปใ‚ฑใƒฉใƒๅค‰ๆ›ด", - "plan.menu.roof.cover.movement.shape.updown": "้Š…็ทš็งปๅ‹•ใƒปๅž‹ไธŠใ’ไธ‹ใ‚Š", - "modal.movement.flow.line.move": "้Š…็ทšใฎ็งปๅ‹•", + "plan.menu.roof.cover.movement.shape.updown": "่ป’็ทš็งปๅ‹•ใƒปๆกไธŠใ’ไธ‹ใ‚Š", + "modal.movement.flow.line.move": "่ป’็ทšใฎ็งปๅ‹•", "modal.movement.flow.line.move.alert": "็งปๅ‹•ใ™ใ‚‹ๆ•ฐใชใ„ใ€‚", - "modal.movement.flow.line.updown": "ๅž‹ไธŠใ’ใƒปไธ‹ใ‚Š", + "modal.movement.flow.line.updown": "ๆกไธŠใ’ใƒปไธ‹ใ‚Š", "modal.movement.flow.line.updown.info": "ๆกใฎ็•ฐใชใ‚‹่พบใ‚’้ธๆŠžใ—ใ€ๅน…ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚", "modal.movement.flow.line.updown.up": "ๆกใ‚’ไธŠใ’ใ‚‹", "modal.movement.flow.line.updown.down": "ๆกๆ•ฐใ‚’ไธ‹ใ’ใ‚‹", - "modal.movement.flow.line.info": "้Š…็ทšใ‚’้ธๆŠžใ—ใฆ็งปๅ‹•ๅน…ใ‚’ๆŒ‡ๅฎšใ—ใพใ™", + "modal.movement.flow.line.info": "่ป’็ทšใ‚’้ธๆŠžใ—ใฆ็งปๅ‹•ๅน…ใ‚’ๆŒ‡ๅฎšใ—ใพใ™", "modal.movement.flow.line.bottom.left": "้ซ˜ใ•ๅค‰ๆ›ด๏ผšไธ‹ใ€ๅทฆ", "modal.movement.flow.line.top.right": "้ซ˜ใ•ๅค‰ๆ›ด๏ผšไธŠใ€ๅณ", "plan.menu.roof.cover.outline.edit.offset": "ๅค–ๅฃใฎ็ทจ้›†ใจใ‚ชใƒ•ใ‚ปใƒƒใƒˆ", @@ -59,17 +59,17 @@ "modal.cover.outline.drawing": "ๅค–ๅฃ็ทšใฎไฝœๆˆ", "modal.cover.outline": "ๅค–ๅฃ็ทš", "modal.cover.outline.right.angle": "็›ด่ง’", - "modal.cover.outline2": "ใ‚คใƒปใ‚ฐใƒ™", + "modal.cover.outline2": "็•ฐๅ‹พ้…", "modal.cover.outline.angle": "่ง’ๅบฆ", "modal.cover.outline.diagonal": "ๅฏพ่ง’็ทš", "modal.cover.outline.setting": "่จญๅฎš", "modal.cover.outline.length": "้•ทใ•(mm)", "modal.cover.outline.arrow": "ๆ–นๅ‘๏ผˆ็Ÿขๅฐ)", "modal.cover.outline.fix": "ๅค–ๅฃ็ทš็ขบๅฎš", - "modal.cover.outline.rollback": "ไธ€ๅค‰ๆˆฆใซๆˆปใ‚‹", + "modal.cover.outline.rollback": "ๅ‰ใซๆˆปใ‚‹", "modal.cover.outline.finish": "่จญๅฎšๅฎŒไบ†", "common.setting.finish": "่จญๅฎšๅฎŒไบ†", - "common.setting.rollback": "ไธ€ๅค‰ๆˆฆใซๆˆปใ‚‹", + "common.setting.rollback": "ๅ‰ใซๆˆปใ‚‹", "modal.cover.outline.remove": "ๅค–ๅฃใฎๅ–ใ‚Šๅค–ใ—", "modal.cover.outline.select.move": "ๅค–ๅฃ้ธๆŠžใฎ็งปๅ‹•", "plan.menu.placement.surface": "้…็ฝฎ้ข", @@ -77,29 +77,29 @@ "plan.menu.placement.surface.drawing": "้…็ฝฎ้ขใฎๆ็”ป", "modal.placement.surface.drawing.straight.line": "็›ด็ทš", "modal.placement.surface.drawing.right.angle": "็›ด่ง’", - "modal.placement.surface.drawing.double.pitch": "ใ‚คใƒปใ‚ฐใƒ™", + "modal.placement.surface.drawing.double.pitch": "็•ฐๅ‹พ้…", "modal.placement.surface.drawing.angle": "่ง’ๅบฆ", "modal.placement.surface.drawing.diagonal": "ๅฏพ่ง’็ทš", "modal.placement.surface.drawing.fix": "้…็ฝฎ้ข็ขบๅฎš", "plan.menu.placement.surface.arrangement": "้ขๅฝข็Šถใฎ้…็ฝฎ", - "plan.menu.placement.surface.object": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎ้…็ฝฎ", + "plan.menu.placement.surface.object": "ใƒขใ‚ธใƒฅใƒผใƒซ้…็ฝฎ", "plan.menu.placement.surface.all.remove": "้…็ฝฎ้ขๅ…จไฝ“ใ‚’ๅ‰Š้™ค", "plan.menu.module.circuit.setting": "ใƒขใ‚ธใƒฅใƒผใƒซใ€ๅ›ž่ทฏๆง‹ๆˆ", "plan.menu.module.circuit.setting.default": "ใƒขใ‚ธใƒฅใƒผใƒซ/ๆžถๅฐ่จญๅฎš", "modal.module.basic.setting.orientation.setting": "ๆ–นไฝ่จญๅฎš", "modal.module.basic.setting.orientation.setting.info": "โ€ปใ‚ทใƒŸใƒฅใƒฌใƒผใ‚ทใƒงใƒณ่จˆ็ฎ—็”จๆ–นไฝใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ๅ—ใฎๆ–นไฝใ‚’่จญๅฎšใ—ใฆใใ ใ•ใ„ใ€‚", - "modal.module.basic.setting.orientation.setting.angle.passivity": "่ง’ๅบฆใ‚’็›ดๆŽฅๅ…ฅๅŠ›", + "modal.module.basic.setting.orientation.setting.angle.passivity": "ๅ‹พ้…ใ‚’็›ดๆŽฅๅ…ฅๅŠ›", "modal.module.basic.setting.module.roof.material": "ๅฑ‹ๆ นๆ", - "modal.module.basic.setting.module.trestle.maker": "ใ‚ซใƒ‡ใƒกใƒผใ‚ฌใƒผ", + "modal.module.basic.setting.module.trestle.maker": "ๆžถๅฐใƒกใƒผใ‚ซใƒผ", "modal.module.basic.setting.module.rafter.margin": "ๅž‚ๆœจใฎ้–“้š”", "modal.module.basic.setting.module.construction.method": "ๅทฅๆณ•", "modal.module.basic.setting.module.under.roof": "ๅฑ‹ๆ นใฎไธ‹", "modal.module.basic.setting.module.setting": "ใƒขใ‚ธใƒฅใƒผใƒซใฎ้ธๆŠž", - "modal.module.basic.setting.module.hajebichi": "ใƒžใƒณใƒ‰ใƒณใƒ”ใƒƒใƒ", + "modal.module.basic.setting.module.hajebichi": "ใƒใ‚ผใƒ”ใƒƒใƒ", "modal.module.basic.setting.module.setting.info1": "โ€ปๅ‹พ้…ใฎ็ฏ„ๅ›ฒใซใฏๅˆถ้™ใŒใ‚ใ‚Šใพใ™ใ€‚ๅฑ‹ๆ นๅ‚พๆ–œใŒ2.5ๅ€คๆœชๆบ€10ๅ€คใ‚’่ถ…ใˆใ‚‹ๅ ดๅˆใฏใ€ๆ–ฝๅทฅใŒๅฏ่ƒฝใ‹ใฉใ†ใ‹ๆ–ฝๅทฅใƒžใƒ‹ใƒฅใ‚ขใƒซใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚", "modal.module.basic.setting.module.setting.info2": "โ€ปใƒขใ‚ธใƒฅใƒผใƒซ้…็ฝฎๆ™‚ใฏใ€ๆ–ฝๅทฅใƒžใƒ‹ใƒฅใ‚ขใƒซใซ่จ˜่ผ‰ใ•ใ‚Œใฆใ„ใ‚‹๏ผœใƒขใ‚ธใƒฅใƒผใƒซ้…็ฝฎๆกไปถ๏ผžใ‚’ๅฟ…ใšใ”็ขบ่ชใใ ใ•ใ„ใ€‚", "modal.module.basic.setting.module.stuff.info": "็‰ฉไปถๆƒ…ๅ ฑ", - "modal.module.basic.setting.module.surface.type": "้ข็…งๅบฆ", + "modal.module.basic.setting.module.surface.type": "้ข็ฒ—ๅบฆๅŒบๅˆ†", "modal.module.basic.setting.module.fitting.height": "่จญ็ฝฎ้ซ˜ใ•", "modal.module.basic.setting.module.standard.wind.speed": "ๅŸบๆบ–้ขจ้€Ÿ", "modal.module.basic.setting.module.standard.snowfall.amount": "็ฉ้›ช้‡", @@ -107,33 +107,33 @@ "modal.module.basic.setting.module.enforce.construction": "ๅผทๅŒ–ๆ–ฝๅทฅ", "modal.module.basic.setting.module.multiple.construction": "ๅคš่จญๆ–ฝๅทฅ", "modal.module.basic.setting.module.eaves.bar.fitting": "่ป’ใ‚ซใƒใƒผใฎ่จญ็ฝฎ", - "modal.module.basic.setting.module.blind.metal.fitting": "็ฉ้›ช้˜ฒๆญขไปŠใ™ใใ‚คใƒณใ‚นใƒˆใƒผใƒซ", + "modal.module.basic.setting.module.blind.metal.fitting": "็ฉ้›ช้˜ฒๆญข้‡‘ๅ…ท่จญ็ฝฎ", "modal.module.basic.setting.module.select": "ใƒขใ‚ธใƒฅใƒผใƒซ/ๆžถๅฐ้ธๆŠž", "modal.module.basic.setting.module.placement": "ใƒขใ‚ธใƒฅใƒผใƒซใฎ้…็ฝฎ", "modal.module.basic.setting.module.placement.select.fitting.type": "่จญ็ฝฎๅฝขๆ…‹ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", - "modal.module.basic.setting.module.placement.waterfowl.arrangement": "ๆฐด้ณฅใฎ้…็ฝฎ", + "modal.module.basic.setting.module.placement.waterfowl.arrangement": "ๅƒ้ณฅ้…็ฝฎ", "modal.module.basic.setting.module.placement.do": "ใ™ใ‚‹", "modal.module.basic.setting.module.placement.do.not": "ใ—ใชใ„", "modal.module.basic.setting.module.placement.arrangement.standard": "้…็ฝฎๅŸบๆบ–", "modal.module.basic.setting.module.placement.arrangement.standard.center": "ไธญๅคฎ", "modal.module.basic.setting.module.placement.arrangement.standard.eaves": "่ป’", - "modal.module.basic.setting.module.placement.arrangement.standard.ridge": "้พไธธ", + "modal.module.basic.setting.module.placement.arrangement.standard.ridge": "ๆฃŸ", "modal.module.basic.setting.module.placement.maximum": "ๆœ€ๅคง้…็ฝฎ", "modal.module.basic.setting.pitch.module.placement.standard.setting": "้…็ฝฎๅŸบๆบ–่จญๅฎš", "modal.module.basic.setting.pitch.module.placement.standard.setting.south": "ๅ—ๅ‘ใ่จญ็ฝฎ", - "modal.module.basic.setting.pitch.module.placement.standard.setting.select": "ๆŒ‡ๅฎšใ—ใŸ่พบใ‚Šใƒ™ใƒผใ‚นใงใ‚คใƒณใ‚นใƒˆใƒผใƒซ", + "modal.module.basic.setting.pitch.module.placement.standard.setting.select": "ๆŒ‡ๅฎšใ—ใŸ่พบใ‚’ๅŸบๆบ–ใซ่จญ็ฝฎ", "modal.module.basic.setting.pitch.module.allocation.setting": "ๅ‰ฒใ‚Šๅฝ“ใฆ่จญๅฎš", - "modal.module.basic.setting.pitch.module.allocation.setting.info": "โ€ป้…็ฝฎใƒ‘ใƒใƒซ็จฎ้กž1็จฎ้กžๅ ดๅˆใฎใฟไฝฟ็”จใ™ใ‚‹ๆ•ฐใ‚ใ‚Šใพใ™ใ€‚", + "modal.module.basic.setting.pitch.module.allocation.setting.info": "โ€ป้…็ฝฎใƒ‘ใƒใƒซใฎ็จฎ้กžใŒ1็จฎ้กžใฎๅ ดๅˆใฎใฟไฝฟ็”จใงใใพใ™ใ€‚", "modal.module.basic.setting.pitch.module.row.amount": "ๅ˜ๆ•ฐ", "modal.module.basic.setting.pitch.module.row.margin": "ไธŠไธ‹้–“้š”", - "modal.module.basic.setting.pitch.module.column.amount": "็†ฑๆฐด", + "modal.module.basic.setting.pitch.module.column.amount": "ๅˆ—ๆ•ฐ", "modal.module.basic.setting.pitch.module.column.margin": "ๅทฆๅณ้–“้š”", - "modal.module.basic.setting.prev": "ไปฅๅ‰", + "modal.module.basic.setting.prev": "็งป่ปข", "modal.module.basic.setting.passivity.placement": "ๆ‰‹ๅ‹•้…็ฝฎ", "modal.module.basic.setting.auto.placement": "่จญๅฎšๅ€คใซ่‡ชๅ‹•้…็ฝฎ", "plan.menu.module.circuit.setting.circuit.trestle.setting": "ๅ›ž่ทฏ่จญๅฎš", "modal.circuit.trestle.setting": "ๅ›ž่ทฏ่จญๅฎš", - "modal.circuit.trestle.setting.alloc.trestle": "ไปฎไปฃๅ‰ฒๅฝ“", + "modal.circuit.trestle.setting.alloc.trestle": "ๆžถๅฐ้…็ฝฎ", "modal.circuit.trestle.setting.power.conditional.select": "ใƒ‘ใƒฏใƒผใ‚ณใƒณใƒ‡ใ‚ฃใ‚ทใƒงใƒŠใƒผใฎ้ธๆŠž", "modal.circuit.trestle.setting.power.conditional.select.cold.region": "ๅฏ’ๅ†ทๅœฐไป•ๆง˜", "modal.circuit.trestle.setting.power.conditional.select.name": "ๅ็งฐ", @@ -169,7 +169,7 @@ "modal.roof.alloc.default.roof.material": "ๅŸบๆœฌๅฑ‹ๆ นๆ", "modal.roof.alloc.select.roof.material": "ๅฑ‹ๆ นๆใฎ้ธๆŠž", "modal.roof.alloc.select.parallel": "ไธฆๅˆ—ๅผ", - "modal.roof.alloc.select.stairs": "ใ‚ซใ‚นใ‚ฑใƒผใƒ‰", + "modal.roof.alloc.select.stairs": "้šŽๆฎตๅผ", "modal.roof.alloc.apply": "้ธๆŠžใ—ใŸๅฑ‹ๆ นๆใจใ—ใฆๅ‰ฒใ‚Šๅฝ“ใฆ", "plan.menu.estimate.docDown": "ๆ–‡ๆ›ธใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", "plan.menu.estimate.save": "ไฟๅญ˜", @@ -191,7 +191,7 @@ "common.vertical": "็ธฆ", "modal.font.setting.display": "่ฆ‹ใ‚‹", "modal.font.setting.info": "ใ“ใ‚ŒใฏOpen Typeใƒ•ใ‚ฉใƒณใƒˆใงใ™ใ€‚ใƒ—ใƒชใƒณใ‚ฟใ‚„็”ป้ขใงใ‚‚ๅŒใ˜ใƒ•ใ‚ฉใƒณใƒˆใ‚’ไฝฟ็”จใ—ใฆใใ ใ•ใ„ใ€‚", - "modal.canvas.setting": "Canvasใฎ่จญๅฎš", + "modal.canvas.setting": "ไฝœๅ›ณใฎ่จญๅฎš", "modal.canvas.setting.display": "ใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚ค่จญๅฎš", "modal.canvas.setting.font.plan": "ใƒ•ใ‚ฉใƒณใƒˆใจๅ›ณ้ขใ‚ตใ‚คใ‚บใฎ่จญๅฎš", "modal.canvas.setting.grid": "ใ‚ฐใƒชใƒƒใƒ‰", @@ -252,7 +252,7 @@ "modal.canvas.setting.first.option.image": "็”ปๅƒ่กจ็คบ", "modal.canvas.setting.first.option.total": "้›†่จˆ่กจใ‚’่กจ็คบ", "modal.canvas.setting.first.option.dimension": "ๅฏธๆณ•่กจ็คบ", - "modal.canvas.setting.first.option.corridor.dimension": "ๅปŠไธ‹ๅฏธๆณ•่กจ็คบ", + "modal.canvas.setting.first.option.corridor.dimension": "ไผใ›ๅ›ณๅฏธๆณ•่กจ็คบ", "modal.canvas.setting.first.option.real.dimension": "ๅฎŸๅฏธ่กจ็คบ", "modal.canvas.setting.first.option.none.dimension": "ๅฏธๆณ•่กจ็คบใชใ—", "modal.canvas.setting.first.option.display": "็”ป้ข่กจ็คบ", @@ -269,7 +269,7 @@ "modal.wallline.offset.setting": "ๅค–ๅฃใฎ็ทจ้›†ใจใ‚ชใƒ•ใ‚ปใƒƒใƒˆ", "modal.wallline.offset.setting.wallline.edit": "ๅค–ๅฃใฎ็ทจ้›†", "modal.wallline.offset.setting.wallline.edit.info": "่พบใจๅง‹็‚นใ‚’้ธๆŠžใ—ใฆ้•ทใ•ใจๆ–นๅ‘ใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„ใ€‚", - "modal.wallline.offset.setting.wallline.edit.position": "ๆ”ฏๅบ—", + "modal.wallline.offset.setting.wallline.edit.position": "ๅง‹็‚น", "modal.wallline.offset.setting.offset": "ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ", "modal.wallline.offset.setting.offset.info": "ใ‚ชใƒ•ใ‚ปใƒƒใƒˆใ—ใŸใ„ๅค–ๅฃ็ทšใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", "modal.object.setting.type.open.space.placement": "้–‹ๅฃ้ƒจใฎ้…็ฝฎ", @@ -282,7 +282,7 @@ "modal.object.setting.height": "็ธฆ้•ท", "modal.object.setting.area.cross": "ใ‚จใƒชใ‚ขไบคๅทฎ", "modal.object.setting.size.setting": "ใ‚ตใ‚คใ‚บ่จญๅฎš", - "modal.object.setting.agreement.depth": "ๅŒๆ„ใฎๆทฑใ•", + "modal.object.setting.agreement.depth": "ๆฃŸใฎ้•ทใ•ใƒปๆทฑใ•", "modal.object.setting.offset.depth": "ๅ‡บๅน…๏ผˆๆทฑใ•๏ผ‰", "modal.object.setting.offset.width": "ๅ‡บๅน…๏ผˆๅน…๏ผ‰", "modal.object.setting.direction.select": "ๆ–นๅ‘ใฎ้ธๆŠž", @@ -330,7 +330,7 @@ "contextmenu.wallline.remove": "ๅค–ๅฃใฎๅ‰Š้™ค", "contextmenu.size.edit": "ใ‚ตใ‚คใ‚บๅค‰ๆ›ด", "modal.auxiliary.size.edit": "่ฃœๅŠฉ็ทšใ‚ตใ‚คใ‚บๅค‰ๆ›ด", - "modal.auxiliary.size.edit.point": "ๆ”ฏๅบ—", + "modal.auxiliary.size.edit.point": "ๅง‹็‚น", "contextmenu.auxiliary.move": "่ฃœๅŠฉ็ทšใฎ็งปๅ‹•", "modal.auxiliary.move": "่ฃœๅŠฉ็ทšใฎ็งปๅ‹•", "modal.auxiliary.move.info": "็งปๅ‹•ใ™ใ‚‹ๆ–นๅ‘ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", @@ -361,12 +361,12 @@ "modal.panel.column.insert.type.left": "ๅทฆๆŒฟๅ…ฅ", "modal.panel.column.insert.type.right": "ๅณๆŒฟๅ…ฅ", "modal.image.load.size.rotate": "ใ‚ตใ‚คใ‚บๅค‰ๆ›ดใจๅ›ž่ปข", - "contextmenu.row.move": "ใŸใ ใ—็งปๅ‹•", - "contextmenu.row.copy": "ๅ˜ใ‚ณใƒ”ใƒผ", - "contextmenu.row.remove": "ใŸใ ใ—ๅ‰Š้™ค", - "modal.row.remove": "ใŸใ ใ—ๅ‰Š้™ค", + "contextmenu.row.move": "ๆฎต็งปๅ‹•", + "contextmenu.row.copy": "ๆฎตใ‚ณใƒ”ใƒผ", + "contextmenu.row.remove": "ๆฎตๅ‰Š้™ค", + "modal.row.remove": "ๆฎตๅ‰Š้™ค", "modal.row.remove.info": "ๅ‰Š้™คใ‚นใƒ†ใƒผใ‚ธใ‚’ใฉใฎใ‚ˆใ†ใซใ—ใพใ™ใ‹๏ผŸ", - "modal.row.remove.type.up": "้•่ถณใซๆธ›ใ‚‹", + "modal.row.remove.type.up": "ไธŠใซๆธ›ใ‚‰ใ™", "modal.row.remove.type.down": "ไธ‹ๅ‘ใใซๆธ›ใ‚‰ใ™", "modal.row.remove.type.side": "ไธกๅดใซๆธ›ใ‚‹", "modal.row.remove.type.none": "ๆธ›ใ‚‰ใ•ใชใ„", @@ -374,7 +374,7 @@ "modal.row.insert": "ๆฎตๆŒฟๅ…ฅ", "modal.row.insert.info": "ๆŒฟๅ…ฅใ™ใ‚‹ๆ–นๅ‘ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", "modal.row.insert.type.up": "ไธŠ้ƒจๆŒฟๅ…ฅ", - "modal.row.insert.type.down": "ไธ‹ใฎๆŒฟๅ…ฅ", + "modal.row.insert.type.down": "ไธ‹้ƒจๆŒฟๅ…ฅ", "modal.move.setting": "็งปๅ‹•่จญๅฎš", "modal.move.setting.info": "้–“้š”ใ‚’่จญๅฎšใ—ใ€็งปๅ‹•ๆ–นๅ‘ใ‚’้ธๆŠžใ—ใพใ™ใ€‚", "modal.copy.setting": "ใ‚ณใƒ”ใƒผ่จญๅฎš", @@ -389,7 +389,7 @@ "modal.display.edit.info": "ๅฏธๆณ•็ทšใซ่กจ็คบใ™ใ‚‹ๆ•ฐๅ€คใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "modal.display.edit.before.length": "ๆ—ขๅญ˜ใฎ้•ทใ•", "modal.display.edit.after.length": "ๅค‰ๆ›ดใฎ้•ทใ•", - "modal.display.edit.corner.valley": "ใ‚ณใƒผใƒŠใƒผใƒปใ‚ดใƒผใƒซใ‚ฑใƒผใ‚น", + "modal.display.edit.corner.valley": "้š…ยท่ฐทใฎๅ ดๅˆ", "modal.display.edit.input.slope": "ๅ‚พใใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "modal.display.edit.input.slope.info": "ๅ‚พใ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใ€ๅ…ฅๅŠ›ใ—ใŸๆ•ฐๅ€คใซๅ‚พใ่จˆ็ฎ—ใ‚’ใ—ใŸๆ•ฐๅ€คใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚", "modal.distance": "่ท้›ขๆธฌๅฎš", @@ -466,7 +466,7 @@ "common.message.confirm.confirm": "ๆ‰ฟ่ชใ—ใพใ™ใ‹?", "common.message.confirm.request": "ๆ‰ฟ่ชใ‚’ใƒชใ‚ฏใ‚จใ‚นใƒˆใ—ใพใ™ใ‹?", "common.message.confirm.delete": "ๅ‰Š้™คใ—ใพใ™ใ‹?", - "common.message.confirm.close": "้–‰ใ˜ใ‚‹ใ‹๏ผŸ", + "common.message.confirm.close": "้–‰ใ˜ใพใ™ใ‹๏ผŸ", "common.message.confirm.unclose": "ใ‚ฏใƒญใƒผใ‚บใ‚’ใ‚ญใƒฃใƒณใ‚ปใƒซใ—ใพใ™ใ‹?", "common.message.confirm.cancel": "ใ‚ญใƒฃใƒณใ‚ปใƒซใ—ใพใ™ใ‹๏ผŸ", "common.message.confirm.uncancel": "ใ‚ญใƒฃใƒณใ‚ปใƒซใ‚’ใ‚ญใƒฃใƒณใ‚ปใƒซใ—ใพใ™ใ‹๏ผŸ", @@ -497,7 +497,7 @@ "common.message.approved ": "ๆ‰ฟ่ชใ•ใ‚Œใพใ—ใŸใ€‚", "common.message.errorFieldExist": "ใ‚จใƒฉใƒผใƒ•ใ‚ฃใƒผใƒซใƒ‰ใŒๅญ˜ๅœจใ—ใพใ™", "common.message.storeIdExist ": "ใ™ใงใซไฝฟ็”จใ—ใฆใ„ใ‚‹่ฒฉๅฃฒๅบ—IDใงใ™ใ€‚", - "common.message.userIdExist ": "ใ™ใงใซไฝฟ็”จใ—ใฆใ„ใ‚‹ใƒฆใƒผใ‚ถใƒผIDใ€‚", + "common.message.userIdExist ": "ใ™ใงใซไฝฟ็”จใ—ใฆใ„ใ‚‹ใƒฆใƒผใ‚ถใƒผIDใงใ™ใ€‚", "common.message.noExists ": "ๅ‰Š้™คใ•ใ‚ŒใŸๆŠ•็จฟใงใ™ใ€‚", "common.message.emailReqTo": "Email To is required", "common.message.downloadPeriod": "Please select the download search period within {0} days.", @@ -506,9 +506,9 @@ "common.message.writeToConfirm": "ไฝœๆˆ่งฃ้™คใ‚’ๅฎŸ่กŒใ—ใพใ™ใ‹๏ผŸ", "common.message.password.init.success": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰[{0}]ใซๅˆๆœŸๅŒ–ใ•ใ‚Œใพใ—ใŸใ€‚", "common.message.no.edit.save": "ใ“ใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฏๅค‰ๆ›ดใงใใพใ›ใ‚“ใ€‚", - "common.load": "่ชญใฟ่พผใ‚€", + "common.load": "่ชญ่พผ", "common.input.file": "ใƒ•ใ‚กใ‚คใƒซใ‚’่ชญใฟ่พผใ‚€", - "common.input.file.load": "่ชญใฟ่พผใ‚€", + "common.input.file.load": "่ชญ่พผ", "common.input.image.load": "็”ปๅƒใ‚’่ชญใฟ่พผใ‚€", "common.input.address.load": "ใ‚ขใƒ‰ใƒฌใ‚นใ‚’่ชญใฟ่พผใ‚€", "common.require": "ๅฟ…้ ˆ", @@ -534,7 +534,7 @@ "color.pink": "ใƒ”ใƒณใ‚ฏ", "color.gold": "้ป„้‡‘่‰ฒ", "color.darkblue": "่—่‰ฒ", - "site.name": "Q.CAST III", + "site.name": "HANASYS่จญ่จˆ", "site.sub_name": "ๅคช้™ฝๅ…‰็™บ้›ปใ‚ทใ‚นใƒ†ใƒ ๅ›ณ้ข็ฎก็†ใ‚ตใ‚คใƒˆ", "site.header.link1": "้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", "site.header.link2": "ใ‚ชใƒณใƒฉใ‚คใƒณไฟ่จผใ‚ทใ‚นใƒ†ใƒ ", @@ -542,7 +542,7 @@ "board.notice.sub.title": "ใŠ็Ÿฅใ‚‰ใ›ไธ€่ฆง", "board.faq.title": "FAQ", "board.faq.sub.title": "FAQใƒชใ‚นใƒˆ", - "board.archive.title": "็ด ๆใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", + "board.archive.title": "่ณ‡ๆ–™ใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", "board.archive.sub.title": "ๆ–‡ๆ›ธไธ€่ฆง", "board.list.header.rownum": "็•ชๅท", "board.list.header.title": "ใ‚ฟใ‚คใƒˆใƒซ", @@ -554,7 +554,7 @@ "board.sub.fileList": "ๆทปไป˜ใƒ•ใ‚กใ‚คใƒซไธ€่ฆง", "board.sub.updDt": "ๆ›ดๆ–ฐ", "board.sub.btn.close": "้–‰ใ˜ใ‚‹", - "myinfo.title": "็งใฎๆƒ…ๅ ฑ", + "myinfo.title": "็คพๅ“กๆƒ…ๅ ฑ", "myinfo.info.userId": "ใƒฆใƒผใ‚ถใƒผID", "myinfo.info.nameKana": "ๆ‹…ๅฝ“่€…ๅๆ—ฅๆœฌ่ชž", "myinfo.info.name": "ๆ‹…ๅฝ“่€…ๅ", @@ -578,7 +578,7 @@ "myinfo.message.password.error": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒ้–“้•ใฃใฆใ„ใพใ™ใ€‚", "login": "ใƒญใ‚ฐใ‚คใƒณ", "login.auto.page.text": "่‡ชๅ‹•ใƒญใ‚ฐใ‚คใƒณไธญใงใ™ใ€‚", - "login.id.save": "IDใ‚ปใƒผใƒ–", + "login.id.save": "IDไฟๅญ˜", "login.id.placeholder": "IDใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "login.password.placeholder": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "login.guide.text": "ๅฝ“ใ‚ตใ‚คใƒˆใ‚’ใ”ๅˆฉ็”จใฎ้š›ใฏไบ‹ๅ‰็”ณ่ซ‹ใŒๅฟ…่ฆใงใ™ใ€‚", @@ -592,11 +592,11 @@ "login.init_password.complete_message": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒๅˆๆœŸๅŒ–ใ•ใ‚Œใพใ—ใŸใ€‚ๅˆๆœŸๅŒ–ใ•ใ‚ŒใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฏIDใจๅŒใ˜ใงใ™ใ€‚", "login.init_password.id.placeholder": "IDใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "login.init_password.email.placeholder": "ใƒกใƒผใƒซใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", - "join.title": "Q.CAST3 ใƒญใ‚ฐใ‚คใƒณID็™บ่กŒ็”ณ่ซ‹", + "join.title": "HANASYS่จญ่จˆใƒญใ‚ฐใ‚คใƒณID็™บ่กŒ็”ณ่ซ‹", "join.sub1.title": "่ฒฉๅฃฒไปฃ็†ๅบ—ๆƒ…ๅ ฑ", - "join.sub1.comment": "โ€ป็™ป้Œฒใ•ใ‚Œใ‚‹ใƒชใ‚ปใƒฉใƒผใฎไผš็คพๅใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚ ๏ผˆ2ๆฌกๅบ—ใฏใ€Œโ—‹โ—‹่ฒฉๅฃฒๆ ชๅผไผš็คพ๏ผˆ2ๆฌกๅบ—๏ผšร—ร—่จญๅ‚™ๆ ชๅผไผš็คพ๏ผ‰ใ€ใงใ”่จ˜ๅ…ฅใใ ใ•ใ„ใ€‚๏ผ‰", + "join.sub1.comment": "โ€ป็™ป้Œฒใ•ใ‚Œใ‚‹่ฒฉๅฃฒๅบ—ใฎไผš็คพๅใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚ ๏ผˆ2ๆฌกๅบ—ใฏใ€Œโ—‹โ—‹่ฒฉๅฃฒๆ ชๅผไผš็คพ๏ผˆ2ๆฌกๅบ—๏ผšร—ร—่จญๅ‚™ๆ ชๅผไผš็คพ๏ผ‰ใ€ใงใ”่จ˜ๅ…ฅใใ ใ•ใ„ใ€‚๏ผ‰", "join.sub1.storeQcastNm": "่ฒฉๅฃฒไปฃ็†ๅบ—ๅ", - "join.sub1.storeQcastNm_placeholder": "ๆ ชๅผไผš็คพใ‚จใƒใƒซใ‚ฎใƒผใ‚ฎใ‚ขใ‚ฝใƒชใƒฅใƒผใ‚ทใƒงใƒณใ‚ขใƒณใ‚ตใƒผใƒ“ใ‚น(2ๆฌก็‚น๏ผšๅฑฑๅฃๅ‘จๆœŸ่ฒฉๅฃฒๆœ‰้™ๅ…ฌๅธ๏ผ‰", + "join.sub1.storeQcastNm_placeholder": "ๆ ชๅผไผš็คพใ‚จใƒใƒซใ‚ฎใƒผใ‚ฎใ‚ขใ‚ฝใƒชใƒฅใƒผใ‚ทใƒงใƒณใ‚ขใƒณใ‚ตใƒผใƒ“ใ‚น(2ๆฌก็‚น๏ผšๅฑฑๅฃๅ‘จๆœŸ่ฒฉๅฃฒๆœ‰้™ไผš็คพ๏ผ‰", "join.sub1.storeQcastNmKana": "่ฒฉๅฃฒไปฃ็†ๅบ—ๅใƒ•ใƒชใ‚ฌใƒŠ", "join.sub1.storeQcastNmKana_placeholder": "ๆ ชๅผไผš็คพใ‚จใƒใƒซใ‚ฎใƒผใ‚ฎใ‚ขใ‚ฝใƒชใƒฅใƒผใ‚ทใƒงใƒณ", "join.sub1.postCd": "้ƒตไพฟ็•ชๅท", @@ -611,7 +611,7 @@ "join.sub2.title": "ๆ‹…ๅฝ“่€…ๆƒ…ๅ ฑ", "join.sub2.userNm": "ๆ‹…ๅฝ“่€…ๅ", "join.sub2.userNmKana": "ๆ‹…ๅฝ“่€…ๅใตใ‚ŠใŒใช", - "join.sub2.userId": "ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณID", + "join.sub2.userId": "็”ณ่ซ‹ID", "join.sub2.email": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚น", "join.sub2.telNo": "้›ป่ฉฑ็•ชๅท", "join.sub2.telNo_placeholder": "00-0000-0000", @@ -620,18 +620,18 @@ "join.sub2.category": "้ƒจ็ฝฒๅ", "join.btn.login_page": "ใƒญใ‚ฐใ‚คใƒณ็”ป้ขใซ็งปๅ‹•", "join.btn.approval_request": "IDๆ‰ฟ่ช่ฆๆฑ‚", - "join.complete.title": "Q.CAST3ใƒญใ‚ฐใ‚คใƒณID็™บ่กŒ็”ณ่ซ‹ๅฎŒไบ†", + "join.complete.title": "HANASYS่จญ่จˆใƒญใ‚ฐใ‚คใƒณID็™บ่กŒ็”ณ่ซ‹ๅฎŒไบ†", "join.complete.contents": "โ€ป็”ณ่ซ‹ใ—ใŸIDใŒๆ‰ฟ่ชใ•ใ‚Œใ‚‹ใจใ€ๆ‹…ๅฝ“่€…ๆƒ…ๅ ฑใซๅ…ฅๅŠ›ใ—ใŸEใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใซใƒญใ‚ฐใ‚คใƒณ้–ข้€ฃๆกˆๅ†…ใƒกใƒผใƒซใŒ้€ไฟกใ•ใ‚Œใพใ™ใ€‚", "join.complete.email_comment": "ๆ‹…ๅฝ“่€…ใฎใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚น", "join.validation.check1": "{0}ๅฝขๅผใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚", - "join.complete.save.confirm": "Hanwha Japanใฎๆ‹…ๅฝ“่€…ใซIDๆ‰ฟ่ชใŒ่ฆๆฑ‚ใ•ใ‚ŒใŸๅ ดๅˆใ€ใ“ใ‚ŒไปฅไธŠๆƒ…ๅ ฑใ‚’ไฟฎๆญฃใ™ใ‚‹ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚ๆœฌๅฝ“ใซใŠ้ก˜ใ„ใ—ใพใ™ใ‹๏ผŸ", + "join.complete.save.confirm": "ใƒใƒณใƒ•ใ‚กใ‚ธใƒฃใƒ‘ใƒณใฎๆ‹…ๅฝ“่€…ใซIDๆ‰ฟ่ชใŒ่ฆๆฑ‚ใ•ใ‚ŒใŸๅ ดๅˆใ€ใ“ใ‚ŒไปฅไธŠๆƒ…ๅ ฑใ‚’ไฟฎๆญฃใ™ใ‚‹ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚็”ณ่ซ‹ใ—ใพใ™ใ‹๏ผŸ", "stuff.gridHeader.lastEditDatetime": "ๆ›ดๆ–ฐๆ—ฅๆ™‚", - "stuff.gridHeader.objectNo": "ๅ“็•ช", + "stuff.gridHeader.objectNo": "็‰ฉไปถ็•ชๅท", "stuff.gridHeader.planTotCnt": "ใƒ—ใƒฉใƒณๆ•ฐ", "stuff.gridHeader.objectName": "ๅ•†ๅ“ๅ", "stuff.gridHeader.saleStoreId": "ไปฃ็†ๅบ—ID", "stuff.gridHeader.saleStoreName": "ไปฃ็†ๅบ—ๅ", - "stuff.gridHeader.address": "ๅ•†ๅ“ใ‚ขใƒ‰ใƒฌใ‚น", + "stuff.gridHeader.address": "็‰ฉไปถไฝๆ‰€", "stuff.gridHeader.dispCompanyName": "่ฆ‹็ฉใ‚‚ใ‚Š", "stuff.gridHeader.receiveUser": "ๆ‹…ๅฝ“่€…", "stuff.gridHeader.specificationConfirmDate": "ไป•ๆง˜็ขบ่ชๆ—ฅ", @@ -651,9 +651,9 @@ "stuff.temp.subTitle": "ๅ•†ๅ“ๆƒ…ๅ ฑ", "stuff.temp.subTitle2": "ไฝœๅ›ณ", "stuff.detail.header.notExistObjectNo": "ๅญ˜ๅœจใ—ใชใ„ใ‚‚ใฎใงใ™ใ€‚", - "stuff.detail.header.successCopy": "ๅ•†ๅ“็•ชๅทใŒใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸใ€‚", - "stuff.detail.header.failCopy": "ๅ•†ๅ“็•ชๅทใฎใ‚ณใƒ”ใƒผใซๅคฑๆ•—ใ—ใพใ—ใŸใ€‚", - "stuff.detail.header.objectNo": "ๅ“็•ช", + "stuff.detail.header.successCopy": "็‰ฉไปถ็•ชๅทใŒใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸใ€‚", + "stuff.detail.header.failCopy": "็‰ฉไปถ็•ชๅทใฎใ‚ณใƒ”ใƒผใซๅคฑๆ•—ใ—ใพใ—ใŸใ€‚", + "stuff.detail.header.objectNo": "็‰ฉไปถ็•ชๅท", "stuff.detail.header.specificationConfirmDate": "ไป•ๆง˜็ขบ่ชๆ—ฅ", "stuff.detail.header.lastEditDatetime": "ๆ›ดๆ–ฐๆ—ฅๆ™‚", "stuff.detail.header.createDatetime": "็™ป้Œฒๆ—ฅ", @@ -662,9 +662,9 @@ "stuff.detail.receiveUser": "ๆ‹…ๅฝ“่€…", "stuff.detail.objectStatusId": "็‰ฉๅ“ๅŒบๅˆ†/็‰ฉไปถๅ", "stuff.detail.objectStatus0": "ๆ–ฐ็ฏ‰", - "stuff.detail.objectStatus1": "ๅŸบ่ปธ", + "stuff.detail.objectStatus1": "ๆ—ข็ฏ‰", "stuff.detail.objectNameOmit": "ๆ•ฌ็งฐ", - "stuff.detail.objectNameKana": "็‰ฉๅใƒ•ใƒชใ‚ฌใƒŠ", + "stuff.detail.objectNameKana": "ใƒ•ใƒชใ‚ฌใƒŠ", "stuff.detail.saleStoreId": "ไธ€ๆฌก่ฒฉๅฃฒๅบ—ๅ/ID", "stuff.detail.otherSaleStoreId": "ไบŒๆฌก่ฒฉๅฃฒๅบ—ๅ/ID", "stuff.detail.zipNo": "้ƒตไพฟ็•ชๅท", @@ -676,9 +676,9 @@ "stuff.detail.standardWindSpeedId": "ๅŸบๆบ–้ขจ้€Ÿ", "stuff.detail.standardWindSpeedIdSpan": "m/sไปฅไธ‹", "stuff.detail.btn.windSpeedPop": "้ขจ้€Ÿ้ธๆŠž", - "stuff.detail.verticalSnowCover": "ๅž‚็›ด่ชฌ่ชฌ", + "stuff.detail.verticalSnowCover": "ๅž‚็›ด็ฉ้›ช้‡", "stuff.detail.coldRegionFlg": "ๅฏ’ๅ†ทๅœฐๅฏพ็ญ–ๆ–ฝ่กŒ", - "stuff.detail.surfaceType": "็ถฟ่ชฟ้“", + "stuff.detail.surfaceType": "้ข็ฒ—ๅบฆ", "stuff.detail.saltAreaFlg": "ๅกฉๅฎณๅœฐๅŸŸ็”จใ‚ขใ‚คใƒ†ใƒ ใฎไฝฟ็”จ", "stuff.detail.installHeight": "่จญ็ฝฎ้ซ˜ใ•", "stuff.detail.conType": "ๅฅ‘็ด„ๆกไปถ", @@ -687,7 +687,7 @@ "stuff.detail.remarks": "ใƒกใƒข", "stuff.detail.tooltip.saleStoreId": "่ฒฉๅฃฒไปฃ็†ๅบ—ใพใŸใฏ่ฒฉๅฃฒไปฃ็†ๅบ—IDใ‚’1ๆ–‡ๅญ—ไปฅไธŠๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", "stuff.detail.tooltip.surfaceType": "ๅกฉๅฎณๅœฐๅŸŸใฎๅฎš็พฉใฏๅ„ใƒกใƒผใ‚ซใƒผใฎ่จญ็ฝฎใƒžใƒ‹ใƒฅใ‚ขใƒซใ‚’ใ”็ขบ่ชใใ ใ•ใ„", - "stuff.detail.tempSave.message1": "ไธ€ๆ™‚ไฟๅญ˜ใ•ใ‚Œใพใ—ใŸใ€‚ๅ•†ๅ“็•ชๅทใ‚’ๅ–ๅพ—ใ™ใ‚‹ใซใฏใ€ๅฟ…้ ˆ้ …็›ฎใ‚’ใ™ในใฆๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", + "stuff.detail.tempSave.message1": "ไธ€ๆ™‚ไฟๅญ˜ใ•ใ‚Œใพใ—ใŸใ€‚็‰ฉไปถ็•ชๅทใ‚’ๅ–ๅพ—ใ™ใ‚‹ใซใฏใ€ๅฟ…้ ˆ้ …็›ฎใ‚’ใ™ในใฆๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "stuff.detail.tempSave.message2": "ๆ‹…ๅฝ“่€…ๅใฏ10ๆกไปฅไธ‹ใงๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "stuff.detail.tempSave.message3": "ไบŒๆฌก่ฒฉๅฃฒๅบ—ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", "stuff.detail.confirm.message1": "่ฒฉๅฃฒๅบ—ๆƒ…ๅ ฑใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใจใ€่จญ่จˆไพ้ ผๆ–‡ๆ›ธ็•ชๅทใŒๅ‰Š้™คใ•ใ‚Œใพใ™ใ€‚ๅค‰ๆ›ดใ—ใพใ™ใ‹๏ผŸ", @@ -695,7 +695,7 @@ "stuff.detail.planList.title": "ใƒ—ใƒฉใƒณใƒชใ‚นใƒˆ", "stuff.detail.planList.cnt": "ๅ…จไฝ“", "stuff.detail.planList.help": "ใƒ˜ใƒซใƒ—", - "stuff.detail.planList.guide1": "1.็™บๆณจใฏๅŒไธ€ๅ“็•ชๅŸบๆบ–1ไปถใฎใฟๅฏ่ƒฝใงใ™ใ€‚", + "stuff.detail.planList.guide1": "1.็™บๆณจใฏๅŒไธ€็‰ฉไปถ็•ชๅทๅŸบๆบ–1ไปถใฎใฟๅฏ่ƒฝใงใ™ใ€‚", "stuff.detail.planList.guide2": "2. [Excelใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰]ใฏ่ฆ‹็ฉๆ›ธๅ›ณ้ขใ‚ทใƒŸใƒฅใƒฌใƒผใ‚ทใƒงใƒณ็ตๆžœใ‚’Excelใƒ•ใ‚กใ‚คใƒซใจใ—ใฆไธ€ๅบฆใซใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ™ใ€‚", "stuff.detail.planList.guide3": "3. ใƒ—ใƒฉใƒณๆƒ…ๅ ฑใ‚’ใƒ€ใƒ–ใƒซใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจๅ›ณ้ขไฝœๆˆ็”ป้ขใซ็งปๅ‹•ใ—ใพใ™ใ€‚", "stuff.detail.btn.delete": "็‰ฉใฎๅ‰Š้™ค", @@ -705,7 +705,7 @@ "stuff.detail.save": "ไฟๅญ˜ใ—ใพใ—ใŸ", "stuff.detail.tempSave": "ไธ€ๆ™‚ไฟๅญ˜ใ•ใ‚Œใพใ—ใŸ", "stuff.detail.noChgData": "ๅค‰ๆ›ดๅ†…ๅฎนใฏใ‚ใ‚Šใพใ›ใ‚“", - "stuff.detail.save.valierror1": "ๅž‚็›ด่ชฌ่ชฌใฏ0ใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", + "stuff.detail.save.valierror1": "ๅž‚็›ด็ฉ้›ช้‡ใฏ0ใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", "stuff.detail.save.valierror2": "่จญ็ฝฎ้ซ˜ใ•0ใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", "stuff.detail.save.valierror3": "{0} ๅฟ…้ ˆๅ…ฅๅŠ›้ …็›ฎใงใ™ใ€‚", "stuff.detail.save.valierror4": "ไบŒๆฌก่ฒฉๅฃฒๅบ—ๅใฏๅฟ…้ ˆใ‚ชใƒ—ใ‚ทใƒงใƒณใงใ™ใ€‚", @@ -739,7 +739,7 @@ "stuff.search.btn.register": "ๆ–ฐ่ฆ็‰ฉไปถ็™ป้Œฒ", "stuff.search.btn.search": "็…งไผš", "stuff.search.btn.reset": "ๅˆๆœŸๅŒ–", - "stuff.search.schObjectNo": "ๅ“็•ช", + "stuff.search.schObjectNo": "็‰ฉไปถ็•ชๅท", "stuff.search.schSaleStoreName": "่ฒฉๅฃฒไปฃ็†ๅบ—ๅ", "stuff.search.schAddress": "ๅ•†ๅ“ใ‚ขใƒ‰ใƒฌใ‚น", "stuff.search.schObjectName": "ๅ•†ๅ“ๅ", @@ -784,7 +784,7 @@ "output": "ๅ‡บๅŠ›", "slope": "ๅ‚พๆ–œ", "eaves.offset": "่ป’ใฎๅน…", - "gable.offset": "ใ‚ฑใƒฉใƒๅ‡บ็ˆ†", + "gable.offset": "ใ‚ฑใƒฉใƒ", "offset": "ๅ‡บๅน…", "width": "ๅน…", "size": "ๅฏธๆณ•", @@ -794,9 +794,9 @@ "gable": "ใ‚ฑใƒฉใƒ", "gable.left": "ใ‚ฑใƒฉใƒๅทฆ", "gable.right": "ใ‚ฑใƒฉใƒๅณ", - "ridge": "้พไธธ", - "oneside.flow.ridge": "็‰‡ๅดใฎๆตใ‚Œ", - "yosemune": "ใƒจใ‚ปใƒ ใƒ", + "ridge": "ๆฃŸ", + "oneside.flow.ridge": "็‰‡ๆตใ‚ŒใฎๆฃŸๅด", + "yosemune": "ๅฏ„ๆฃŸ", "valley": "่ฐท", "l.abandon.valley": "Lใฎๆจใฆๆธ“่ฐท", "mansard": "ใƒกใƒณใ‚ตใƒผใƒ‰", @@ -807,30 +807,30 @@ "wall.merge.flow.left": "ๅฃๅ–ใ‚Š๏ผˆๆตใ‚Œๅทฆ๏ผ‰", "wall.merge.flow.right": "ๅฃๅ–ใ‚Š๏ผˆๆตใ‚Œๅณ๏ผ‰", "no.setting": "่จญๅฎšใชใ—", - "hajebichi": "ใƒใ‚ผใƒ“ใƒผใƒ", + "hajebichi": "ใƒใ‚ผใƒ”ใƒƒใƒ", "straight.line": "็›ด็ทš", "right.angle": "็›ด่ง’", - "double.pitch": "ใ‚คใƒปใ‚ฐใƒ™", + "double.pitch": "็•ฐๅ‹พ้…", "angle": "่ง’ๅบฆ", "diagonal": "ๅฏพ่ง’็ทš", - "hipandgable": "ๅ…ซไฝœๅฑ‹ๆ น", - "hipandgable.width": "ๅ…ซไฝœๅฑ‹ๆ นใฎๅน…", - "jerkinhead": "ๅŠๆŠ˜", + "hipandgable": "ๅ…ฅๆฏๅฑ‹้€ ", + "hipandgable.width": "ๅ…ฅๆฏๅฑ‹้€ ใฎๅน…", + "jerkinhead": "ๅŠๅˆ‡ๅฆป", "shed": "็‰‡ๅดใฎๆตใ‚Œ", "apply": "้ฉ็”จ", "module": "ใƒขใ‚ธใƒฅใƒผใƒซ", "legend": "ๅ‡กไพ‹", "has.sleeve": "่ข–ใ‚ใ‚Š", "has.not.sleeve": "่ข–ใชใ—", - "jerkinhead.width": "ๅŠๆŠ˜ๅ…ˆๅน…", - "jerkinhead.slope": "ๅŠๆŠ˜ๅ…ˆๅ‚พๆ–œ", + "jerkinhead.width": "ๅŠๅˆ‡ๅฆปๅน…", + "jerkinhead.slope": "ๅŠๅˆ‡ๅฆปๅ‚พๆ–œ", "shed.width": "็‰‡ๆตๅน…", - "windage": "ๆผ‚ๆต", - "windage.width": "ๆผ‚ๆตใฎๅ‡บๅน…", + "windage": "็‰‡ๆตใ‚Œ", + "windage.width": "็‰‡ๆตใ‚Œใฎๅ‡บๅน…", "write": "ไฝœๆˆ", "main.storeId": "่ฒฉๅฃฒๅบ—ID", "main.storeName": "่ฒฉๅฃฒๅบ—ๅ", - "main.objectNo": "ๅ“็•ช", + "main.objectNo": "็‰ฉไปถ็•ชๅท", "main.faq": "FAQ", "main.content.objectList.noData1": "็™ป้Œฒใ•ใ‚ŒใŸๅ•†ๅ“ๆƒ…ๅ ฑใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚", "main.content.objectList.noData2": "ไธ‹ใฎใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆๅ•†ๅ“ๆƒ…ๅ ฑใ‚’็™ป้Œฒใ—ใฆใใ ใ•ใ„ใ€‚", @@ -839,7 +839,7 @@ "main.content.download1": "ๆ“ไฝœใƒžใƒ‹ใƒฅใ‚ขใƒซ", "main.content.download2": "ๅฑ‹ๆ นใฎ่ชฌๆ˜Žๆ›ธ", "main.content.noBusiness": "Hanwha JapanใซใŠๅ•ใ„ๅˆใ‚ใ›ใใ ใ•ใ„", - "main.content.alert.noFile": "่ณ‡ๆ–™ใŒๆบ–ๅ‚™ไธญใงใ™", + "main.content.alert.noFile": "่ณ‡ๆ–™ๆบ–ๅ‚™ไธญใงใ™", "main.popup.login.popupTitle": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ๅค‰ๆ›ด", "main.popup.login.newPassword1": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›", "main.popup.login.newPassword2": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฎๅ†ๅ…ฅๅŠ›", @@ -860,7 +860,7 @@ "surface.shape.validate.size.3to4": "โ‘ข้•ทใ•ใฏโ‘ฃใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.4to5": "โ‘ฃ้•ทใ•ใฏโ‘คใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "estimate.detail.header.title": "ๅŸบๆœฌๆƒ…ๅ ฑ", - "estimate.detail.objectNo": "ๅ“็•ช", + "estimate.detail.objectNo": "็‰ฉไปถ็•ชๅท", "estimate.detail.docNo": "่ฆ‹็ฉๆ›ธ็•ชๅท", "estimate.detail.drawingEstimateCreateDate": "็™ป้Œฒๆ—ฅ", "estimate.detail.lastEditDatetime": "ๅค‰ๆ›ดๆ—ฅๆ™‚", @@ -877,7 +877,6 @@ "estimate.detail.roofCns": "ๅฑ‹ๆ นๆใƒปไป•ๆง˜ๆ–ฝๅทฅ", "estimate.detail.remarks": "ๅ‚™่€ƒ", "estimate.detail.fileFlg": "ๅพŒๆ—ฅ่ณ‡ๆ–™ๆๅ‡บ", - "estimate.detail.dragFileGuide": "(โ€ปๅŒ—้ข่จญ็ฝฎใฎๅ ดๅˆใ€ใƒ•ใ‚กใ‚คใƒซๆทปไป˜ใŒๅฟ…้ ˆใงใ™.)", "estimate.detail.header.fileList1": "ใƒ•ใ‚กใ‚คใƒซๆทปไป˜", "estimate.detail.fileList.btn": "ใƒ•ใ‚กใ‚คใƒซ้ธๆŠž", "estimate.detail.fileList.extCheck": "็”ปๅƒใƒ•ใ‚กใ‚คใƒซใฎใฟๆทปไป˜ๅฏ่ƒฝใงใ™ใ€‚", @@ -905,17 +904,17 @@ "estimate.detail.showPrice.delItem": "่ฃฝๅ“ใฎๅ‰Š้™ค", "estimate.detail.itemTableHeader.dispOrder": "No.", "estimate.detail.itemTableHeader.itemId": "ๅ“็•ช", - "estimate.detail.itemTableHeader.itemNo": "ๅ…„ๅผŸ", + "estimate.detail.itemTableHeader.itemNo": "ๅž‹ๅ", "estimate.detail.itemTableHeader.amount": "ๆ•ฐ้‡", "estimate.detail.itemTableHeader.unit": "ๅ˜ไฝ", "estimate.detail.itemTableHeader.salePrice": "ๅ˜ไพก", - "estimate.detail.itemTableHeader.saleTotPrice": "้‡‘้ก๏ผˆ็จŽๅˆฅๅˆฅ๏ผ‰", - "estimate.detail.docPopup.title": "ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚ชใƒ—ใ‚ทใƒงใƒณใฎ่จญๅฎš", + "estimate.detail.itemTableHeader.saleTotPrice": "้‡‘้ก๏ผˆ็จŽๅˆฅ๏ผ‰", + "estimate.detail.docPopup.title": "ๆ–‡็ซ ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚ชใƒ—ใ‚ทใƒงใƒณใฎ่จญๅฎš", "estimate.detail.docPopup.explane": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ™ใ‚‹ๆ–‡ๆ›ธใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚’้ธๆŠžใ—ใ€[ๆ–‡ๆ›ธใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰]ใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใพใ™ใ€‚", "estimate.detail.docPopup.schUnitPriceFlg": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใƒ•ใ‚กใ‚คใƒซ", - "estimate.detail.docPopup.schUnitPriceFlg.excelFlg0": "่ฆ‹็ฉใ‚‚ใ‚ŠExcel", + "estimate.detail.docPopup.schUnitPriceFlg.excelFlg0": "ไป•ๅˆ‡็”จExcel", "estimate.detail.docPopup.schUnitPriceFlg.excelFlg1": "ๅฎšไพก็”จExcel", - "estimate.detail.docPopup.schUnitPriceFlg.pdfFlg0": "่ฆ‹็ฉใ‚‚ใ‚ŠPDF", + "estimate.detail.docPopup.schUnitPriceFlg.pdfFlg0": "ไป•ๅˆ‡็”จPDF", "estimate.detail.docPopup.schUnitPriceFlg.pdfFlg1": "ๅฎšไพก็”จPDF", "estimate.detail.docPopup.schDisplayFlg": "่ฆ‹็ฉๆๅ‡บๆ›ธใฎ่กจ็คบๅ", "estimate.detail.docPopup.schDisplayFlg.schDisplayFlg0": "่ฒฉๅฃฒๅบ—ๅ", @@ -928,13 +927,13 @@ "estimate.detail.docPopup.schDrawingFlg.schDrawingFlg0": "ๅซใพใชใ„", "estimate.detail.docPopup.close": "้–‰ใ˜ใ‚‹", "estimate.detail.docPopup.docDownload": "ๆ–‡ๆ›ธใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", - "estimate.detail.estimateCopyPopup.title": "่ฆ‹็ฉใ‚‚ใ‚Š", + "estimate.detail.estimateCopyPopup.title": "่ฆ‹็ฉใ‚ณใƒ”ใƒผ", "estimate.detail.estimateCopyPopup.explane": "่ฆ‹็ฉๆ›ธใ‚’ใ‚ณใƒ”ใƒผใ™ใ‚‹่ฒฉๅฃฒๅบ—ใ‚’่จญๅฎšใ—ใพใ™ใ€‚่ฆ‹็ฉๆ›ธใฏๅฎšไพกใงใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ™ใ€‚", "estimate.detail.estimateCopyPopup.label.saleStoreId": "ไธ€ๆฌก่ฒฉๅฃฒๅบ—ๅ/ID", "estimate.detail.estimateCopyPopup.label.otherSaleStoreId": "ไบŒๆฌก่ฒฉๅฃฒๅบ—ๅ/ID", "estimate.detail.estimateCopyPopup.label.receiveUser": "ๆ‹…ๅฝ“่€…", "estimate.detail.estimateCopyPopup.close": "้–‰ใ˜ใ‚‹", - "estimate.detail.estimateCopyPopup.copyBtn": "่ฆ‹็ฉใ‚‚ใ‚Š", + "estimate.detail.estimateCopyPopup.copyBtn": "่ฆ‹็ฉใ‚ณใƒ”ใƒผ", "estimate.detail.estimateCopyPopup.copy.alertMessage": "่ฆ‹็ฉๆ›ธใŒใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸใ€‚ใ‚ณใƒ”ใƒผใ—ใŸๅ•†ๅ“ๆƒ…ๅ ฑใซ็งปๅ‹•ใ—ใพใ™ใ€‚", "estimate.detail.productFeaturesPopup.title": "่ฃฝๅ“็‰น็•ฐไบ‹้ …", "estimate.detail.productFeaturesPopup.close": "้–‰ใ˜ใ‚‹", @@ -943,7 +942,6 @@ "estimate.detail.save.alertMsg": "ไฟๅญ˜ใ•ใ‚Œใพใ—ใŸใ€‚่ฆ‹็ฉๆ›ธใง่ฃฝๅ“ใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใจใ€ๅ›ณ้ขใ‚„ๅ›ž่ทฏใซใฏๅๆ˜ ใ•ใ‚Œใพใ›ใ‚“ใ€‚", "estimate.detail.copy.alertMsg": "ใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸใ€‚", "estimate.detail.save.requiredFileUpload": "ใƒ•ใ‚กใ‚คใƒซๆทปไป˜ใŒๅฟ…้ ˆใฎใ‚ขใ‚คใƒ†ใƒ ใŒใ‚ใ‚Šใพใ™ใ€‚ใƒ•ใ‚กใ‚คใƒซใ‚’ๆทปไป˜ใ™ใ‚‹ใ‹ใ€ๅพŒๆ—ฅๆทปไป˜ใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚", - "estimate.detail.save.requiredNorthArrangementFileUpload": "ๅŒ—้ขใซใƒขใ‚ธใƒฅใƒผใƒซใ‚’้…็ฝฎใ—ใŸๅ ดๅˆใ€ๅŒ—้ข้…็ฝฎ่จฑๅฏๆ›ธใ‚’ๅฟ…ใšๆทปไป˜ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™.", "estimate.detail.save.requiredItem": "่ฃฝๅ“ใฏ1ใคไปฅไธŠ็™ป้Œฒใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "estimate.detail.save.requiredCharger": "ๆ‹…ๅฝ“่€…ใฏๅฟ…้ ˆใงใ™ใ€‚", "estimate.detail.save.requiredObjectName": "ๆกˆไปถๅใฏๅฟ…้ ˆใงใ™ใ€‚", @@ -953,14 +951,14 @@ "estimate.detail.save.requiredAmount": "ๆ•ฐ้‡ใฏ0ใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "estimate.detail.save.requiredSalePrice": "ๅ˜ไพกใฏ0ใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "estimate.detail.reset.alertMsg": "ๅˆๆœŸๅŒ–ใ•ใ‚Œใพใ—ใŸใ€‚", - "estimate.detail.reset.confirmMsg": "ๆ‰‹ๆ›ธใๅค‰ๆ›ด๏ผˆไฟๅญ˜๏ผ‰ใ—ใŸ่ฆ‹็ฉๆƒ…ๅ ฑใŒๅˆๆœŸๅŒ–ใ•ใ‚Œใ€ๆœ€่ฟ‘ไฟๅญ˜ใ•ใ‚ŒใŸๅ›ณ้ขๆƒ…ๅ ฑใŒๅๆ˜ ใ•ใ‚Œใพใ™ใ€‚ๆœฌๅฝ“ใซๅˆๆœŸๅŒ–ใ—ใพใ™ใ‹๏ผŸ", + "estimate.detail.reset.confirmMsg": "ไฟๅญ˜ใ—ใŸ่ฆ‹็ฉๆƒ…ๅ ฑใŒๅˆๆœŸๅŒ–ใ•ใ‚Œใ€ๆœ€่ฟ‘ไฟๅญ˜ใ•ใ‚ŒใŸๅ›ณ้ขๆƒ…ๅ ฑใŒๅๆ˜ ใ•ใ‚Œใพใ™ใ€‚ๆœฌๅฝ“ใซๅˆๆœŸๅŒ–ใ—ใพใ™ใ‹๏ผŸ", "estimate.detail.lock.alertMsg": "่ฆ‹็ฉใ‚‚ใ‚Šใ‚’[ใƒญใƒƒใ‚ฏ]ใ™ใ‚‹ใจๅค‰ๆ›ดใงใใพใ›ใ‚“ใ€‚
่ฆ‹็ฉใ‚‚ใ‚Šใ‚’ไฟฎๆญฃใ™ใ‚‹ใซใฏใ€ใƒญใƒƒใ‚ฏใ‚’่งฃ้™คใ—ใฆใใ ใ•ใ„ใ€‚", "estimate.detail.unlock.alertMsg": "[ใƒญใƒƒใ‚ฏ่งฃ้™ค]ใ™ใ‚‹ใจใ€่ฆ‹็ฉๆ›ธใ‚’็ทจ้›†ใงใใพใ™ใ€‚
่งฃ้™คใ—ใพใ™ใ‹๏ผŸ", "estimate.detail.unlock.confirmBtnName": "่งฃๆ”พ", "estimate.detail.alert.delFile": "ๆทปไป˜ใƒ•ใ‚กใ‚คใƒซใ‚’ๅฎŒๅ…จใซๅ‰Š้™คใ™ใ‚‹ใซใฏใ€[ไฟๅญ˜]ใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚", "estimate.detail.alert.selectDelItem": "ๅ‰Š้™คใ™ใ‚‹ๅ•†ๅ“ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", "estimate.menu.move.valid1": "ๅ›ž่ทฏใ‚’ๅˆ†ๅ‰ฒใ—ใฆใ„ใชใ„ใŸใ‚ใ€่ฆ‹็ฉใ‚‚ใ‚Šใ‚’ๅ‘ผใณๅ‡บใ™ใ“ใจใฏใงใใพใ›ใ‚“ใ€‚", - "simulator.title.sub1": "ๅ“็•ช", + "simulator.title.sub1": "็‰ฉไปถ็•ชๅท", "simulator.title.sub2": "ไฝœๆˆๆ—ฅ", "simulator.title.sub3": "ใ‚ทใ‚นใƒ†ใƒ ๅฎน้‡", "simulator.title.sub4": "ๅนด้–“ไบˆๆธฌ็™บ้›ป้‡", diff --git a/src/locales/ko.json b/src/locales/ko.json index 7249b0f5..507f5415 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -50,8 +50,8 @@ "modal.movement.flow.line.updown.up": "์ž๋ฆฟ์ˆ˜๋ฅผ ์˜ฌ๋ฆฌ๋‹ค", "modal.movement.flow.line.updown.down": "์ž๋ฆฟ์ˆ˜๋ฅผ ๋‚ฎ์ถ”๋‹ค", "modal.movement.flow.line.info": "๋™์„ ์„ ์„ ํƒํ•˜๊ณ  ์ด๋™ ํญ์„ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค", - "modal.movement.flow.line.bottom.left": "๋†’์ด ๋ณ€๊ฒฝ: ์•„๋ž˜, ์™ผ์ชฝ", - "modal.movement.flow.line.top.right": "๋†’์ด ๋ณ€๊ฒฝ: ์œ„, ์˜ค๋ฅธ์ชฝ", + "modal.movement.flow.line.bottom.left": "๋†’์ด๋ณ€๊ฒฝ : ์•„๋ž˜, ์™ผ์ชฝ", + "modal.movement.flow.line.top.right": "๋†’์ด๋ณ€๊ฒฝ : ์œ„, ์˜ค๋ฅธ์ชฝ", "plan.menu.roof.cover.outline.edit.offset": "์™ธ๋ฒฝ์„  ํŽธ์ง‘ ๋ฐ ์˜คํ”„์…‹", "plan.menu.roof.cover.roof.surface.alloc": "์ง€๋ถ•๋ฉด ํ• ๋‹น", "plan.menu.roof.cover.roof.shape.edit": "์ง€๋ถ•ํ˜•์ƒ ํŽธ์ง‘", @@ -84,13 +84,13 @@ "plan.menu.placement.surface.arrangement": "๋ฉดํ˜•์ƒ ๋ฐฐ์น˜", "plan.menu.placement.surface.object": "์˜ค๋ธŒ์ ํŠธ ๋ฐฐ์น˜", "plan.menu.placement.surface.all.remove": "๋ฐฐ์น˜๋ฉด ์ „์ฒด ์‚ญ์ œ", - "plan.menu.module.circuit.setting": "๋ชจ๋“ˆยทํšŒ๋กœ ๊ตฌ์„ฑ", - "plan.menu.module.circuit.setting.default": "๋ชจ๋“ˆยท๊ฐ€๋Œ€์„ค์ •", + "plan.menu.module.circuit.setting": "๋ชจ๋“ˆ, ํšŒ๋กœ ๊ตฌ์„ฑ", + "plan.menu.module.circuit.setting.default": "๋ชจ๋“ˆ/๊ฐ€๋Œ€์„ค์ •", "modal.module.basic.setting.orientation.setting": "๋ฐฉ์œ„ ์„ค์ •", "modal.module.basic.setting.orientation.setting.info": "โ€ป์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณ„์‚ฐ์šฉ ๋ฐฉ์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚จ์ชฝ์˜ ๋ฐฉ์œ„๋ฅผ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.", "modal.module.basic.setting.orientation.setting.angle.passivity": "๊ฐ๋„๋ฅผ ์ง์ ‘ ์ž…๋ ฅ", "modal.module.basic.setting.module.roof.material": "์ง€๋ถ•์žฌ", - "modal.module.basic.setting.module.trestle.maker": "๊ฐ€๋Œ€๋ฉ”์ด์ปค", + "modal.module.basic.setting.module.trestle.maker": "๊ฐ€๋Œ€๋ฉ”์ด๊ฑฐ", "modal.module.basic.setting.module.rafter.margin": "์„œ๊นŒ๋ž˜ ๊ฐ„๊ฒฉ", "modal.module.basic.setting.module.construction.method": "๊ณต๋ฒ•", "modal.module.basic.setting.module.under.roof": "์ง€๋ถ•๋ฐ‘๋ฐ”ํƒ•", @@ -634,7 +634,7 @@ "stuff.gridHeader.address": "๋ฌผ๊ฑด์ฃผ์†Œ", "stuff.gridHeader.dispCompanyName": "๊ฒฌ์ ์ฒ˜", "stuff.gridHeader.receiveUser": "๋‹ด๋‹น์ž", - "stuff.gridHeader.specificationConfirmDate": "์‚ฌ์–‘ํ™•์ •์ผ", + "stuff.gridHeader.specificationConfirmDate": "์‚ฌ์–‘ํ™•์ธ์ผ", "stuff.gridHeader.createDatetime": "๋“ฑ๋ก์ผ", "stuff.gridData.tempObjectNo": "์ž„์‹œ์ €์žฅ๋ฌผ๊ฑด", "stuff.message.periodError": "์ตœ๋Œ€1๋…„ ์กฐํšŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.", @@ -877,7 +877,6 @@ "estimate.detail.roofCns": "์ง€๋ถ•์žฌใƒป์‚ฌ์–‘์‹œ๊ณต", "estimate.detail.remarks": "๋น„๊ณ ", "estimate.detail.fileFlg": "ํ›„์ผ์ž๋ฃŒ์ œ์ถœ", - "estimate.detail.dragFileGuide": "(โ€ป ๋ถ๋ฉด์„ค์น˜์ธ ๊ฒฝ์šฐ, ํŒŒ์ผ ์ฒจ๋ถ€๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.)", "estimate.detail.header.fileList1": "ํŒŒ์ผ์ฒจ๋ถ€", "estimate.detail.fileList.btn": "ํŒŒ์ผ์„ ํƒ", "estimate.detail.fileList.extCheck": "์ด๋ฏธ์ง€ ํŒŒ์ผ๋งŒ ์ฒจ๋ถ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.", @@ -943,7 +942,6 @@ "estimate.detail.save.alertMsg": "์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฌ์ ์„œ์—์„œ ์ œํ’ˆ์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๋„๋ฉด ๋ฐ ํšŒ๋กœ์— ๋ฐ˜์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", "estimate.detail.copy.alertMsg": "๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", "estimate.detail.save.requiredFileUpload": "ํŒŒ์ผ์ฒจ๋ถ€๊ฐ€ ํ•„์ˆ˜์ธ ์•„์ดํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•˜๊ฑฐ๋‚˜ ํ›„์ผ์ฒจ๋ถ€๋ฅผ ์ฒดํฌํ•ด์ฃผ์‹ญ์‹œ์˜ค.", - "estimate.detail.save.requiredNorthArrangementFileUpload": "๋ถ๋ฉด์— ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•œ ๊ฒฝ์šฐ, ๋ถ๋ฉด๋ฐฐ์น˜ํ—ˆ๊ฐ€์„œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฒจ๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", "estimate.detail.save.requiredItem": "์ œํ’ˆ์€ 1๊ฐœ์ด์ƒ ๋“ฑ๋กํ•ด์•ผ ๋ฉ๋‹ˆ๋‹ค.", "estimate.detail.save.requiredCharger": "๋‹ด๋‹น์ž๋Š” ํ•„์ˆ˜๊ฐ’ ์ž…๋‹ˆ๋‹ค.", "estimate.detail.save.requiredObjectName": "์•ˆ๊ฑด๋ช…์€ ํ•„์ˆ˜๊ฐ’ ์ž…๋‹ˆ๋‹ค.", From 3c8dbf634df047ed3e630301c9f3c4347848ab43 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Wed, 5 Feb 2025 10:23:29 +0900 Subject: [PATCH 050/213] =?UTF-8?q?=EB=B3=B5=EC=8B=9C=EB=8F=84,=20?= =?UTF-8?q?=EC=8B=A4=EC=B8=A1=EC=B9=98=20=EB=AA=A8=EB=93=88=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/BasicSetting.jsx | 2 +- src/hooks/module/useModuleBasicSetting.js | 36 +++++++++---------- src/hooks/module/useModuleTabContents.js | 2 -- 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index 58cf29b5..51620935 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -72,7 +72,7 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const placementRef = { isChidori: useRef('false'), - setupLocation: useRef('center'), + setupLocation: useRef('eaves'), isMaxSetup: useRef('false'), } diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index bf4d4a86..37101307 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -2,7 +2,7 @@ import { useState } from 'react' import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' import { canvasSettingState, canvasState, checkedModuleState, isManualModuleSetupState } from '@/store/canvasAtom' import { rectToPolygon, polygonToTurfPolygon, calculateVisibleModuleHeight, getDegreeByChon } from '@/util/canvas-util' -import { basicSettingState, roofDisplaySelector } from '@/store/settingAtom' +import { addedRoofsState, basicSettingState, roofDisplaySelector } from '@/store/settingAtom' import offsetPolygon, { calculateAngle } from '@/util/qpolygon-utils' import { QPolygon } from '@/components/fabric/QPolygon' import { moduleSetupSurfaceState, moduleIsSetupState } from '@/store/canvasAtom' @@ -48,11 +48,9 @@ export function useModuleBasicSetting(tabNum) { useEffect(() => { // console.log('basicSetting', basicSetting) if (canvas) { - canvas.selection = true - canvas.selectionFullyContained = true - // canvas.on('selection:created', (e) => { - // console.log('selection:created', e.selected) - // }) + //๋“œ๋ž˜๊ทธ ์—ฌ๋ถ€ + // canvas.selection = true + // canvas.selectionFullyContained = true } }, []) @@ -191,7 +189,7 @@ export function useModuleBasicSetting(tabNum) { return } - let offsetLength = canvasSetting.roofSizeSet === 3 ? -90 : (trestleDetail.eaveIntvl / 10) * -1 + let offsetLength = canvasSetting.roofSizeSet === '3' ? -90 : (trestleDetail.eaveIntvl / 10) * -1 setSurfaceShapePattern(roof, roofDisplay.column, true) //ํŒจํ„ด ๋ณ€๊ฒฝ const offsetPoints = offsetPolygon(roof.points, offsetLength) //์•ˆ์ชฝ offset //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ @@ -401,12 +399,11 @@ export function useModuleBasicSetting(tabNum) { const moduleHeight = Number(checkedModule[0].shortAxis) / 10 let tmpWidth = flowDirection === 'south' || flowDirection === 'north' ? moduleWidth : moduleHeight let tmpHeight = flowDirection === 'south' || flowDirection === 'north' ? moduleHeight : moduleWidth - let { width, height } = calculateVisibleModuleHeight( - tmpWidth, - tmpHeight, - getDegreeByChon(moduleSetupSurfaces[i].roofMaterial.pitch), - flowDirection, - ) //๊ฐ๋„ ์ ์šฉ + + let { width, height } = + canvasSetting.roofSizeSet === '1' + ? calculateVisibleModuleHeight(tmpWidth, tmpHeight, getDegreeByChon(moduleSetupSurfaces[i].roofMaterial.pitch), flowDirection) + : { width: tmpWidth, height: tmpHeight } const points = [ { x: mousePoint.x - width / 2, y: mousePoint.y - height / 2 }, @@ -823,17 +820,16 @@ export function useModuleBasicSetting(tabNum) { : Number(module.longAxis)) / 10 } - return calculateVisibleModuleHeight( - tmpWidth, - tmpHeight, - getDegreeByChon(moduleSetupSurface.roofMaterial.pitch), - moduleSetupSurface.flowDirection, - ) //๊ฐ๋„ ์  + console.log(canvasSetting) + + return canvasSetting.roofSizeSet === '1' + ? calculateVisibleModuleHeight(tmpWidth, tmpHeight, getDegreeByChon(moduleSetupSurface.roofMaterial.pitch), moduleSetupSurface.flowDirection) + : { width: tmpWidth, height: tmpHeight } } const getFlowLines = (moduleSetupSurface, module) => { let flowLines = {} - if (canvasSetting.roofSizeSet !== 3) { + if (canvasSetting.roofSizeSet !== '3') { flowLines = { bottom: bottomTopFlowLine(moduleSetupSurface, module).find((obj) => obj.target === 'bottom'), top: bottomTopFlowLine(moduleSetupSurface, module).find((obj) => obj.target === 'top'), diff --git a/src/hooks/module/useModuleTabContents.js b/src/hooks/module/useModuleTabContents.js index 63ab7722..2c3e16d4 100644 --- a/src/hooks/module/useModuleTabContents.js +++ b/src/hooks/module/useModuleTabContents.js @@ -5,10 +5,8 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { useCommonCode } from '@/hooks/common/useCommonCode' import { moduleSelectionDataState, moduleSelectionInitParamsState, selectedModuleState } from '@/store/selectedModuleOptions' import { isObjectNotEmpty, isEqualObjects } from '@/util/common-utils' -import { addedRoofsState } from '@/store/settingAtom' export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab, tempModuleSelectionData, setTempModuleSelectionData }) { - const addRoofsArray = useRecoilValue(addedRoofsState) const globalPitchText = useRecoilValue(pitchTextSelector) //ํ”ผ์น˜ ํ…์ŠคํŠธ const { findCommonCode } = useCommonCode() From c471703e8815f50bd40009662d9447e46cfc1c5b Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Wed, 5 Feb 2025 10:33:07 +0900 Subject: [PATCH 051/213] =?UTF-8?q?feat:=20=EA=B2=AC=EC=A0=81=EC=84=9C=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=ED=9B=84=20=EA=B2=AC=EC=A0=81=EC=84=9C=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useEstimate.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/hooks/useEstimate.js b/src/hooks/useEstimate.js index 7fa4ff60..7a056c72 100644 --- a/src/hooks/useEstimate.js +++ b/src/hooks/useEstimate.js @@ -1,4 +1,5 @@ import { useContext } from 'react' +import { useRouter } from 'next/navigation' import { useRecoilValue } from 'recoil' @@ -10,7 +11,7 @@ import { loginUserStore } from '@/store/commonAtom' export function useEstimate() { const { managementStateLoaded } = useContext(GlobalDataContext) - + const router = useRouter() const loginUserState = useRecoilValue(loginUserStore) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) @@ -48,9 +49,17 @@ export function useEstimate() { drawingFlg: drawingFlg, } - await promisePost({ url: '/api/estimate/save-estimate', data: saveEstimateData }).catch((error) => { - swalFire({ text: error.message, icon: 'error' }) - }) + await promisePost({ url: '/api/estimate/save-estimate', data: saveEstimateData }) + .then(() => { + moveEstimate(planNo, objectNo) + }) + .catch((error) => { + swalFire({ text: error.message, icon: 'error' }) + }) + } + + const moveEstimate = (planNo, objectNo) => { + router.push(`/floor-plan/estimate/5?pid=${planNo}&objectNo=${objectNo}`) } return { From d7fb15c2e938e347759f6e7d69fe72d1947a0d58 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 10:46:34 +0900 Subject: [PATCH 052/213] =?UTF-8?q?=EC=A7=80=EB=B6=95=EB=A9=B4=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=EA=B0=81=EB=8F=84=20=EC=98=A4=EB=A5=98=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 --- .../modal/roofAllocation/ContextRoofAllocationSetting.jsx | 3 ++- .../floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx | 3 ++- src/hooks/roofcover/useRoofAllocationSetting.js | 1 - 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx b/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx index 88188887..dde3e468 100644 --- a/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx +++ b/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx @@ -31,6 +31,7 @@ export default function ContextRoofAllocationSetting(props) { handleSaveContext, currentRoofList, handleChangeInput, + handleChangePitch, } = useRoofAllocationSetting(id) const { findCommonCode } = useCommonCode() @@ -123,7 +124,7 @@ export default function ContextRoofAllocationSetting(props) { type="text" className="input-origin block" onChange={(e) => { - handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) + handleChangePitch(e, index) }} defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} /> diff --git a/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx b/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx index 1d58a93d..7a2519b0 100644 --- a/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx +++ b/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx @@ -33,6 +33,7 @@ export default function RoofAllocationSetting(props) { handleChangeLayout, currentRoofList, handleChangeInput, + handleChangePitch, } = useRoofAllocationSetting(id) const pitchText = useRecoilValue(pitchTextSelector) const { findCommonCode } = useCommonCode() @@ -125,7 +126,7 @@ export default function RoofAllocationSetting(props) { type="text" className="input-origin block" onChange={(e) => { - handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) + handleChangePitch(e, index) }} defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} /> diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index 6471f644..550ce5f5 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -341,7 +341,6 @@ export function useRoofAllocationSetting(id) { const newRoofList = currentRoofList.map((roof, idx) => { return { ...roof, index: idx, ...basicInfo } }) - console.log('basicInfo', newRoofList) setBasicSetting((prev) => { return { From 0e006174b013bfa2c7993133eb88d11eac2ec560 Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Wed, 5 Feb 2025 11:01:14 +0900 Subject: [PATCH 053/213] =?UTF-8?q?refactor:=20=EA=B2=AC=EC=A0=81=EC=84=9C?= =?UTF-8?q?=20=EC=A0=80=EC=9E=A5=20=ED=9B=84=20=EC=BA=94=EB=B2=84=EC=8A=A4?= =?UTF-8?q?=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useEstimate.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/hooks/useEstimate.js b/src/hooks/useEstimate.js index 7a056c72..3d64d66c 100644 --- a/src/hooks/useEstimate.js +++ b/src/hooks/useEstimate.js @@ -5,6 +5,7 @@ import { useRecoilValue } from 'recoil' import { useAxios } from '@/hooks/useAxios' import { useSwal } from '@/hooks/useSwal' +import { usePlan } from '@/hooks/usePlan' import { GlobalDataContext } from '@/app/GlobalDataProvider' import { currentCanvasPlanState } from '@/store/canvasAtom' import { loginUserStore } from '@/store/commonAtom' @@ -15,8 +16,9 @@ export function useEstimate() { const loginUserState = useRecoilValue(loginUserStore) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) - const { swalFire } = useSwal() const { promisePost } = useAxios() + const { swalFire } = useSwal() + const { saveCanvas } = usePlan() /** * ๋„๋ฉด ๊ฒฌ์ ์„œ ์ €์žฅ @@ -50,7 +52,9 @@ export function useEstimate() { } await promisePost({ url: '/api/estimate/save-estimate', data: saveEstimateData }) - .then(() => { + .then(async () => { + // ๊ฒฌ์ ์„œ ์ €์žฅ์ด ์™„๋ฃŒ๋˜๋ฉด ์บ”๋ฒ„์Šค ์ €์žฅ ํ›„ ๊ฒฌ์ ์„œ ํŽ˜์ด์ง€๋กœ ์ด๋™ + await saveCanvas() moveEstimate(planNo, objectNo) }) .catch((error) => { @@ -58,11 +62,15 @@ export function useEstimate() { }) } + /** + * ๊ฒฌ์ ์„œ ํŽ˜์ด์ง€๋กœ ์ด๋™ + */ const moveEstimate = (planNo, objectNo) => { router.push(`/floor-plan/estimate/5?pid=${planNo}&objectNo=${objectNo}`) } return { saveEstimate, + moveEstimate, } } From cdac61a47824aae7fefa41ec07e52938a021cc2c Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 11:21:46 +0900 Subject: [PATCH 054/213] =?UTF-8?q?rackLen=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useTrestle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index fffe27c9..a2634256 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -1021,7 +1021,7 @@ export const useTrestle = () => { selectable: false, supFitQty, supFitIntvlPct, - rackLen: rackLength, + rackLen, rackYn, rackRowsCd, rackId: itemId, From ae54f4d6a44193d7ebe149b523d9b72ee97bccc2 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 5 Feb 2025 12:19:35 +0900 Subject: [PATCH 055/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?2=EC=B0=A8=20=ED=8C=90=EB=A7=A4=EC=A0=90=20=EA=B4=80=EB=A0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffDetail.jsx | 13 +++---------- src/components/management/StuffSearchCondition.jsx | 11 ++++------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index fe8fea47..8be25f9a 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -411,11 +411,6 @@ export default function StuffDetail() { if (session?.storeId === 'T01') { url = `/api/object/saleStore/${session?.storeId}/firstList?userId=${session?.userId}` } else { - // if (session.storeLvl === '1') { - // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - // } else { - // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - // } url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` } @@ -524,11 +519,6 @@ export default function StuffDetail() { if (session?.storeId === 'T01') { url = `/api/object/saleStore/${session?.storeId}/firstList?userId=${session?.userId}` } else { - // if (session.storeLvl === '1') { - // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - // } else { - // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - // } url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` } get({ url: url }).then((res) => { @@ -1671,6 +1661,9 @@ export default function StuffDetail() { ) } + console.log('๋ฌผ๊ฑด๋“ฑ๋กœ๊ณ ํ•˜๋ฉด::', otherSaleStoreList) + console.log('๋ฌผ๊ฑด๋“ฑ๋กœ๊ณ ํ•˜๋ฉด::', otherSaleStoreList.length) + //"201X584" return ( <> {(editMode === 'NEW' && ( diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index 5021548d..82b5e42e 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -474,12 +474,6 @@ export default function StuffSearchCondition() { //T01์ผ๋–„ url = `/api/object/saleStore/${session?.storeId}/firstList?userId=${session?.userId}` } else { - // if (session.storeLvl === '1') { - // //T01์•„๋‹Œ 1์ฐจ์ ์ผ๋•Œ - // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - // } else { - // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` - // } url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}` } @@ -1302,7 +1296,10 @@ export default function StuffSearchCondition() { onChange={onSelectionChange2} getOptionLabel={(x) => x.saleStoreName} getOptionValue={(x) => x.saleStoreId} - isDisabled={otherSaleStoreList != null && otherSaleStoreList.length === 1 ? true : false} + // isDisabled={otherSaleStoreList != null && otherSaleStoreList.length === 1 ? true : false} + isDisabled={ + session?.storeLvl === '1' ? (otherSaleStoreList.length > 0 ? false : true) : otherSaleStoreList.length === 1 ? true : false + } isClearable={true} value={otherSaleStoreList.filter(function (option) { return option.saleStoreId === otherSaleStoreId From ab613bc967a53378f2bc682336a97acb312307f2 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 12:52:09 +0900 Subject: [PATCH 056/213] =?UTF-8?q?=ED=8F=B0=ED=8A=B8=20=EC=95=88=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/font/FontSetting.jsx | 43 +++++++++++++++++-- .../modal/setting01/SecondOption.jsx | 8 +--- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/components/common/font/FontSetting.jsx b/src/components/common/font/FontSetting.jsx index 26d07ea7..ddddefca 100644 --- a/src/components/common/font/FontSetting.jsx +++ b/src/components/common/font/FontSetting.jsx @@ -87,25 +87,60 @@ export default function FontSetting(props) {
{getMessage('modal.font')}(F)
- setSelectedFont(e)} /> + { + setSelectedFont(e) + }} + showKey={'name'} + sourceKey={'value'} + targetKey={'value'} + />
{getMessage('modal.font.style')}(Y)
- setSelectedFontWeight(e)} /> + { + setSelectedFontWeight(e) + }} + showKey={'name'} + targetKey={'id'} + sourceKey={'id'} + />
{getMessage('modal.font.size')}(S)
- setSelectedFontSize(e)} /> + setSelectedFontSize(e)} + showKey={'name'} + sourceKey={'value'} + targetKey={'value'} + />
{getMessage('modal.font.color')}
- setSelectedFontColor(e)} /> + { + setSelectedFontColor(e) + }} + />
diff --git a/src/components/floor-plan/modal/setting01/SecondOption.jsx b/src/components/floor-plan/modal/setting01/SecondOption.jsx index 941c2d3e..f264edb2 100644 --- a/src/components/floor-plan/modal/setting01/SecondOption.jsx +++ b/src/components/floor-plan/modal/setting01/SecondOption.jsx @@ -21,6 +21,7 @@ export default function SecondOption(props) { const flowFont = useRecoilValue(fontSelector('flowText')) const lengthFont = useRecoilValue(fontSelector('lengthText')) const circuitNumberTextFont = useRecoilValue(fontSelector('circuitNumberText')) + const dimensionLineTextFont = useRecoilValue(fontSelector('dimensionLineText')) const [dimensionId, setDimensionId] = useState(uuidv4()) const [fontId, setFontId] = useState(uuidv4()) const [planSizeId, setPlanSizeId] = useState(uuidv4()) @@ -103,12 +104,7 @@ export default function SecondOption(props) { //์น˜์ˆ˜์„  ์„ค์ • if (!showDimensionLineSettingModal) { setShowDimensionLineSettingModal(true) - fontProps.font = { - fontFamily: '', - fontWeight: '', - fontSize: '', - fontColor: '', - } + fontProps.font = dimensionLineTextFont addPopup(dimensionId, 2, , true) } else { setShowDimensionLineSettingModal(false) From 2e402738bf30fce3cb7af136d6458a19d2398089 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 5 Feb 2025 13:47:02 +0900 Subject: [PATCH 057/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EB=AA=A9=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffSearchCondition.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index 82b5e42e..c5862641 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -87,6 +87,7 @@ export default function StuffSearchCondition() { } setIsGlobalLoading(true) + if (stuffSearch.code === 'S') { if (stuffSearch.pageNo !== 1) { setStuffSearch({ @@ -119,7 +120,7 @@ export default function StuffSearchCondition() { schAddress: address ? address.trim() : '', schObjectName: objectName ? objectName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', - schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, + schSelSaleStoreId: '', schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schReceiveUser: receiveUser ? receiveUser.trim() : '', schDateType: dateType, @@ -209,7 +210,7 @@ export default function StuffSearchCondition() { schAddress: address ? address.trim() : '', schObjectName: objectName ? objectName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', - schSelSaleStoreId: myDataCheck ? schSelSaleStoreId : otherSaleStoreId ? schSelSaleStoreId : '', + schSelSaleStoreId: myDataCheck ? '' : otherSaleStoreId ? '' : '', schOtherSelSaleStoreId: myDataCheck ? '' : otherSaleStoreId, schReceiveUser: receiveUser ? receiveUser.trim() : '', schDateType: dateType, From 77c9a2b1b300e8ff28782d8e01eb6dea060020bc Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Wed, 5 Feb 2025 14:01:29 +0900 Subject: [PATCH 058/213] =?UTF-8?q?connList=20null=20=EC=9D=B8=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 29 +++++-------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 240bc554..98d96ace 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -522,11 +522,13 @@ export default function CircuitTrestleSetting({ id }) { pcsItemId: item.itemId, pscOptCd: seletedOption.code, paralQty: serQty.paralQty, - connections: [ - { - connItemId: item.connList[0].itemId, - }, - ], + connections: item.connList?.length + ? [ + { + connItemId: item.connList[0].itemId, + }, + ] + : [], } })[0] }) @@ -534,23 +536,6 @@ export default function CircuitTrestleSetting({ id }) { // ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€ const handleClose = () => { - // // ํšŒ๋กœ ๋ฒˆํ˜ธ ํ…์ŠคํŠธ ์ œ๊ฑฐ - // const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber') - // canvas.remove(...circuitTexts) - - // // ๋ชจ๋“ˆ์˜ ํšŒ๋กœ ์ •๋ณด ์ดˆ๊ธฐํ™” - // canvas - // .getObjects() - // .filter((obj) => obj.name === POLYGON_TYPE.MODULE) - // .forEach((obj) => { - // obj.circuit = null - // obj.pcsItemId = null - // obj.circuitNumber = null - // }) - - // canvas.renderAll() - // closePopup(id) - swalFire({ title: '๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?', //text: '์ €์žฅํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๋ชจ๋‘ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.', From 9757f4b5bf552b6d063122c31581985622d3bc1f Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 5 Feb 2025 14:12:40 +0900 Subject: [PATCH 059/213] =?UTF-8?q?=ED=99=95=EC=9D=B8=EC=9A=A9=20=EC=BD=98?= =?UTF-8?q?=EC=86=94=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffDetail.jsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 8be25f9a..1f65e88f 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -1538,7 +1538,6 @@ export default function StuffDetail() { setFloorPlanObjectNo({ floorPlanObjectNo: '' }) del({ url: `/api/object/${objectNo}?${queryStringFormatter(delParams)}` }) .then(() => { - console.log('ํŠธ๋ฃจ555') setIsGlobalLoading(true) setFloorPlanObjectNo({ floorPlanObjectNo: '' }) if (session.storeId === 'T01') { @@ -1661,9 +1660,6 @@ export default function StuffDetail() { ) } - console.log('๋ฌผ๊ฑด๋“ฑ๋กœ๊ณ ํ•˜๋ฉด::', otherSaleStoreList) - console.log('๋ฌผ๊ฑด๋“ฑ๋กœ๊ณ ํ•˜๋ฉด::', otherSaleStoreList.length) - //"201X584" return ( <> {(editMode === 'NEW' && ( From 170eca10edc2858b98dda411e013ffcf25638ebb Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 14:31:09 +0900 Subject: [PATCH 060/213] =?UTF-8?q?pcs=20=EC=97=86=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useTrestle.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index a2634256..c9a0184b 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -605,10 +605,13 @@ export const useTrestle = () => { const setEstimateData = async () => { const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) //surfaces.pcses๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฌถ๋Š”๋‹ค - const pcses = surfaces[0].pcses + const pcses = surfaces[0].pcses.filter((pcs) => pcs !== null && pcs !== undefined) + surfaces.forEach((surface, index) => { if (index !== 0) { - pcses.concat(surface.pcses) + if (surface.pcses) { + pcses.concat(surface.pcses) + } } }) const params = { trestles: surfaces.map((surface) => surface.quotationParam), pcses } From 6dc9d0c717ed9d232f7a93fedea9d3696c47ef0a Mon Sep 17 00:00:00 2001 From: yjnoh Date: Wed, 5 Feb 2025 14:48:53 +0900 Subject: [PATCH 061/213] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=9D=BC=EA=B4=84?= =?UTF-8?q?=20=EC=A0=95=EB=A0=AC,=20=EC=9D=BC=EA=B4=84=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=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/useModule.js | 113 +++++++++++++--------- src/hooks/module/useModuleBasicSetting.js | 8 +- src/hooks/useContextMenu.js | 18 ++-- 3 files changed, 81 insertions(+), 58 deletions(-) diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index 80aa17d7..7f7c981c 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -800,60 +800,65 @@ export function useModule() { } } - const alignModule = (type) => { - const moduleSetupSurface = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0] - const modules = canvas.getObjects().filter((obj) => obj.surfaceId === moduleSetupSurface.id && obj.name === POLYGON_TYPE.MODULE) - const objects = getObjects() - let [top, bottom, left, right] = [0, 0, 0, 0] + const alignModule = (type, surfaceArray) => { + surfaceArray.forEach((surface) => { + const modules = canvas + .getObjects() + .filter((module) => module.name === POLYGON_TYPE.MODULE) + .filter((module) => module.surfaceId === surface.id) - top = Math.min(...modules.map((module) => module.top)) - bottom = Math.max(...modules.map((module) => module.top + module.height)) - left = Math.min(...modules.map((module) => module.left)) - right = Math.max(...modules.map((module) => module.left + module.width)) - const moduleSurfacePos = { - top: Math.min(...moduleSetupSurface.points.map((point) => point.y)), - left: Math.min(...moduleSetupSurface.points.map((point) => point.x)), - } - const [height, width] = [bottom - top, right - left] - const verticalCenterLength = moduleSurfacePos.top + moduleSetupSurface.height / 2 - (top + height / 2) - const horizontalCenterLength = moduleSurfacePos.left + moduleSetupSurface.width / 2 - (left + width / 2) - let isWarning = false + const objects = getObjects() + let [top, bottom, left, right] = [0, 0, 0, 0] - canvas.discardActiveObject() - modules.forEach((module) => { - module.originPos = { - left: module.left, - top: module.top, - fill: module.fill, - } - if (type === MODULE_ALIGN_TYPE.VERTICAL) { - module.set({ top: module.top + verticalCenterLength }) - } else if (type === MODULE_ALIGN_TYPE.HORIZONTAL) { - module.set({ left: module.left + horizontalCenterLength }) + top = Math.min(...modules.map((module) => module.top)) + bottom = Math.max(...modules.map((module) => module.top + module.height)) + left = Math.min(...modules.map((module) => module.left)) + right = Math.max(...modules.map((module) => module.left + module.width)) + const moduleSurfacePos = { + top: Math.min(...surface.points.map((point) => point.y)), + left: Math.min(...surface.points.map((point) => point.x)), } + const [height, width] = [bottom - top, right - left] + const verticalCenterLength = moduleSurfacePos.top + surface.height / 2 - (top + height / 2) + const horizontalCenterLength = moduleSurfacePos.left + surface.width / 2 - (left + width / 2) + let isWarning = false + canvas.discardActiveObject() + modules.forEach((module) => { + module.originPos = { + left: module.left, + top: module.top, + fill: module.fill, + } + if (type === MODULE_ALIGN_TYPE.VERTICAL) { + module.set({ top: module.top + verticalCenterLength }) + } else if (type === MODULE_ALIGN_TYPE.HORIZONTAL) { + module.set({ left: module.left + horizontalCenterLength }) + } + + canvas.renderAll() + module.setCoords() + if (isOverlapObjects(module, objects) || isOutsideSurface(module, surface)) { + isWarning = true + module.set({ fill: 'red' }) + } + }) canvas.renderAll() - module.setCoords() - if (isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) { - isWarning = true - module.set({ fill: 'red' }) + if (isWarning) { + swalFire({ + title: getMessage('can.not.align.module'), + icon: 'error', + type: 'alert', + confirmFn: () => { + modules.forEach((module) => { + module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill }) + module.setCoords() + }) + canvas.renderAll() + }, + }) } }) - canvas.renderAll() - if (isWarning) { - swalFire({ - title: getMessage('can.not.align.module'), - icon: 'error', - type: 'alert', - confirmFn: () => { - modules.forEach((module) => { - module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill }) - module.setCoords() - }) - canvas.renderAll() - }, - }) - } } const modulesRemove = () => { @@ -867,6 +872,19 @@ export function useModule() { canvas.renderAll() } + const moduleRoofRemove = (surfaceArray) => { + surfaceArray.forEach((surface) => { + surface.modules = [] + canvas + .getObjects() + .filter((module) => module.name === POLYGON_TYPE.MODULE && module.surfaceId === surface.id) + .forEach((module) => { + canvas.remove(module) + }) + }) + setModuleStatisticsData() + } + const isOverlapOtherModules = (module, otherModules) => { return otherModules.some( (otherModule) => @@ -1031,6 +1049,7 @@ export function useModule() { moduleColumnInsert, muduleRowInsert, modulesRemove, + moduleRoofRemove, alignModule, setModuleStatisticsData, } diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index cd8ef6a7..29f7f308 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -1,6 +1,6 @@ import { useState } from 'react' import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' -import { canvasSettingState, canvasState, checkedModuleState, isManualModuleSetupState } from '@/store/canvasAtom' +import { canvasSettingState, canvasState, checkedModuleState, currentObjectState, isManualModuleSetupState } from '@/store/canvasAtom' import { rectToPolygon, polygonToTurfPolygon, calculateVisibleModuleHeight, getDegreeByChon } from '@/util/canvas-util' import { addedRoofsState, basicSettingState, roofDisplaySelector } from '@/store/settingAtom' import offsetPolygon, { calculateAngle } from '@/util/qpolygon-utils' @@ -45,6 +45,8 @@ export function useModuleBasicSetting(tabNum) { const { getTrestleDetailList } = useMasterController() const [saleStoreNorthFlg, setSaleStoreNorthFlg] = useState(false) + const [currentObject, setCurrentObject] = useRecoilState(currentObjectState) + useEffect(() => { // console.log('basicSetting', basicSetting) if (canvas) { @@ -256,8 +258,6 @@ export function useModuleBasicSetting(tabNum) { //์„ค์น˜ ๋ฒ”์œ„ ์ง€์ • ํด๋ฆญ ์ด๋ฒคํŠธ const toggleSelection = (setupSurface) => { - console.log('setupSurface', setupSurface) - const isExist = selectedModuleInstSurfaceArray.some((obj) => obj.parentId === setupSurface.parentId) //์ตœ์ดˆ ์„ ํƒ์ผ๋•Œ if (!isExist) { @@ -279,6 +279,7 @@ export function useModuleBasicSetting(tabNum) { canvas?.renderAll() selectedModuleInstSurfaceArray.push(setupSurface) + setCurrentObject({ name: 'moduleSetupSurface', arrayData: [...selectedModuleInstSurfaceArray] }) } else { //์„ ํƒํ›„ ์žฌ์„ ํƒํ•˜๋ฉด ์„ ํƒ์•ˆ๋จ์œผ๋กœ ๋ณ€๊ฒฝ setupSurface.set({ @@ -293,6 +294,7 @@ export function useModuleBasicSetting(tabNum) { const removeIndex = setupSurface.parentId const removeArrayIndex = selectedModuleInstSurfaceArray.findIndex((obj) => obj.parentId === removeIndex) selectedModuleInstSurfaceArray.splice(removeArrayIndex, 1) + setCurrentObject({ name: 'moduleSetupSurface', arrayData: [...selectedModuleInstSurfaceArray] }) } canvas?.renderAll() diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index a0b42438..4235d8db 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -67,7 +67,7 @@ export function useContextMenu() { const commonTextFont = useRecoilValue(fontSelector('commonText')) const { settingsData, setSettingsDataSave } = useCanvasSetting() const { swalFire } = useSwal() - const { alignModule, modulesRemove } = useModule() + const { alignModule, modulesRemove, moduleRoofRemove } = useModule() const { removeRoofMaterial, removeAllRoofMaterial, moveRoofMaterial } = useRoofFn() const currentMenuSetting = () => { @@ -332,8 +332,8 @@ export function useContextMenu() { }, [currentContextMenu]) useEffect(() => { + console.log('currentObject', currentObject) if (currentObject?.name) { - console.log('object', currentObject) switch (currentObject.name) { case 'triangleDormer': case 'pentagonDormer': @@ -725,21 +725,23 @@ export function useContextMenu() { { id: 'moduleVerticalCenterAlign', name: getMessage('contextmenu.module.vertical.align'), - fn: () => alignModule(MODULE_ALIGN_TYPE.VERTICAL), + fn: () => alignModule(MODULE_ALIGN_TYPE.VERTICAL, currentObject.arrayData), }, { id: 'moduleHorizonCenterAlign', name: getMessage('contextmenu.module.horizon.align'), - fn: () => alignModule(MODULE_ALIGN_TYPE.HORIZONTAL), + fn: () => alignModule(MODULE_ALIGN_TYPE.HORIZONTAL, currentObject.arrayData), }, { id: 'moduleRemove', name: getMessage('contextmenu.module.remove'), fn: () => { - const moduleSetupSurface = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0] - const modules = canvas.getObjects().filter((obj) => obj.surfaceId === moduleSetupSurface.id && obj.name === POLYGON_TYPE.MODULE) - canvas.remove(...modules) - canvas.renderAll() + moduleRoofRemove(currentObject.arrayData) + + // const moduleSetupSurface = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0] + // const modules = canvas.getObjects().filter((obj) => obj.surfaceId === moduleSetupSurface.id && obj.name === POLYGON_TYPE.MODULE) + // canvas.remove(...modules) + // canvas.renderAll() }, }, { From 5bf483eb8b79bccf6f5fefb1220e6edfdb814c88 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 5 Feb 2025 15:09:02 +0900 Subject: [PATCH 062/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20QcastProvider=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/layout.js | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/app/layout.js b/src/app/layout.js index 8c78f6c7..c68f8127 100644 --- a/src/app/layout.js +++ b/src/app/layout.js @@ -58,26 +58,28 @@ export default async function RootLayout({ children }) { return ( - - - {headerPathname === '/login' || headerPathname === '/join' ? ( - {children} - ) : ( - - -
-
-
- {children} + + + + {headerPathname === '/login' || headerPathname === '/join' ? ( + { children } + ) : ( + <> + +
+
+
+ {children} +
+
-
-
- - )} - - - - + + )} + + + + + ) From fbb4183e25b4e8968ed34b3c930ddabfc7dc6367 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 5 Feb 2025 15:19:37 +0900 Subject: [PATCH 063/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EC=83=81=EC=84=B8&?= =?UTF-8?q?=20=EA=B2=AC=EC=A0=81=EC=84=9C=EC=83=81=EC=84=B8=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C=20=ED=8C=9D?= =?UTF-8?q?=EC=97=85=20=EB=A6=AC=EC=BD=94=EC=9D=BC=20=EA=B4=80=EB=A0=A8=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/estimate/popup/DocDownOptionPop.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/estimate/popup/DocDownOptionPop.jsx b/src/components/estimate/popup/DocDownOptionPop.jsx index 50dfd018..25461dc6 100644 --- a/src/components/estimate/popup/DocDownOptionPop.jsx +++ b/src/components/estimate/popup/DocDownOptionPop.jsx @@ -4,13 +4,14 @@ import { useMessage } from '@/hooks/useMessage' import { useAxios } from '@/hooks/useAxios' import { useRecoilValue } from 'recoil' import { floorPlanObjectState, estimateState } from '@/store/floorPlanObjectAtom' -import { usePathname } from 'next/navigation' +import { usePathname, useSearchParams } from 'next/navigation' export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg }) { const { getMessage } = useMessage() const { promisePost } = useAxios() const pathName = usePathname() + const searchParams = useSearchParams() //EXCEL, PDF ๊ตฌ๋ถ„ const [schDownload, setSchDownload] = useState('EXCEL') @@ -53,8 +54,9 @@ export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDown defaultSchDrawingFlg = defaultSchDrawingFlg.concat('|', '2', '|', '3') } + //objectRecoil.floorPlanObjectNo๊ฐ€ ๋น„์›Œ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ ์—†์œผ๋ฉด url์—์„œ ๋บด์˜ค๋„๋ก ์ถ”๊ฐ€ const params = { - objectNo: objectRecoil.floorPlanObjectNo, + objectNo: objectRecoil?.floorPlanObjectNo ? objectRecoil.floorPlanObjectNo : searchParams.get('objectNo'), planNo: planNo, schDownload: schDownload, schUnitPriceFlg: sendUnitPriceFlg, From f30a2f7c30341a6bf50fdb65dc21b44a1727f567 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 5 Feb 2025 15:23:58 +0900 Subject: [PATCH 064/213] =?UTF-8?q?=F0=9F=9A=A8fix:=20=ED=9A=8C=EB=A1=9C?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=EB=A9=94=EB=89=B4=20=EC=A7=84=EC=9E=85?= =?UTF-8?q?=EC=8B=9C=20objectNo=20=EC=9E=83=EC=96=B4=EB=B2=84=EB=A6=AC?= =?UTF-8?q?=EB=8A=94=20=ED=98=84=EC=83=81=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePlan.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index 3691035e..f3b89fe3 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -296,7 +296,10 @@ export function usePlan(params = {}) { const handleCurrentPlanUrl = () => { const currentPlan = plans.find((plan) => plan.isCurrent) - if (currentPlan) router.push(`${pathname}?pid=${currentPlan?.planNo}&objectNo=${floorPlanState?.objectNo}`) + // if (currentPlan) router.push(`${pathname}?pid=${currentPlan?.planNo}&objectNo=${floorPlanState?.objectNo}`) + if (currentPlan !== currentCanvasPlan) { + router.push(`${pathname}?pid=${currentPlan?.planNo}&objectNo=${currentPlan.objectNo}`) + } } const setBgImage = () => { From 9754fb6049701aa234f25e3be95486468ac63851 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 5 Feb 2025 15:33:31 +0900 Subject: [PATCH 065/213] =?UTF-8?q?=F0=9F=9A=A8fix:=20handleCurrentPlanUrl?= =?UTF-8?q?=20=EC=A3=BC=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePlan.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index f3b89fe3..dd3c2739 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -298,7 +298,9 @@ export function usePlan(params = {}) { const currentPlan = plans.find((plan) => plan.isCurrent) // if (currentPlan) router.push(`${pathname}?pid=${currentPlan?.planNo}&objectNo=${floorPlanState?.objectNo}`) if (currentPlan !== currentCanvasPlan) { - router.push(`${pathname}?pid=${currentPlan?.planNo}&objectNo=${currentPlan.objectNo}`) + // todo: [์œ ์ƒ์šฑ] ํ˜„์žฌ ํ”Œ๋žœ๊ณผ ํ˜„์žฌ ์บ”๋ฒ„์Šค ํ”Œ๋žœ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ํ”Œ๋žœ ์ด๋™ + // ์šฐ์„  ์ฃผ์„์ฒ˜๋ฆฌ + // router.push(`${pathname}?pid=${currentPlan?.planNo}&objectNo=${currentPlan.objectNo}`) } } From bd31ce079135ca09b7d68df4084fac4af671fff9 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 16:00:23 +0900 Subject: [PATCH 066/213] =?UTF-8?q?api=20error=20=EC=B2=98=EB=A6=AC=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/module/useTrestle.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index c9a0184b..c04bb3ce 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -6,6 +6,7 @@ import { getDegreeByChon } from '@/util/canvas-util' import { v4 as uuidv4 } from 'uuid' import { useMasterController } from '@/hooks/common/useMasterController' import { basicSettingState } from '@/store/settingAtom' +import { useSwal } from '@/hooks/useSwal' // ํšŒ๋กœ ๋ฐ ๊ฐ€๋Œ€์„ค์ • export const useTrestle = () => { @@ -14,7 +15,7 @@ export const useTrestle = () => { const { getQuotationItem } = useMasterController() const currentAngleType = useRecoilValue(currentAngleTypeSelector) const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet - + const { swalFire } = useSwal() const apply = () => { try { //์ฒ˜๋งˆ๋ ฅ๋ฐ”๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ exposedBottomPoints๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋งˆ๋ ฅ๋ฐ” ๊ทธ๋ ค์ค˜์•ผํ•จ. @@ -616,11 +617,13 @@ export const useTrestle = () => { }) const params = { trestles: surfaces.map((surface) => surface.quotationParam), pcses } //๊ฒฌ์ ์„œ itemList ์กฐํšŒ - const res = await getQuotationItem(params) - if (!res.data) { + const { data: itemList, data2, result } = await getQuotationItem(params) + + if (result.resultCode === 'E') { + swalFire({ text: result.resultMsg, icon: 'error' }) return null } - const itemList = res.data + //northArrangement ๋ถ๋ฉด ์„ค์น˜ ์—ฌ๋ถ€ const northArrangement = getNorthArrangement() // circuitItemList์˜ ๊ฒฝ์šฐ๋Š” moduleList์—์„œ circuitId๋งŒ groupByํ•œ๋‹ค. @@ -678,10 +681,7 @@ export const useTrestle = () => { } }) - const estimateParam = { itemList, northArrangement, roofSurfaceList, circuitItemList } - - // ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ ๋˜๋ฉด true ๋ฐ˜ํ™˜ - return estimateParam + return { itemList, northArrangement, roofSurfaceList, circuitItemList } } const getNorthArrangement = () => { From 936b6c0458f958f4d8a4560e976217789f280d75 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 5 Feb 2025 16:17:10 +0900 Subject: [PATCH 067/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20addPlan=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=A1=B0=EA=B1=B4=EB=B6=80=20=EB=A0=8C=EB=8D=94?= =?UTF-8?q?=EB=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/CanvasLayout.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/CanvasLayout.jsx b/src/components/floor-plan/CanvasLayout.jsx index bc1a4007..499fac57 100644 --- a/src/components/floor-plan/CanvasLayout.jsx +++ b/src/components/floor-plan/CanvasLayout.jsx @@ -1,6 +1,7 @@ 'use client' import { useContext, useEffect } from 'react' +import { usePathname } from 'next/navigation' import { useRecoilValue } from 'recoil' import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider' import { SessionContext } from '@/app/SessionProvider' @@ -12,6 +13,7 @@ import { globalLocaleStore } from '@/store/localeAtom' export default function CanvasLayout({ children }) { // const { menuNumber } = props + const pathname = usePathname() const { menuNumber } = useCanvasMenu() const { session } = useContext(SessionContext) const { floorPlanState } = useContext(FloorPlanContext) @@ -54,7 +56,7 @@ export default function CanvasLayout({ children }) { ))}
- {plans.length < 10 && ( + {plans.length < 10 && !pathname.includes('/estimate') && !pathname.includes('/simulator') && (
-
-
- {getMessage('slope')} -
- { - handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) - }} - defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} - /> + {roof.raftAuth && ( +
+
+ {getMessage('modal.placement.initial.setting.rafter')} + {raftCodes.length > 0 && ( +
+ +
+ )}
- {pitchText}
-
+ )} + {(roof.widAuth || roof.lenAuth) && ( <> {roof.widAuth && ( @@ -155,43 +158,37 @@ export default function ContextRoofAllocationSetting(props) { )} )} - {(roof.raftAuth || roof.roofPchAuth) && ( - <> - {roof.raftAuth && ( -
-
- {getMessage('modal.placement.initial.setting.rafter')} - {raftCodes.length > 0 && ( -
- -
- )} -
+ {roof.roofPchAuth && ( +
+
+ {getMessage('hajebichi')} +
+
- )} - {roof.roofPchAuth && ( -
-
- {getMessage('hajebichi')} -
- -
-
-
- )} - +
+
)} +
+
+ {getMessage('slope')} +
+ { + handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) + }} + defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} + /> +
+ {pitchText} +
+
-
-
- {getMessage('slope')} -
- { - handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) - }} - defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} - /> + + {roof.raftAuth && ( +
+
+ {getMessage('modal.placement.initial.setting.rafter')} + {raftCodes.length > 0 && ( +
+ handleChangeRaft(e, index)} + /> +
+ )}
- {pitchText}
-
+ )} + {(roof.widAuth || roof.lenAuth) && ( <> {roof.widAuth && ( @@ -169,45 +174,38 @@ export default function RoofAllocationSetting(props) { )} )} - {(roof.raftAuth || roof.roofPchAuth) && ( - <> - {roof.raftAuth && ( -
-
- {getMessage('modal.placement.initial.setting.rafter')} - {raftCodes.length > 0 && ( -
- handleChangeRaft(e, index)} - /> -
- )} -
+ {roof.roofPchAuth && ( +
+
+ {getMessage('hajebichi')} +
+ handleChangeInput(e, 'hajebichi', index)} + value={parseInt(roof.hajebichi)} + readOnly={roof.roofPchAuth === 'R'} + />
- )} - {roof.roofPchAuth && ( -
-
- {getMessage('hajebichi')} -
- handleChangeInput(e, 'hajebichi', index)} - value={parseInt(roof.hajebichi)} - readOnly={roof.roofPchAuth === 'R'} - /> -
-
-
- )} - +
+
)} +
+
+ {getMessage('slope')} +
+ { + handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index) + }} + defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} + /> +
+ {pitchText} +
+
+
+
+ { + setPasswordVisible(passwordVisible) + }} + onFocus={() => setSecFocus(true)} + onBlur={() => setSecFocus(false)} + /> + +
+
+ { + setChkLoginId(e.target.checked) + }} + /> + +
+
+ +
+
+ +
+
+ +
+
+ โ€ป + {getMessage('login.guide.text')} +
+ {getMessage('login.guide.sub1')} {getMessage('login.guide.join.btn')} + {getMessage('login.guide.sub2')} +
+ + )} + {!autoLoginParam && passwordReset === 2 && ( + <> +
+
+ {getMessage('login.init_password.title')} + {getMessage('login.init_password.sub_title')}
{ - setUserId(e.target.value) + setCheckId(e.target.value) }} onFocus={() => setIdFocus(true)} onBlur={() => setIdFocus(false)} @@ -177,146 +284,58 @@ export default function Login() {
-
+
{ - setPasswordVisible(passwordVisible) + setCheckEmail(e.target.value) }} + placeholder={getMessage('login.init_password.email.placeholder')} onFocus={() => setSecFocus(true)} onBlur={() => setSecFocus(false)} />
-
- { - setChkLoginId(e.target.checked) +
+
-
- -
-
-
- -
-
- โ€ป - {getMessage('login.guide.text')} -
- {getMessage('login.guide.sub1')} {getMessage('login.guide.join.btn')} - {getMessage('login.guide.sub2')} -
- - )} - {!autoLoginParam && passwordReset === 2 && ( - <> -
-
- {getMessage('login.init_password.title')} - {getMessage('login.init_password.sub_title')}
-
-
- { - setCheckId(e.target.value) - }} - onFocus={() => setIdFocus(true)} - onBlur={() => setIdFocus(false)} - /> - -
-
- { - setCheckEmail(e.target.value) - }} - placeholder={getMessage('login.init_password.email.placeholder')} - onFocus={() => setSecFocus(true)} - onBlur={() => setSecFocus(false)} - /> - -
-
- - -
-
-
- - )} - {autoLoginParam && } + + )} + {autoLoginParam && } +
+
COPYRIGHTยฉ2024 Hanwha Japan All Rights Reserved.
-
COPYRIGHTยฉ2024 Hanwha Japan All Rights Reserved.
-
+ ) } From f47b2684fbc61478d5f1fb3a147c5e6a2c7cb9c7 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 18:53:50 +0900 Subject: [PATCH 078/213] =?UTF-8?q?=EC=9D=98=EB=AF=B8=EC=97=86=EB=8A=94=20?= =?UTF-8?q?QPolygon=20lengthText=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/qpolygon-utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/qpolygon-utils.js b/src/util/qpolygon-utils.js index 643c640d..edb8574c 100644 --- a/src/util/qpolygon-utils.js +++ b/src/util/qpolygon-utils.js @@ -235,6 +235,7 @@ export default function offsetPolygon(vertices, offset) { const arcSegments = 0 const originPolygon = new QPolygon(vertices, { fontSize: 0 }) + originPolygon.setViewLengthText(false) if (offset > 0) { let result = createMarginPolygon(polygon, offset, arcSegments).vertices From 0c8631c44d9a7dec43d1b169d7753bd838aea459 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 19:53:42 +0900 Subject: [PATCH 079/213] =?UTF-8?q?=EB=94=94=EC=8A=A4=ED=94=8C=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=20=EC=84=A4=EC=A0=95=20=3D>=20=ED=95=A0=EB=8B=B9?= =?UTF-8?q?=ED=91=9C=EC=8B=9C,=20=ED=9A=8C=EB=A1=9C=20=EB=B2=88=ED=98=B8?= =?UTF-8?q?=20=ED=91=9C=EC=8B=9C=20,=EA=B0=80=EB=8C=80=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useRoof.js | 4 +++- src/hooks/option/useCanvasSetting.js | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/hooks/common/useRoof.js b/src/hooks/common/useRoof.js index 0b5e5a6b..14407aa9 100644 --- a/src/hooks/common/useRoof.js +++ b/src/hooks/common/useRoof.js @@ -16,7 +16,9 @@ export function useRoof() { .filter((polygon) => polygon.name === 'roof') .forEach((polygon) => { if (allocDisplay) { - setSurfaceShapePattern(polygon, roofDisplay.column) + if (polygon.roofMaterial) { + setSurfaceShapePattern(polygon, roofDisplay.column, false, polygon.roofMaterial, true) + } } else { polygon.set('fill', null) } diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 29287689..287349bc 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -727,7 +727,7 @@ export function useCanvasSetting() { for (let i = 0; i < option1.length; i++) { switch (option1[i].column) { case 'allocDisplay': //ํ• ๋‹น ํ‘œ์‹œ - optionName = ['1'] + // useRoof์—์„œ ์ž‘์—… ์™„๋ฃŒ break case 'outlineDisplay': //์™ธ๋ฒฝ์„  ํ‘œ์‹œ optionName = ['outerLine', POLYGON_TYPE.WALL] @@ -742,19 +742,19 @@ export function useCanvasSetting() { optionName = ['commonText'] break case 'circuitNumDisplay': //ํšŒ๋กœ๋ฒˆํ˜ธ ํ‘œ์‹œ - optionName = ['7'] + optionName = ['circuitNumber'] break case 'flowDisplay': //ํ๋ฆ„๋ฐฉํ–ฅ ํ‘œ์‹œ optionName = ['arrow', 'flowText'] break case 'trestleDisplay': //๊ฐ€๋Œ€ ํ‘œ์‹œ - optionName = ['8'] + optionName = ['rack', 'smartRack', 'bracket'] break case 'imageDisplay': //์ด๋ฏธ์ง€ ํ‘œ์‹œ optionName = ['9'] break case 'totalDisplay': //์ง‘๊ณ„ํ‘œ ํ‘œ์‹œ - optionName = ['10'] + // ์ž‘์—…ํ•  ํ•„์š” ์—†์Œ break } // ํ‘œ์‹œ ์„ ํƒ ์ƒํƒœ(true/false) From faf3ead51480dd3c68f083c4392f5ce479ba43b6 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 19:54:14 +0900 Subject: [PATCH 080/213] =?UTF-8?q?=EA=B0=80=EB=8C=80=ED=91=9C=EC=8B=9C=20?= =?UTF-8?q?=ED=95=AD=EB=AA=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 287349bc..b36ff30c 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -748,7 +748,7 @@ export function useCanvasSetting() { optionName = ['arrow', 'flowText'] break case 'trestleDisplay': //๊ฐ€๋Œ€ ํ‘œ์‹œ - optionName = ['rack', 'smartRack', 'bracket'] + optionName = ['rack', 'smartRack', 'bracket', 'eaveBar', 'halfEaveBar'] break case 'imageDisplay': //์ด๋ฏธ์ง€ ํ‘œ์‹œ optionName = ['9'] From 77c1c9c3a0d42be60b6cf462c8770f3db73b02f2 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 20:04:39 +0900 Subject: [PATCH 081/213] =?UTF-8?q?optionName=20=EC=9E=88=EC=96=B4?= =?UTF-8?q?=EC=95=BC=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index b36ff30c..07f46740 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -727,7 +727,7 @@ export function useCanvasSetting() { for (let i = 0; i < option1.length; i++) { switch (option1[i].column) { case 'allocDisplay': //ํ• ๋‹น ํ‘œ์‹œ - // useRoof์—์„œ ์ž‘์—… ์™„๋ฃŒ + optionName = [] break case 'outlineDisplay': //์™ธ๋ฒฝ์„  ํ‘œ์‹œ optionName = ['outerLine', POLYGON_TYPE.WALL] @@ -755,6 +755,7 @@ export function useCanvasSetting() { break case 'totalDisplay': //์ง‘๊ณ„ํ‘œ ํ‘œ์‹œ // ์ž‘์—…ํ•  ํ•„์š” ์—†์Œ + optionName = [] break } // ํ‘œ์‹œ ์„ ํƒ ์ƒํƒœ(true/false) From aabd464b8882304e9a085ecd2cd29111c577b7b2 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, 5 Feb 2025 20:21:16 +0900 Subject: [PATCH 082/213] =?UTF-8?q?circuitNumber=20visible=20selector=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 --- .../floor-plan/modal/circuitTrestle/step/StepUp.jsx | 4 +++- .../circuitTrestle/step/type/PassivityCircuitAllocation.jsx | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 65e35583..90d40c2f 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -12,6 +12,7 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { v4 as uuidv4 } from 'uuid' import { globalLocaleStore } from '@/store/localeAtom' import { POLYGON_TYPE } from '@/common/common' +import { circuitNumDisplaySelector } from '@/store/settingAtom' export default function StepUp(props) { const { @@ -43,7 +44,7 @@ export default function StepUp(props) { // ์„ ํƒ๋œ ๊ฐ’๋“ค์„ ์ €์žฅํ•  ์ƒํƒœ ์ถ”๊ฐ€ const [selectedValues, setSelectedValues] = useState({}) - + const isDisplayCircuitNumber = useRecoilValue(circuitNumDisplaySelector) // useCanvasPopupStatusController(6) // const canvasPopupStatusState = useRecoilValue(canvasPopupStatusStore) // if (Object.keys(canvasPopupStatusState[6]).length !== 0) { @@ -323,6 +324,7 @@ export default function StepUp(props) { name: 'circuitNumber', parentId: targetModule.id, circuitInfo: module.pcsItemId, + visible: isDisplayCircuitNumber, }) targetModule.circuit = moduleCircuitText targetModule.pcsItemId = module.pcsItemId 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 ff1e7cb8..1c5595a6 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -7,6 +7,7 @@ import { useSwal } from '@/hooks/useSwal' import { canvasState } from '@/store/canvasAtom' import { moduleStatisticsState } from '@/store/circuitTrestleAtom' import { selectedModuleState } from '@/store/selectedModuleOptions' +import { circuitNumDisplaySelector } from '@/store/settingAtom' import { useContext, useEffect, useState } from 'react' import { useRecoilState, useRecoilValue } from 'recoil' @@ -29,6 +30,7 @@ export default function PassivityCircuitAllocation(props) { const [targetModules, setTargetModules] = useState([]) const { setModuleStatisticsData } = useModule() const { getPcsManualConfChk } = useMasterController() + const isDisplayCircuitNumber = useRecoilValue(circuitNumDisplaySelector) useEffect(() => { console.log('header, rows', header, rows) @@ -215,6 +217,7 @@ export default function PassivityCircuitAllocation(props) { name: 'circuitNumber', parentId: obj.id, circuitInfo: selectedPcs, + visible: isDisplayCircuitNumber, }) obj.set({ strokeWidth: 0.3, From 7fe794b8791e7dcf21b0e8fa88366a4346e86933 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 20:21:25 +0900 Subject: [PATCH 083/213] =?UTF-8?q?=EA=B0=80=EB=8C=80=20visible=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/hooks/module/useTrestle.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index c04bb3ce..2df04fdc 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -5,7 +5,7 @@ import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { getDegreeByChon } from '@/util/canvas-util' import { v4 as uuidv4 } from 'uuid' import { useMasterController } from '@/hooks/common/useMasterController' -import { basicSettingState } from '@/store/settingAtom' +import { basicSettingState, trestleDisplaySelector } from '@/store/settingAtom' import { useSwal } from '@/hooks/useSwal' // ํšŒ๋กœ ๋ฐ ๊ฐ€๋Œ€์„ค์ • @@ -15,6 +15,7 @@ export const useTrestle = () => { const { getQuotationItem } = useMasterController() const currentAngleType = useRecoilValue(currentAngleTypeSelector) const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet + const isTrestleDisplay = useRecoilValue(trestleDisplaySelector) const { swalFire } = useSwal() const apply = () => { try { @@ -135,6 +136,7 @@ export const useTrestle = () => { selectable: false, surfaceId: surface.id, parentId: module.id, + visible: isTrestleDisplay, }) canvas.add(eaveBar) canvas.renderAll() @@ -165,6 +167,7 @@ export const useTrestle = () => { selectable: false, surfaceId: surface.id, parentId: module.id, + visible: isTrestleDisplay, }) canvas.add(halfEaveBar) canvas.renderAll() @@ -193,6 +196,7 @@ export const useTrestle = () => { strokeWidth: 4, selectable: false, parentId: module.id, + visible: isTrestleDisplay, }) canvas.add(halfEaveBar) canvas.renderAll() @@ -918,7 +922,7 @@ export const useTrestle = () => { offsetX: 0, offsetY: 0, }, - + visible: isTrestleDisplay, parentId: module.id, surfaceId: surface.id, supFitQty, @@ -952,6 +956,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen, @@ -992,6 +997,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen: rackLength, @@ -1022,6 +1028,7 @@ export const useTrestle = () => { surfaceId: surface.id, strokeWidth: 4, selectable: false, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen, @@ -1062,6 +1069,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen: rackLength, @@ -1090,6 +1098,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, strokeWidth: 4, selectable: false, supFitQty, @@ -1130,6 +1139,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen, @@ -1158,6 +1168,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, strokeWidth: 4, selectable: false, supFitQty, @@ -1209,6 +1220,7 @@ export const useTrestle = () => { fill: 'green', name: 'bracket', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, width: bracketLength, height: bracketLength, @@ -1228,6 +1240,7 @@ export const useTrestle = () => { fill: 'green', name: 'bracket', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, width: bracketLength, height: bracketLength, @@ -1246,6 +1259,7 @@ export const useTrestle = () => { top: y2 - bracketLength / 3, fill: 'green', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, name: 'bracket', width: bracketLength, @@ -1266,6 +1280,7 @@ export const useTrestle = () => { fill: 'green', name: 'bracket', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, width: bracketLength, height: bracketLength, @@ -1431,6 +1446,7 @@ export const useTrestle = () => { width: 10, height: 10, selectable: false, + visible: isTrestleDisplay, }) canvas.add(bracket) canvas.renderAll() From ec835750f6016ab7d0e6023489e59cf240aa5fc2 Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Wed, 5 Feb 2025 20:51:30 +0900 Subject: [PATCH 084/213] =?UTF-8?q?=ED=9A=8C=EB=A1=9C=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=88=98=EB=8F=99=ED=9A=8C=EB=A1=9C=20=ED=95=A0=EB=8B=B9=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 --- .../modal/circuitTrestle/step/StepUp.jsx | 137 ++++++++++++------ src/hooks/common/useMasterController.js | 13 ++ 2 files changed, 105 insertions(+), 45 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 90d40c2f..30d40de5 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -12,7 +12,6 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { v4 as uuidv4 } from 'uuid' import { globalLocaleStore } from '@/store/localeAtom' import { POLYGON_TYPE } from '@/common/common' -import { circuitNumDisplaySelector } from '@/store/settingAtom' export default function StepUp(props) { const { @@ -33,7 +32,7 @@ export default function StepUp(props) { const [moduleTabs, setModuleTabs] = useState({}) const [arrayLength, setArrayLength] = useState(3) //module-table-inner์˜ ๋ฐ˜๋ณต ๊ฐœ์ˆ˜ const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState) - const { getPcsVoltageStepUpList, getPcsAutoRecommendList, getPcsVoltageChk } = useMasterController() + const { getPcsVoltageStepUpList, getPcsAutoRecommendList, getPcsVoltageChk, getPcsConnOptionItemList } = useMasterController() const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const canvas = useRecoilValue(canvasState) const selectedModules = useRecoilValue(selectedModuleState) @@ -52,20 +51,19 @@ export default function StepUp(props) { // } useEffect(() => { - // PCS ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + console.log(allocationType) + if (allocationType === 'auto') { - fetchStepUpData() + // PCS ์ž๋™ ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + fetchAutoStepUpData() } else { - // 1-1 2-2 - canvas - .getObjects() - .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuit) - .map((module) => module.circuitNumber) + // PCS ์ˆ˜๋™ ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + fetchPassiStepUpData() } }, []) - // PCS ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ - const fetchStepUpData = async () => { + // PCS ์ž๋™ ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + const fetchAutoStepUpData = async () => { try { const params = { ...props.getOptYn(), // ์˜ต์…˜ Y/N @@ -107,6 +105,89 @@ export default function StepUp(props) { } } + // PCS ์ˆ˜๋™ ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + const fetchPassiStepUpData = async () => { + try { + // 1-1 2-2 + // canvas + // .getObjects() + // .filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuit) + // .map((module) => module.circuitNumber) + + // ๋ชจ๋“ˆ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ + const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + + // PCS๋ณ„ ํšŒ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๊ฐ์ฒด + const pcsSummary = {} + + // ๊ฐ ๋ชจ๋“ˆ์„ ์ˆœํšŒํ•˜๋ฉฐ PCS๋ณ„ ํšŒ๋กœ ์ •๋ณด ์ˆ˜์ง‘ + modules.forEach((module) => { + if (!module.circuit || !module.pcsItemId) return + + if (!pcsSummary[module.pcsItemId]) { + pcsSummary[module.pcsItemId] = { + circuits: {}, + totalModules: 0, + } + } + + const circuitNumber = module.circuitNumber + if (!pcsSummary[module.pcsItemId].circuits[circuitNumber]) { + pcsSummary[module.pcsItemId].circuits[circuitNumber] = 0 + } + pcsSummary[module.pcsItemId].circuits[circuitNumber]++ + pcsSummary[module.pcsItemId].totalModules++ + }) + + const params = { + useModuleItemList: props.getUseModuleItemList(), + pcsItemList: getSelectedPcsItemList(), + } + + // PCS ์ ‘์†ํ•จ ๋ฐ ์˜ต์…˜ ๋ชฉ๋ก ์กฐํšŒ + getPcsConnOptionItemList(params).then((res) => { + if (res?.result.code === 200 && res?.data) { + // PCS ์•„์ดํ…œ ๋ฆฌ์ŠคํŠธ์— serQtyList ์ถ”๊ฐ€ + const pcsItemListWithSerQty = res.data.pcsItemList.map((pcsItem) => { + const pcsData = pcsSummary[pcsItem.itemId] || { circuits: {}, totalModules: 0 } + const circuitCounts = Object.values(pcsData.circuits) + return { + ...pcsItem, + serQtyList: [ + { + // ํ•œ ํšŒ๋กœ๋‹น ์ตœ๋Œ€ ๋ชจ๋“ˆ ์ˆ˜ + serQty: circuitCounts.length > 0 ? Math.max(...circuitCounts) : 0, + // ํšŒ๋กœ ๊ฐœ์ˆ˜ + paralQty: Object.keys(pcsData.circuits).length || 0, + rmdYn: 'Y', + usePossYn: 'Y', + roofSurfaceList: props.getRoofSurfaceList(), + }, + ], + } + }) + + // Update res.data with modified pcsItemList + res.data.pcsItemList = pcsItemListWithSerQty + setSelectedModels(pcsItemListWithSerQty) + + const dataArray = Array.isArray(res.data) ? res.data : [res.data] + const stepUpListData = formatStepUpListData(dataArray) + + // PCS ์Šน์••์„ค์ • ์ •๋ณด SET + setStepUpListData(stepUpListData) + + // PCS ์˜ต์…˜ ์กฐํšŒ + const formattedOptCodes = formatOptionCodes(res.data.optionList) + setOptCodes(formattedOptCodes) + setSeletedOption(formattedOptCodes[0]) + } + }) + } catch (error) { + console.error('Error fetching step up data:', error) + } + } + // PCS ์˜ต์…˜ ์กฐํšŒ const formatOptionCodes = (optionList = []) => { return optionList?.map((opt) => ({ @@ -125,40 +206,6 @@ export default function StepUp(props) { selectedPcsItem: formatPcsItemList(stepUps.pcsItemList), })) - // ์ดˆ๊ธฐ ์ถ”์ฒœ ๊ฐ’๋“ค์„ selectedValues์— ์ €์žฅ - const initialSelectedValues = {} - formattedData.forEach((stepUp) => { - stepUp.pcsItemList.forEach((pcsItem, pcsIdx) => { - const pcsKey = `${pcsItem.goodsNo}_${pcsIdx}` - - // ์ถ”์ฒœ ๊ฐ’(rmdYn === 'Y') ์ฐพ๊ธฐ - const recommendedRow = pcsItem.serQtyList.find((item) => item.rmdYn === 'Y') - if (recommendedRow) { - const selectionData = { - stepUpId: pcsItem.goodsNo, - pcsInfo: { - itemId: pcsItem.itemId, - goodsNo: pcsItem.goodsNo, - pcsMkrCd: pcsItem.pcsMkrCd, - pcsSerCd: pcsItem.pcsSerCd, - }, - allocation: { - serQty: recommendedRow.serQty, - paralQty: recommendedRow.paralQty, - }, - } - - initialSelectedValues[pcsItem.goodsNo] = { - ...initialSelectedValues[pcsItem.goodsNo], - [pcsKey]: selectionData, - } - } - }) - }) - - // ์ดˆ๊ธฐ ์ถ”์ฒœ ๊ฐ’๋“ค์„ selectedValues์— ์ €์žฅ - setSelectedValues(initialSelectedValues) - return formattedData } diff --git a/src/hooks/common/useMasterController.js b/src/hooks/common/useMasterController.js index 85236e9c..2c488c83 100644 --- a/src/hooks/common/useMasterController.js +++ b/src/hooks/common/useMasterController.js @@ -241,6 +241,18 @@ export function useMasterController() { return await put({ url: '/api/object/update-object-date', data: params }) } + /** + * PCS ์ ‘์†ํ•จ ๋ฐ ์˜ต์…˜ ๋ชฉ๋ก ์กฐํšŒ + * @param {์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ ์•„์ดํ…œ ๋ชฉ๋ก} useModuleItemList + * @param {PCS ์ œํ’ˆ ๋ชฉ๋ก} pcsItemList + * @returns + */ + const getPcsConnOptionItemList = async (params = null) => { + return await post({ url: '/api/v1/master/getPcsConnOptionItemList', data: params }).then((res) => { + return res + }) + } + return { getRoofMaterialList, getModuleTypeItemList, @@ -255,5 +267,6 @@ export function useMasterController() { getPcsVoltageStepUpList, updateObjectDate, getQuotationItem, + getPcsConnOptionItemList, } } From a20b0663017ec8880198ff4bd58124c190cd1450 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 5 Feb 2025 21:03:59 +0900 Subject: [PATCH 085/213] =?UTF-8?q?=F0=9F=9A=A8fix:=20=EB=88=84=EB=9D=BD?= =?UTF-8?q?=EB=90=9C=20=EC=9E=84=ED=8F=AC=ED=8A=B8=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/modal/circuitTrestle/step/StepUp.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 30d40de5..969c7506 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -12,6 +12,7 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { v4 as uuidv4 } from 'uuid' import { globalLocaleStore } from '@/store/localeAtom' import { POLYGON_TYPE } from '@/common/common' +import { circuitNumDisplaySelector } from '@/store/settingAtom' export default function StepUp(props) { const { From 2e2ba9135393a849045b56843e66dc5ab104b4fc Mon Sep 17 00:00:00 2001 From: basssy Date: Thu, 6 Feb 2025 09:33:12 +0900 Subject: [PATCH 086/213] =?UTF-8?q?=EB=A6=AC=EC=BD=94=EC=9D=BC=20undefined?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC?= 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, 2 insertions(+), 9 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 517e2c35..142f9393 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -373,7 +373,7 @@ export default function CanvasMenu(props) { useEffect(() => { if (isObjectNotEmpty(estimateRecoilState)) { if (estimateRecoilState?.createUser === 'T01') { - if (sessionState.userId !== 'T01') { + if (sessionState.storeId !== 'T01') { setButtonStyle1('none') setButtonStyle2('none') setButtonStyle3('none') @@ -404,7 +404,7 @@ export default function CanvasMenu(props) { } } } - }, [estimateRecoilState]) + }, [estimateRecoilState.tempFlg, estimateRecoilState.lockFlg]) /** * ๊ฒฌ์ ์„œ ์ž ๊ธˆ / ํ•ด์ œ @@ -415,7 +415,6 @@ export default function CanvasMenu(props) { */ const handleEstimateLockController = (estimateRecoilState) => { swalFire({ - // text: estimateRecoilState.lockFlg === '0' ? getMessage('estimate.detail.lock.alertMsg') : getMessage('estimate.detail.unlock.alertMsg'), html: estimateRecoilState.lockFlg === '0' ? getMessage('estimate.detail.lock.alertMsg') : getMessage('estimate.detail.unlock.alertMsg'), confirmButtonText: estimateRecoilState.lockFlg === '1' ? getMessage('estimate.detail.unlock.confirmBtnName') : '', type: 'confirm', @@ -572,20 +571,17 @@ export default function CanvasMenu(props) { {menuNumber === 5 && ( <>
- {/* From ae57338aab3ed5fabcf99e97fe489c0796211f32 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 6 Feb 2025 16:16:42 +0900 Subject: [PATCH 104/213] =?UTF-8?q?#578=20[=ED=9A=8C=EB=A1=9C]=EA=B0=80=20?= =?UTF-8?q?=ED=95=A0=EB=8B=B9=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=EA=B4=80=EB=A0=A8=EA=B1=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 9 +++++++-- src/hooks/module/useTrestle.js | 17 ++++++++++++++++- src/hooks/useMouse.js | 4 ++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 31f3aaa4..ef3229cb 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -30,7 +30,7 @@ const ALLOCATION_TYPE = { export default function CircuitTrestleSetting({ id }) { const { getMessage } = useMessage() const { closePopup } = usePopup() - const { apply } = useTrestle() + const { apply, hideCircuitNumberTexts } = useTrestle() const { swalFire } = useSwal() const { saveEstimate } = useEstimate() const canvas = useRecoilValue(canvasState) @@ -450,11 +450,16 @@ export default function CircuitTrestleSetting({ id }) { obj.pcses = getStepUpListData() }) + hideCircuitNumberTexts() + + //TODO : ์ด๋ฏธ์ง€ ์ €์žฅ + const result = await apply() if (result) { + // TODO : ์ด๋ฏธ์ง€ ์ €์žฅ await saveEstimate(result) } - removeNotAllocationModules() + // removeNotAllocationModules() } const removeNotAllocationModules = () => { diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 916e28d7..c47f99c0 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -18,6 +18,11 @@ export const useTrestle = () => { const isTrestleDisplay = useRecoilValue(trestleDisplaySelector) const { swalFire } = useSwal() const apply = () => { + const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit) + if (notAllocationModules.length > 0) { + swalFire({ text: 'ๅ›ž่ทฏ็•ชๅทใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใชใ„ใƒขใ‚ธใƒฅใƒผใƒซใŒใ‚ใ‚Šใพใ™ใ€‚ ็•ชๅทใ‚’่จญๅฎšใ—ใชใŠใ™ใ‹ใ€ ใƒ‘ใƒใƒซใ‚’ๅ‰Š้™คใ—ใฆใใ ใ•ใ„ใ€‚', icon: 'error' }) + return null + } try { //์ฒ˜๋งˆ๋ ฅ๋ฐ”๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ exposedBottomPoints๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋งˆ๋ ฅ๋ฐ” ๊ทธ๋ ค์ค˜์•ผํ•จ. // exposedBottomPoints๋Š” ๋…ธ์ถœ ์ตœํ•˜๋ฉด ๋“ค์˜ centerPoint ๋ฐฐ์—ด. @@ -2227,5 +2232,15 @@ export const useTrestle = () => { }) } - return { apply, getTrestleParams, clear } + // ์ „๋ชจ๋“ˆ ์˜ ํšŒ๋กœ๋ฒˆํ˜ธ visible false ์ฒ˜๋ฆฌ + // ๊ฐ€๋Œ€ ์„ค์น˜ ์ „ ํ•„์š” + const hideCircuitNumberTexts = () => { + const circuitNumberTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber') + circuitNumberTexts.forEach((text) => { + text.visible = false + }) + canvas.renderAll() + } + + return { apply, getTrestleParams, clear, hideCircuitNumberTexts } } diff --git a/src/hooks/useMouse.js b/src/hooks/useMouse.js index 033fea59..e88b4cb0 100644 --- a/src/hooks/useMouse.js +++ b/src/hooks/useMouse.js @@ -11,10 +11,10 @@ export function useMouse() { const mouseLines = canvas.getObjects().filter((obj) => obj.name === 'mouseLine') if (mouseLines.length < 2) { - return pointer + return { x: Math.round(pointer.x), y: Math.round(pointer.y) } } - return getInterSectionLineNotOverCoordinate(mouseLines[0], mouseLines[1]) || pointer + return getInterSectionLineNotOverCoordinate(mouseLines[0], mouseLines[1]) || { x: Math.round(pointer.x), y: Math.round(pointer.y) } } return { From 6cbce58f59df8194eb1503bf099ca8a31f278745 Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Thu, 6 Feb 2025 16:35:52 +0900 Subject: [PATCH 105/213] =?UTF-8?q?refactor:=20=EC=BA=94=EB=B2=84=EC=8A=A4?= =?UTF-8?q?=20=EC=A0=80=EC=9E=A5=20=EC=8B=9C=20=EC=96=BC=EB=9F=BF=20?= =?UTF-8?q?=ED=91=9C=EC=B6=9C=20=EC=97=AC=EB=B6=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 2 +- src/hooks/useEstimate.js | 7 ++++++- src/hooks/usePlan.js | 12 ++++++------ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index fa06fa08..ed2249b0 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -272,7 +272,7 @@ export default function CanvasMenu(props) { // ์ €์žฅ๋ฒ„ํŠผ(btn08) ํด๋ฆญ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ const handleSaveCanvas = async () => { - await saveCanvas() + await saveCanvas(true) } // ๋‚˜๊ฐ€๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ diff --git a/src/hooks/useEstimate.js b/src/hooks/useEstimate.js index 3d64d66c..e2ed851d 100644 --- a/src/hooks/useEstimate.js +++ b/src/hooks/useEstimate.js @@ -7,11 +7,13 @@ import { useAxios } from '@/hooks/useAxios' import { useSwal } from '@/hooks/useSwal' import { usePlan } from '@/hooks/usePlan' import { GlobalDataContext } from '@/app/GlobalDataProvider' +import { QcastContext } from '@/app/QcastProvider' import { currentCanvasPlanState } from '@/store/canvasAtom' import { loginUserStore } from '@/store/commonAtom' export function useEstimate() { const { managementStateLoaded } = useContext(GlobalDataContext) + const { setIsGlobalLoading } = useContext(QcastContext) const router = useRouter() const loginUserState = useRecoilValue(loginUserStore) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) @@ -24,6 +26,9 @@ export function useEstimate() { * ๋„๋ฉด ๊ฒฌ์ ์„œ ์ €์žฅ */ const saveEstimate = async (estimateParam) => { + // ๋กœ๋”ฉ ์ž„์‹œ ์ฃผ์„ + // setIsGlobalLoading(true) + const userId = loginUserState.userId const saleStoreId = managementStateLoaded.saleStoreId const objectNo = currentCanvasPlan.objectNo @@ -54,7 +59,7 @@ export function useEstimate() { await promisePost({ url: '/api/estimate/save-estimate', data: saveEstimateData }) .then(async () => { // ๊ฒฌ์ ์„œ ์ €์žฅ์ด ์™„๋ฃŒ๋˜๋ฉด ์บ”๋ฒ„์Šค ์ €์žฅ ํ›„ ๊ฒฌ์ ์„œ ํŽ˜์ด์ง€๋กœ ์ด๋™ - await saveCanvas() + await saveCanvas(false) moveEstimate(planNo, objectNo) }) .catch((error) => { diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index d560dec1..2bb37a1e 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -120,9 +120,9 @@ export function usePlan(params = {}) { /** * ํŽ˜์ด์ง€ ๋‚ด ์บ”๋ฒ„์Šค๋ฅผ ์ €์žฅ */ - const saveCanvas = async () => { + const saveCanvas = async (saveAlert = true) => { const canvasStatus = currentCanvasData('save') - await putCanvasStatus(canvasStatus) + await putCanvasStatus(canvasStatus, saveAlert) } /** @@ -192,7 +192,7 @@ export function usePlan(params = {}) { /** * id์— ํ•ด๋‹นํ•˜๋Š” canvas ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ • */ - const putCanvasStatus = async (canvasStatus) => { + const putCanvasStatus = async (canvasStatus, saveAlert = true) => { const planData = { id: currentCanvasPlan.id, bgImageName: currentCanvasPlan?.bgImageName ?? null, @@ -202,7 +202,7 @@ export function usePlan(params = {}) { await promisePut({ url: '/api/canvas-management/canvas-statuses', data: planData }) .then((res) => { setPlans((plans) => plans.map((plan) => (plan.id === currentCanvasPlan.id ? { ...plan, canvasStatus: canvasStatus } : plan))) - swalFire({ text: getMessage('plan.message.save') }) + if (saveAlert) swalFire({ text: getMessage('plan.message.save') }) }) .catch((error) => { swalFire({ text: error.message, icon: 'error' }) @@ -283,7 +283,7 @@ export function usePlan(params = {}) { }) } else { if (!currentCanvasPlan || currentCanvasPlan.id !== newCurrentId) { - await saveCanvas() + await saveCanvas(true) } setCurrentCanvasPlan(plans.find((plan) => plan.id === newCurrentId)) setPlans((plans) => plans.map((plan) => ({ ...plan, isCurrent: plan.id === newCurrentId }))) @@ -316,7 +316,7 @@ export function usePlan(params = {}) { */ const handleAddPlan = async (userId, objectNo) => { if (currentCanvasPlan?.id) { - await saveCanvas() + await saveCanvas(true) } JSON.parse(currentCanvasData()).objects.length > 0 ? swalFire({ From 12e183c1330196d8dc23521161b4df3826cf9765 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 6 Feb 2025 16:38:43 +0900 Subject: [PATCH 106/213] =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=ED=9B=84=20=EB=8B=A4=EC=8B=9C=20circuitNumber=20vi?= =?UTF-8?q?sible=20true=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/circuitTrestle/CircuitTrestleSetting.jsx | 6 ++++-- src/hooks/module/useTrestle.js | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index ef3229cb..585c339b 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -30,7 +30,7 @@ const ALLOCATION_TYPE = { export default function CircuitTrestleSetting({ id }) { const { getMessage } = useMessage() const { closePopup } = usePopup() - const { apply, hideCircuitNumberTexts } = useTrestle() + const { apply, setViewCircuitNumberTexts } = useTrestle() const { swalFire } = useSwal() const { saveEstimate } = useEstimate() const canvas = useRecoilValue(canvasState) @@ -450,13 +450,15 @@ export default function CircuitTrestleSetting({ id }) { obj.pcses = getStepUpListData() }) - hideCircuitNumberTexts() + setViewCircuitNumberTexts(false) //TODO : ์ด๋ฏธ์ง€ ์ €์žฅ const result = await apply() if (result) { // TODO : ์ด๋ฏธ์ง€ ์ €์žฅ + + setViewCircuitNumberTexts(true) await saveEstimate(result) } // removeNotAllocationModules() diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index c47f99c0..441bfcf7 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -2234,13 +2234,13 @@ export const useTrestle = () => { // ์ „๋ชจ๋“ˆ ์˜ ํšŒ๋กœ๋ฒˆํ˜ธ visible false ์ฒ˜๋ฆฌ // ๊ฐ€๋Œ€ ์„ค์น˜ ์ „ ํ•„์š” - const hideCircuitNumberTexts = () => { + const setViewCircuitNumberTexts = (visible) => { const circuitNumberTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber') circuitNumberTexts.forEach((text) => { - text.visible = false + text.visible = visible }) canvas.renderAll() } - return { apply, getTrestleParams, clear, hideCircuitNumberTexts } + return { apply, getTrestleParams, clear, setViewCircuitNumberTexts } } From 70c395662529a91e9e2560dea6f117a5631dad6d Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Thu, 6 Feb 2025 16:55:17 +0900 Subject: [PATCH 107/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EB=B6=88=EB=9F=AC=EC=98=A4=EA=B8=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useRefFiles.js | 57 +++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/src/hooks/common/useRefFiles.js b/src/hooks/common/useRefFiles.js index 027a2d87..a2b16f74 100644 --- a/src/hooks/common/useRefFiles.js +++ b/src/hooks/common/useRefFiles.js @@ -66,15 +66,20 @@ export function useRefFiles() { } const refFileSetting = (file) => { - if (file && ['image/png', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/gif'].includes(file.type)) { - // setRefImage(file) - file.name.split('.').pop() === 'dwg' ? handleUploadConvertRefFile(file) : handleUploadImageRefFile(file) + console.log('๐Ÿš€ ~ refFileSetting ~ file:', file) + if (file.name.split('.').pop() === 'dwg') { + handleUploadConvertRefFile(file) } else { - swalFire({ - text: '์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.', - type: 'alert', - icon: 'error', - }) + if (file && ['image/png', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/gif'].includes(file.type)) { + // file.name.split('.').pop() === 'dwg' ? handleUploadConvertRefFile(file) : handleUploadImageRefFile(file) + handleUploadImageRefFile(file) + } else { + swalFire({ + text: '์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.', + type: 'alert', + icon: 'error', + }) + } } } /** @@ -121,14 +126,13 @@ export function useRefFiles() { } const res = await get({ - url: `http://localhost:3000/api/html2canvas?q=${queryRef.current.value}&fileNm=${currentCanvasPlan.id}&zoom=20`, + url: `${process.env.NEXT_PUBLIC_HOST_URL}/map/convert?q=${queryRef.current.value}&fileNm=${currentCanvasPlan.id}&zoom=20`, }) console.log('๐Ÿš€ ~ handleMapImageDown ~ res:', res) - const file = await readImage(res.fileNm) - console.log('๐Ÿš€ ~ handleMapImageDown ~ file:', file) - setCurrentBgImage(file) - // handleBackImageLoadToCanvas(`plan-images/${currentCanvasPlan.id}.png`) - // setCurrentCanvasPlan((prev) => ({ ...prev, bgImageName: currentCanvasPlan.id, mapPositionAddress: queryRef.current.value })) + // const file = await readImage(res.fileNm) + // console.log('๐Ÿš€ ~ handleMapImageDown ~ file:', file) + // setCurrentBgImage(file) + setCurrentBgImage(`${process.env.NEXT_PUBLIC_HOST_URL}${res.filePath}`) } /** @@ -158,7 +162,6 @@ export function useRefFiles() { console.log('๐Ÿš€ ~ handleUploadImageRefFile ~ res:', res) // const image = await readImage(res.filePath) // console.log('๐Ÿš€ ~ handleUploadImageRefFile ~ file:', image) - setCurrentBgImage(`${process.env.NEXT_PUBLIC_HOST_URL}${res.filePath}`) setRefImage(file) } @@ -171,15 +174,21 @@ export function useRefFiles() { const formData = new FormData() formData.append('file', file) - await promisePost({ url: converterUrl, data: formData }) - .then((res) => { - convertDwgToPng(res.data.Files[0].FileName, res.data.Files[0].FileData) - swalFire({ text: 'ํŒŒ์ผ ๋ณ€ํ™˜ ์„ฑ๊ณต' }) - setRefImage(res.data.Files[0].FileData) - }) - .catch((err) => { - swalFire({ text: 'ํŒŒ์ผ ๋ณ€ํ™˜ ์‹คํŒจ', icon: 'error' }) - }) + const res = await post({ url: converterUrl, data: formData }) + console.log('๐Ÿš€ ~ handleUploadConvertRefFile ~ res:', res) + const result = await post({ url: `${process.env.NEXT_PUBLIC_HOST_URL}/cad/convert`, data: res }) + console.log('๐Ÿš€ ~ handleUploadConvertRefFile ~ result:', result) + setCurrentBgImage(`${process.env.NEXT_PUBLIC_HOST_URL}${result.filePath}`) + setRefImage(res.Files[0].FileData) + // await promisePost({ url: converterUrl, data: formData }) + // .then((res) => { + // convertDwgToPng(res.data.Files[0].FileName, res.data.Files[0].FileData) + // swalFire({ text: 'ํŒŒ์ผ ๋ณ€ํ™˜ ์„ฑ๊ณต' }) + // setRefImage(res.data.Files[0].FileData) + // }) + // .catch((err) => { + // swalFire({ text: 'ํŒŒ์ผ ๋ณ€ํ™˜ ์‹คํŒจ', icon: 'error' }) + // }) } /** From e9bee48e2869e1b9d5f011e170398e76186d6f0a 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: Thu, 6 Feb 2025 17:01:58 +0900 Subject: [PATCH 108/213] =?UTF-8?q?=EC=88=98=EB=8F=99=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EB=8B=A4=EA=B5=AD=EC=96=B4=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/locales/ja.json | 2 ++ src/locales/ko.json | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/locales/ja.json b/src/locales/ja.json index 0514e960..225b8b34 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -153,7 +153,9 @@ "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num": "่จญๅฎšใ™ใ‚‹ๅ›ž่ทฏ็•ชๅท๏ผˆ1๏ฝž๏ผ‰", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.info": "ๆจ™ๆบ–ๅ›ž่ทฏ{0}็ซ ๏ฝž{1}็ซ ", "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset": "้ธๆŠžใ—ใŸใƒ‘ใƒฏใƒผใ‚ณใƒณใƒ‡ใ‚ฃใ‚ทใƒงใƒŠใƒผใฎๅ›ž่ทฏ็•ชๅทใฎๅˆๆœŸๅŒ–", + "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset.info": "์„ ํƒ๋œ ํŒŒ์›Œ ์ปจ๋””์…”๋„ˆ์˜ ํšŒ๋กœํ• ๋‹น์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.(JA)", "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset": "ใ™ในใฆใฎๅ›ž่ทฏ็•ชๅทใฎๅˆๆœŸๅŒ–", + "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset.info": "ํšŒ๋กœ ํ• ๋‹น์˜ ์„ค์ •์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.(JA)", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "็•ชๅท็ขบๅฎš", "modal.circuit.trestle.setting.step.up.allocation": "ๆ˜‡ๅœง่จญๅฎš", "modal.circuit.trestle.setting.step.up.allocation.serial.amount": "ใ‚ทใƒชใ‚ขใƒซๆžšๆ•ฐ", diff --git a/src/locales/ko.json b/src/locales/ko.json index e6d5290a..b74bcd0f 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -153,7 +153,9 @@ "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num": "์„ค์ •ํ•  ํšŒ๋กœ๋ฒˆํ˜ธ(1~)", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.info": "ํ‘œ์ค€ํšŒ๋กœ{0}์žฅ๏ฝž{1}์žฅ", "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset": "์„ ํƒ๋œ ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ์˜ ํšŒ๋กœ๋ฒˆํ˜ธ ์ดˆ๊ธฐํ™”", + "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset.info": "์„ ํƒ๋œ ํŒŒ์›Œ ์ปจ๋””์…”๋„ˆ์˜ ํšŒ๋กœํ• ๋‹น์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.", "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset": "๋ชจ๋“  ํšŒ๋กœ๋ฒˆํ˜ธ ์ดˆ๊ธฐํ™”", + "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset.info": "ํšŒ๋กœ ํ• ๋‹น์˜ ์„ค์ •์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "๋ฒˆํ˜ธ ํ™•์ •", "modal.circuit.trestle.setting.step.up.allocation": "์Šน์•• ์„ค์ •", "modal.circuit.trestle.setting.step.up.allocation.serial.amount": "์ง๋ ฌ๋งค์ˆ˜", From 88db95406b27c989909fc7414318a6f662ac055d 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: Thu, 6 Feb 2025 17:02:48 +0900 Subject: [PATCH 109/213] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EB=B0=B0=EC=B9=98?= =?UTF-8?q?=20=ED=9B=84=20'=EB=AA=A8=EB=93=88/=EA=B0=80=EB=8C=80=EC=84=A4?= =?UTF-8?q?=EC=A0=95'=20=EC=A7=84=EC=9E=85=EC=8B=9C=20'=EB=AA=A8=EB=93=88?= =?UTF-8?q?=20=EB=B0=B0=EC=B9=98'=20=ED=83=AD=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/BasicSetting.jsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index 51620935..a34fe3f8 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -6,7 +6,7 @@ import PitchModule from '@/components/floor-plan/modal/basic/step/pitch/PitchMod import PitchPlacement from '@/components/floor-plan/modal/basic/step/pitch/PitchPlacement' import Placement from '@/components/floor-plan/modal/basic/step/Placement' import { useRecoilValue, useRecoilState } from 'recoil' -import { canvasSettingState, isManualModuleSetupState } from '@/store/canvasAtom' +import { canvasSettingState, canvasState, isManualModuleSetupState } from '@/store/canvasAtom' import { usePopup } from '@/hooks/usePopup' import { Orientation } from '@/components/floor-plan/modal/basic/step/Orientation' import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' @@ -19,6 +19,7 @@ import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupSta import { useMasterController } from '@/hooks/common/useMasterController' import { loginUserStore } from '@/store/commonAtom' import { currentCanvasPlanState } from '@/store/canvasAtom' +import { POLYGON_TYPE } from '@/common/common' export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const { getMessage } = useMessage() @@ -32,6 +33,7 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const addedRoofs = useRecoilValue(addedRoofsState) const loginUserState = useRecoilValue(loginUserStore) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) + const canvas = useRecoilValue(canvasState) // const { initEvent } = useContext(EventContext) const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting(1) @@ -88,6 +90,17 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const res = await updateObjectDate(params) } + useEffect(() => { + let hasModules = canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + .some((obj) => obj.modules?.length > 0) + + if (hasModules) { + setTabNum(3) + } + }, []) + return (
From e01a27b779bcd0350cc2271303bc64838d750664 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Thu, 6 Feb 2025 17:05:38 +0900 Subject: [PATCH 110/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=84=9C=EB=B2=84=20=EC=A3=BC=EC=86=8C=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 --- .env.development | 3 ++- .env.production | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.env.development b/.env.development index b725379b..cfc50e71 100644 --- a/.env.development +++ b/.env.development @@ -4,7 +4,8 @@ NEXT_PUBLIC_HOST_URL="http://1.248.227.176:4000" SESSION_SECRET="i3iHH1yp2/2SpQSIySQ4bpyc4g0D+zCF9FAn5xUG0+Y=" -NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3" +# NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3" +NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_yAS4QDalL9jgQ7vS" NEXT_PUBLIC_Q_ORDER_AUTO_LOGIN_URL="http://q-order-stg.q-cells.jp:8120/eos/login/autoLogin" NEXT_PUBLIC_Q_MUSUBI_AUTO_LOGIN_URL="http://q-musubi-stg.q-cells.jp:8120/qm/login/autoLogin" \ No newline at end of file diff --git a/.env.production b/.env.production index b26e545c..381c7264 100644 --- a/.env.production +++ b/.env.production @@ -4,7 +4,8 @@ NEXT_PUBLIC_HOST_URL="http://1.248.227.176:4000" SESSION_SECRET="i3iHH1yp2/2SpQSIySQ4bpyc4g0D+zCF9FAn5xUG0+Y=" -NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3" +# NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3" +NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_yAS4QDalL9jgQ7vS" NEXT_PUBLIC_Q_ORDER_AUTO_LOGIN_URL="https://q-order.q-cells.jp/eos/login/autoLogin" NEXT_PUBLIC_Q_MUSUBI_AUTO_LOGIN_URL="https://q-musubi.q-cells.jp/qm/login/autoLogin" \ No newline at end of file From 01b045c5acc478f2e0576f794c8eef197c5c7aec Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 6 Feb 2025 17:30:15 +0900 Subject: [PATCH 111/213] =?UTF-8?q?=EC=A7=80=EB=B6=95=EC=9E=AC=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=ED=8C=9D=EC=97=85=20=EC=A0=81=EC=9A=A9=20=EC=95=88?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ContextRoofAllocationSetting.jsx | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx b/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx index 7d909db5..4a911e9e 100644 --- a/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx +++ b/src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx @@ -142,7 +142,15 @@ export default function ContextRoofAllocationSetting(props) {
W
- + { + handleChangeInput(e, 'width', index) + }} + />
@@ -152,7 +160,15 @@ export default function ContextRoofAllocationSetting(props) {
L
- + { + handleChangeInput(e, 'length', index) + }} + />
@@ -169,6 +185,7 @@ export default function ContextRoofAllocationSetting(props) { className="input-origin block" value={parseInt(roof.hajebichi)} readOnly={roof.roofPchAuth === 'R'} + onChange={(e) => handleChangeInput(e, 'hajebichi', index)} />
From 57bfe51146d156aff7e3571a6b6a46cc053e21f1 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Thu, 6 Feb 2025 17:44:44 +0900 Subject: [PATCH 112/213] =?UTF-8?q?=EC=9C=A1=EC=A7=80=EB=B6=95=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/BasicSetting.jsx | 76 +- .../floor-plan/modal/basic/step/Placement.jsx | 45 +- .../modal/basic/step/pitch/PitchModule.jsx | 121 +- .../modal/basic/step/pitch/PitchPlacement.jsx | 109 +- src/hooks/module/useModuleBasicSetting.js | 1137 +++++++++-------- 5 files changed, 795 insertions(+), 693 deletions(-) diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index 51620935..0d1c36a8 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -12,7 +12,7 @@ import { Orientation } from '@/components/floor-plan/modal/basic/step/Orientatio import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' import { useEvent } from '@/hooks/useEvent' import { moduleSelectionDataState } from '@/store/selectedModuleOptions' -import { addedRoofsState } from '@/store/settingAtom' +import { addedRoofsState, corridorDimensionSelector } from '@/store/settingAtom' import { isObjectNotEmpty } from '@/util/common-utils' import Swal from 'sweetalert2' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' @@ -40,31 +40,40 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { if (tabNum === 1) { orientationRef.current.handleNextStep() } else if (tabNum === 2) { - if (!isObjectNotEmpty(moduleSelectionData.module)) { - Swal.fire({ - title: getMessage('module.not.found'), - icon: 'warning', - }) - return - } + if (canvasSetting.roofSizeSet !== '3') { + if (!isObjectNotEmpty(moduleSelectionData.module)) { + Swal.fire({ + title: getMessage('module.not.found'), + icon: 'warning', + }) + return + } - if (addedRoofs.length !== moduleSelectionData.roofConstructions.length) { - Swal.fire({ - title: getMessage('construction.length.difference'), - icon: 'warning', + if (addedRoofs.length !== moduleSelectionData.roofConstructions.length) { + Swal.fire({ + title: getMessage('construction.length.difference'), + icon: 'warning', + }) + return + } + //๋ฌผ๊ฑด์ •๋ณด ๊ฐฑ์‹ ์ผ ์ˆ˜์ • + updateObjectDataApi({ + objectNo: currentCanvasPlan.objectNo, //์˜ค๋ธŒ์ ํŠธ_no + standardWindSpeedId: moduleSelectionData.common.stdWindSpeed, //๊ธฐ์ค€ํ’์†์ฝ”๋“œ + verticalSnowCover: moduleSelectionData.common.stdSnowLd, //์ ์„ค๋Ÿ‰ + surfaceType: moduleSelectionData.common.illuminationTpNm, //๋ฉด์กฐ๋„๊ตฌ๋ถ„ + installHeight: moduleSelectionData.common.instHt, //์„ค์น˜๋†’์ด + userId: loginUserState.userId, //์ž‘์„ฑ์ž์•„์•„๋”” }) - return + } else { + if (!isObjectNotEmpty(moduleSelectionData.flatModule)) { + Swal.fire({ + title: getMessage('module.not.found'), + icon: 'warning', + }) + return + } } - - //๋ฌผ๊ฑด์ •๋ณด ๊ฐฑ์‹ ์ผ ์ˆ˜์ • - updateObjectDataApi({ - objectNo: currentCanvasPlan.objectNo, //์˜ค๋ธŒ์ ํŠธ_no - standardWindSpeedId: moduleSelectionData.common.stdWindSpeed, //๊ธฐ์ค€ํ’์†์ฝ”๋“œ - verticalSnowCover: moduleSelectionData.common.stdSnowLd, //์ ์„ค๋Ÿ‰ - surfaceType: moduleSelectionData.common.illuminationTpNm, //๋ฉด์กฐ๋„๊ตฌ๋ถ„ - installHeight: moduleSelectionData.common.instHt, //์„ค์น˜๋†’์ด - userId: loginUserState.userId, //์ž‘์„ฑ์ž์•„์•„๋”” - }) } setTabNum(tabNum + 1) @@ -88,6 +97,14 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const res = await updateObjectDate(params) } + useEffect(() => { + if (canvasSetting.roofSizeSet !== '3') { + manualModuleSetup(placementRef) + } else { + manualFlatroofModuleSetup(placementFlatRef) + } + }, [isManualModuleSetup]) + return (
@@ -107,12 +124,12 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) {
{tabNum === 1 && } {/*๋ฐฐ์น˜๋ฉด ์ดˆ๊ธฐ์„ค์ • - ์ž…๋ ฅ๋ฐฉ๋ฒ•: ๋ณต์‹œ๋„ ์ž…๋ ฅ || ์‹ค์ธก๊ฐ’ ์ž…๋ ฅ*/} - {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet != 3 && tabNum === 2 && } - {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet != 3 && tabNum === 3 && } + {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet != '3' && tabNum === 2 && } + {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet != '3' && tabNum === 3 && } {/*๋ฐฐ์น˜๋ฉด ์ดˆ๊ธฐ์„ค์ • - ์ž…๋ ฅ๋ฐฉ๋ฒ•: ์œก์ง€๋ถ•*/} - {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet == 3 && tabNum === 2 && } - {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet == 3 && tabNum === 3 && ( + {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet == '3' && tabNum === 2 && } + {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet == '3' && tabNum === 3 && ( )} @@ -141,9 +158,10 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { )} - {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet === 3 && ( + {console.log('canvasSetting.roofSizeSet', canvasSetting.roofSizeSet)} + {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet == 3 && ( <> -
diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index e468b6c7..2018d0fc 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -1010,10 +1010,10 @@ export function useModule() { wpOut: 0, circuits: { wpOut: 0 }, } + } - if (!surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]) { - surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId] = 0 - } + if (!surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]) { + surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId] = 0 } surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]++ surfaceObjects[surface.id].circuits[module.circuitNumber].circuits.wpOut += +module.moduleInfo.wpOut @@ -1027,7 +1027,7 @@ export function useModule() { let tempRow = { name: surfaceObjects[key].roofSurface, circuit: surfaceObjects[key].circuit, - wpOut: parseInt((surfaceObjects[key].wpOut / 1000).toFixed(3)), + wpOut: parseFloat(surfaceObjects[key].wpOut / 1000), } selectedModules.itemList.forEach((module) => { tempRow[module.itemId] = surfaceObjects[key][module.itemId] @@ -1038,7 +1038,7 @@ export function useModule() { let row = { name: surfaceObjects[key].roofSurface, circuit: surfaceObjects[key].circuits[circuit].circuit, - wpOut: parseInt((surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000).toFixed(3)), + wpOut: parseFloat(surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000), } selectedModules.itemList.forEach((module) => { row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] From 039374f71792705ceaaac6e5ee634ac8005e1451 Mon Sep 17 00:00:00 2001 From: basssy Date: Thu, 6 Feb 2025 17:55:28 +0900 Subject: [PATCH 116/213] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=ED=99=94=EB=A9=B4=20=EB=A9=94=EC=84=B8=EC=A7=80=20?= =?UTF-8?q?=EB=88=84=EB=9D=BD=EB=B6=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/ja.json | 1 + src/locales/ko.json | 1 + 2 files changed, 2 insertions(+) diff --git a/src/locales/ja.json b/src/locales/ja.json index 0514e960..b6d0e154 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -877,6 +877,7 @@ "estimate.detail.roofCns": "ๅฑ‹ๆ นๆใƒปไป•ๆง˜ๆ–ฝๅทฅ", "estimate.detail.remarks": "ๅ‚™่€ƒ", "estimate.detail.fileFlg": "ๅพŒๆ—ฅ่ณ‡ๆ–™ๆๅ‡บ", + "estimate.detail.dragFileGuide": "(โ€ปๅŒ—้ข่จญ็ฝฎใฎๅ ดๅˆใ€ใƒ•ใ‚กใ‚คใƒซๆทปไป˜ใŒๅฟ…้ ˆใงใ™.)", "estimate.detail.header.fileList1": "ใƒ•ใ‚กใ‚คใƒซๆทปไป˜", "estimate.detail.fileList.btn": "ใƒ•ใ‚กใ‚คใƒซ้ธๆŠž", "estimate.detail.fileList.extCheck": "็”ปๅƒใƒ•ใ‚กใ‚คใƒซใฎใฟๆทปไป˜ๅฏ่ƒฝใงใ™ใ€‚", diff --git a/src/locales/ko.json b/src/locales/ko.json index e6d5290a..7f03ba24 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -877,6 +877,7 @@ "estimate.detail.roofCns": "์ง€๋ถ•์žฌใƒป์‚ฌ์–‘์‹œ๊ณต", "estimate.detail.remarks": "๋น„๊ณ ", "estimate.detail.fileFlg": "ํ›„์ผ์ž๋ฃŒ์ œ์ถœ", + "estimate.detail.dragFileGuide": "(โ€ป ๋ถ๋ฉด์„ค์น˜์ธ ๊ฒฝ์šฐ, ํŒŒ์ผ ์ฒจ๋ถ€๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.)", "estimate.detail.header.fileList1": "ํŒŒ์ผ์ฒจ๋ถ€", "estimate.detail.fileList.btn": "ํŒŒ์ผ์„ ํƒ", "estimate.detail.fileList.extCheck": "์ด๋ฏธ์ง€ ํŒŒ์ผ๋งŒ ์ฒจ๋ถ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.", From 53344f1788850ceb15159b0a0414996e53496026 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 6 Feb 2025 18:00:20 +0900 Subject: [PATCH 117/213] =?UTF-8?q?#598=20=EC=9D=B4=EC=A0=84=20=EB=AC=BC?= =?UTF-8?q?=EA=B1=B4=EC=A0=95=EB=B3=B4=EC=97=90=EC=84=9C=20=EB=A7=8C?= =?UTF-8?q?=EB=93=A0=20=EB=8F=84=EB=A9=B4=EB=8D=B0=EC=9D=B4=ED=83=80?= =?UTF-8?q?=EA=B0=80=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EB=AC=BC=EA=B1=B4?= =?UTF-8?q?=EB=B2=88=ED=98=B8=EB=A1=9C=20=EB=A7=8C=EB=93=A0=20=ED=9B=84=20?= =?UTF-8?q?=ED=94=8C=EB=9E=9C1=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=B4?= =?UTF-8?q?=EB=8F=84=20=EC=9E=90=EB=8F=99=EC=9C=BC=EB=A1=9C=20=EA=B3=84?= =?UTF-8?q?=EC=86=8D=20=EB=85=B8=EC=B6=9C=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePlan.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index 2bb37a1e..04bb983f 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -3,7 +3,7 @@ import { useContext, useEffect, useState } from 'react' import { usePathname, useRouter, useSearchParams } from 'next/navigation' -import { useRecoilState } from 'recoil' +import { useRecoilState, useResetRecoilState } from 'recoil' import { canvasState, currentCanvasPlanState, plansState } from '@/store/canvasAtom' import { useAxios } from '@/hooks/useAxios' @@ -14,6 +14,8 @@ import { SAVE_KEY } from '@/common/common' import { readImage, removeImage } from '@/lib/fileAction' import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider' import { useEstimateController } from '@/hooks/floorPlan/estimate/useEstimateController' +import { outerLinePointsState } from '@/store/outerLineAtom' +import { placementShapeDrawingPointsState } from '@/store/placementShapeDrawingAtom' export function usePlan(params = {}) { const { floorPlanState } = useContext(FloorPlanContext) @@ -33,6 +35,10 @@ export function usePlan(params = {}) { const { get, promisePost, promisePut, promiseDel, promiseGet } = useAxios() const { setEstimateContextState } = useEstimateController() + + const resetOuterLinePoints = useResetRecoilState(outerLinePointsState) + const resetPlacementShapeDrawingPoints = useResetRecoilState(placementShapeDrawingPointsState) + /** * ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ์˜ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. */ @@ -284,6 +290,8 @@ export function usePlan(params = {}) { } else { if (!currentCanvasPlan || currentCanvasPlan.id !== newCurrentId) { await saveCanvas(true) + + clearRecoilState() } setCurrentCanvasPlan(plans.find((plan) => plan.id === newCurrentId)) setPlans((plans) => plans.map((plan) => ({ ...plan, isCurrent: plan.id === newCurrentId }))) @@ -296,6 +304,12 @@ export function usePlan(params = {}) { // setBgImage() }, [currentCanvasPlan]) + const clearRecoilState = () => { + //clear๊ฐ€ ํ•„์š”ํ•œ recoil state ๊ด€๋ฆฌ + resetOuterLinePoints() + resetPlacementShapeDrawingPoints() + } + const handleCurrentPlanUrl = () => { const currentPlan = plans.find((plan) => plan.isCurrent) // if (currentPlan) router.push(`${pathname}?pid=${currentPlan?.planNo}&objectNo=${floorPlanState?.objectNo}`) From 558da722152c5b9a844e9bd34fd00d087e926eec 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: Thu, 6 Feb 2025 18:08:18 +0900 Subject: [PATCH 118/213] =?UTF-8?q?=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8(Unit=20Test)=20#608?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useRoofAllocationSetting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index 550ce5f5..79e4d239 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -240,7 +240,7 @@ export function useRoofAllocationSetting(id) { const onDeleteRoofMaterial = (idx) => { const isSelected = currentRoofList[idx].selected - const newRoofList = [...currentRoofList].filter((_, index) => index !== idx) + const newRoofList = JSON.parse(JSON.stringify(currentRoofList)).filter((_, index) => index !== idx) if (isSelected) { newRoofList[0].selected = true } From 1e455c3fab75de04358fbd986cc4e545ee825556 Mon Sep 17 00:00:00 2001 From: basssy Date: Thu, 6 Feb 2025 18:08:39 +0900 Subject: [PATCH 119/213] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EB=88=84=EB=9D=BD=EB=B6=84=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/components/estimate/Estimate.jsx | 1 + src/hooks/floorPlan/estimate/useEstimateController.js | 10 ++++++---- src/locales/ja.json | 1 + src/locales/ko.json | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index 18fd2343..01600c62 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -359,6 +359,7 @@ export default function Estimate({}) { docTpCd: estimateContextState?.estimateType, } + // console.log('param::::::::::', param) const apiUrl = `/api/estimate/price/store-price-list?${queryStringFormatter(param)}` get({ url: apiUrl }).then((res) => { if (isNotEmptyArray(res?.data)) { diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js index 7654f3ba..74c35800 100644 --- a/src/hooks/floorPlan/estimate/useEstimateController.js +++ b/src/hooks/floorPlan/estimate/useEstimateController.js @@ -210,10 +210,12 @@ export const useEstimateController = (planNo) => { //์ƒˆ๋กœ ์ฒจ๋ถ€ํ•œ ํŒŒ์ผ์ด ์—†์œผ๋ฉด //๋ถ๋ฉด ๋จผ์ € ์ฒดํฌ - if (estimateData?.northArrangement === '1') { - fileFlg = false - setIsGlobalLoading(false) - return swalFire({ text: getMessage('estimate.detail.save.requiredNorthArrangementFileUpload'), type: 'alert' }) + if (estimateData.fileFlg === '0') { + if (estimateData?.northArrangement === '1') { + fileFlg = false + setIsGlobalLoading(false) + return swalFire({ text: getMessage('estimate.detail.save.requiredNorthArrangementFileUpload'), type: 'alert' }) + } } if (estimateData.itemList.length > 1) { diff --git a/src/locales/ja.json b/src/locales/ja.json index 2dd2a719..3a25a063 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -945,6 +945,7 @@ "estimate.detail.save.alertMsg": "ไฟๅญ˜ใ•ใ‚Œใพใ—ใŸใ€‚่ฆ‹็ฉๆ›ธใง่ฃฝๅ“ใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใจใ€ๅ›ณ้ขใ‚„ๅ›ž่ทฏใซใฏๅๆ˜ ใ•ใ‚Œใพใ›ใ‚“ใ€‚", "estimate.detail.copy.alertMsg": "ใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸใ€‚", "estimate.detail.save.requiredFileUpload": "ใƒ•ใ‚กใ‚คใƒซๆทปไป˜ใŒๅฟ…้ ˆใฎใ‚ขใ‚คใƒ†ใƒ ใŒใ‚ใ‚Šใพใ™ใ€‚ใƒ•ใ‚กใ‚คใƒซใ‚’ๆทปไป˜ใ™ใ‚‹ใ‹ใ€ๅพŒๆ—ฅๆทปไป˜ใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚", + "estimate.detail.save.requiredNorthArrangementFileUpload": "ๅŒ—้ขใซใƒขใ‚ธใƒฅใƒผใƒซใ‚’้…็ฝฎใ—ใŸๅ ดๅˆใ€ๅŒ—้ข้…็ฝฎ่จฑๅฏๆ›ธใ‚’ๅฟ…ใšๆทปไป˜ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™.", "estimate.detail.save.requiredItem": "่ฃฝๅ“ใฏ1ใคไปฅไธŠ็™ป้Œฒใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "estimate.detail.save.requiredCharger": "ๆ‹…ๅฝ“่€…ใฏๅฟ…้ ˆใงใ™ใ€‚", "estimate.detail.save.requiredObjectName": "ๆกˆไปถๅใฏๅฟ…้ ˆใงใ™ใ€‚", diff --git a/src/locales/ko.json b/src/locales/ko.json index a5675247..a4bfac39 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -945,6 +945,7 @@ "estimate.detail.save.alertMsg": "์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฌ์ ์„œ์—์„œ ์ œํ’ˆ์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๋„๋ฉด ๋ฐ ํšŒ๋กœ์— ๋ฐ˜์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", "estimate.detail.copy.alertMsg": "๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", "estimate.detail.save.requiredFileUpload": "ํŒŒ์ผ์ฒจ๋ถ€๊ฐ€ ํ•„์ˆ˜์ธ ์•„์ดํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•˜๊ฑฐ๋‚˜ ํ›„์ผ์ฒจ๋ถ€๋ฅผ ์ฒดํฌํ•ด์ฃผ์‹ญ์‹œ์˜ค.", + "estimate.detail.save.requiredNorthArrangementFileUpload": "๋ถ๋ฉด์— ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•œ ๊ฒฝ์šฐ, ๋ถ๋ฉด๋ฐฐ์น˜ํ—ˆ๊ฐ€์„œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฒจ๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", "estimate.detail.save.requiredItem": "์ œํ’ˆ์€ 1๊ฐœ์ด์ƒ ๋“ฑ๋กํ•ด์•ผ ๋ฉ๋‹ˆ๋‹ค.", "estimate.detail.save.requiredCharger": "๋‹ด๋‹น์ž๋Š” ํ•„์ˆ˜๊ฐ’ ์ž…๋‹ˆ๋‹ค.", "estimate.detail.save.requiredObjectName": "์•ˆ๊ฑด๋ช…์€ ํ•„์ˆ˜๊ฐ’ ์ž…๋‹ˆ๋‹ค.", From a6c37cbb9458d12d12a7c73048d18c8389109000 Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Thu, 6 Feb 2025 18:13:01 +0900 Subject: [PATCH 120/213] =?UTF-8?q?swalFire=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9E=90=EB=8F=99=ED=9A=8C=EB=A1=9C=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=EC=8B=9C=20=ED=9A=8C=EB=A1=9C=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=ED=91=9C=EC=8B=9C=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/circuitTrestle/step/StepUp.jsx | 95 +++++++++++++------ 1 file changed, 67 insertions(+), 28 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index ec5f554f..804a2770 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -12,6 +12,7 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { v4 as uuidv4 } from 'uuid' import { globalLocaleStore } from '@/store/localeAtom' import { POLYGON_TYPE } from '@/common/common' +import { useSwal } from '@/hooks/useSwal' import { circuitNumDisplaySelector } from '@/store/settingAtom' export default function StepUp(props) { @@ -28,6 +29,7 @@ export default function StepUp(props) { getModuleList, } = props const { getMessage } = useMessage() + const { swalFire } = useSwal() const globalLocale = useRecoilValue(globalLocaleStore) const [moduleTab, setModuleTab] = useState(1) const [moduleTabs, setModuleTabs] = useState({}) @@ -70,35 +72,73 @@ export default function StepUp(props) { ...props.getOptYn(), // ์˜ต์…˜ Y/N useModuleItemList: props.getUseModuleItemList(), // ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์•„์ดํ…œ List roofSurfaceList: props.getRoofSurfaceList(), // ์ง€๋ถ•๋ฉด ๋ชฉ๋ก - pcsItemList: selectedModels.length === 0 ? props.getPcsItemList() : getSelectedPcsItemList(), // PCS ์•„์ดํ…œ ๋ชฉ๋ก + pcsItemList: props.getSelectedPcsItemList(), // PCS ์•„์ดํ…œ ๋ชฉ๋ก } - // ํšŒ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์ฒดํฌ - getPcsVoltageChk({ ...params, pcsItemList: getSelectedPcsItemList() }).then((res) => { - if (res.resultCode === 'S') { - // ํšŒ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์ฒดํฌ ํ†ต๊ณผ ์‹œ ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ - getPcsVoltageStepUpList(params).then((res) => { - if (res?.result.code === 200 && res?.data) { - if (selectedModels.length === 0) { - setSelectedModels(res.data.pcsItemList) + // ํšŒ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์ฒดํฌ ํ†ต๊ณผ ์‹œ ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + getPcsVoltageStepUpList(params).then((res) => { + if (res.result.resultCode === 'S') { + if (res?.result.code === 200 && res?.data) { + const dataArray = Array.isArray(res.data) ? res.data : [res.data] + const stepUpListData = formatStepUpListData(dataArray) + + // PCS ์Šน์••์„ค์ • ์ •๋ณด SET + setStepUpListData(stepUpListData) + + // PCS ์˜ต์…˜ ์กฐํšŒ + const formattedOptCodes = formatOptionCodes(res.data.optionList) + setOptCodes(formattedOptCodes) + setSeletedOption(formattedOptCodes[0]) + + // ์บ”๋ฒ„์Šค์— ํšŒ๋กœ ์ •๋ณด ์ ์šฉ + //stepUpListData[0].pcsItemList.forEach((pcsItem) => { + stepUpListData[0].pcsItemList.forEach((pcsItem) => { + const selectedSerQty = pcsItem.serQtyList.find((serQty) => serQty.selected) + if (selectedSerQty) { + selectedSerQty.roofSurfaceList.forEach((roofSurface) => { + const targetSurface = canvas.getObjects().filter((obj) => obj.id === roofSurface.roofSurfaceId)[0] + const moduleIds = targetSurface.modules.map((module) => module.id) + + // ๊ธฐ์กด ๋ชจ๋“ˆ ํ…์ŠคํŠธ ์‚ญ์ œ + canvas + .getObjects() + .filter((obj) => moduleIds.includes(obj.parentId)) + .forEach((text) => canvas.remove(text)) + + // ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ ํšŒ๋กœ ์ •๋ณด ์ถ”๊ฐ€ + roofSurface.moduleList.forEach((module) => { + const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0] + const moduleCircuitText = new fabric.Text(module.circuit, { + left: targetModule.left + targetModule.width / 2, + top: targetModule.top + targetModule.height / 2, + fill: 'black', + fontSize: 20, + width: targetModule.width, + height: targetModule.height, + textAlign: 'center', + originX: 'center', + originY: 'center', + name: 'circuitNumber', + parentId: targetModule.id, + circuitInfo: module.pcsItemId, + visible: isDisplayCircuitNumber, + }) + targetModule.circuit = moduleCircuitText + targetModule.pcsItemId = module.pcsItemId + targetModule.circuitNumber = module.circuit + canvas.add(moduleCircuitText) + }) + }) } - const dataArray = Array.isArray(res.data) ? res.data : [res.data] - const stepUpListData = formatStepUpListData(dataArray) + }) - // PCS ์Šน์••์„ค์ • ์ •๋ณด SET - setStepUpListData(stepUpListData) - - // PCS ์˜ต์…˜ ์กฐํšŒ - const formattedOptCodes = formatOptionCodes(res.data.optionList) - setOptCodes(formattedOptCodes) - setSeletedOption(formattedOptCodes[0]) - } - }) - } else { - swalFire({ - title: res.resultMsg, - type: 'alert', - }) + canvas.renderAll() + } else { + swalFire({ + title: res.result.resultMsg, + type: 'alert', + }) + } } }) } catch (error) { @@ -170,7 +210,6 @@ export default function StepUp(props) { // Update res.data with modified pcsItemList res.data.pcsItemList = pcsItemListWithSerQty - setSelectedModels(pcsItemListWithSerQty) const dataArray = Array.isArray(res.data) ? res.data : [res.data] const stepUpListData = formatStepUpListData(dataArray) @@ -303,8 +342,8 @@ export default function StepUp(props) { // ์„ ํƒ๋œ ํ–‰ ์ •๋ณด ์ €์žฅ setStepUpListData(tempStepUpListData) - console.log('๐Ÿš€ ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData) - console.log('๐Ÿš€ ~ handleRowClick ~ selectedData:', selectedData) + // console.log('๐Ÿš€ ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData) + // console.log('๐Ÿš€ ~ handleRowClick ~ selectedData:', selectedData) // ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ ์˜ต์…˜ ์กฐํšŒ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ const params = { From 5c0451bc964ee6f3004ec44669046dda8e7bde23 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Thu, 6 Feb 2025 18:18:58 +0900 Subject: [PATCH 121/213] =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/modal/basic/step/Placement.jsx | 4 ++-- src/hooks/module/useModuleBasicSetting.js | 6 +++--- src/locales/ko.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/floor-plan/modal/basic/step/Placement.jsx b/src/components/floor-plan/modal/basic/step/Placement.jsx index 852800d5..db153bbf 100644 --- a/src/components/floor-plan/modal/basic/step/Placement.jsx +++ b/src/components/floor-plan/modal/basic/step/Placement.jsx @@ -211,10 +211,10 @@ const Placement = forwardRef((props, refs) => {
-
+ {/*
-
+
*/}
diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index e8a07394..9739c1f5 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -813,7 +813,7 @@ export function useModuleBasicSetting(tabNum) { const flowLines = getFlowLines(moduleSetupSurface, module) //์œก์ง€๋ถ•์ด ์•„๋‹๋•Œ๋งŒ ๋„ฃ๋Š”๋‹ค ์œก์ง€๋ถ•์ผ๋• ํด๋ฆญ ์ด๋ฒคํŠธ์— ๋ณ„๋„๋กœ ๋„ฃ์–ด๋†“์Œ - let startPoint = flowLines.left + let startPoint = flowLines.bottom const moduleArray = [] if (isCenter) { @@ -900,8 +900,8 @@ export function useModuleBasicSetting(tabNum) { moduleArray.push(tempModule) } } else { - tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) - canvas?.add(tempModule) + // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) + // canvas?.add(tempModule) } } } diff --git a/src/locales/ko.json b/src/locales/ko.json index e6d5290a..71f15cda 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -993,7 +993,7 @@ "module.place.select.module": "๋ชจ๋“ˆ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", "module.place.select.one.module": "๋ชจ๋“ˆ์€ ํ•˜๋‚˜๋งŒ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", "batch.canvas.delete.all": "๋ฐฐ์น˜๋ฉด ๋‚ด์šฉ์„ ์ „๋ถ€ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", - "module.not.found": "์„ค์น˜ ๋ชจ๋“ˆ์„ ์„ ํƒํ•˜์„ธ์š”.", + "module.not.found": "๋ชจ๋“ˆ์„ ์„ ํƒํ•˜์„ธ์š”.", "construction.length.difference": "์ง€๋ถ•๋ฉด ๊ณต๋ฒ•์„ ์ „๋ถ€ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", "menu.validation.canvas.roof": "ํŒจ๋„์„ ๋ฐฐ์น˜ํ•˜๋ ค๋ฉด ์ง€๋ถ•๋ฉด์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", "batch.object.outside.roof": "์˜ค๋ธŒ์ ํŠธ๋Š” ์ง€๋ถ•๋‚ด์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", From a242ca03617acdb24688932b8927a317f48df50a Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 6 Feb 2025 19:37:22 +0900 Subject: [PATCH 122/213] =?UTF-8?q?roofGap=20null=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useRoofAllocationSetting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index 2c914b78..cf0e2282 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -199,7 +199,7 @@ export function useRoofAllocationSetting(id) { roofWidth: item.width === null || item.width === undefined ? 0 : Number(item.width), roofHeight: item.length === null || item.length === undefined ? 0 : Number(item.length), roofHajebichi: item.hajebichi === null || item.hajebichi === undefined ? 0 : Number(item.hajebichi), - roofGap: item.raft === null || item.raft === undefined ? 'HEI_455' : item.raft, + roofGap: !item.raft ? item.raftBaseCd : item.raft, roofLayout: item.layout === null || item.layout === undefined ? 'P' : item.layout, roofPitch: item.pitch === null || item.pitch === undefined ? 4 : Number(item.pitch), roofAngle: item.angle === null || item.angle === undefined ? 21.8 : Number(item.angle), From 756283205eddd611a4c37e681aa4f7931bab2003 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 6 Feb 2025 20:52:03 +0900 Subject: [PATCH 123/213] =?UTF-8?q?=ED=8A=B9=EC=A0=95=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=80=20=EA=B8=B8=EC=9D=B4=20=EC=83=9D=EC=84=B1=20=EC=95=88?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/fabric/QPolygon.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/fabric/QPolygon.js b/src/components/fabric/QPolygon.js index e095de42..3f82dec1 100644 --- a/src/components/fabric/QPolygon.js +++ b/src/components/fabric/QPolygon.js @@ -248,6 +248,9 @@ export const QPolygon = fabric.util.createClass(fabric.Polygon, { }, addLengthText() { + if (['module', 'arrow'].includes(this.name)) { + return + } this.canvas ?.getObjects() .filter((obj) => obj.name === 'lengthText' && obj.parentId === this.id) From 4114240c9056d181ac8894fea8ea19d5ec534333 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: Thu, 6 Feb 2025 20:54:20 +0900 Subject: [PATCH 124/213] =?UTF-8?q?-=20=ED=9A=8C=EB=A1=9C=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20selectable=20=EC=88=98=EC=A0=95=20-=20currentObject?= =?UTF-8?q?=20=EC=97=86=EC=9D=84=20=EB=95=8C=20=EB=B3=B4=EC=A1=B0=EC=84=A0?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EB=B2=84=EA=B7=B8?= =?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 --- .../modal/circuitTrestle/CircuitTrestleSetting.jsx | 2 +- .../floor-plan/modal/circuitTrestle/step/StepUp.jsx | 1 + .../step/type/PassivityCircuitAllocation.jsx | 1 + src/hooks/module/useModule.js | 8 ++++++++ src/hooks/useContextMenu.js | 2 ++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 3d473156..bfc4949a 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -193,7 +193,7 @@ export default function CircuitTrestleSetting({ id }) { // ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์•„์ดํ…œ ๋ชฉ๋ก const getUseModuleItemList = () => { - return selectedModules.itemList.map((m) => { + return selectedModules?.itemList?.map((m) => { return { itemId: m.itemId, mixMatlNo: m.mixMatlNo, diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 804a2770..8726f012 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -121,6 +121,7 @@ export default function StepUp(props) { name: 'circuitNumber', parentId: targetModule.id, circuitInfo: module.pcsItemId, + selectable: false, visible: isDisplayCircuitNumber, }) targetModule.circuit = moduleCircuitText 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 c20c995b..e632882b 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -139,6 +139,7 @@ export default function PassivityCircuitAllocation(props) { originX: 'center', originY: 'center', name: 'circuitNumber', + selectable: false, parentId: obj.id, circuitInfo: selectedPcs, visible: isDisplayCircuitNumber, diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index 2018d0fc..ad032d15 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -882,6 +882,14 @@ export function useModule() { const modulesRemove = () => { const activeModule = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0] + if (activeModule.circuit) { + swalFire({ + title: getMessage('can.not.remove.module'), + icon: 'error', + type: 'alert', + }) + return + } const modules = canvas .getObjects() .filter((obj) => obj.surfaceId === activeModule.surfaceId && obj.name === POLYGON_TYPE.MODULE && activeModule.id !== obj.id) diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index 9892788a..bb3c1683 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -176,6 +176,7 @@ export function useContextMenu() { shortcut: ['d', 'D'], name: `${getMessage('contextmenu.auxiliary.remove')}(D)`, fn: () => { + if (!currentObject) return const roof = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0] const innerLines = roof.innerLines?.filter((line) => currentObject.id !== line.id) roof.innerLines = [...innerLines] @@ -187,6 +188,7 @@ export function useContextMenu() { id: 'auxiliaryVerticalBisector', name: getMessage('contextmenu.auxiliary.vertical.bisector'), fn: () => { + if (!currentObject) return const slope = (currentObject.y2 - currentObject.y1) / (currentObject.x2 - currentObject.x1) const length = currentObject.length From b50df4a231d1ed2c992b9099b834a0b6fa11bd5d Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 6 Feb 2025 21:22:10 +0900 Subject: [PATCH 125/213] =?UTF-8?q?addLengthText=20=ED=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20polygon=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/fabric/QPolygon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/fabric/QPolygon.js b/src/components/fabric/QPolygon.js index 3f82dec1..33099639 100644 --- a/src/components/fabric/QPolygon.js +++ b/src/components/fabric/QPolygon.js @@ -248,7 +248,7 @@ export const QPolygon = fabric.util.createClass(fabric.Polygon, { }, addLengthText() { - if (['module', 'arrow'].includes(this.name)) { + if ([POLYGON_TYPE.MODULE, 'arrow', POLYGON_TYPE.MODULE_SETUP_SURFACE, POLYGON_TYPE.OBJECT_SURFACE].includes(this.name)) { return } this.canvas From b6fa46a37d510994f939abb61c0c770431e7e9c8 Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Fri, 7 Feb 2025 10:01:12 +0900 Subject: [PATCH 126/213] =?UTF-8?q?=ED=9A=8C=EB=A1=9C=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?handleRowClick=20=EC=8B=A4=ED=96=89=20=EC=8B=9C=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20uniqueIndex=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/circuitTrestle/step/StepUp.jsx | 75 ++++++++++--------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 8726f012..f86a31f2 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -261,12 +261,13 @@ export default function StepUp(props) { // PCS ์•„์ดํ…œ ํฌ๋งท const formatPcsItemList = (pcsItemList = []) => { - return pcsItemList?.map((item) => ({ + return pcsItemList?.map((item, index) => ({ goodsNo: item.goodsNo ? item.goodsNo : '', itemId: item.itemId ? item.itemId : '', itemNm: item.itemNm ? item.itemNm : '', pcsMkrCd: item.pcsMkrCd ? item.pcsMkrCd : '', pcsSerCd: item.pcsSerCd ? item.pcsSerCd : '', + uniqueIndex: `${item.itemId}_${index}`, // ๊ณ ์œ  ์‹๋ณ„์ž ์ถ”๊ฐ€(๋™์ผํ•œ PCS๋ฅผ ๊ตฌ๋ถ„) connList: formatConnList(item.connList), serQtyList: formatSerQtyList(item.serQtyList), })) @@ -346,43 +347,49 @@ export default function StepUp(props) { // console.log('๐Ÿš€ ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData) // console.log('๐Ÿš€ ~ handleRowClick ~ selectedData:', selectedData) - // ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ ์˜ต์…˜ ์กฐํšŒ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ - const params = { - ...props.getOptYn(), // ์˜ต์…˜ Y/N - useModuleItemList: props.getUseModuleItemList(), // ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์•„์ดํ…œ List - roofSurfaceList: props.getRoofSurfaceList(), // ์ง€๋ถ•๋ฉด ๋ชฉ๋ก - pcsItemList: props.getSelectedPcsItemList().map((pcsItem) => { - // PCS ์•„์ดํ…œ ๋ชฉ๋ก - // tempStepUpListData์—์„œ ํ•ด๋‹น PCS ์•„์ดํ…œ ์ฐพ๊ธฐ - const matchingPcsItem = tempStepUpListData[0].pcsItemList.find((item) => item.pcsId === pcsItem.pcsId && item.itemId === pcsItem.itemId) + console.log('mainIdx, subIdx', mainIdx, subIdx) - // ์„ ํƒ๋œ serQty ์ฐพ๊ธฐ - const selectedSerQty = matchingPcsItem?.serQtyList.find((serQty) => serQty.selected)?.serQty || 0 + // PCS 2๊ฐœ ์ด์ƒ ๋˜๋Š” ์ฒซ๋ฒˆ์งธ PCS ์„ ํƒ ์‹œ์—๋งŒ ์‹คํ–‰ + if (stepUpListData[0].pcsItemList.length > 1 && mainIdx === 0) { + // ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ ์˜ต์…˜ ์กฐํšŒ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ + const params = { + ...props.getOptYn(), // ์˜ต์…˜ Y/N + useModuleItemList: props.getUseModuleItemList(), // ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์•„์ดํ…œ List + roofSurfaceList: props.getRoofSurfaceList(), // ์ง€๋ถ•๋ฉด ๋ชฉ๋ก + pcsItemList: props.getSelectedPcsItemList().map((pcsItem, index) => { + // PCS ์•„์ดํ…œ ๋ชฉ๋ก + // tempStepUpListData์—์„œ ํ•ด๋‹น PCS ์•„์ดํ…œ ์ฐพ๊ธฐ + // uniqueIndex๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์นญ + const matchingPcsItem = tempStepUpListData[0].pcsItemList.find((item) => item.uniqueIndex === `${pcsItem.itemId}_${index}`) - return { - ...pcsItem, - applySerQty: selectedSerQty, - } - }), - } + // ์„ ํƒ๋œ serQty ์ฐพ๊ธฐ + const selectedSerQty = matchingPcsItem?.serQtyList.find((serQty) => serQty.selected)?.serQty || 0 - // PCS ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ - //const res = await getPcsVoltageStepUpList(params) - //getPcsManualConfChk(params).then((res) => { - getPcsVoltageStepUpList(params).then((res) => { - if (res?.result.code === 200 && res?.data) { - const dataArray = Array.isArray(res.data) ? res.data : [res.data] - const stepUpListData = formatStepUpListData(dataArray) - - // PCS ์Šน์••์„ค์ • ์ •๋ณด SET - setStepUpListData(stepUpListData) - - // PCS ์˜ต์…˜ ์กฐํšŒ - const formattedOptCodes = formatOptionCodes(res.data.optionList) - setOptCodes(formattedOptCodes) - setSeletedOption(formattedOptCodes[0]) + return { + ...pcsItem, + applySerQty: selectedSerQty, + } + }), } - }) + + // PCS ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + //const res = await getPcsVoltageStepUpList(params) + //getPcsManualConfChk(params).then((res) => { + getPcsVoltageStepUpList(params).then((res) => { + if (res?.result.code === 200 && res?.data) { + const dataArray = Array.isArray(res.data) ? res.data : [res.data] + const stepUpListData = formatStepUpListData(dataArray) + + // PCS ์Šน์••์„ค์ • ์ •๋ณด SET + setStepUpListData(stepUpListData) + + // PCS ์˜ต์…˜ ์กฐํšŒ + const formattedOptCodes = formatOptionCodes(res.data.optionList) + setOptCodes(formattedOptCodes) + setSeletedOption(formattedOptCodes[0]) + } + }) + } selectedData.roofSurfaceList.forEach((roofSurface) => { const targetSurface = canvas.getObjects().filter((obj) => obj.id === roofSurface.roofSurfaceId)[0] From 2dd64a402e9ccb0cc71db6d156f112ff45423af1 Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Fri, 7 Feb 2025 11:07:07 +0900 Subject: [PATCH 127/213] =?UTF-8?q?=ED=9A=8C=EB=A1=9C=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?handleRowClick=20=EC=8B=A4=ED=96=89=20=EC=8B=9C=20=EC=B6=94?= =?UTF-8?q?=EC=B2=9C=20API=20=EC=8B=A4=ED=96=89=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?=EB=A1=9C=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 --- .../modal/circuitTrestle/step/StepUp.jsx | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index f86a31f2..e0bd7592 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -347,8 +347,6 @@ export default function StepUp(props) { // console.log('๐Ÿš€ ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData) // console.log('๐Ÿš€ ~ handleRowClick ~ selectedData:', selectedData) - console.log('mainIdx, subIdx', mainIdx, subIdx) - // PCS 2๊ฐœ ์ด์ƒ ๋˜๋Š” ์ฒซ๋ฒˆ์งธ PCS ์„ ํƒ ์‹œ์—๋งŒ ์‹คํ–‰ if (stepUpListData[0].pcsItemList.length > 1 && mainIdx === 0) { // ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ ์˜ต์…˜ ์กฐํšŒ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ @@ -372,23 +370,26 @@ export default function StepUp(props) { }), } - // PCS ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ - //const res = await getPcsVoltageStepUpList(params) - //getPcsManualConfChk(params).then((res) => { - getPcsVoltageStepUpList(params).then((res) => { - if (res?.result.code === 200 && res?.data) { - const dataArray = Array.isArray(res.data) ? res.data : [res.data] - const stepUpListData = formatStepUpListData(dataArray) + // PCS๊ฐ€ 1๊ฐœ ์ด๊ณ  2๋ฒˆ์งธ ๋˜๋Š” 3๋ฒˆ์งธ PCS serQty๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋Š” ์ถ”์ฒœ API ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ + if (params.pcsItemList.length !== 1 && (params.pcsItemList[1]?.applySerQty !== 0 || params.pcsItemList[2]?.applySerQty) !== 0) { + // PCS ์Šน์••์„ค์ • ์ •๋ณด ์กฐํšŒ + //const res = await getPcsVoltageStepUpList(params) + //getPcsManualConfChk(params).then((res) => { + getPcsVoltageStepUpList(params).then((res) => { + if (res?.result.code === 200 && res?.data) { + const dataArray = Array.isArray(res.data) ? res.data : [res.data] + const stepUpListData = formatStepUpListData(dataArray) - // PCS ์Šน์••์„ค์ • ์ •๋ณด SET - setStepUpListData(stepUpListData) + // PCS ์Šน์••์„ค์ • ์ •๋ณด SET + setStepUpListData(stepUpListData) - // PCS ์˜ต์…˜ ์กฐํšŒ - const formattedOptCodes = formatOptionCodes(res.data.optionList) - setOptCodes(formattedOptCodes) - setSeletedOption(formattedOptCodes[0]) - } - }) + // PCS ์˜ต์…˜ ์กฐํšŒ + const formattedOptCodes = formatOptionCodes(res.data.optionList) + setOptCodes(formattedOptCodes) + setSeletedOption(formattedOptCodes[0]) + } + }) + } } selectedData.roofSurfaceList.forEach((roofSurface) => { From 9cf79f44cccf0b6ed174d6ff1de8c7b2c8b0fc5f 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: Fri, 7 Feb 2025 11:13:41 +0900 Subject: [PATCH 128/213] =?UTF-8?q?getQueryString=20=EA=B0=92=EC=9D=B4=20n?= =?UTF-8?q?ull=20=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20=EB=B9=88=20=EA=B0=92?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/common-utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/common-utils.js b/src/util/common-utils.js index ee003ec3..842eace0 100644 --- a/src/util/common-utils.js +++ b/src/util/common-utils.js @@ -130,7 +130,7 @@ export const calculateFlowDirection = (canvasAngle) => { */ export const getQueryString = (o) => { const queryString = Object.keys(o) - .map((key) => `${key}=${o[key]}`) + .map((key) => `${key}=${o[key] ?? ''}`) .join('&') return `?${queryString}` } From 38be354271eb41d832ff19de6cea44e9d69650f7 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 11:14:15 +0900 Subject: [PATCH 129/213] =?UTF-8?q?=EB=B0=A9=EC=9C=84=20=EC=84=A4=EC=A0=95?= =?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 --- .../modal/basic/step/Orientation.jsx | 12 ++++++-- .../modal/setting01/FirstOption.jsx | 2 +- src/hooks/common/useCanvasConfigInitialize.js | 2 +- src/hooks/usePolygon.js | 30 ++++++++++++++++++- src/util/canvas-util.js | 3 ++ 5 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/components/floor-plan/modal/basic/step/Orientation.jsx b/src/components/floor-plan/modal/basic/step/Orientation.jsx index d06b6b39..dc08f9f4 100644 --- a/src/components/floor-plan/modal/basic/step/Orientation.jsx +++ b/src/components/floor-plan/modal/basic/step/Orientation.jsx @@ -48,8 +48,14 @@ export const Orientation = forwardRef(({ tabNum }, ref) => { {Array.from({ length: 180 / 15 }).map((dot, index) => (
setCompasDeg(-1 * (-15 * index + 180))} + className={`circle ${getDegreeInOrientation(compasDeg) === -1 * (-15 * index + 180) || (index === 0 && compasDeg >= 172 && index === 0 && compasDeg <= 180) || (compasDeg === -180 && index === 0) ? 'act' : ''}`} + onClick={() => { + if (index === 0) { + setCompasDeg(180) + return + } + setCompasDeg(-1 * (-15 * index + 180)) + }} > {index === 0 && 180ยฐ} {index === 6 && -90ยฐ} @@ -58,7 +64,7 @@ export const Orientation = forwardRef(({ tabNum }, ref) => { {Array.from({ length: 180 / 15 }).map((dot, index) => (
setCompasDeg(15 * index)} > {index === 0 && 0ยฐ} diff --git a/src/components/floor-plan/modal/setting01/FirstOption.jsx b/src/components/floor-plan/modal/setting01/FirstOption.jsx index cfd9eea4..fb383392 100644 --- a/src/components/floor-plan/modal/setting01/FirstOption.jsx +++ b/src/components/floor-plan/modal/setting01/FirstOption.jsx @@ -44,7 +44,7 @@ export default function FirstOption(props) { const polygons = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) polygons.forEach((polygon) => { - setSurfaceShapePattern(polygon, item.column) + setSurfaceShapePattern(polygon, item.column, false, polygon.roofMaterial, true) }) //๋””์Šคํ”Œ๋ ˆ์ด ์„ค์ • ํ‘œ์‹œ(๋‹จ ๊ฑด ์„ ํƒ) } else { diff --git a/src/hooks/common/useCanvasConfigInitialize.js b/src/hooks/common/useCanvasConfigInitialize.js index c178bf75..5ffcd4c5 100644 --- a/src/hooks/common/useCanvasConfigInitialize.js +++ b/src/hooks/common/useCanvasConfigInitialize.js @@ -31,7 +31,7 @@ export function useCanvasConfigInitialize() { .getObjects() .filter((polygon) => polygon.name === 'roof') .forEach((polygon) => { - setSurfaceShapePattern(polygon, roofDisplay.column) + setSurfaceShapePattern(polygon, roofDisplay.column, false, polygon.roofMaterial) }) canvas.renderAll() }, [roofDisplay]) diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index 4807ec9b..5ce62cac 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -315,7 +315,35 @@ export const usePolygon = () => { let text = '' - const compassType = (375 - getDegreeInOrientation(moduleCompass)) / 15 + let compassType = (375 - getDegreeInOrientation(moduleCompass)) / 15 + + if (moduleCompass === 0 || (moduleCompass < 0 && moduleCompass >= -6)) { + compassType = 1 + } else if (moduleCompass < 0 && moduleCompass >= -21) { + compassType = 2 + } else if (moduleCompass < 0 && moduleCompass >= -36) { + compassType = 3 + } else if (moduleCompass < 0 && moduleCompass >= -51) { + compassType = 4 + } else if (moduleCompass < 0 && moduleCompass >= -66) { + compassType = 5 + } else if (moduleCompass < 0 && moduleCompass >= -81) { + compassType = 6 + } else if (moduleCompass < 0 && moduleCompass >= -96) { + compassType = 7 + } else if (moduleCompass < 0 && moduleCompass >= -111) { + compassType = 8 + } else if (moduleCompass < 0 && moduleCompass >= -126) { + compassType = 9 + } else if (moduleCompass < 0 && moduleCompass >= -141) { + compassType = 10 + } else if (moduleCompass < 0 && moduleCompass >= -156) { + compassType = 11 + } else if (moduleCompass < 0 && moduleCompass >= -171) { + compassType = 12 + } else if (moduleCompass === 180) { + compassType = 13 + } if ([1, 25].includes(compassType)) { direction === 'north' ? (text = 'ๅŒ—') : direction === 'south' ? (text = 'ๅ—') : direction === 'west' ? (text = '่ฅฟ') : (text = 'ๆฑ') diff --git a/src/util/canvas-util.js b/src/util/canvas-util.js index a0442d9f..fdc4de86 100644 --- a/src/util/canvas-util.js +++ b/src/util/canvas-util.js @@ -957,6 +957,9 @@ export const getAllRelatedObjects = (id, canvas) => { // ๋ชจ๋“ˆ,ํšŒ๋กœ ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” degree ๋ฒ”์œ„ ๋ณ„ ๊ฐ’ export const getDegreeInOrientation = (degree) => { + if (degree === 180 || degree === -180) { + return 180 + } if (degree >= 180 || degree < -180) { return 0 } From b6d50ec63a6283b95f68126b6782ee13b11bb6df 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: Fri, 7 Feb 2025 11:14:22 +0900 Subject: [PATCH 130/213] =?UTF-8?q?=EC=8B=9C=EB=A6=AC=EC=A6=88=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EC=B2=B4=ED=81=AC=20=EB=B0=8F=20=EC=A0=9C=ED=92=88?= =?UTF-8?q?=20=EB=93=B1=EB=A1=9D=20=20validation=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/PowerConditionalSelect.jsx | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 715d3884..349c69dc 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -92,12 +92,29 @@ export default function PowerConditionalSelect(props) { } const onCheckSeries = (data) => { - const copySeries = series.map((s) => { - return { - ...s, - selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : s.selected, - } - }) + let copySeries = [] + if (data.pcsMkrMultiType === 'MULTI') { + copySeries = series.map((s) => { + return { + ...s, + selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : s.selected, + } + }) + } else if (data.pcsMkrMultiType === 'SINGLE-P') { + copySeries = series.map((s) => { + return { + ...s, + selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : s.pcsMkrMultiType === 'MULTI' ? s.selected : false, + } + }) + } else { + copySeries = series.map((s) => { + return { + ...s, + selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : false, + } + }) + } setSeries(copySeries) handleSetmodels(copySeries.filter((s) => s.selected)) } @@ -147,7 +164,11 @@ export default function PowerConditionalSelect(props) { return } - setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4(), isUsed: false }]) + if (selectedMaker.pcsMkrMultiType === 'MULTI') { + setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4(), isUsed: false }]) + } else if (!selectedModels.find((m) => m.itemId === selectedRow.itemId)) { + setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4(), isUsed: false }]) + } setSelectedRow(null) } @@ -160,8 +181,6 @@ export default function PowerConditionalSelect(props) { setModels([]) setSelectedModels([]) setSelectedMaker(option) - console.log('option', option) - getUseModuleItemList const param = { pcsMkrCd: option.pcsMkrCd, mixMatlNo: getUseModuleItemList()[0].mixMatlNo, From 6508984f09213133f70e865faaebc260a3ee3b96 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: Fri, 7 Feb 2025 11:23:00 +0900 Subject: [PATCH 131/213] =?UTF-8?q?plan=20=EC=9D=B4=EB=8F=99=20=EC=8B=9C?= =?UTF-8?q?=20=ED=9A=8C=EB=A1=9C=20=EA=B4=80=EB=A0=A8=20state=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasFrame.jsx | 30 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index 85315a23..bc0b403b 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -16,7 +16,15 @@ import { totalDisplaySelector } from '@/store/settingAtom' import { MENU } from '@/common/common' import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider' import { QcastContext } from '@/app/QcastProvider' -import { moduleStatisticsState } from '@/store/circuitTrestleAtom' +import { + makersState, + modelsState, + moduleStatisticsState, + pcsCheckState, + selectedMakerState, + selectedModelsState, + seriesState, +} from '@/store/circuitTrestleAtom' export default function CanvasFrame() { const canvasRef = useRef(null) @@ -28,7 +36,13 @@ export default function CanvasFrame() { const { currentCanvasPlan } = usePlan() const totalDisplay = useRecoilValue(totalDisplaySelector) // ์ง‘๊ณ„ํ‘œ ํ‘œ์‹œ ์—ฌ๋ถ€ const { setIsGlobalLoading } = useContext(QcastContext) - const reset = useResetRecoilState(moduleStatisticsState) + const resetModuleStatisticsState = useResetRecoilState(moduleStatisticsState) + const resetMakersState = useResetRecoilState(makersState) + const resetSelectedMakerState = useResetRecoilState(selectedMakerState) + const resetSeriesState = useResetRecoilState(seriesState) + const resetModelsState = useResetRecoilState(modelsState) + const resetSelectedModelsState = useResetRecoilState(selectedModelsState) + const resetPcsCheckState = useResetRecoilState(pcsCheckState) const loadCanvas = () => { if (canvas) { canvas?.clear() // ์บ”๋ฒ„์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. @@ -44,13 +58,23 @@ export default function CanvasFrame() { useEffect(() => { loadCanvas() - reset() + resetRecoilData() }, [currentCanvasPlan, canvas]) useEffect(() => { setIsGlobalLoading(false) }, []) + const resetRecoilData = () => { + resetModuleStatisticsState() + resetMakersState() + resetSelectedMakerState() + resetSeriesState() + resetModelsState() + resetSelectedModelsState() + resetPcsCheckState() + } + return (
From 0ad907d08f73c65977d224d0e2cf3122a32f1f08 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 11:23:55 +0900 Subject: [PATCH 132/213] =?UTF-8?q?context=EC=97=90=EC=84=9C=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=EC=8B=9C=EC=97=90=EB=8F=84=20db=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useRoofAllocationSetting.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index cf0e2282..ae8c78a0 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -261,6 +261,7 @@ export function useRoofAllocationSetting(id) { // ์ง€๋ถ•์žฌ ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค ํด๋ฆญ ํ›„ ๋‹จ์ผ๋กœ ์ง€๋ถ•์žฌ ๋ณ€๊ฒฝ ํ•„์š”ํ•œ ๊ฒฝ์šฐ const handleSaveContext = () => { + basicSettingSave() const newRoofList = currentRoofList.map((roof, idx) => { return { ...roof, index: idx } }) From 5d742c656505473983810a9e6c3d59b19300e2f4 Mon Sep 17 00:00:00 2001 From: basssy Date: Fri, 7 Feb 2025 11:26:21 +0900 Subject: [PATCH 133/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=20surfaceTypeValue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffDetail.jsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 1f65e88f..12ed35f4 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -1414,7 +1414,13 @@ export default function StuffDetail() { text: getMessage('stuff.detail.save'), type: 'alert', confirmFn: () => { - setManagementState(res?.data) + let surfaceTypeValue + if (res.data.surfaceType === 'โ…ขใƒปโ…ฃ') { + surfaceTypeValue = '3' + } else if (res.data.surfaceType === 'โ…ก') { + surfaceTypeValue = '2' + } + setManagementState({ ...res.data, surfaceTypeValue: surfaceTypeValue }) router.push(`/management/stuff/detail?objectNo=${res.data.objectNo.toString()}`, { scroll: false }) }, }) From 2b5b29e0b3c5eb57a7d4096b6e7e09732cd1a42a 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: Fri, 7 Feb 2025 11:31:59 +0900 Subject: [PATCH 134/213] =?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/_reset.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/_reset.scss b/src/styles/_reset.scss index 4d101516..04c3ddb0 100644 --- a/src/styles/_reset.scss +++ b/src/styles/_reset.scss @@ -1000,5 +1000,5 @@ input:checked + .slider { // alert z-index .swal2-container{ - z-index: 100000; + z-index: 120000; } \ No newline at end of file From c92b65e0f96d957469121b56da7c7e4956798b45 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Fri, 7 Feb 2025 11:35:46 +0900 Subject: [PATCH 135/213] =?UTF-8?q?=EC=83=88=20=ED=94=8C=EB=9E=9C=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/BasicSetting.jsx | 19 ++++++- .../floor-plan/modal/basic/step/Module.jsx | 2 +- .../floor-plan/modal/basic/step/Placement.jsx | 55 +++++++++++-------- src/hooks/common/useCanvasConfigInitialize.js | 4 +- src/hooks/module/useModuleBasicSetting.js | 17 +++--- src/hooks/module/useModuleTabContents.js | 2 + src/hooks/option/useCanvasSetting.js | 13 +++++ 7 files changed, 75 insertions(+), 37 deletions(-) diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index 32a673f6..5b464337 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -35,6 +35,8 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) const canvas = useRecoilValue(canvasState) + const [isClosePopup, setIsClosePopup] = useState({ close: false, id: 0 }) + // const { initEvent } = useContext(EventContext) const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting(1) const { updateObjectDate } = useMasterController() @@ -110,20 +112,33 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { } }, []) + //ํŒ์—… ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์ด๋ฒคํŠธ + const handleClosePopup = (id) => { + if (tabNum == 3) { + if (isManualModuleSetup) { + setIsManualModuleSetup(false) + } + } + setIsClosePopup({ close: true, id: id }) + } + useEffect(() => { if (canvasSetting.roofSizeSet !== '3') { manualModuleSetup(placementRef) } else { manualFlatroofModuleSetup(placementFlatRef) } - }, [isManualModuleSetup]) + if (isClosePopup.close) { + closePopup(isClosePopup.id) + } + }, [isManualModuleSetup, isClosePopup]) return (

{getMessage('plan.menu.module.circuit.setting.default')}

-
diff --git a/src/components/floor-plan/modal/basic/step/Module.jsx b/src/components/floor-plan/modal/basic/step/Module.jsx index 347e4c69..45e99dff 100644 --- a/src/components/floor-plan/modal/basic/step/Module.jsx +++ b/src/components/floor-plan/modal/basic/step/Module.jsx @@ -58,9 +58,9 @@ export default function Module({ setTabNum }) { useEffect(() => { if (tempModuleSelectionData.roofConstructions.length > 0) { if (tempModuleSelectionData.common.moduleItemId && isObjectNotEmpty(tempModuleSelectionData.module)) { + setModuleSelectionData(tempModuleSelectionData) //์ €์žฅ๋œ temp๋ฐ์ดํ„ฐ๊ฐ€ ์ง€๋ถ•์žฌ(addedRoofs) ๊ฐœ์ˆ˜์™€ ๊ฐ™์œผ๋ฉด ๋ชจ๋“ˆ ์„ ํƒ ์ €์žฅ if (tempModuleSelectionData.roofConstructions.length === addedRoofs.length) { - setModuleSelectionData(tempModuleSelectionData) moduleSelectedDataTrigger(tempModuleSelectionData) } } diff --git a/src/components/floor-plan/modal/basic/step/Placement.jsx b/src/components/floor-plan/modal/basic/step/Placement.jsx index db153bbf..cc41437f 100644 --- a/src/components/floor-plan/modal/basic/step/Placement.jsx +++ b/src/components/floor-plan/modal/basic/step/Placement.jsx @@ -2,8 +2,10 @@ import { forwardRef, useEffect, useState } from 'react' import { useMessage } from '@/hooks/useMessage' import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' import { checkedModuleState, currentCanvasPlanState } from '@/store/canvasAtom' -import { useRecoilValue, useSetRecoilState } from 'recoil' -import { moduleSelectionDataState } from '@/store/selectedModuleOptions' +import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' +import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' +import { isObjectNotEmpty } from '@/util/common-utils' +import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' const Placement = forwardRef((props, refs) => { const { getMessage } = useMessage() @@ -14,11 +16,13 @@ const Placement = forwardRef((props, refs) => { const [isMaxSetup, setIsMaxSetup] = useState('false') const [selectedItems, setSelectedItems] = useState({}) - const { selectedModules } = useModuleBasicSetting(3) + const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState) const setCheckedModules = useSetRecoilState(checkedModuleState) const moduleSelectionData = useRecoilValue(moduleSelectionDataState) + const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2) + //๋ชจ๋“ˆ ๋ฐฐ์น˜๋ฉด ์ƒ์„ฑ useEffect(() => { if (moduleSelectionData) { @@ -30,14 +34,32 @@ const Placement = forwardRef((props, refs) => { } }, []) + //์ตœ์ดˆ ์ง€์ž…์‹œ ์ฒดํฌ + useEffect(() => { + if (moduleSelectionData.roofConstructions.length > 0 && moduleSelectionData.module.itemList.length > 0) { + let initCheckedModule = {} + moduleSelectionData.module.itemList.forEach((obj, index) => { + if (index === 0) { + initCheckedModule = { [obj.itemId]: true } + } else { + initCheckedModule = { ...initCheckedModule, [obj.itemId]: true } + } + }) + setSelectedItems(initCheckedModule) + setSelectedModules(moduleSelectionData.module) + } + }, [moduleSelectionData]) + //์ฒดํฌ๋œ ๋ชจ๋“ˆ ๋ฐ์ดํ„ฐ useEffect(() => { - const checkedModuleIds = Object.keys(selectedItems).filter((key) => selectedItems[key]) - const moduleArray = selectedModules.itemList.filter((item) => { - return checkedModuleIds.includes(item.itemId) - }) - setCheckedModules(moduleArray) - }, [selectedItems]) + if (isObjectNotEmpty(selectedItems) && isObjectNotEmpty(selectedModules)) { + const checkedModuleIds = Object.keys(selectedItems).filter((key) => selectedItems[key]) + const moduleArray = selectedModules.itemList.filter((item) => { + return checkedModuleIds.includes(item.itemId) + }) + setCheckedModules(moduleArray) + } + }, [selectedItems, selectedModules]) const moduleData = { header: [ @@ -74,21 +96,6 @@ const Placement = forwardRef((props, refs) => { setSelectedItems({ ...selectedItems, [e.target.name]: e.target.checked }) } - //์ตœ์ดˆ ์ง€์ž…์‹œ ์ฒดํฌ - useEffect(() => { - if (moduleSelectionData && moduleSelectionData.module.itemList.length > 0) { - let initCheckedModule = {} - moduleSelectionData.module.itemList.forEach((obj, index) => { - if (index === 0) { - initCheckedModule = { [obj.itemId]: true } - } else { - initCheckedModule = { ...initCheckedModule, [obj.itemId]: true } - } - }) - setSelectedItems(initCheckedModule) - } - }, []) - return ( <>
diff --git a/src/hooks/common/useCanvasConfigInitialize.js b/src/hooks/common/useCanvasConfigInitialize.js index 5ffcd4c5..37461421 100644 --- a/src/hooks/common/useCanvasConfigInitialize.js +++ b/src/hooks/common/useCanvasConfigInitialize.js @@ -204,8 +204,8 @@ export function useCanvasConfigInitialize() { .forEach((obj) => { obj.set({ selectable: true, - lockMovementX: false, - lockMovementY: false, + lockMovementX: true, + lockMovementY: true, }) obj.setViewLengthText(false) }) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 9739c1f5..926336ec 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -60,16 +60,14 @@ export function useModuleBasicSetting(tabNum) { //๋ชจ๋“ˆ ์„ ํƒ์—์„œ ์„ ํƒ๋œ ๊ฐ’๋“ค ๋„˜์–ด์˜ด useEffect(() => { - if (moduleSelectionData && tabNum === 3) { + if (moduleSelectionData) { if (canvasSetting.roofSizeSet !== '3') { const common = moduleSelectionData.common - const roofConstructions = moduleSelectionData.roofConstructions - const listParams = roofConstructions.map((item) => { return { ...common, - moduleTpCd: selectedModules.itemTp, + // moduleTpCd: selectedModules.itemTp, roofMatlCd: item.trestle.roofMatlCd, trestleMkrCd: item.trestle.trestleMkrCd, constMthdCd: item.trestle.constMthdCd, @@ -90,7 +88,6 @@ export function useModuleBasicSetting(tabNum) { } } else { //์œก์ง€๋ถ• ์ผ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋กœ ๋ฐฐ์น˜๋ฉด ์„ค์น˜LL - const roofs = canvas.getObjects().filter((roof) => roof.name === 'roof') canvas .getObjects() .filter((roof) => roof.name === 'roof') @@ -196,9 +193,7 @@ export function useModuleBasicSetting(tabNum) { }) const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id) - if (isExistSurface) { - return - } + canvas.remove(isExistSurface) let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1 setSurfaceShapePattern(roof, roofDisplay.column, true) //ํŒจํ„ด ๋ณ€๊ฒฝ @@ -257,6 +252,12 @@ export function useModuleBasicSetting(tabNum) { canvas.renderAll() + //๋ฐ”๋กœ ๋“ค์–ด์˜ฌ๋•Œ + const setupModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + setupModules.forEach((obj) => { + canvas.bringToFront(obj) + }) + //๋ชจ๋“ˆ์„ค์น˜๋ฉด ํด๋ฆญ์ด๋ฒคํŠธ addTargetMouseEventListener('mousedown', setupSurface, function () { toggleSelection(setupSurface) diff --git a/src/hooks/module/useModuleTabContents.js b/src/hooks/module/useModuleTabContents.js index 2c3e16d4..7f1961bb 100644 --- a/src/hooks/module/useModuleTabContents.js +++ b/src/hooks/module/useModuleTabContents.js @@ -95,6 +95,8 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab }) setRaftCodes(raftCodeList) + console.log('addRoof', addRoof) + if (addRoof.raft) { setSelectedRaftBase({ ...selectedRaftBase, diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 07f46740..e4b105ad 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -36,6 +36,7 @@ import { useCanvasMenu } from '../common/useCanvasMenu' import { menuTypeState } from '@/store/menuAtom' import { usePopup } from '../usePopup' import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider' +import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' const defaultDotLineGridSetting = { INTERVAL: { @@ -114,6 +115,10 @@ export function useCanvasSetting() { const [fetchRoofMaterials, setFetchRoofMaterials] = useRecoilState(fetchRoofMaterialsState) const [type, setType] = useRecoilState(menuTypeState) const setCurrentMenu = useSetRecoilState(currentMenuState) + + const resetModuleSelectionData = useResetRecoilState(moduleSelectionDataState) //๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ตœ์ข… ๋ฐ์ดํ„ฐ + const resetSelectedModules = useResetRecoilState(selectedModuleState) //์„ ํƒ๋œ ๋ชจ๋“ˆ + const SelectOptions = [ { id: 1, name: getMessage('modal.canvas.setting.grid.dot.line.setting.line.origin'), value: 1 }, { id: 2, name: '1/2', value: 1 / 2 }, @@ -446,6 +451,14 @@ export function useCanvasSetting() { setType('outline') setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE) } + + //๋ชจ๋“ˆ ์„ ํƒ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” + resetModuleSelectionData() + + const isModuleExist = canvas.getObjects().some((obj) => obj.name === POLYGON_TYPE.MODULE) + if (!isModuleExist) { + resetSelectedModules() + } } catch (error) { swalFire({ text: error.message, icon: 'error' }) } From 39e8d140916672e81fac335bed77402bc540bf14 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 11:38:09 +0900 Subject: [PATCH 136/213] =?UTF-8?q?=ED=94=8C=EB=9E=9C=20=EC=83=88=EB=A1=9C?= =?UTF-8?q?=20=EB=93=A4=EC=96=B4=EC=99=94=EC=9D=84=EB=95=8C=20=EC=A7=80?= =?UTF-8?q?=EB=B6=95=EC=9E=AC=20=ED=86=B5=EC=9D=BC=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=ED=98=84=EC=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useCanvasConfigInitialize.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/hooks/common/useCanvasConfigInitialize.js b/src/hooks/common/useCanvasConfigInitialize.js index 5ffcd4c5..bd2ea674 100644 --- a/src/hooks/common/useCanvasConfigInitialize.js +++ b/src/hooks/common/useCanvasConfigInitialize.js @@ -25,17 +25,6 @@ export function useCanvasConfigInitialize() { const {} = useRoof() const { drawDirectionArrow } = usePolygon() - useEffect(() => { - if (!canvas) return - canvas - .getObjects() - .filter((polygon) => polygon.name === 'roof') - .forEach((polygon) => { - setSurfaceShapePattern(polygon, roofDisplay.column, false, polygon.roofMaterial) - }) - canvas.renderAll() - }, [roofDisplay]) - useEffect(() => { if (!canvas) return const offsetTexts = canvas.getObjects().filter((obj) => obj.name === 'pitchText') From 614aec95b76b40558ac75a082326b5c918af8e98 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 11:53:43 +0900 Subject: [PATCH 137/213] =?UTF-8?q?=EC=A7=80=EB=B6=95=EC=9E=AC=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/common.js | 1 + .../floor-plan/modal/setting01/FirstOption.jsx | 2 +- src/hooks/common/useRoofFn.js | 18 +++++++++++------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/common/common.js b/src/common/common.js index 2578e138..ef09b31d 100644 --- a/src/common/common.js +++ b/src/common/common.js @@ -180,6 +180,7 @@ export const SAVE_KEY = [ 'directionText', 'quotationParam', 'pcses', + 'roofMaterial', ] export const OBJECT_PROTOTYPE = [fabric.Line.prototype, fabric.Polygon.prototype, fabric.Triangle.prototype] diff --git a/src/components/floor-plan/modal/setting01/FirstOption.jsx b/src/components/floor-plan/modal/setting01/FirstOption.jsx index fb383392..51a52cdb 100644 --- a/src/components/floor-plan/modal/setting01/FirstOption.jsx +++ b/src/components/floor-plan/modal/setting01/FirstOption.jsx @@ -44,7 +44,7 @@ export default function FirstOption(props) { const polygons = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) polygons.forEach((polygon) => { - setSurfaceShapePattern(polygon, item.column, false, polygon.roofMaterial, true) + setSurfaceShapePattern(polygon, item.column, false, polygon.roofMaterial, true, true) }) //๋””์Šคํ”Œ๋ ˆ์ด ์„ค์ • ํ‘œ์‹œ(๋‹จ ๊ฑด ์„ ํƒ) } else { diff --git a/src/hooks/common/useRoofFn.js b/src/hooks/common/useRoofFn.js index eaaebf0c..2b81ea05 100644 --- a/src/hooks/common/useRoofFn.js +++ b/src/hooks/common/useRoofFn.js @@ -20,19 +20,23 @@ export function useRoofFn() { const { addPitchText } = useLine() //๋ฉดํ˜•์ƒ ์„ ํƒ ํด๋ฆญ์‹œ ์ง€๋ถ• ํŒจํ„ด ์ž…ํžˆ๊ธฐ - function setSurfaceShapePattern(polygon, mode = 'onlyBorder', trestleMode = false, roofMaterial = selectedRoofMaterial, isForceChange = false) { + function setSurfaceShapePattern( + polygon, + mode = 'onlyBorder', + trestleMode = false, + roofMaterial = selectedRoofMaterial, + isForceChange = false, + isDisplay = false, + ) { if (!polygon) { return } - if (isForceChange) { - if (polygon.roofMaterial) { + if (isForceChange && !isDisplay) { + /*if (polygon.roofMaterial) { polygon.roofMaterial = null - } + }*/ } - if (polygon.roofMaterial) { - return - } const ratio = window.devicePixelRatio || 1 const layout = roofMaterial.layout From 990ce686729ea5930b704ee1414c1ce2016f0ed7 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 12:01:09 +0900 Subject: [PATCH 138/213] =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=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/locales/ja.json | 1 + src/locales/ko.json | 1 + 2 files changed, 2 insertions(+) diff --git a/src/locales/ja.json b/src/locales/ja.json index 3a25a063..ab9164a1 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -860,6 +860,7 @@ "surface.shape.validate.size.1to23": "โ‘ ้•ทใ•ใฏโ‘ก๏ผ‹โ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.2to3": "โ‘ก้•ทใ•ใฏโ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.3to4": "โ‘ข้•ทใ•ใฏโ‘ฃใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", + "surface.shape.validate.size.4to3": "โ‘ฃ้•ทใ•ใฏโ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.4to5": "โ‘ฃ้•ทใ•ใฏโ‘คใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "estimate.detail.header.title": "ๅŸบๆœฌๆƒ…ๅ ฑ", "estimate.detail.objectNo": "็‰ฉไปถ็•ชๅท", diff --git a/src/locales/ko.json b/src/locales/ko.json index 5e026588..bce4849a 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -860,6 +860,7 @@ "surface.shape.validate.size.1to23": "โ‘ ๊ธธ์ด๋Š” โ‘ก+โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.2to3": "โ‘ก๊ธธ์ด๋Š” โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.3to4": "โ‘ข๊ธธ์ด๋Š” โ‘ฃ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", + "surface.shape.validate.size.4to3": "โ‘ฃ๊ธธ์ด๋Š” โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.4to5": "โ‘ฃ๊ธธ์ด๋Š” โ‘ค๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "estimate.detail.header.title": "๊ธฐ๋ณธ์ •๋ณด", "estimate.detail.objectNo": "๋ฌผ๊ฑด๋ฒˆํ˜ธ", From a3aa1cd21601b82e1d3964fc51c042aaf74f3113 Mon Sep 17 00:00:00 2001 From: basssy Date: Fri, 7 Feb 2025 12:25:23 +0900 Subject: [PATCH 139/213] =?UTF-8?q?alert=20->=20swalFire=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/estimate/Estimate.jsx | 31 +++++++++++---- src/components/main/ChangePasswordPop.jsx | 38 +++++++++++++++---- .../estimate/useEstimateController.js | 12 +++++- 3 files changed, 65 insertions(+), 16 deletions(-) diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index 01600c62..e0a58406 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -19,10 +19,10 @@ import { convertNumberToPriceDecimal, convertNumberToPriceDecimalToFixed } from import ProductFeaturesPop from './popup/ProductFeaturesPop' import { v4 as uuidv4 } from 'uuid' import { correntObjectNoState } from '@/store/settingAtom' -import { useRouter, useSearchParams } from 'next/navigation' -import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider' +import { useSearchParams } from 'next/navigation' import { usePlan } from '@/hooks/usePlan' import { usePopup } from '@/hooks/usePopup' +import { useSwal } from '@/hooks/useSwal' export default function Estimate({}) { const [uniqueData, setUniqueData] = useState([]) @@ -33,6 +33,8 @@ export default function Estimate({}) { const [objectNo, setObjectNo] = useState('') //๋ฌผ๊ฑด๋ฒˆํ˜ธ const [planNo, setPlanNo] = useState('') //ํ”Œ๋žœ๋ฒˆํ˜ธ + const { swalFire } = useSwal() + const [files, setFiles] = useState([]) // ๋ณด๋‚ด๋Š” ์ฒจ๋ถ€ํŒŒ์ผ const [originFiles, setOriginFiles] = useState([]) //๊ธฐ์กด ์ฒจ๋ถ€ํŒŒ์ผ @@ -347,7 +349,11 @@ export default function Estimate({}) { setEstimateContextState({ originFiles: originFiles, }) - alert(getMessage('estimate.detail.alert.delFile')) + + swalFire({ + text: getMessage('estimate.detail.alert.delFile'), + type: 'alert', + }) } //๊ฐ€๊ฒฉํ‘œ์‹œ option ๋ชฉ๋ก ์ตœ์ดˆ์„ธํŒ… && ์ฃผ๋ฌธ๋ถ„๋ฅ˜ ๋ณ€๊ฒฝ์‹œ @@ -359,7 +365,6 @@ export default function Estimate({}) { docTpCd: estimateContextState?.estimateType, } - // console.log('param::::::::::', param) const apiUrl = `/api/estimate/price/store-price-list?${queryStringFormatter(param)}` get({ url: apiUrl }).then((res) => { if (isNotEmptyArray(res?.data)) { @@ -477,7 +482,11 @@ export default function Estimate({}) { if (!pass) { //Pricing์ด ๋ˆ„๋ฝ๋œ ์•„์ดํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Pricing์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”. - return alert(getMessage('estimate.detail.showPrice.pricingBtn.noItemId')) + return swalFire({ + text: getMessage('estimate.detail.showPrice.pricingBtn.noItemId'), + type: 'alert', + icon: 'warning', + }) } } @@ -788,7 +797,11 @@ export default function Estimate({}) { const removeItem = () => { const array = [...selection] if (isEmptyArray(array)) { - return alert(getMessage('estimate.detail.alert.selectDelItem')) + return swalFire({ + text: getMessage('estimate.detail.alert.selectDelItem'), + type: 'alert', + icon: 'warning', + }) } let delList = [] estimateContextState.itemList.filter((row) => { @@ -818,7 +831,11 @@ export default function Estimate({}) { }) if (delCnt === updateList.length) { - return alert(getMessage('estimate.detail.save.requiredItem')) + return swalFire({ + text: getMessage('estimate.detail.save.requiredItem'), + type: 'alert', + icon: 'warning', + }) } setEstimateContextState({ diff --git a/src/components/main/ChangePasswordPop.jsx b/src/components/main/ChangePasswordPop.jsx index 323b332d..83b2baf3 100644 --- a/src/components/main/ChangePasswordPop.jsx +++ b/src/components/main/ChangePasswordPop.jsx @@ -6,9 +6,12 @@ import { useRecoilValue, useRecoilState } from 'recoil' import { useAxios } from '@/hooks/useAxios' import { globalLocaleStore } from '@/store/localeAtom' import { logout, setSession, login } from '@/lib/authActions' +import { useSwal } from '@/hooks/useSwal' + export default function ChangePasswordPop(props) { const globalLocaleState = useRecoilValue(globalLocaleStore) + const { swalFire } = useSwal() const { patch } = useAxios(globalLocaleState) const { getMessage } = useMessage() const [sessionState, setSessionState] = useRecoilState(sessionStore) @@ -55,22 +58,38 @@ export default function ChangePasswordPop(props) { //๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฏธ์ž…๋ ฅ์‹œ if (_password1.trim() === '') { - alert(getMessage('main.popup.login.validate3')) + swalFire({ + title: getMessage('main.popup.login.validate3'), + type: 'alert', + icon: 'error', + }) return false } if (_password2.trim() === '') { - alert(getMessage('main.popup.login.validate3')) + swalFire({ + title: getMessage('main.popup.login.validate3'), + type: 'alert', + icon: 'error', + }) return false } if (_password1 !== _password2) { - alert(getMessage('main.popup.login.validate1')) + swalFire({ + title: getMessage('main.popup.login.validate4'), + type: 'alert', + icon: 'error', + }) return false } - //ํŒจ์Šค์›Œ๋“œ ๊ธธ์ด์ˆ˜ ์ฒดํฌ - if (checkLength(_password1) > 10) { - return alert(getMessage('main.popup.login.validate2')) + //ํŒจ์Šค์›Œ๋“œ ๊ธธ์ด์ˆ˜ ์ฒดํฌ ๋นˆ๊ฐ10 = ์ „๊ฐ20 + if (checkLength(_password1) > 20) { + swalFire({ + title: getMessage('main.popup.login.validate1'), + type: 'alert', + icon: 'error', + }) } const param = { @@ -83,7 +102,10 @@ export default function ChangePasswordPop(props) { .then((res) => { if (res?.result?.code === 200) { if (res?.result?.resultCode === 'S') { - alert(getMessage('main.popup.login.success')) + swalFire({ + title: getMessage('main.popup.login.success'), + type: 'alert', + }) const result = { ...sessionState, pwdInitYn: 'Y' } setSession(result) setSessionState(result) @@ -130,6 +152,7 @@ export default function ChangePasswordPop(props) { autoComplete="off" onChange={checkValue} onKeyUp={checkValue} + maxLength={20} />
@@ -150,6 +173,7 @@ export default function ChangePasswordPop(props) { autoComplete="off" onChange={checkValue} onKeyUp={checkValue} + maxLength={20} />
diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js index 74c35800..c87e77de 100644 --- a/src/hooks/floorPlan/estimate/useEstimateController.js +++ b/src/hooks/floorPlan/estimate/useEstimateController.js @@ -410,11 +410,19 @@ export const useEstimateController = (planNo) => { */ const handleEstimateCopy = async (sendPlanNo, copyReceiveUser, saleStoreId, otherSaleStoreId) => { if (saleStoreId === '') { - return alert(getMessage('estimate.detail.productFeaturesPopup.requiredStoreId')) + return swalFire({ + text: getMessage('estimate.detail.productFeaturesPopup.requiredStoreId'), + type: 'alert', + icon: 'warning', + }) } if (copyReceiveUser.trim().length === 0) { - return alert(getMessage('estimate.detail.productFeaturesPopup.requiredReceiveUser')) + return swalFire({ + text: getMessage('estimate.detail.productFeaturesPopup.requiredReceiveUser'), + type: 'alert', + icon: 'warning', + }) } const params = { saleStoreId: session.storeId, From 59f5835552ce0990fdca50c6999169e00dda3121 Mon Sep 17 00:00:00 2001 From: basssy Date: Fri, 7 Feb 2025 13:33:46 +0900 Subject: [PATCH 140/213] =?UTF-8?q?=EC=B5=9C=EC=B4=88=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=EB=88=84=EB=9D=BD=EB=B6=84=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/components/main/ChangePasswordPop.jsx | 10 +++++----- src/locales/ja.json | 13 +++++++------ src/locales/ko.json | 1 + 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/components/main/ChangePasswordPop.jsx b/src/components/main/ChangePasswordPop.jsx index 83b2baf3..8f3687fc 100644 --- a/src/components/main/ChangePasswordPop.jsx +++ b/src/components/main/ChangePasswordPop.jsx @@ -59,7 +59,7 @@ export default function ChangePasswordPop(props) { //๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฏธ์ž…๋ ฅ์‹œ if (_password1.trim() === '') { swalFire({ - title: getMessage('main.popup.login.validate3'), + text: getMessage('main.popup.login.validate3'), type: 'alert', icon: 'error', }) @@ -67,7 +67,7 @@ export default function ChangePasswordPop(props) { } if (_password2.trim() === '') { swalFire({ - title: getMessage('main.popup.login.validate3'), + text: getMessage('main.popup.login.validate3'), type: 'alert', icon: 'error', }) @@ -76,7 +76,7 @@ export default function ChangePasswordPop(props) { if (_password1 !== _password2) { swalFire({ - title: getMessage('main.popup.login.validate4'), + text: getMessage('main.popup.login.validate4'), type: 'alert', icon: 'error', }) @@ -86,7 +86,7 @@ export default function ChangePasswordPop(props) { //ํŒจ์Šค์›Œ๋“œ ๊ธธ์ด์ˆ˜ ์ฒดํฌ ๋นˆ๊ฐ10 = ์ „๊ฐ20 if (checkLength(_password1) > 20) { swalFire({ - title: getMessage('main.popup.login.validate1'), + text: getMessage('main.popup.login.validate1'), type: 'alert', icon: 'error', }) @@ -103,7 +103,7 @@ export default function ChangePasswordPop(props) { if (res?.result?.code === 200) { if (res?.result?.resultCode === 'S') { swalFire({ - title: getMessage('main.popup.login.success'), + text: getMessage('main.popup.login.success'), type: 'alert', }) const result = { ...sessionState, pwdInitYn: 'Y' } diff --git a/src/locales/ja.json b/src/locales/ja.json index ab9164a1..d3cc1552 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -846,14 +846,15 @@ "main.popup.login.newPassword1": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›", "main.popup.login.newPassword2": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฎๅ†ๅ…ฅๅŠ›", "main.popup.login.placeholder": "ๅŠ่ง’10ๆ–‡ๅญ—ไปฅๅ†…", - "main.popup.login.guide1": "ๅˆๆœŸๅŒ–ใ•ใ‚ŒใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใงใƒญใ‚ฐใ‚คใƒณใ—ใŸๅ ดๅˆใ€ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅค‰ๆ›ดใ—ใชใ‘ใ‚Œใฐใ‚ตใ‚คใƒˆๅˆฉ็”จใŒๅฏ่ƒฝใงใ™ใ€‚", - "main.popup.login.guide2": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅค‰ๆ›ดใ—ใชใ„ๅ ดๅˆใฏใ€ใƒญใ‚ฐใ‚คใƒณ็”ป้ขใซ้€ฒใฟใพใ™ใ€‚", + "main.popup.login.guide1": "ๅˆๆœŸๅŒ–ใ•ใ‚ŒใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใงใƒญใ‚ฐใ‚คใƒณใ—ใŸๅ ดๅˆใ€ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅค‰ๆ›ดใ—ใชใ‘ใ‚Œใฐใ‚ตใ‚คใƒˆๅˆฉ็”จใŒๅฏ่ƒฝใงใ™.", + "main.popup.login.guide2": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅค‰ๆ›ดใ—ใชใ„ๅ ดๅˆใฏใ€ใƒญใ‚ฐใ‚คใƒณ็”ป้ขใซ้€ฒใฟใพใ™.", "main.popup.login.btn1": "ๅค‰ๆ›ด", "main.popup.login.btn2": "ๅค‰ๆ›ดใ—ใชใ„", - "main.popup.login.validate1": "ๅ…ฅๅŠ›ใ—ใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒ็•ฐใชใ‚Šใพใ™ใ€‚", - "main.popup.login.validate2": "ๅŠ่ง’10ๆ–‡ๅญ—ไปฅๅ†…ใงๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", - "main.popup.login.validate3": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", - "main.popup.login.success": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒๅค‰ๆ›ดใ•ใ‚Œใพใ—ใŸใ€‚", + "main.popup.login.validate1": "ๅ…ฅๅŠ›ใ—ใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒ็•ฐใชใ‚Šใพใ™.", + "main.popup.login.validate2": "ๅŠ่ง’10ๆ–‡ๅญ—ไปฅๅ†…ใงๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„.", + "main.popup.login.validate3": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„.", + "main.popup.login.validate4": "ๅ…ฅๅŠ›ใ—ใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒ็•ฐใชใ‚Šใพใ™.", + "main.popup.login.success": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒๅค‰ๆ›ดใ•ใ‚Œใพใ—ใŸ.", "common.canvas.validate.size": "ใ‚ตใ‚คใ‚บใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.1to2": "โ‘ ้•ทใ•ใฏโ‘กใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.1to3": "โ‘ ้•ทใ•ใฏโ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", diff --git a/src/locales/ko.json b/src/locales/ko.json index bce4849a..7c7a5c63 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -853,6 +853,7 @@ "main.popup.login.validate1": "์ž…๋ ฅํ•œ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.", "main.popup.login.validate2": "๋ฐ˜๊ฐ 10์ž ์ด๋‚ด๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.", "main.popup.login.validate3": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.", + "main.popup.login.validate4": "์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„œ๋กœ๋‹ค๋ฆ…๋‹ˆ๋‹ค.", "main.popup.login.success": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", "common.canvas.validate.size": "์‚ฌ์ด์ฆˆ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.", "surface.shape.validate.size.1to2": "โ‘ ๊ธธ์ด๋Š” โ‘ก๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", From 2abb7996e583bfc795d3b48265408983536f7f46 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: Fri, 7 Feb 2025 13:56:04 +0900 Subject: [PATCH 141/213] =?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/_reset.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/styles/_reset.scss b/src/styles/_reset.scss index 04c3ddb0..bb5ff100 100644 --- a/src/styles/_reset.scss +++ b/src/styles/_reset.scss @@ -535,7 +535,15 @@ input[type=text]{ } } } +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} +input[type=number] { + -moz-appearance: textfield; +} // check-btn From 9400a8a271cf8cc8a9e1e13ca818f6565d2765ff 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: Fri, 7 Feb 2025 13:57:13 +0900 Subject: [PATCH 142/213] =?UTF-8?q?-=20=ED=9A=8C=EB=A1=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=ED=9B=85=20=EC=B6=94=EA=B0=80=20-=20=EB=8B=A8?= =?UTF-8?q?=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8(Unit=20Test)=20#649?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 199 ++++-------------- src/hooks/useCirCuitTrestle.js | 187 ++++++++++++++++ 2 files changed, 227 insertions(+), 159 deletions(-) create mode 100644 src/hooks/useCirCuitTrestle.js diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index bfc4949a..c09687b6 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -20,8 +20,9 @@ import { useTrestle } from '@/hooks/module/useTrestle' import { selectedModuleState } from '@/store/selectedModuleOptions' import { v4 as uuidv4 } from 'uuid' -import { stepUpListDataState } from '@/store/circuitTrestleAtom' import { useEstimate } from '@/hooks/useEstimate' +import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' +import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' const ALLOCATION_TYPE = { AUTO: 'auto', @@ -35,13 +36,6 @@ export default function CircuitTrestleSetting({ id }) { const { saveEstimate } = useEstimate() const canvas = useRecoilValue(canvasState) - const [makers, setMakers] = useRecoilState(makersState) - const [selectedMaker, setSelectedMaker] = useRecoilState(selectedMakerState) - const [series, setSeries] = useRecoilState(seriesState) - const [models, setModels] = useRecoilState(modelsState) - const [selectedModels, setSelectedModels] = useRecoilState(selectedModelsState) - const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState) - const [tabNum, setTabNum] = useState(1) const [allocationType, setAllocationType] = useState(ALLOCATION_TYPE.AUTO) const [circuitAllocationType, setCircuitAllocationType] = useState(1) @@ -52,15 +46,44 @@ export default function CircuitTrestleSetting({ id }) { // ํšŒ๋กœํ• ๋‹น(์Šนํ•ฉ์„ค์ •)์—์„œ ์„ ํƒ๋œ ๊ฐ’๋“ค์„ ์ €์žฅํ•  ์ƒํƒœ ์ถ”๊ฐ€ const [selectedStepUpValues, setSelectedStepUpValues] = useState({}) const [getStepUpSelections, setGetStepUpSelections] = useState(null) - + const { trigger: setCircuitData } = useCanvasPopupStatusController(4) // const [stepUpListData, setStepUpListData] = useRecoilState(stepUpListDataState) const [stepUpListData, setStepUpListData] = useState([]) const [seletedOption, setSeletedOption] = useState(null) + const { + makers, + setMakers, + selectedMaker, + setSelectedMaker, + series, + setSeries, + models, + setModels, + selectedModels, + setSelectedModels, + pcsCheck, + setPcsCheck, + getOptYn, + getPcsItemList, + getSelectedPcsItemList, + getUseModuleItemList, + getRoofSurfaceList, + getModuleList, + removeNotAllocationModules, + } = useCircuitTrestle() useEffect(() => { if (!managementState) { setManagementState(managementStateLoaded) } + setCircuitData({ + makers, + selectedMaker, + series, + models, + selectedModels, + pcsCheck, + }) }, []) // ์ˆ˜๋™ํ• ๋‹น ์‹œ ๋ชจ๋“ˆ ์‚ญ์ œ @@ -95,12 +118,17 @@ export default function CircuitTrestleSetting({ id }) { getPcsAutoRecommendList(params).then((res) => { if (res.data?.pcsItemList) { let pcsItemList = [] + let pcsObj = {} + + models.forEach((model) => { + pcsObj[model.itemId] = model + }) res.data?.pcsItemList.forEach((item) => { - if (models.map((model) => model.itemId).includes(item.itemId)) { + if (pcsObj[item.itemId]) { pcsItemList.push({ - ...item, - id: uuidv4(), + ...pcsObj[item.itemId], isUsed: false, + id: uuidv4(), }) } }) @@ -160,147 +188,6 @@ export default function CircuitTrestleSetting({ id }) { } } - // ์˜ต์…˜ Y/N - const getOptYn = () => { - return { - maxConnYn: pcsCheck.max ? 'Y' : 'N', - smpCirYn: pcsCheck.division ? 'Y' : 'N', - coldZoneYn: managementState?.coldRegionFlg === '1' ? 'Y' : 'N', - } - } - - // PCS ์•„์ดํ…œ ๋ชฉ๋ก - const getPcsItemList = () => { - return models.map((model) => { - return { - itemId: model.itemId, - pcsMkrCd: model.pcsMkrCd, - pcsSerCd: model.pcsSerCd, - } - }) - } - - // ์„ ํƒ๋œ PCS ์•„์ดํ…œ ๋ชฉ๋ก - const getSelectedPcsItemList = () => { - return selectedModels.map((model) => { - return { - itemId: model.itemId, - pcsMkrCd: model.pcsMkrCd, - pcsSerCd: model.pcsSerCd, - } - }) - } - - // ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์•„์ดํ…œ ๋ชฉ๋ก - const getUseModuleItemList = () => { - return selectedModules?.itemList?.map((m) => { - return { - itemId: m.itemId, - mixMatlNo: m.mixMatlNo, - } - }) - } - - // ์ง€๋ถ•๋ฉด ๋ชฉ๋ก - const getRoofSurfaceList = () => { - const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top) - return roofSurfaceList - .map((obj) => { - return { - roofSurfaceId: obj.id, - roofSurface: canvas - .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, - moduleList: getModuleList(obj).map((module) => { - return { - itemId: module.moduleInfo.itemId, - circuit: module.circuitNumber ? module.circuitNumber : null, - pcsItemId: module.circuit ? module.circuit?.pcsItemId : null, - uniqueId: module.id ? module.id : null, - } - }), - } - }) - .filter((surface) => surface.moduleList.length > 0) - } - - // ๋ชจ๋“ˆ ๋ชฉ๋ก - const getModuleList = (surface) => { - let moduleList = [] - let [xObj, yObj] = [{}, {}] - let [xPoints, yPoints] = [[], []] - surface.modules.forEach((module) => { - if (!xObj[module.left]) { - xObj[module.left] = module.left - xPoints.push(module.left) - } - if (!yObj[module.top]) { - yObj[module.top] = module.top - yPoints.push(module.top) - } - }) - switch (surface.direction) { - case 'south': - xPoints.sort((a, b) => a - b) - yPoints.sort((a, b) => b - a) - yPoints.forEach((y, index) => { - let temp = surface.modules.filter((m) => m.top === y) - if (index % 2 === 0) { - temp.sort((a, b) => a.left - b.left) - } else { - temp.sort((a, b) => b.left - a.left) - } - moduleList = [...moduleList, ...temp] - }) - break - case 'north': - xPoints.sort((a, b) => b - a) - yPoints.sort((a, b) => a - b) - yPoints.forEach((y, index) => { - let temp = surface.modules.filter((m) => m.top === y) - if (index % 2 === 0) { - temp.sort((a, b) => b.left - a.left) - } else { - temp.sort((a, b) => a.left - b.left) - } - moduleList = [...moduleList, ...temp] - }) - break - case 'west': - xPoints.sort((a, b) => a - b) - yPoints.sort((a, b) => a - b) - xPoints.forEach((x, index) => { - let temp = surface.modules.filter((m) => m.left === x) - if (index % 2 === 0) { - temp.sort((a, b) => a.top - b.top) - } else { - temp.sort((a, b) => b.top - a.top) - } - moduleList = [...moduleList, ...temp] - }) - break - case 'east': - xPoints.sort((a, b) => b - a) - yPoints.sort((a, b) => b - a) - xPoints.forEach((x, index) => { - let temp = surface.modules.filter((m) => m.left === x) - if (index % 2 === 0) { - temp.sort((a, b) => b.top - a.top) - } else { - temp.sort((a, b) => a.top - b.top) - } - moduleList = [...moduleList, ...temp] - }) - break - default: - return [] - } - return moduleList - } - // ์ž๋™ํ• ๋‹น ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ const onAutoAllocation = () => { let moduleStdQty = 0 @@ -464,12 +351,6 @@ export default function CircuitTrestleSetting({ id }) { // removeNotAllocationModules() } - const removeNotAllocationModules = () => { - const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit) - canvas.remove(...notAllocationModules) - canvas.renderAll() - } - // ์ด์ „ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ const onClickPrev = () => { setAllocationType(ALLOCATION_TYPE.AUTO) diff --git a/src/hooks/useCirCuitTrestle.js b/src/hooks/useCirCuitTrestle.js new file mode 100644 index 00000000..db427817 --- /dev/null +++ b/src/hooks/useCirCuitTrestle.js @@ -0,0 +1,187 @@ +import { GlobalDataContext } from '@/app/GlobalDataProvider' +import { POLYGON_TYPE } from '@/common/common' +import { canvasState } from '@/store/canvasAtom' +import { makersState, modelsState, pcsCheckState, selectedMakerState, selectedModelsState, seriesState } from '@/store/circuitTrestleAtom' +import { selectedModuleState } from '@/store/selectedModuleOptions' +import { useContext } from 'react' +import { useRecoilState, useRecoilValue } from 'recoil' + +export function useCircuitTrestle() { + const [makers, setMakers] = useRecoilState(makersState) + const [selectedMaker, setSelectedMaker] = useRecoilState(selectedMakerState) + const [series, setSeries] = useRecoilState(seriesState) + const [models, setModels] = useRecoilState(modelsState) + const [selectedModels, setSelectedModels] = useRecoilState(selectedModelsState) + const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState) + const selectedModules = useRecoilValue(selectedModuleState) + const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) + const canvas = useRecoilValue(canvasState) + const getOptYn = () => { + return { + maxConnYn: pcsCheck.max ? 'Y' : 'N', + smpCirYn: pcsCheck.division ? 'Y' : 'N', + coldZoneYn: managementState?.coldRegionFlg === '1' ? 'Y' : 'N', + } + } + // PCS ์•„์ดํ…œ ๋ชฉ๋ก + const getPcsItemList = () => { + return models.map((model) => { + return { + itemId: model.itemId, + pcsMkrCd: model.pcsMkrCd, + pcsSerCd: model.pcsSerCd, + } + }) + } + + // ์„ ํƒ๋œ PCS ์•„์ดํ…œ ๋ชฉ๋ก + const getSelectedPcsItemList = () => { + return selectedModels.map((model) => { + return { + itemId: model.itemId, + pcsMkrCd: model.pcsMkrCd, + pcsSerCd: model.pcsSerCd, + } + }) + } + + // ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์•„์ดํ…œ ๋ชฉ๋ก + const getUseModuleItemList = () => { + return selectedModules?.itemList?.map((m) => { + return { + itemId: m.itemId, + mixMatlNo: m.mixMatlNo, + } + }) + } + + // ์ง€๋ถ•๋ฉด ๋ชฉ๋ก + const getRoofSurfaceList = () => { + const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top) + return roofSurfaceList + .map((obj) => { + return { + roofSurfaceId: obj.id, + roofSurface: canvas + .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, + moduleList: getModuleList(obj).map((module) => { + return { + itemId: module.moduleInfo.itemId, + circuit: module.circuitNumber ? module.circuitNumber : null, + pcsItemId: module.circuit ? module.circuit?.pcsItemId : null, + uniqueId: module.id ? module.id : null, + } + }), + } + }) + .filter((surface) => surface.moduleList.length > 0) + } + + // ๋ชจ๋“ˆ ๋ชฉ๋ก + const getModuleList = (surface) => { + let moduleList = [] + let [xObj, yObj] = [{}, {}] + let [xPoints, yPoints] = [[], []] + surface.modules.forEach((module) => { + if (!xObj[module.left]) { + xObj[module.left] = module.left + xPoints.push(module.left) + } + if (!yObj[module.top]) { + yObj[module.top] = module.top + yPoints.push(module.top) + } + }) + switch (surface.direction) { + case 'south': + xPoints.sort((a, b) => a - b) + yPoints.sort((a, b) => b - a) + yPoints.forEach((y, index) => { + let temp = surface.modules.filter((m) => m.top === y) + if (index % 2 === 0) { + temp.sort((a, b) => a.left - b.left) + } else { + temp.sort((a, b) => b.left - a.left) + } + moduleList = [...moduleList, ...temp] + }) + break + case 'north': + xPoints.sort((a, b) => b - a) + yPoints.sort((a, b) => a - b) + yPoints.forEach((y, index) => { + let temp = surface.modules.filter((m) => m.top === y) + if (index % 2 === 0) { + temp.sort((a, b) => b.left - a.left) + } else { + temp.sort((a, b) => a.left - b.left) + } + moduleList = [...moduleList, ...temp] + }) + break + case 'west': + xPoints.sort((a, b) => a - b) + yPoints.sort((a, b) => a - b) + xPoints.forEach((x, index) => { + let temp = surface.modules.filter((m) => m.left === x) + if (index % 2 === 0) { + temp.sort((a, b) => a.top - b.top) + } else { + temp.sort((a, b) => b.top - a.top) + } + moduleList = [...moduleList, ...temp] + }) + break + case 'east': + xPoints.sort((a, b) => b - a) + yPoints.sort((a, b) => b - a) + xPoints.forEach((x, index) => { + let temp = surface.modules.filter((m) => m.left === x) + if (index % 2 === 0) { + temp.sort((a, b) => b.top - a.top) + } else { + temp.sort((a, b) => a.top - b.top) + } + moduleList = [...moduleList, ...temp] + }) + break + default: + return [] + } + return moduleList + } + + const removeNotAllocationModules = () => { + const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit) + canvas.remove(...notAllocationModules) + canvas.renderAll() + } + + const setPowerConditionerData = () => {} + + return { + makers, + setMakers, + selectedMaker, + setSelectedMaker, + series, + setSeries, + models, + setModels, + selectedModels, + setSelectedModels, + pcsCheck, + setPcsCheck, + getOptYn, + getPcsItemList, + getSelectedPcsItemList, + getUseModuleItemList, + getRoofSurfaceList, + getModuleList, + removeNotAllocationModules, + } +} From 0f633cb29c4aa6be91d37ecdd6a8e2d610412620 Mon Sep 17 00:00:00 2001 From: basssy Date: Fri, 7 Feb 2025 14:17:55 +0900 Subject: [PATCH 143/213] =?UTF-8?q?=EC=B5=9C=EC=B4=88=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=ED=9B=84=20alert=20=ED=99=95=EC=9D=B8=20=EB=88=84=EB=A5=B4?= =?UTF-8?q?=EB=A9=B4=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/main/ChangePasswordPop.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/main/ChangePasswordPop.jsx b/src/components/main/ChangePasswordPop.jsx index 8f3687fc..4afd3395 100644 --- a/src/components/main/ChangePasswordPop.jsx +++ b/src/components/main/ChangePasswordPop.jsx @@ -105,12 +105,14 @@ export default function ChangePasswordPop(props) { swalFire({ text: getMessage('main.popup.login.success'), type: 'alert', + confirmFn: async () => { + const result = { ...sessionState, pwdInitYn: 'Y' } + setSession(result) + setSessionState(result) + props.setChagePasswordPopOpen(false) + await login() + }, }) - const result = { ...sessionState, pwdInitYn: 'Y' } - setSession(result) - setSessionState(result) - props.setChagePasswordPopOpen(false) - login() } else { alert(res?.result?.resultMsg) } From 04e9bfd63b0cfae5c9fe59f959f0d3dfcebcb67c Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 14:32:49 +0900 Subject: [PATCH 144/213] =?UTF-8?q?-=20=EC=8B=9C=EC=9E=91=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=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 --- .../floor-plan/modal/basic/step/Orientation.jsx | 8 ++++++++ src/hooks/module/useOrientation.js | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/basic/step/Orientation.jsx b/src/components/floor-plan/modal/basic/step/Orientation.jsx index dc08f9f4..4e279f04 100644 --- a/src/components/floor-plan/modal/basic/step/Orientation.jsx +++ b/src/components/floor-plan/modal/basic/step/Orientation.jsx @@ -28,6 +28,14 @@ export const Orientation = forwardRef(({ tabNum }, ref) => { }, [compasDeg]) const checkDegree = (e) => { + if (e === '-0' || e === '-') { + setCompasDeg('-') + return + } + if (e === '0-') { + setCompasDeg('-0') + return + } if (Number(e) >= -180 && Number(e) <= 180) { if (numberCheck(Number(e))) { setCompasDeg(Number(e)) diff --git a/src/hooks/module/useOrientation.js b/src/hooks/module/useOrientation.js index b64fc171..36b4e640 100644 --- a/src/hooks/module/useOrientation.js +++ b/src/hooks/module/useOrientation.js @@ -23,10 +23,13 @@ export function useOrientation() { }, []) const nextStep = () => { + if (isNaN(compasDeg)) { + setCompasDeg(0) + } const roofs = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) roofs.forEach((roof) => { roof.set({ - moduleCompass: compasDeg, + moduleCompass: isNaN(compasDeg) ? 0 : compasDeg, }) drawDirectionArrow(roof) }) From 7cdeb8a0dd10974ef91f14bba53fb0a275dfad3c 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: Fri, 7 Feb 2025 14:33:31 +0900 Subject: [PATCH 145/213] =?UTF-8?q?-=20=ED=9A=8C=EB=A1=9C=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B4=88=EA=B8=B0=ED=99=94=EC=8B=9C=20=ED=95=B4?= =?UTF-8?q?=EB=8B=B9=20=ED=9A=8C=EB=A1=9C=20=EB=B2=88=ED=98=B8=EC=9D=98=20?= =?UTF-8?q?=EC=B5=9C=EC=86=8C=20=EB=B2=88=ED=98=B8=EB=A1=9C=20=ED=9A=8C?= =?UTF-8?q?=EB=A1=9C=EB=B2=88=ED=98=B8=20=EC=B4=88=EA=B8=B0=ED=99=94=20-?= =?UTF-8?q?=20=EB=AA=A8=EB=93=88=EC=97=90=20pcsCode=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/type/PassivityCircuitAllocation.jsx | 10 +++++++++- 1 file changed, 9 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 e632882b..c3474865 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -148,6 +148,7 @@ export default function PassivityCircuitAllocation(props) { strokeWidth: 0.3, }) obj.pcsItemId = selectedPcs.itemId + obj.pcsItemCode = selectedPcs.id obj.circuit = moduleCircuitText obj.circuitNumber = getCircuitNumber() tempSelectedPcs.used = true @@ -207,7 +208,7 @@ export default function PassivityCircuitAllocation(props) { } getPcsManualConfChk(params).then((res) => { - if (res.resultCode === 'E') { + if (res?.resultCode === 'E') { swalFire({ text: res.resultMsg, type: 'alert', @@ -254,11 +255,18 @@ export default function PassivityCircuitAllocation(props) { icon: 'warning', confirmFn: () => { 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]) + }) + const minCircuitNumber = Math.min(...circuitNumbers) + console.log(circuitNumbers, minCircuitNumber) canvas.remove(...circuitModules.map((module) => module.circuit)) circuitModules.forEach((obj) => { obj.circuit = null obj.pcsItemId = null }) + setCircuitNumber(minCircuitNumber) setTargetModules([]) canvas.renderAll() From 3d75d3dff53dcd47c77d46593bedb5ce2d43389b Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 14:47:44 +0900 Subject: [PATCH 146/213] =?UTF-8?q?json=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/ja.json | 1 + src/locales/ko.json | 1 + 2 files changed, 2 insertions(+) diff --git a/src/locales/ja.json b/src/locales/ja.json index d3cc1552..0ce262de 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -860,6 +860,7 @@ "surface.shape.validate.size.1to3": "โ‘ ้•ทใ•ใฏโ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.1to23": "โ‘ ้•ทใ•ใฏโ‘ก๏ผ‹โ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.2to3": "โ‘ก้•ทใ•ใฏโ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", + "surface.shape.validate.size.3to2": "โ‘ข้•ทใ•ใฏโ‘กใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.3to4": "โ‘ข้•ทใ•ใฏโ‘ฃใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.4to3": "โ‘ฃ้•ทใ•ใฏโ‘ขใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.4to5": "โ‘ฃ้•ทใ•ใฏโ‘คใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", diff --git a/src/locales/ko.json b/src/locales/ko.json index 7c7a5c63..5dbf2fed 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -860,6 +860,7 @@ "surface.shape.validate.size.1to3": "โ‘ ๊ธธ์ด๋Š” โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.1to23": "โ‘ ๊ธธ์ด๋Š” โ‘ก+โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.2to3": "โ‘ก๊ธธ์ด๋Š” โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", + "surface.shape.validate.size.3to2": "โ‘ข๊ธธ์ด๋Š” โ‘ก๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.3to4": "โ‘ข๊ธธ์ด๋Š” โ‘ฃ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.4to3": "โ‘ฃ๊ธธ์ด๋Š” โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.4to5": "โ‘ฃ๊ธธ์ด๋Š” โ‘ค๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", From 09149ba6669e0ed1ba1b96dc96e098cb5d771e87 Mon Sep 17 00:00:00 2001 From: basssy Date: Fri, 7 Feb 2025 14:48:57 +0900 Subject: [PATCH 147/213] =?UTF-8?q?=EC=B5=9C=EC=B4=88=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/main/ChangePasswordPop.jsx | 14 +++++++------- src/locales/ja.json | 1 - src/locales/ko.json | 1 - 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/components/main/ChangePasswordPop.jsx b/src/components/main/ChangePasswordPop.jsx index 4afd3395..b0d99d2c 100644 --- a/src/components/main/ChangePasswordPop.jsx +++ b/src/components/main/ChangePasswordPop.jsx @@ -25,7 +25,7 @@ export default function ChangePasswordPop(props) { const form = { register, setValue, getValues, handleSubmit, resetField, control, watch } - //์ž๋ฆฌ์ˆ˜์ฒดํฌ + //์ž๋ฆฌ์ˆ˜์ฒดํฌ ๋ฐ˜๊ฐ 10์ž๋ฆฌ ์ž…๋ ฅํ•˜๋ฉด 10 ๋ฆฌํ„ด const checkLength = (pwd1) => { let str = new String(pwd1) let _byte = 0 @@ -76,17 +76,17 @@ export default function ChangePasswordPop(props) { if (_password1 !== _password2) { swalFire({ - text: getMessage('main.popup.login.validate4'), + text: getMessage('main.popup.login.validate1'), type: 'alert', icon: 'error', }) return false } - //ํŒจ์Šค์›Œ๋“œ ๊ธธ์ด์ˆ˜ ์ฒดํฌ ๋นˆ๊ฐ10 = ์ „๊ฐ20 - if (checkLength(_password1) > 20) { + //ํŒจ์Šค์›Œ๋“œ ๊ธธ์ด์ˆ˜ ์ฒดํฌ ๋ฐ˜๊ฐ10 + if (checkLength(_password1) > 10) { swalFire({ - text: getMessage('main.popup.login.validate1'), + text: getMessage('main.popup.login.validate2'), type: 'alert', icon: 'error', }) @@ -154,7 +154,7 @@ export default function ChangePasswordPop(props) { autoComplete="off" onChange={checkValue} onKeyUp={checkValue} - maxLength={20} + maxLength={10} />
@@ -175,7 +175,7 @@ export default function ChangePasswordPop(props) { autoComplete="off" onChange={checkValue} onKeyUp={checkValue} - maxLength={20} + maxLength={10} />
diff --git a/src/locales/ja.json b/src/locales/ja.json index d3cc1552..c2fc6336 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -853,7 +853,6 @@ "main.popup.login.validate1": "ๅ…ฅๅŠ›ใ—ใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒ็•ฐใชใ‚Šใพใ™.", "main.popup.login.validate2": "ๅŠ่ง’10ๆ–‡ๅญ—ไปฅๅ†…ใงๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„.", "main.popup.login.validate3": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„.", - "main.popup.login.validate4": "ๅ…ฅๅŠ›ใ—ใŸใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒ็•ฐใชใ‚Šใพใ™.", "main.popup.login.success": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒๅค‰ๆ›ดใ•ใ‚Œใพใ—ใŸ.", "common.canvas.validate.size": "ใ‚ตใ‚คใ‚บใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚", "surface.shape.validate.size.1to2": "โ‘ ้•ทใ•ใฏโ‘กใ‚ˆใ‚Šๅคงใใ„ๅ€คใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚", diff --git a/src/locales/ko.json b/src/locales/ko.json index 7c7a5c63..bce4849a 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -853,7 +853,6 @@ "main.popup.login.validate1": "์ž…๋ ฅํ•œ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.", "main.popup.login.validate2": "๋ฐ˜๊ฐ 10์ž ์ด๋‚ด๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.", "main.popup.login.validate3": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.", - "main.popup.login.validate4": "์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„œ๋กœ๋‹ค๋ฆ…๋‹ˆ๋‹ค.", "main.popup.login.success": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", "common.canvas.validate.size": "์‚ฌ์ด์ฆˆ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.", "surface.shape.validate.size.1to2": "โ‘ ๊ธธ์ด๋Š” โ‘ก๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", From 3cac85b21df50974a7181e1fe2ea890a03f2bf1b 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: Fri, 7 Feb 2025 14:51:57 +0900 Subject: [PATCH 148/213] =?UTF-8?q?-=20=ED=9A=8C=EB=A1=9C=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=B4=88=EA=B8=B0=ED=99=94=EC=8B=9C=20=EC=A7=91?= =?UTF-8?q?=EA=B3=84=ED=91=9C=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/step/type/PassivityCircuitAllocation.jsx | 3 +++ 1 file changed, 3 insertions(+) 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 c3474865..0463734c 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -273,6 +273,8 @@ export default function PassivityCircuitAllocation(props) { canvas.discardActiveObject() }, }) + + setModuleStatisticsData() } const initAllPcsCircuitNumber = () => { @@ -295,6 +297,7 @@ export default function PassivityCircuitAllocation(props) { canvas.renderAll() }, }) + setModuleStatisticsData() } return ( From 0299977c94a638646b136041ff0525ff9a15d9d0 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 15:25:11 +0900 Subject: [PATCH 149/213] =?UTF-8?q?=EC=86=8C=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx b/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx index 22641251..e9f4468c 100644 --- a/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx +++ b/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx @@ -33,6 +33,7 @@ export default function RoofAllocationSetting(props) { handleChangeLayout, currentRoofList, handleChangeInput, + handleChangePitch, } = useRoofAllocationSetting(id) const pitchText = useRecoilValue(pitchTextSelector) const { findCommonCode } = useCommonCode() From 7b5c0b615c9e71e8fa0f99b4f222b8691725a6ad Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Fri, 7 Feb 2025 15:36:18 +0900 Subject: [PATCH 150/213] =?UTF-8?q?refactor:=20=ED=94=8C=EB=9E=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=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 ๊ธฐ์กด add-plan, canvas-statuses ๋‘ ๊ฐœ api๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ๋‚ด์šฉ์„ api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ add-plan api ํ•œ ๊ฐœ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ --- src/hooks/usePlan.js | 78 ++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index 04bb983f..f49c31fd 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -150,48 +150,56 @@ export function usePlan(params = {}) { } /** - * ๋ฌผ๊ฑด๋ฒˆํ˜ธ(object) plan ์ถ”๊ฐ€ (canvas ์ƒ์„ฑ ์ „ planNo ํ• ๋‹น) + * ์‹ ๊ทœ plan ์ถ”๊ฐ€ + * + * case 1) ์ดˆ๊ธฐ ํ”Œ๋žœ ์ƒ์„ฑ : isInitPlan = true, isCopy = false + * case 2) ๋นˆ ํ”Œ๋žœ ์ƒ์„ฑ : isInitPlan = false, isCopy = false + * case 3) ๋ณต์ œ ํ”Œ๋žœ ์ƒ์„ฑ : isInitPlan = false, isCopy = true */ - const postObjectPlan = async (userId, objectNo) => { - return await promisePost({ url: '/api/object/add-plan', data: { userId: userId, objectNo: objectNo } }) + const postObjectPlanTemp = async (userId, objectNo, isCopy = false, isInitPlan = false) => { + const planData = isCopy + ? { + userId: userId, + objectNo: objectNo, + copyFlg: '1', + planNo: currentCanvasPlan?.planNo, + } + : { + userId: userId, + objectNo: objectNo, + copyFlg: '0', + } + await promisePost({ url: '/api/object/add-plan', data: planData }) .then((res) => { - return res.data.planNo - }) - .catch((error) => { - swalFire({ text: error.response.data.message, icon: 'error' }) - return null - }) - } + let newPlan = { + id: res.data.canvasId, + objectNo: objectNo, + planNo: res.data.planNo, + userId: userId, + canvasStatus: '', + isCurrent: true, + bgImageName: null, + mapPositionAddress: null, + } - /** - * ์‹ ๊ทœ canvas ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ - */ - const postCanvasStatus = async (userId, objectNo, canvasStatus, isInitPlan = false) => { - const planNo = await postObjectPlan(userId, objectNo) - if (!planNo) return - - const planData = { - userId: userId, - objectNo: objectNo, - planNo: planNo, - bgImageName: currentCanvasPlan?.bgImageName ?? null, - mapPositionAddress: currentCanvasPlan?.mapPositionAddress ?? null, - canvasStatus: canvasToDbFormat(canvasStatus), - } - await promisePost({ url: '/api/canvas-management/canvas-statuses', data: planData }) - .then((res) => { - const newPlan = { id: res.data, objectNo: objectNo, planNo: planNo, userId: userId, canvasStatus: canvasStatus, isCurrent: true } - setCurrentCanvasPlan(newPlan) if (isInitPlan) { // ์ดˆ๊ธฐ ํ”Œ๋žœ ์ƒ์„ฑ์ธ ๊ฒฝ์šฐ ํ”Œ๋žœ ๋ชฉ๋ก ์ดˆ๊ธฐํ™” + setCurrentCanvasPlan(newPlan) setPlans([newPlan]) } else { + if (isCopy) { + // ๋ณต์ œ ํ”Œ๋žœ ์ƒ์„ฑ์ธ ๊ฒฝ์šฐ ํ˜„์žฌ ์บ”๋ฒ„์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œ + newPlan.canvasStatus = currentCanvasData() + newPlan.bgImageName = currentCanvasPlan?.bgImageName ?? null + newPlan.mapPositionAddress = currentCanvasPlan?.mapPositionAddress ?? null + } + setCurrentCanvasPlan(newPlan) setPlans((plans) => [...plans.map((plan) => ({ ...plan, isCurrent: false })), newPlan]) swalFire({ text: getMessage('plan.message.save') }) } }) .catch((error) => { - swalFire({ text: error.message, icon: 'error' }) + swalFire({ text: error.response.data.message, icon: 'error' }) }) } @@ -337,13 +345,13 @@ export function usePlan(params = {}) { text: `Plan ${currentCanvasPlan.planNo} ` + getMessage('plan.message.confirm.copy'), type: 'confirm', confirmFn: async () => { - await postCanvasStatus(userId, objectNo, currentCanvasData(), false) + await postObjectPlanTemp(userId, objectNo, true, false) }, denyFn: async () => { - await postCanvasStatus(userId, objectNo, '', false) + await postObjectPlanTemp(userId, objectNo, false, false) }, }) - : await postCanvasStatus(userId, objectNo, '', false) + : await postObjectPlanTemp(userId, objectNo, false, false) } /** @@ -394,12 +402,12 @@ export function usePlan(params = {}) { */ const loadCanvasPlanData = async (userId, objectNo, planNo) => { console.log('๐Ÿš€ ~ loadCanvasPlanData ~ userId, objectNo, planNo:', userId, objectNo, planNo) - await getCanvasByObjectNo(userId, objectNo, planNo).then((res) => { + await getCanvasByObjectNo(userId, objectNo, planNo).then(async (res) => { if (res.length > 0) { setCurrentCanvasPlan(res.find((plan) => plan.planNo === planNo)) setPlans(res) } else { - postCanvasStatus(userId, objectNo, '', true) + await postObjectPlanTemp(userId, objectNo, false, true) } }) } From ea7203b7f0ff7b7e9388e44e45b6d4f6c75b8207 Mon Sep 17 00:00:00 2001 From: basssy Date: Fri, 7 Feb 2025 15:54:19 +0900 Subject: [PATCH 151/213] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EC=83=81=EC=84=B8?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=20=EB=AC=B8=EC=84=9C=EB=8B=A4=EC=9A=B4?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffDetail.jsx | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 12ed35f4..e200da48 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -282,27 +282,26 @@ export default function StuffDetail() { autoHeight: true, cellStyle: { justifyContent: 'center' }, cellRenderer: (params) => { - let buttonStyle = { display: 'flex' } - let buttonStyle2 = { display: 'flex' } + let buttonStyle = '' + let buttonStyle2 = '' if (params.value == null) { - buttonStyle = { - display: 'none', - } - buttonStyle2 = { - display: 'none', - } + buttonStyle = 'none' + buttonStyle2 = 'none' } else { if (params?.data?.createSaleStoreId === 'T01') { if (session?.storeId !== 'T01') { - buttonStyle = { display: 'none' } + buttonStyle = 'none' } } + if (params?.data?.tempFlg === '1') { + buttonStyle2 = 'none' + } } return ( <>
*/}
diff --git a/src/hooks/common/useRefFiles.js b/src/hooks/common/useRefFiles.js index 860f9178..106154fe 100644 --- a/src/hooks/common/useRefFiles.js +++ b/src/hooks/common/useRefFiles.js @@ -15,8 +15,8 @@ export function useRefFiles() { const [currentBgImage, setCurrentBgImage] = useState(null) const queryRef = useRef(null) const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState) - const canvas = useRecoilValue(canvasState) - const { handleBackImageLoadToCanvas } = useCanvas() + // const canvas = useRecoilValue(canvasState) + const { canvas, handleBackImageLoadToCanvas } = useCanvas() const { swalFire } = useSwal() const { get, post, promisePost } = useAxios() @@ -145,7 +145,11 @@ export function useRefFiles() { console.log('๐Ÿš€ ~ useEffect ~ currentBgImage:', currentBgImage) // handleBackImageLoadToCanvas(`plan-images/${currentCanvasPlan.id}.png`) handleBackImageLoadToCanvas(currentBgImage) - setCurrentCanvasPlan((prev) => ({ ...prev, bgImageName: refImage?.name ?? null, mapPositionAddress: queryRef.current.value })) + setCurrentCanvasPlan((prev) => ({ + ...prev, + bgImageName: refImage?.name ?? null, + mapPositionAddress: queryRef.current.value, + })) }, [currentBgImage]) /** @@ -158,7 +162,10 @@ export function useRefFiles() { // formData.append('fileName', currentCanvasPlan.id) // const res = await post({ url: `${process.env.NEXT_PUBLIC_API_SERVER_PATH}/api/image-upload`, data: formData }) - const res = await post({ url: `${process.env.NEXT_PUBLIC_HOST_URL}/image/upload`, data: formData }) + const res = await post({ + url: `${process.env.NEXT_PUBLIC_HOST_URL}/image/upload`, + data: formData, + }) console.log('๐Ÿš€ ~ handleUploadImageRefFile ~ res:', res) // const image = await readImage(res.filePath) // console.log('๐Ÿš€ ~ handleUploadImageRefFile ~ file:', image) @@ -176,7 +183,10 @@ export function useRefFiles() { const res = await post({ url: converterUrl, data: formData }) console.log('๐Ÿš€ ~ handleUploadConvertRefFile ~ res:', res) - const result = await post({ url: `${process.env.NEXT_PUBLIC_HOST_URL}/cad/convert`, data: res }) + const result = await post({ + url: `${process.env.NEXT_PUBLIC_HOST_URL}/cad/convert`, + data: res, + }) console.log('๐Ÿš€ ~ handleUploadConvertRefFile ~ result:', result) setCurrentBgImage(`${process.env.NEXT_PUBLIC_HOST_URL}${result.filePath}`) setRefImage(res.Files[0].FileData) @@ -199,23 +209,6 @@ export function useRefFiles() { setRefFileMethod(e.target.value) } - /** - * ์ด๋ฏธ์ง€ ์ €์žฅ ์‹œ ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ขŒํ‘œ - * return [start, end] - */ - const getImageCoordinates = () => { - const margin = 20 - const minX = canvas.getObjects().reduce((acc, cur) => (cur.left < acc ? cur.left : acc), 0) - const minY = canvas.getObjects().reduce((acc, cur) => (cur.top < acc ? cur.top : acc), 0) - - const maxX = canvas.getObjects().reduce((acc, cur) => (cur.left + cur.width > acc ? cur.left + cur.width : acc), 0) - const maxY = canvas.getObjects().reduce((acc, cur) => (cur.top + cur.height > acc ? cur.top + cur.height : acc), 0) - return [ - { x: minX - margin, y: minY - margin }, - { x: maxX + margin, y: maxY + margin }, - ] - } - return { refImage, queryRef, diff --git a/src/hooks/useCanvas.js b/src/hooks/useCanvas.js index d6443c2a..06e9222c 100644 --- a/src/hooks/useCanvas.js +++ b/src/hooks/useCanvas.js @@ -13,7 +13,8 @@ import { writeImage } from '@/lib/canvas' import { useCanvasEvent } from '@/hooks/useCanvasEvent' import { useAxios } from '@/hooks/useAxios' import { useFont } from '@/hooks/common/useFont' -import { OBJECT_PROTOTYPE, RELOAD_TYPE_PROTOTYPE, SAVE_KEY } from '@/common/common' +import { OBJECT_PROTOTYPE, POLYGON_TYPE, RELOAD_TYPE_PROTOTYPE, SAVE_KEY } from '@/common/common' +import { usePlan } from './usePlan' export function useCanvas(id) { const [canvas, setCanvas] = useRecoilState(canvasState) @@ -25,6 +26,7 @@ export function useCanvas(id) { const { setCanvasForEvent, attachDefaultEventOnCanvas } = useCanvasEvent() const { post } = useAxios() const {} = useFont() + const { currentCanvasPlan, setCurrentCanvasPlan } = usePlan() /** * ์ฒ˜์Œ ์…‹ํŒ… @@ -383,18 +385,18 @@ export function useCanvas(id) { console.log('err', err) }) - const canvasStatus = addCanvas() + // const canvasStatus = addCanvas() - const patternData = { - userId: userId, - imageName: title, - objectNo: 'test123240822001', - canvasStatus: JSON.stringify(canvasStatus).replace(/"/g, '##'), - } + // const patternData = { + // userId: userId, + // imageName: title, + // objectNo: 'test123240822001', + // canvasStatus: JSON.stringify(canvasStatus).replace(/"/g, '##'), + // } - await post({ url: '/api/canvas-management/canvas-statuses', data: patternData }) + // await post({ url: '/api/canvas-management/canvas-statuses', data: patternData }) - setThumbnails((prev) => [...prev, { imageName: `/canvasState/${title}.png`, userId, canvasStatus: JSON.stringify(canvasStatus) }]) + // setThumbnails((prev) => [...prev, { imageName: `/canvasState/${title}.png`, userId, canvasStatus: JSON.stringify(canvasStatus) }]) } const handleFlip = () => { @@ -542,6 +544,70 @@ export function useCanvas(id) { canvas.clear() } + /** + * ์ด๋ฏธ์ง€ ์ €์žฅ ์‹œ ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ขŒํ‘œ + * return [start, end] + */ + const getImageCoordinates = () => { + const margin = 20 + + const objects = canvas.getObjects().filter((obj) => [POLYGON_TYPE.ROOF, 'lengthText', 'arrow'].includes(obj.name)) + + const minX = objects.reduce((acc, cur) => (cur.left < acc ? cur.left : acc), objects[0].left) + const minY = objects.reduce((acc, cur) => (cur.top < acc ? cur.top : acc), objects[0].top) + + const maxX = objects.reduce((acc, cur) => (cur.left + cur.width > acc ? cur.left + cur.width : acc), 0) + const maxY = objects.reduce((acc, cur) => (cur.top + cur.height > acc ? cur.top + cur.height : acc), 0) + return [ + { x: minX - margin, y: minY - margin }, + { x: maxX + margin, y: maxY + margin }, + ] + } + + /** + * ์บ”๋ฒ„์Šค๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ + * @param {integer} type 1: ๋ชจ๋“ˆ๋งŒ ์žˆ๋Š” ์ƒํƒœ, 2: ๊ฐ€๋Œ€๊นŒ์ง€ ์˜ฌ๋ฆฐ ์ƒํƒœ + */ + const handleCanvasToPng = async (type) => { + removeMouseLines() + // const currentCanvasStatus = canvas?.toDataURL('image/png').replace('data:image/png;base64,', '') + // const currentCanvasStatus = canvas + // ?.toDataURL({ + // width: canvas.width, + // height: canvas.height, + // left: 0, + // top: 0, + // format: 'png', + // }) + // .replace('data:image/png;base64,', '') + canvas.getObjects('image').forEach((obj) => { + if (obj.getSrc) { + const img = new Image() + img.crossOrigin = 'anonymous' + img.src = obj.getSrc() + obj.setElement(img) + } + }) + canvas.renderAll() + + // const dataURL = canvas.toDataURL({ + // format: 'png', + // quality: 1, + // }) + + const res = await post({ + url: `${process.env.NEXT_PUBLIC_HOST_URL}/image/canvas`, + data: { + objectNo: currentCanvasPlan.objectNo, + planNo: currentCanvasPlan.planNo, + type, + canvasToPng: canvas.toDataURL('image/png').replace('data:image/png;base64,', ''), + coordinates: getImageCoordinates(), + }, + }) + console.log('๐Ÿš€ ~ handleCanvasToPng ~ res:', res) + } + const getCurrentCanvas = () => { return canvas.toJSON([ 'selectable', @@ -589,5 +655,6 @@ export function useCanvas(id) { handleCadImageInit, backImg, setBackImg, + handleCanvasToPng, } } From 22831a4da3e36d40bcd26454fd3713f9c25f9e4d Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 7 Feb 2025 17:56:43 +0900 Subject: [PATCH 165/213] =?UTF-8?q?=F0=9F=9A=A8fix:=20import=20=EA=B5=AC?= =?UTF-8?q?=EB=AC=B8=20=EC=A3=BC=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/modal/ImgLoad.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/ImgLoad.jsx b/src/components/floor-plan/modal/ImgLoad.jsx index 82c553ee..23ad3962 100644 --- a/src/components/floor-plan/modal/ImgLoad.jsx +++ b/src/components/floor-plan/modal/ImgLoad.jsx @@ -11,7 +11,7 @@ import WithDraggable from '@/components/common/draggable/WithDraggable' import { useCanvas } from '@/hooks/useCanvas' import { useRecoilValue } from 'recoil' import { canvasState } from '@/store/canvasAtom' -import { initImageLoaderPopup } from '@/lib/planAction' +// import { initImageLoaderPopup } from '@/lib/planAction' export default function ImgLoad() { const { currentCanvasPlan, setCurrentCanvasPlan } = usePlan() From 3200e201c41fddc874991231a83df1f995651524 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 18:27:11 +0900 Subject: [PATCH 166/213] =?UTF-8?q?exception=20console=20error=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/hooks/module/useTrestle.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index fa69ebdc..4b129a54 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -593,6 +593,7 @@ export const useTrestle = () => { return setEstimateData() } catch (e) { // ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ ๊ฐ€๋Œ€ ์ดˆ๊ธฐํ™” + console.error(e) clear() setViewCircuitNumberTexts(true) return null From 0a3272704d309f28ab9a90992b3252c53254438e Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 18:32:09 +0900 Subject: [PATCH 167/213] =?UTF-8?q?=ED=99=94=EC=82=B4=ED=91=9C=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePolygon.js | 104 ++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 36 deletions(-) diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index 5ce62cac..309688a7 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -205,62 +205,94 @@ export const usePolygon = () => { const polygonMinX = Math.min(...polygon.getCurrentPoints().map((point) => point.x)) const polygonMaxY = Math.max(...polygon.getCurrentPoints().map((point) => point.y)) const polygonMinY = Math.min(...polygon.getCurrentPoints().map((point) => point.y)) + const lines = polygon.lines + let centerPoints + switch (direction) { + case 'south': + // lines์ค‘ ๊ฐ€์žฅ ์•„๋ž˜์— ์žˆ๋Š” ๋ผ์ธ์„ ์ฐพ๋Š”๋‹ค. + const line = lines.reduce((acc, cur) => { + return acc.y2 > cur.y2 ? acc : cur + }, lines[0]) + centerPoint = { x: (line.x2 + line.x1) / 2, y: Math.max(line.y1, line.y2) } + break + case 'north': + // lines์ค‘ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ผ์ธ์„ ์ฐพ๋Š”๋‹ค. + const line2 = lines.reduce((acc, cur) => { + return acc.y2 < cur.y2 ? acc : cur + }, lines[0]) + centerPoint = { x: (line2.x2 + line2.x1) / 2, y: Math.min(line2.y1, line2.y2) } + break + case 'west': + // lines์ค‘ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ผ์ธ์„ ์ฐพ๋Š”๋‹ค. + const line3 = lines.reduce((acc, cur) => { + return acc.x2 < cur.x2 ? acc : cur + }, lines[0]) + centerPoint = { x: Math.min(line3.x1, line3.x2), y: (line3.y1 + line3.y2) / 2 } + break + case 'east': + // lines์ค‘ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ผ์ธ์„ ์ฐพ๋Š”๋‹ค. + const line4 = lines.reduce((acc, cur) => { + return acc.x2 > cur.x2 ? acc : cur + }, lines[0]) + centerPoint = { x: Math.max(line4.x1, line4.x2), y: (line4.y1 + line4.y2) / 2 } + break + } switch (direction) { case 'north': points = [ - { x: centerPoint.x - width / 2, y: polygonMinY - 50 }, - { x: centerPoint.x + 20 - width / 2, y: polygonMinY - 50 }, - { x: centerPoint.x + 20 - width / 2, y: polygonMinY - 80 }, - { x: centerPoint.x + 50 - width / 2, y: polygonMinY - 80 }, - { x: centerPoint.x - width / 2, y: polygonMinY - 110 }, - { x: centerPoint.x - 50 - width / 2, y: polygonMinY - 80 }, - { x: centerPoint.x - 20 - width / 2, y: polygonMinY - 80 }, - { x: centerPoint.x - 20 - width / 2, y: polygonMinY - 50 }, + { x: centerPoint.x, y: polygonMinY - 50 }, + { x: centerPoint.x + 20, y: polygonMinY - 50 }, + { x: centerPoint.x + 20, y: polygonMinY - 80 }, + { x: centerPoint.x + 50, y: polygonMinY - 80 }, + { x: centerPoint.x, y: polygonMinY - 110 }, + { x: centerPoint.x - 50, y: polygonMinY - 80 }, + { x: centerPoint.x - 20, y: polygonMinY - 80 }, + { x: centerPoint.x - 20, y: polygonMinY - 50 }, ] - stickeyPoint = { x: centerPoint.x - width / 2, y: polygonMinY - 110 } + stickeyPoint = { x: centerPoint.x, y: polygonMinY - 110 } break case 'south': points = [ - { x: centerPoint.x + width / 2, y: polygonMaxY + 50 }, - { x: centerPoint.x + 20 + width / 2, y: polygonMaxY + 50 }, - { x: centerPoint.x + 20 + width / 2, y: polygonMaxY + 80 }, - { x: centerPoint.x + 50 + width / 2, y: polygonMaxY + 80 }, - { x: centerPoint.x + width / 2, y: polygonMaxY + 110 }, - { x: centerPoint.x - 50 + width / 2, y: polygonMaxY + 80 }, - { x: centerPoint.x - 20 + width / 2, y: polygonMaxY + 80 }, - { x: centerPoint.x - 20 + width / 2, y: polygonMaxY + 50 }, + { x: centerPoint.x, y: polygonMaxY + 50 }, + { x: centerPoint.x + 20, y: polygonMaxY + 50 }, + { x: centerPoint.x + 20, y: polygonMaxY + 80 }, + { x: centerPoint.x + 50, y: polygonMaxY + 80 }, + { x: centerPoint.x, y: polygonMaxY + 110 }, + { x: centerPoint.x - 50, y: polygonMaxY + 80 }, + { x: centerPoint.x - 20, y: polygonMaxY + 80 }, + { x: centerPoint.x - 20, y: polygonMaxY + 50 }, ] - stickeyPoint = { x: centerPoint.x + width / 2, y: polygonMaxY + 110 } + stickeyPoint = { x: centerPoint.x, y: polygonMaxY + 110 } break case 'west': points = [ - { x: polygonMinX - 50, y: centerPoint.y - height / 2 }, - { x: polygonMinX - 50, y: centerPoint.y + 20 - height / 2 }, - { x: polygonMinX - 80, y: centerPoint.y + 20 - height / 2 }, - { x: polygonMinX - 80, y: centerPoint.y + 50 - height / 2 }, - { x: polygonMinX - 110, y: centerPoint.y - height / 2 }, - { x: polygonMinX - 80, y: centerPoint.y - 50 - height / 2 }, - { x: polygonMinX - 80, y: centerPoint.y - 20 - height / 2 }, - { x: polygonMinX - 50, y: centerPoint.y - 20 - height / 2 }, + { x: polygonMinX - 50, y: centerPoint.y }, + { x: polygonMinX - 50, y: centerPoint.y + 20 }, + { x: polygonMinX - 80, y: centerPoint.y + 20 }, + { x: polygonMinX - 80, y: centerPoint.y + 50 }, + { x: polygonMinX - 110, y: centerPoint.y }, + { x: polygonMinX - 80, y: centerPoint.y - 50 }, + { x: polygonMinX - 80, y: centerPoint.y - 20 }, + { x: polygonMinX - 50, y: centerPoint.y - 20 }, ] - stickeyPoint = { x: polygonMinX - 110, y: centerPoint.y - height / 2 } + stickeyPoint = { x: polygonMinX - 110, y: centerPoint.y } break case 'east': points = [ - { x: polygonMaxX + 50, y: centerPoint.y + height / 2 }, - { x: polygonMaxX + 50, y: centerPoint.y + 20 + height / 2 }, - { x: polygonMaxX + 80, y: centerPoint.y + 20 + height / 2 }, - { x: polygonMaxX + 80, y: centerPoint.y + 50 + height / 2 }, - { x: polygonMaxX + 110, y: centerPoint.y + height / 2 }, - { x: polygonMaxX + 80, y: centerPoint.y - 50 + height / 2 }, - { x: polygonMaxX + 80, y: centerPoint.y - 20 + height / 2 }, - { x: polygonMaxX + 50, y: centerPoint.y - 20 + height / 2 }, + { x: polygonMaxX + 50, y: centerPoint.y }, + { x: polygonMaxX + 50, y: centerPoint.y + 20 }, + { x: polygonMaxX + 80, y: centerPoint.y + 20 }, + { x: polygonMaxX + 80, y: centerPoint.y + 50 }, + { x: polygonMaxX + 110, y: centerPoint.y }, + { x: polygonMaxX + 80, y: centerPoint.y - 50 }, + { x: polygonMaxX + 80, y: centerPoint.y - 20 }, + { x: polygonMaxX + 50, y: centerPoint.y - 20 }, ] - stickeyPoint = { x: polygonMaxX + 110, y: centerPoint.y + height / 2 } + stickeyPoint = { x: polygonMaxX + 110, y: centerPoint.y } break } From 81fb5ffcc1877d82811d67a3145af9434cae979c Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 19:37:41 +0900 Subject: [PATCH 168/213] =?UTF-8?q?roofMaterial=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 926336ec..5a45ef4a 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -121,6 +121,7 @@ export function useModuleBasicSetting(tabNum) { .getObjects() .filter((roof) => roof.name === 'roof') .forEach((roof) => { + if (!roof.roofMaterial) return const roofIndex = roof.roofMaterial.index //์ง€๋ถ•์˜ ์ง€๋ถ•์žฌ์˜ ์ˆœ๋ฒˆ trestleDetailList.forEach((detail) => { if (detail.data !== null) { From f7ce90d921ae19f765443a2262ed25c929c4f10b Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 7 Feb 2025 19:50:57 +0900 Subject: [PATCH 169/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EB=A1=9C=EB=8D=94=20=EC=82=AC=EC=9A=A9=20=ED=9B=85?= =?UTF-8?q?=20=EB=B3=84=EB=8F=84=20=EC=9E=91=EC=84=B1=20=EB=B0=8F=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/modal/ImgLoad.jsx | 5 +- src/hooks/floorPlan/useImgLoader.js | 70 +++++++++++++++++++++ src/hooks/useCanvas.js | 67 -------------------- 3 files changed, 74 insertions(+), 68 deletions(-) create mode 100644 src/hooks/floorPlan/useImgLoader.js diff --git a/src/components/floor-plan/modal/ImgLoad.jsx b/src/components/floor-plan/modal/ImgLoad.jsx index 23ad3962..aaf99284 100644 --- a/src/components/floor-plan/modal/ImgLoad.jsx +++ b/src/components/floor-plan/modal/ImgLoad.jsx @@ -11,12 +11,13 @@ import WithDraggable from '@/components/common/draggable/WithDraggable' import { useCanvas } from '@/hooks/useCanvas' import { useRecoilValue } from 'recoil' import { canvasState } from '@/store/canvasAtom' +import { useImgLoader } from '@/hooks/floorPlan/useImgLoader' // import { initImageLoaderPopup } from '@/lib/planAction' export default function ImgLoad() { const { currentCanvasPlan, setCurrentCanvasPlan } = usePlan() const { getMessage } = useMessage() - const { canvas, handleCanvasToPng } = useCanvas() + const { canvas } = useCanvas() const { floorPlanState, setFloorPlanState } = useContext(FloorPlanContext) const { refImage, @@ -32,6 +33,7 @@ export default function ImgLoad() { handleMapImageDown, handleAddressDelete, } = useRefFiles() + const { handleCanvasToPng } = useImgLoader() const handleModal = () => { setFloorPlanState({ ...floorPlanState, refFileModalOpen: false, toggleRotate: false }) @@ -151,6 +153,7 @@ export default function ImgLoad() { +
diff --git a/src/hooks/floorPlan/useImgLoader.js b/src/hooks/floorPlan/useImgLoader.js new file mode 100644 index 00000000..9820ffcc --- /dev/null +++ b/src/hooks/floorPlan/useImgLoader.js @@ -0,0 +1,70 @@ +import { useRecoilValue } from 'recoil' +import { canvasState } from '@/store/canvasAtom' +import { useCanvas } from '../useCanvas' +import { useAxios } from '../useAxios' +import { usePlan } from '../usePlan' +import { POLYGON_TYPE } from '@/common/common' + +/** + * ์ด๋ฏธ์ง€ ๋กœ๋” hook + * @returns {function} handleCanvasToPng + */ +export function useImgLoader() { + const canvas = useRecoilValue(canvasState) + const { removeMouseLines } = useCanvas() + const { currentCanvasPlan } = usePlan() + const { post } = useAxios() + + /** + * ์ด๋ฏธ์ง€ ์ €์žฅ ์‹œ ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ขŒํ‘œ + * return [start, end] + */ + const getImageCoordinates = () => { + const margin = 20 + + const objects = canvas.getObjects().filter((obj) => [POLYGON_TYPE.ROOF, 'lengthText', 'arrow'].includes(obj.name)) + + const minX = objects.reduce((acc, cur) => (cur.left < acc ? cur.left : acc), objects[0].left) + const minY = objects.reduce((acc, cur) => (cur.top < acc ? cur.top : acc), objects[0].top) + + const maxX = objects.reduce((acc, cur) => (cur.left + cur.width > acc ? cur.left + cur.width : acc), 0) + const maxY = objects.reduce((acc, cur) => (cur.top + cur.height > acc ? cur.top + cur.height : acc), 0) + return [ + { x: minX - margin, y: minY - margin }, + { x: maxX + margin, y: maxY + margin }, + ] + } + + /** + * ์บ”๋ฒ„์Šค๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ + * @param {integer} type 1: ๋ชจ๋“ˆ๋งŒ ์žˆ๋Š” ์ƒํƒœ, 2: ๊ฐ€๋Œ€๊นŒ์ง€ ์˜ฌ๋ฆฐ ์ƒํƒœ + */ + const handleCanvasToPng = async (type) => { + removeMouseLines() + + canvas.getObjects('image').forEach((obj) => { + if (obj.getSrc) { + const img = new Image() + img.crossOrigin = 'anonymous' + img.src = obj.getSrc() + obj.setElement(img) + } + }) + + canvas.renderAll() + + const res = await post({ + url: `${process.env.NEXT_PUBLIC_HOST_URL}/image/canvas`, + data: { + objectNo: currentCanvasPlan.objectNo, + planNo: currentCanvasPlan.planNo, + type, + canvasToPng: canvas.toDataURL('image/png').replace('data:image/png;base64,', ''), + coordinates: getImageCoordinates(), + }, + }) + console.log('๐Ÿš€ ~ handleCanvasToPng ~ res:', res) + } + + return { handleCanvasToPng } +} diff --git a/src/hooks/useCanvas.js b/src/hooks/useCanvas.js index 06e9222c..8dec3cc0 100644 --- a/src/hooks/useCanvas.js +++ b/src/hooks/useCanvas.js @@ -24,9 +24,7 @@ export function useCanvas(id) { const [canvasSize] = useRecoilState(canvasSizeState) const [fontSize] = useRecoilState(fontSizeState) const { setCanvasForEvent, attachDefaultEventOnCanvas } = useCanvasEvent() - const { post } = useAxios() const {} = useFont() - const { currentCanvasPlan, setCurrentCanvasPlan } = usePlan() /** * ์ฒ˜์Œ ์…‹ํŒ… @@ -544,70 +542,6 @@ export function useCanvas(id) { canvas.clear() } - /** - * ์ด๋ฏธ์ง€ ์ €์žฅ ์‹œ ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ขŒํ‘œ - * return [start, end] - */ - const getImageCoordinates = () => { - const margin = 20 - - const objects = canvas.getObjects().filter((obj) => [POLYGON_TYPE.ROOF, 'lengthText', 'arrow'].includes(obj.name)) - - const minX = objects.reduce((acc, cur) => (cur.left < acc ? cur.left : acc), objects[0].left) - const minY = objects.reduce((acc, cur) => (cur.top < acc ? cur.top : acc), objects[0].top) - - const maxX = objects.reduce((acc, cur) => (cur.left + cur.width > acc ? cur.left + cur.width : acc), 0) - const maxY = objects.reduce((acc, cur) => (cur.top + cur.height > acc ? cur.top + cur.height : acc), 0) - return [ - { x: minX - margin, y: minY - margin }, - { x: maxX + margin, y: maxY + margin }, - ] - } - - /** - * ์บ”๋ฒ„์Šค๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ - * @param {integer} type 1: ๋ชจ๋“ˆ๋งŒ ์žˆ๋Š” ์ƒํƒœ, 2: ๊ฐ€๋Œ€๊นŒ์ง€ ์˜ฌ๋ฆฐ ์ƒํƒœ - */ - const handleCanvasToPng = async (type) => { - removeMouseLines() - // const currentCanvasStatus = canvas?.toDataURL('image/png').replace('data:image/png;base64,', '') - // const currentCanvasStatus = canvas - // ?.toDataURL({ - // width: canvas.width, - // height: canvas.height, - // left: 0, - // top: 0, - // format: 'png', - // }) - // .replace('data:image/png;base64,', '') - canvas.getObjects('image').forEach((obj) => { - if (obj.getSrc) { - const img = new Image() - img.crossOrigin = 'anonymous' - img.src = obj.getSrc() - obj.setElement(img) - } - }) - canvas.renderAll() - - // const dataURL = canvas.toDataURL({ - // format: 'png', - // quality: 1, - // }) - - const res = await post({ - url: `${process.env.NEXT_PUBLIC_HOST_URL}/image/canvas`, - data: { - objectNo: currentCanvasPlan.objectNo, - planNo: currentCanvasPlan.planNo, - type, - canvasToPng: canvas.toDataURL('image/png').replace('data:image/png;base64,', ''), - coordinates: getImageCoordinates(), - }, - }) - console.log('๐Ÿš€ ~ handleCanvasToPng ~ res:', res) - } - const getCurrentCanvas = () => { return canvas.toJSON([ 'selectable', @@ -655,6 +589,5 @@ export function useCanvas(id) { handleCadImageInit, backImg, setBackImg, - handleCanvasToPng, } } From aa7bdf595f4d8c3d79fd679dab90443a3627f91c Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Fri, 7 Feb 2025 19:54:09 +0900 Subject: [PATCH 170/213] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=84=9C=20=EC=A0=84?= =?UTF-8?q?=EC=97=90=20handleCanvasToPng=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/circuitTrestle/CircuitTrestleSetting.jsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index c09687b6..a1c79b5c 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -23,6 +23,7 @@ import { v4 as uuidv4 } from 'uuid' import { useEstimate } from '@/hooks/useEstimate' import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' +import { useImgLoader } from '@/hooks/floorPlan/useImgLoader' const ALLOCATION_TYPE = { AUTO: 'auto', @@ -50,6 +51,9 @@ export default function CircuitTrestleSetting({ id }) { // const [stepUpListData, setStepUpListData] = useRecoilState(stepUpListDataState) const [stepUpListData, setStepUpListData] = useState([]) const [seletedOption, setSeletedOption] = useState(null) + + const { handleCanvasToPng } = useImgLoader() + const { makers, setMakers, @@ -339,12 +343,11 @@ export default function CircuitTrestleSetting({ id }) { setViewCircuitNumberTexts(false) - //TODO : ์ด๋ฏธ์ง€ ์ €์žฅ + handleCanvasToPng(1) const result = await apply() if (result) { - // TODO : ์ด๋ฏธ์ง€ ์ €์žฅ - + handleCanvasToPng(2) setViewCircuitNumberTexts(true) await saveEstimate(result) } From df94318bc16547724fba4f57b49388e92e23c6d4 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 7 Feb 2025 20:08:50 +0900 Subject: [PATCH 171/213] =?UTF-8?q?=F0=9F=9A=A8fix:=20remove=20unused=20co?= =?UTF-8?q?de?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/modal/ImgLoad.jsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/components/floor-plan/modal/ImgLoad.jsx b/src/components/floor-plan/modal/ImgLoad.jsx index aaf99284..1c38fa40 100644 --- a/src/components/floor-plan/modal/ImgLoad.jsx +++ b/src/components/floor-plan/modal/ImgLoad.jsx @@ -9,9 +9,6 @@ import { usePlan } from '@/hooks/usePlan' import WithDraggable from '@/components/common/draggable/WithDraggable' import { useCanvas } from '@/hooks/useCanvas' -import { useRecoilValue } from 'recoil' -import { canvasState } from '@/store/canvasAtom' -import { useImgLoader } from '@/hooks/floorPlan/useImgLoader' // import { initImageLoaderPopup } from '@/lib/planAction' export default function ImgLoad() { @@ -33,7 +30,6 @@ export default function ImgLoad() { handleMapImageDown, handleAddressDelete, } = useRefFiles() - const { handleCanvasToPng } = useImgLoader() const handleModal = () => { setFloorPlanState({ ...floorPlanState, refFileModalOpen: false, toggleRotate: false }) @@ -153,7 +149,6 @@ export default function ImgLoad() { -
From dfc67cb7ddd1904bf4a5c2696315f2060a035870 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Fri, 7 Feb 2025 20:28:41 +0900 Subject: [PATCH 172/213] =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=9C=A0?= =?UTF-8?q?=EC=A7=80=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/BasicSetting.jsx | 2 +- .../floor-plan/modal/basic/step/Module.jsx | 4 +- src/hooks/module/useModuleBasicSetting.js | 320 +++++++++--------- src/hooks/module/useModuleSelection.js | 2 + src/hooks/module/useModuleTabContents.js | 58 ++-- src/hooks/object/useObjectBatch.js | 2 +- src/hooks/surface/useSurfaceShapeBatch.js | 6 +- src/locales/ko.json | 1 + 8 files changed, 204 insertions(+), 191 deletions(-) diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index 5b464337..7165e867 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -38,7 +38,7 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { const [isClosePopup, setIsClosePopup] = useState({ close: false, id: 0 }) // const { initEvent } = useContext(EventContext) - const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting(1) + const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting(tabNum) const { updateObjectDate } = useMasterController() const handleBtnNextStep = () => { if (tabNum === 1) { diff --git a/src/components/floor-plan/modal/basic/step/Module.jsx b/src/components/floor-plan/modal/basic/step/Module.jsx index 45e99dff..a574fb65 100644 --- a/src/components/floor-plan/modal/basic/step/Module.jsx +++ b/src/components/floor-plan/modal/basic/step/Module.jsx @@ -58,8 +58,8 @@ export default function Module({ setTabNum }) { useEffect(() => { if (tempModuleSelectionData.roofConstructions.length > 0) { if (tempModuleSelectionData.common.moduleItemId && isObjectNotEmpty(tempModuleSelectionData.module)) { - setModuleSelectionData(tempModuleSelectionData) //์ €์žฅ๋œ temp๋ฐ์ดํ„ฐ๊ฐ€ ์ง€๋ถ•์žฌ(addedRoofs) ๊ฐœ์ˆ˜์™€ ๊ฐ™์œผ๋ฉด ๋ชจ๋“ˆ ์„ ํƒ ์ €์žฅ + setModuleSelectionData(tempModuleSelectionData) if (tempModuleSelectionData.roofConstructions.length === addedRoofs.length) { moduleSelectedDataTrigger(tempModuleSelectionData) } @@ -83,7 +83,7 @@ export default function Module({ setTabNum }) { header: [ { name: getMessage('module'), width: 150, prop: 'module', type: 'color-box' }, { - name: `${getMessage('๋†’์ด')} (mm)`, + name: `${getMessage('height')} (mm)`, prop: 'height', }, { name: `${getMessage('width')} (mm)`, prop: 'width' }, diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 5a45ef4a..e105f29b 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -64,6 +64,9 @@ export function useModuleBasicSetting(tabNum) { if (canvasSetting.roofSizeSet !== '3') { const common = moduleSelectionData.common const roofConstructions = moduleSelectionData.roofConstructions + + console.log('moduleSelectionData', moduleSelectionData) + const listParams = roofConstructions.map((item) => { return { ...common, @@ -78,6 +81,7 @@ export function useModuleBasicSetting(tabNum) { inclCd: String(item.addRoof.pitch), roofIndex: item.addRoof.index, workingWidth: item.addRoof.lenBase, + raftBaseCd: item.trestle.raftBaseCd, } }) setTrestleDetailParams(listParams) @@ -142,174 +146,176 @@ export function useModuleBasicSetting(tabNum) { const makeModuleInstArea = (roof, trestleDetail) => { //์ง€๋ถ• ๊ฐ์ฒด ๋ฐ˜ํ™˜ - if (!roof) { - return - } - - //๋„๋จธ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ์•„์›ƒ๋ผ์ธ ๋‚ธ๋‹ค - const batchObjects = canvas - ?.getObjects() - .filter( - (obj) => - obj.name === BATCH_TYPE.OPENING || - obj.name === BATCH_TYPE.SHADOW || - obj.name === BATCH_TYPE.TRIANGLE_DORMER || - obj.name === BATCH_TYPE.PENTAGON_DORMER, - ) //๋„๋จธs ๊ฐ์ฒด - - //๋„๋จธ๋„ ์™ธ๊ณฝ์„ ๋”ฐ์•ผํ•œ๋‹ค - const batchObjectOptions = { - stroke: 'red', - fill: 'transparent', - strokeDashArray: [10, 4], - strokeWidth: 1, - lockMovementX: true, - lockMovementY: true, - lockRotation: true, - lockScalingX: true, - lockScalingY: true, - selectable: true, - name: POLYGON_TYPE.OBJECT_SURFACE, - originX: 'center', - originY: 'center', - } - - //๋„๋จธ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ์•„์›ƒ๋ผ์ธ ๋‚ธ๋‹ค - batchObjects.forEach((obj) => { - //๋„๋จธ์ผ๋•Œ - if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) { - const groupPoints = obj.groupPoints - const offsetObjects = offsetPolygon(groupPoints, 10) - const dormerOffset = new QPolygon(offsetObjects, batchObjectOptions) - dormerOffset.setViewLengthText(false) - canvas.add(dormerOffset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ - } else { - //๊ฐœ๊ตฌ, ๊ทธ๋ฆผ์ž์ผ๋•Œ - const points = obj.points - const offsetObjects = offsetPolygon(points, 10) - const offset = new QPolygon(offsetObjects, batchObjectOptions) - offset.setViewLengthText(false) - canvas.add(offset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ - } - }) - - const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id) - canvas.remove(isExistSurface) - - let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1 - setSurfaceShapePattern(roof, roofDisplay.column, true) //ํŒจํ„ด ๋ณ€๊ฒฝ - const offsetPoints = offsetPolygon(roof.points, offsetLength) //์•ˆ์ชฝ offset - //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ - - const surfaceId = uuidv4() - let isNorth = false - - if (canvasSetting.roofSizeSet !== '3') { - //๋ถ๋ฉด์ด ์žˆ์ง€๋งŒ - if (roof.directionText && roof.directionText.indexOf('ๅŒ—') > -1) { - //๋ถ์ชฝ์ผ๋•Œ ํ•ด๋‹น ์„œ๋ถ์„œ, ๋™๋ถ๋™์€ ์ œ์™ธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค - if (!(roof.directionText.indexOf('่ฅฟๅŒ—่ฅฟ') > -1 || roof.directionText.indexOf('ๆฑๅŒ—ๆฑ') > -1)) { - isNorth = true - } - } - } - //๋ชจ๋“ˆ์„ค์น˜๋ฉด ์ƒ์„ฑ - let setupSurface = new QPolygon(offsetPoints, { - stroke: 'red', - fill: 'rgba(255,255,255,0.1)', - strokeDashArray: [10, 4], - strokeWidth: 1, - lockMovementX: true, - lockMovementY: true, - lockRotation: true, - lockScalingX: true, - lockScalingY: true, - selectable: true, - parentId: roof.id, //๊ฐ€๋Œ€ ํด๋ฆฌ๊ณค์˜ ์ž„์‹œ ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์คŒ - name: POLYGON_TYPE.MODULE_SETUP_SURFACE, - flowDirection: roof.direction, - direction: roof.direction, - flipX: roof.flipX, - flipY: roof.flipY, - surfaceId: surfaceId, - originX: 'center', - originY: 'center', - modules: [], - roofMaterial: roof.roofMaterial, - trestleDetail: trestleDetail, - isNorth: isNorth, - perPixelTargetFind: true, - // angle: -compasDeg, - }) - - setupSurface.setViewLengthText(false) - canvas.add(setupSurface) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ - - //์ง€๋ถ•๋ฉด ์„ ํƒ ๊ธˆ์ง€ - roof.set({ - selectable: false, //์„ ํƒ ๊ธˆ์ง€ - // evented: false, //ํด๋ฆญ ์ด๋ฒคํŠธ๋„ ๊ธˆ์ง€ - }) - - canvas.renderAll() - - //๋ฐ”๋กœ ๋“ค์–ด์˜ฌ๋•Œ - const setupModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) - setupModules.forEach((obj) => { - canvas.bringToFront(obj) - }) - - //๋ชจ๋“ˆ์„ค์น˜๋ฉด ํด๋ฆญ์ด๋ฒคํŠธ - addTargetMouseEventListener('mousedown', setupSurface, function () { - toggleSelection(setupSurface) - }) - } - - let selectedModuleInstSurfaceArray = [] - - //์„ค์น˜ ๋ฒ”์œ„ ์ง€์ • ํด๋ฆญ ์ด๋ฒคํŠธ - const toggleSelection = (setupSurface) => { - const isExist = selectedModuleInstSurfaceArray.some((obj) => obj.parentId === setupSurface.parentId) - //์ตœ์ดˆ ์„ ํƒ์ผ๋•Œ - if (!isExist) { - //์„ค์น˜๋ฉด์ด ๋ถ๋ฉด์ด๊ณ  ๋ถ๋ฉด์„ค์น˜ ํ—ˆ์šฉ์ ์ด ์•„๋‹ˆ๋ฉด - if (setupSurface.isNorth && !saleStoreNorthFlg) { - swalFire({ text: getMessage('module.not.batch.north'), icon: 'warning' }) + if (tabNum == 3) { + if (!roof) { return } - //๊ธฐ๋ณธ ์„ ํƒ์ด๋ž‘ ์ŠคํŠธ๋กœํฌ ๊ตต๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ์„ ํƒ ์•ˆ๋จ์œผ๋กœ ๋ด„ - setupSurface.set({ - ...setupSurface, - strokeWidth: 3, - strokeDashArray: [0], - fill: 'rgba(255,255,255,0.1)', - }) - canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ - //์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š”๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ + //๋„๋จธ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ์•„์›ƒ๋ผ์ธ ๋‚ธ๋‹ค + const batchObjects = canvas + ?.getObjects() + .filter( + (obj) => + obj.name === BATCH_TYPE.OPENING || + obj.name === BATCH_TYPE.SHADOW || + obj.name === BATCH_TYPE.TRIANGLE_DORMER || + obj.name === BATCH_TYPE.PENTAGON_DORMER, + ) //๋„๋จธs ๊ฐ์ฒด - canvas?.renderAll() - selectedModuleInstSurfaceArray.push(setupSurface) - setCurrentObject({ name: 'moduleSetupSurface', arrayData: [...selectedModuleInstSurfaceArray] }) - } else { - //์„ ํƒํ›„ ์žฌ์„ ํƒํ•˜๋ฉด ์„ ํƒ์•ˆ๋จ์œผ๋กœ ๋ณ€๊ฒฝ - setupSurface.set({ - ...setupSurface, + //๋„๋จธ๋„ ์™ธ๊ณฝ์„ ๋”ฐ์•ผํ•œ๋‹ค + const batchObjectOptions = { + stroke: 'red', + fill: 'transparent', + strokeDashArray: [10, 4], + strokeWidth: 1, + lockMovementX: true, + lockMovementY: true, + lockRotation: true, + lockScalingX: true, + lockScalingY: true, + selectable: true, + name: POLYGON_TYPE.OBJECT_SURFACE, + originX: 'center', + originY: 'center', + } + + //๋„๋จธ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ์•„์›ƒ๋ผ์ธ ๋‚ธ๋‹ค + batchObjects.forEach((obj) => { + //๋„๋จธ์ผ๋•Œ + if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) { + const groupPoints = obj.groupPoints + const offsetObjects = offsetPolygon(groupPoints, 10) + const dormerOffset = new QPolygon(offsetObjects, batchObjectOptions) + dormerOffset.setViewLengthText(false) + canvas.add(dormerOffset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ + } else { + //๊ฐœ๊ตฌ, ๊ทธ๋ฆผ์ž์ผ๋•Œ + const points = obj.points + const offsetObjects = offsetPolygon(points, 10) + const offset = new QPolygon(offsetObjects, batchObjectOptions) + offset.setViewLengthText(false) + canvas.add(offset) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ + } + }) + + const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id) + canvas.remove(isExistSurface) + + let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1 + setSurfaceShapePattern(roof, roofDisplay.column, true) //ํŒจํ„ด ๋ณ€๊ฒฝ + const offsetPoints = offsetPolygon(roof.points, offsetLength) //์•ˆ์ชฝ offset + //๋ชจ๋“ˆ์„ค์น˜์˜์—ญ?? ์ƒ์„ฑ + + const surfaceId = uuidv4() + let isNorth = false + + if (canvasSetting.roofSizeSet !== '3') { + //๋ถ๋ฉด์ด ์žˆ์ง€๋งŒ + if (roof.directionText && roof.directionText.indexOf('ๅŒ—') > -1) { + //๋ถ์ชฝ์ผ๋•Œ ํ•ด๋‹น ์„œ๋ถ์„œ, ๋™๋ถ๋™์€ ์ œ์™ธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค + if (!(roof.directionText.indexOf('่ฅฟๅŒ—่ฅฟ') > -1 || roof.directionText.indexOf('ๆฑๅŒ—ๆฑ') > -1)) { + isNorth = true + } + } + } + //๋ชจ๋“ˆ์„ค์น˜๋ฉด ์ƒ์„ฑ + let setupSurface = new QPolygon(offsetPoints, { + stroke: 'red', fill: 'rgba(255,255,255,0.1)', strokeDashArray: [10, 4], strokeWidth: 1, + lockMovementX: true, + lockMovementY: true, + lockRotation: true, + lockScalingX: true, + lockScalingY: true, + selectable: true, + parentId: roof.id, //๊ฐ€๋Œ€ ํด๋ฆฌ๊ณค์˜ ์ž„์‹œ ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์คŒ + name: POLYGON_TYPE.MODULE_SETUP_SURFACE, + flowDirection: roof.direction, + direction: roof.direction, + flipX: roof.flipX, + flipY: roof.flipY, + surfaceId: surfaceId, + originX: 'center', + originY: 'center', + modules: [], + roofMaterial: roof.roofMaterial, + trestleDetail: trestleDetail, + isNorth: isNorth, + perPixelTargetFind: true, + // angle: -compasDeg, }) - canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ - //ํด๋ฆฌ๊ณค์— ์ปค์Šคํ…€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ•จ - const removeIndex = setupSurface.parentId - const removeArrayIndex = selectedModuleInstSurfaceArray.findIndex((obj) => obj.parentId === removeIndex) - selectedModuleInstSurfaceArray.splice(removeArrayIndex, 1) - setCurrentObject({ name: 'moduleSetupSurface', arrayData: [...selectedModuleInstSurfaceArray] }) + setupSurface.setViewLengthText(false) + canvas.add(setupSurface) //๋ชจ๋“ˆ์„ค์น˜๋ฉด ๋งŒ๋“ค๊ธฐ + + //์ง€๋ถ•๋ฉด ์„ ํƒ ๊ธˆ์ง€ + roof.set({ + selectable: false, //์„ ํƒ ๊ธˆ์ง€ + // evented: false, //ํด๋ฆญ ์ด๋ฒคํŠธ๋„ ๊ธˆ์ง€ + }) + + canvas.renderAll() + + //๋ฐ”๋กœ ๋“ค์–ด์˜ฌ๋•Œ + const setupModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + setupModules.forEach((obj) => { + canvas.bringToFront(obj) + }) + + //๋ชจ๋“ˆ์„ค์น˜๋ฉด ํด๋ฆญ์ด๋ฒคํŠธ + addTargetMouseEventListener('mousedown', setupSurface, function () { + toggleSelection(setupSurface) + }) } - canvas?.renderAll() - setModuleSetupSurface([...selectedModuleInstSurfaceArray]) + let selectedModuleInstSurfaceArray = [] + + //์„ค์น˜ ๋ฒ”์œ„ ์ง€์ • ํด๋ฆญ ์ด๋ฒคํŠธ + const toggleSelection = (setupSurface) => { + const isExist = selectedModuleInstSurfaceArray.some((obj) => obj.parentId === setupSurface.parentId) + //์ตœ์ดˆ ์„ ํƒ์ผ๋•Œ + if (!isExist) { + //์„ค์น˜๋ฉด์ด ๋ถ๋ฉด์ด๊ณ  ๋ถ๋ฉด์„ค์น˜ ํ—ˆ์šฉ์ ์ด ์•„๋‹ˆ๋ฉด + if (setupSurface.isNorth && !saleStoreNorthFlg) { + swalFire({ text: getMessage('module.not.batch.north'), icon: 'warning' }) + return + } + + //๊ธฐ๋ณธ ์„ ํƒ์ด๋ž‘ ์ŠคํŠธ๋กœํฌ ๊ตต๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ์„ ํƒ ์•ˆ๋จ์œผ๋กœ ๋ด„ + setupSurface.set({ + ...setupSurface, + strokeWidth: 3, + strokeDashArray: [0], + fill: 'rgba(255,255,255,0.1)', + }) + canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ + //์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š”๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ + + canvas?.renderAll() + selectedModuleInstSurfaceArray.push(setupSurface) + setCurrentObject({ name: 'moduleSetupSurface', arrayData: [...selectedModuleInstSurfaceArray] }) + } else { + //์„ ํƒํ›„ ์žฌ์„ ํƒํ•˜๋ฉด ์„ ํƒ์•ˆ๋จ์œผ๋กœ ๋ณ€๊ฒฝ + setupSurface.set({ + ...setupSurface, + fill: 'rgba(255,255,255,0.1)', + strokeDashArray: [10, 4], + strokeWidth: 1, + }) + canvas.discardActiveObject() // ๊ฐ์ฒด์˜ ํ™œ์„ฑ ์ƒํƒœ ํ•ด์ œ + + //ํด๋ฆฌ๊ณค์— ์ปค์Šคํ…€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ•จ + const removeIndex = setupSurface.parentId + const removeArrayIndex = selectedModuleInstSurfaceArray.findIndex((obj) => obj.parentId === removeIndex) + selectedModuleInstSurfaceArray.splice(removeArrayIndex, 1) + setCurrentObject({ name: 'moduleSetupSurface', arrayData: [...selectedModuleInstSurfaceArray] }) + } + + canvas?.renderAll() + setModuleSetupSurface([...selectedModuleInstSurfaceArray]) + } } //๋ชจ๋“ˆ,ํšŒ๋กœ์—์„œ ๋‹ค๋ฅธ๋ฉ”๋‰ด -> ๋ฐฐ์น˜๋ฉด์œผ๋กœ ๊ฐˆ ๊ฒฝ์ˆ˜ ์ดˆ๊ธฐํ™” diff --git a/src/hooks/module/useModuleSelection.js b/src/hooks/module/useModuleSelection.js index 3208a71a..0f609eeb 100644 --- a/src/hooks/module/useModuleSelection.js +++ b/src/hooks/module/useModuleSelection.js @@ -114,7 +114,9 @@ export function useModuleSelection(props) { } //๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋“ˆ ์ž๋™ ์„ ํƒ + //1๋ฒˆ ๋ชจ๋“ˆ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ useEffect(() => { + //๋ชจ๋“ˆ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋˜๋ฉด ๋ชจ๋“ˆ ์„ ํƒ์œผ๋กœ ์ด๋ฒคํŠธ if (moduleList.length > 0 && isObjectNotEmpty(moduleSelectionData.module)) { handleChangeModule(moduleSelectionData.module) } diff --git a/src/hooks/module/useModuleTabContents.js b/src/hooks/module/useModuleTabContents.js index 7f1961bb..7afcfbff 100644 --- a/src/hooks/module/useModuleTabContents.js +++ b/src/hooks/module/useModuleTabContents.js @@ -29,7 +29,7 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab const [roofBaseParams, setRoofBaseParams] = useState({}) //์ง€๋ถ•๋ฐ‘๋ฐ”ํƒ• ๊ด€๋ จ apiํ˜ธ์ถœ ํŒŒ๋ผ๋ฉ”ํ„ฐ const moduleSelectionInitParams = useRecoilValue(moduleSelectionInitParamsState) //๋ชจ๋“ˆ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ex) ๋ฉด์กฐ๋„, ๋†’์ด๋“ฑ๋“ฑ - const moduleSelectionInitOriginData = useRef(moduleSelectionInitParams) + const moduleSelectionInitOriginData = useRef({}) const { getTrestleList, getConstructionList } = useMasterController() @@ -95,8 +95,6 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab }) setRaftCodes(raftCodeList) - console.log('addRoof', addRoof) - if (addRoof.raft) { setSelectedRaftBase({ ...selectedRaftBase, @@ -155,6 +153,7 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab useEffect(() => { //lengbase๋Š” ๋ฌด์กฐ๊ฑด ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•˜๊ณ  ์ตœ์ดˆ์— ์‹คํ–‰ ๋ฐฉ์ง€ if (selectedModules) { + //์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ //๊ฐ€๋Œ€๋ฉ”์ด์ปค ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋งŒ๋“ค๊ธฐ setTrestleParams({ moduleTpCd: selectedModules.itemTp, @@ -174,6 +173,7 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab //๊ฐ€๋Œ€๋ฉ”์ด์ปค ๋ณ€๊ฒฝ ํ•จ์ˆ˜ const handleChangeTrestle = (option) => { + option.raftBaseCd = selectedRaftBase.raftBaseCd setSelectedTrestle(option) //์„ ํƒ๊ฐ’ ์ €์žฅ setConstructionParams({ ...trestleParams, trestleMkrCd: option.trestleMkrCd, constMthdCd: '', roofBaseCd: '' }) } @@ -266,32 +266,30 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab //๊ณต๋ฒ• ์„ ํƒ์‹œ ์ดํ›„ ํ”„๋กœ์„ธ์Šค useEffect(() => { if (isObjectNotEmpty(selectedRoofBase) && isObjectNotEmpty(selectedConstruction)) { - if (tabIndex === roofTab) { - const common = { ...moduleSelectionInitParams } - const module = { ...selectedModules } - const newRoofConstructions = { - roofIndex: tabIndex, - addRoof: addRoof, - trestle: selectedRoofBase, - construction: selectedConstruction, - } + const common = { ...moduleSelectionInitParams } + const module = { ...selectedModules } + const newRoofConstructions = { + roofIndex: tabIndex, + addRoof: addRoof, + trestle: selectedRoofBase, + construction: selectedConstruction, + } - const index = tempModuleSelectionData.roofConstructions.findIndex((obj) => obj.roofIndex === tabIndex) + const index = tempModuleSelectionData.roofConstructions.findIndex((obj) => obj.roofIndex === tabIndex) - if (index > -1) { - const newArray = [ - ...tempModuleSelectionData.roofConstructions.slice(0, index), - newRoofConstructions, - ...tempModuleSelectionData.roofConstructions.slice(index + 1), - ] - setTempModuleSelectionData({ common: common, module: module, roofConstructions: newArray }) - } else { - setTempModuleSelectionData({ - common: common, - module: module, - roofConstructions: [...tempModuleSelectionData.roofConstructions, { ...newRoofConstructions }], - }) - } + if (index > -1) { + const newArray = [ + ...tempModuleSelectionData.roofConstructions.slice(0, index), + newRoofConstructions, + ...tempModuleSelectionData.roofConstructions.slice(index + 1), + ] + setTempModuleSelectionData({ common: common, module: module, roofConstructions: newArray }) + } else { + setTempModuleSelectionData({ + common: common, + module: module, + roofConstructions: [...tempModuleSelectionData.roofConstructions, { ...newRoofConstructions }], + }) } } }, [selectedConstruction]) @@ -299,8 +297,6 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab //๊ฑฐ๋Œ€๋ฉ”์ด์ปค, ๊ณต๋ฒ•, ์ง€๋ถ•๋ฐ‘๋ฐ”ํƒ• api ์กฐํšŒ const getModuleOptionsListData = async (params, type) => { const optionsList = await getTrestleList(params) - console.log('optionsList', optionsList) - if (optionsList.data.length > 0) { if (type === 'trestle') { //๊ฐ€๋Œ€ ๋ฉ”์ด์ปค์ผ๋•Œ @@ -340,6 +336,10 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab resetSelected() } } + + if (moduleSelectionInitParams.moduleItemId && moduleSelectionInitParams.moduleTpCd) { + moduleSelectionInitOriginData.current = moduleSelectionInitParams + } }, [moduleSelectionInitParams]) const handleHajebichiAndLength = (e, type) => { diff --git a/src/hooks/object/useObjectBatch.js b/src/hooks/object/useObjectBatch.js index 44ede007..311708d2 100644 --- a/src/hooks/object/useObjectBatch.js +++ b/src/hooks/object/useObjectBatch.js @@ -26,7 +26,7 @@ export function useObjectBatch({ isHidden, setIsHidden }) { useEffect(() => { if (canvas) { - dbClickEvent() + // dbClickEvent() } return () => { diff --git a/src/hooks/surface/useSurfaceShapeBatch.js b/src/hooks/surface/useSurfaceShapeBatch.js index 5c7b7f97..10201c8c 100644 --- a/src/hooks/surface/useSurfaceShapeBatch.js +++ b/src/hooks/surface/useSurfaceShapeBatch.js @@ -85,6 +85,10 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { canvas?.remove(...canvas?.getObjects().filter((obj) => obj.name === MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH_TEMP)) points = getSurfaceShape(surfaceId, pointer, { length1, length2, length3, length4, length5 }) + console.log('surfaceRefs.xInversion', surfaceRefs.xInversion) + console.log('surfaceRefs.yInversion', surfaceRefs.yInversion) + console.log('surfaceRefs.rotate', surfaceRefs.rotate) + const options = { fill: 'transparent', stroke: 'black', @@ -100,7 +104,7 @@ export function useSurfaceShapeBatch({ isHidden, setIsHidden }) { name: MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH_TEMP, flipX: surfaceRefs.yInversion, flipY: surfaceRefs.xInversion, - angle: surfaceRefs.rotate, + angle: Math.abs(surfaceRefs.rotate), originX: 'center', originY: 'center', pitch: globalPitch, diff --git a/src/locales/ko.json b/src/locales/ko.json index d9830264..2cf23efe 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -858,6 +858,7 @@ "surface.shape.validate.size.1to2": "โ‘ ๊ธธ์ด๋Š” โ‘ก๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.1to3": "โ‘ ๊ธธ์ด๋Š” โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.1to23": "โ‘ ๊ธธ์ด๋Š” โ‘ก+โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", + "surface.shape.validate.size.1to23low": "โ‘ก+โ‘ข๊ธธ์ด๋Š” โ‘ ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.2to3": "โ‘ก๊ธธ์ด๋Š” โ‘ข๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.3to2": "โ‘ข๊ธธ์ด๋Š” โ‘ก๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", "surface.shape.validate.size.3to4": "โ‘ข๊ธธ์ด๋Š” โ‘ฃ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.", From 3fc8a562749e2d878a012150cc13b0ad3cc601e9 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: Fri, 7 Feb 2025 20:54:15 +0900 Subject: [PATCH 173/213] =?UTF-8?q?-=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/CircuitTrestleSetting.jsx | 42 +++---- .../step/PowerConditionalSelect.jsx | 8 +- .../floor-plan/modal/module/PanelEdit.jsx | 12 ++ .../modal/panelBatch/PanelBatchStatistics.jsx | 12 +- src/hooks/common/useMasterController.js | 10 -- src/hooks/module/useModule.js | 91 +-------------- src/hooks/useCirCuitTrestle.js | 108 +++++++++++++++++- src/locales/ja.json | 1 + src/locales/ko.json | 1 + 9 files changed, 156 insertions(+), 129 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index c09687b6..0ddc219b 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -46,7 +46,7 @@ export default function CircuitTrestleSetting({ id }) { // ํšŒ๋กœํ• ๋‹น(์Šนํ•ฉ์„ค์ •)์—์„œ ์„ ํƒ๋œ ๊ฐ’๋“ค์„ ์ €์žฅํ•  ์ƒํƒœ ์ถ”๊ฐ€ const [selectedStepUpValues, setSelectedStepUpValues] = useState({}) const [getStepUpSelections, setGetStepUpSelections] = useState(null) - const { trigger: setCircuitData } = useCanvasPopupStatusController(4) + // const { trigger: setCircuitData } = useCanvasPopupStatusController(4) // const [stepUpListData, setStepUpListData] = useRecoilState(stepUpListDataState) const [stepUpListData, setStepUpListData] = useState([]) const [seletedOption, setSeletedOption] = useState(null) @@ -71,19 +71,19 @@ export default function CircuitTrestleSetting({ id }) { getModuleList, removeNotAllocationModules, } = useCircuitTrestle() - + // const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2) useEffect(() => { if (!managementState) { setManagementState(managementStateLoaded) } - setCircuitData({ - makers, - selectedMaker, - series, - models, - selectedModels, - pcsCheck, - }) + // setCircuitData({ + // makers, + // selectedMaker, + // series, + // models, + // selectedModels, + // pcsCheck, + // }) }, []) // ์ˆ˜๋™ํ• ๋‹น ์‹œ ๋ชจ๋“ˆ ์‚ญ์ œ @@ -137,7 +137,7 @@ export default function CircuitTrestleSetting({ id }) { ...getOptYn(), useModuleItemList: getUseModuleItemList(), roofSurfaceList: getRoofSurfaceList(), - pcsItemList: getPcsItemList(), + pcsItemList: pcsItemList, } // ์ถ”์ฒœ ๋ชฉ๋ก ์„ ํƒ setSelectedModels(pcsItemList) @@ -245,10 +245,6 @@ export default function CircuitTrestleSetting({ id }) { // ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ ์ถ”์ฒœ ๋ชฉ๋ก ์กฐํšŒ getPcsAutoRecommendList(params).then((res) => { if (res.data?.pcsItemList) { - const itemList = models.filter((model) => { - return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) - }) - let pcsItemList = [] let pcsObj = {} models.forEach((model) => { @@ -353,21 +349,25 @@ export default function CircuitTrestleSetting({ id }) { // ์ด์ „ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ const onClickPrev = () => { - setAllocationType(ALLOCATION_TYPE.AUTO) + // setAllocationType(ALLOCATION_TYPE.AUTO) swalFire({ text: 'ํ• ๋‹นํ•œ ํšŒ๋กœ ๋ฒˆํ˜ธ๊ฐ€ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.', type: 'alert', icon: 'warning', confirmFn: () => { - const circuitModules = canvas - .getObjects() - .filter((obj) => obj.name === 'module' && selectedModels.map((model) => model.id).includes(obj.circuit?.circuitInfo?.id)) + const circuitModules = canvas.getObjects().filter((obj) => obj.name === 'module') canvas.remove(...circuitModules.map((module) => module.circuit)) circuitModules.forEach((obj) => { obj.circuit = null obj.pcsItemId = null }) - setAllocationType(ALLOCATION_TYPE.AUTO) + + if (allocationType === ALLOCATION_TYPE.PASSIVITY) { + setAllocationType(ALLOCATION_TYPE.AUTO) + } else { + setTabNum(1) + } + canvas.renderAll() }, }) @@ -513,7 +513,7 @@ export default function CircuitTrestleSetting({ id }) { )} {tabNum === 2 && (
- {/* )} - {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet === 3 && ( + {canvasSetting.roofSizeSet && canvasSetting.roofSizeSet == 3 && ( <>
diff --git a/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx b/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx index e9f4468c..acd2291c 100644 --- a/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx +++ b/src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx @@ -201,6 +201,7 @@ export default function RoofAllocationSetting(props) { onChange={(e) => { handleChangePitch(e, index) }} + value={currentAngleType === 'slope' ? roof.pitch : roof.angle} defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} />
diff --git a/src/hooks/common/useRoofFn.js b/src/hooks/common/useRoofFn.js index 2b81ea05..95af888c 100644 --- a/src/hooks/common/useRoofFn.js +++ b/src/hooks/common/useRoofFn.js @@ -307,5 +307,32 @@ export function useRoofFn() { return area.points.map((p) => fabric.util.transformPoint({ x: p.x - area.pathOffset.x, y: p.y - area.pathOffset.y }, area.calcTransformMatrix())) } - return { setSurfaceShapePattern, removeRoofMaterial, removeAllRoofMaterial, moveRoofMaterial } + const removeOuterLines = (currentMousePos) => { + const roofBase = canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.ROOF) + .filter((roof) => roof.inPolygon(currentMousePos)) + + if (roofBase.length === 0) { + return + } + + const roof = roofBase[0] + const wall = roof.wall + + canvas.remove(roof) + canvas.remove(wall) + + const allRoofObject = canvas + .getObjects() + .filter((obj) => /*obj !== roof && obj !== wall &&*/ obj.attributes?.roofId === roof.id || obj.parentId === roof.id || obj.parentId === wall.id) + + allRoofObject.forEach((obj) => { + canvas.remove(obj) + }) + + canvas.renderAll() + } + + return { setSurfaceShapePattern, removeRoofMaterial, removeAllRoofMaterial, moveRoofMaterial, removeOuterLines } } diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index ae8c78a0..c4fe1f39 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -495,7 +495,12 @@ export function useRoofAllocationSetting(id) { } const handleChangePitch = (e, index) => { - const value = e.target.value + let value = e.target.value + + const reg = /^[0-9]+(\.[0-9]{0,1})?$/ + if (!reg.test(value)) { + value = value.substring(0, value.length - 1) + } const newRoofList = currentRoofList.map((roof, idx) => { if (idx === index) { const result = diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index bb3c1683..38cdedc1 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -68,7 +68,7 @@ export function useContextMenu() { const { settingsData, setSettingsDataSave } = useCanvasSetting() const { swalFire } = useSwal() const { alignModule, modulesRemove, moduleRoofRemove } = useModule() - const { removeRoofMaterial, removeAllRoofMaterial, moveRoofMaterial } = useRoofFn() + const { removeRoofMaterial, removeAllRoofMaterial, moveRoofMaterial, removeOuterLines } = useRoofFn() const currentMenuSetting = () => { switch (currentMenu) { @@ -150,7 +150,9 @@ export function useContextMenu() { { id: 'wallLineRemove', name: getMessage('contextmenu.wallline.remove'), - fn: () => deleteOuterLineObject(), + fn: (currentMousePos) => { + removeOuterLines(currentMousePos) + }, }, ], [ From dc716809f2aa9825bd9645233366c2df8d81ee6d Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Sat, 8 Feb 2025 16:51:32 +0900 Subject: [PATCH 188/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20popupstatus=20hooks?= =?UTF-8?q?=20=EA=B5=AC=EC=A1=B0=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/CanvasFrame.jsx | 3 + .../common/useCanvasPopupStatusController.js | 132 +++++++++++------- 2 files changed, 83 insertions(+), 52 deletions(-) diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index bc0b403b..5b3581e8 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -25,6 +25,7 @@ import { selectedModelsState, seriesState, } from '@/store/circuitTrestleAtom' +import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' export default function CanvasFrame() { const canvasRef = useRef(null) @@ -43,6 +44,7 @@ export default function CanvasFrame() { const resetModelsState = useResetRecoilState(modelsState) const resetSelectedModelsState = useResetRecoilState(selectedModelsState) const resetPcsCheckState = useResetRecoilState(pcsCheckState) + const { handleModuleSelectionTotal } = useCanvasPopupStatusController() const loadCanvas = () => { if (canvas) { canvas?.clear() // ์บ”๋ฒ„์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. @@ -59,6 +61,7 @@ export default function CanvasFrame() { useEffect(() => { loadCanvas() resetRecoilData() + Object.keys(currentCanvasPlan).length > 0 && handleModuleSelectionTotal() }, [currentCanvasPlan, canvas]) useEffect(() => { diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index e4b2cc46..e8584950 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -1,12 +1,11 @@ 'use client' -import { useEffect } from 'react' import { useRecoilState, useRecoilValue } from 'recoil' import useSWR from 'swr' import useSWRMutation from 'swr/mutation' import { useAxios } from '../useAxios' import { unescapeString } from '@/util/common-utils' -import { moduleSelectionDataState } from '@/store/selectedModuleOptions' +import { moduleSelectionDataState, moduleSelectionTotalState } from '@/store/selectedModuleOptions' import { compasDegAtom } from '@/store/orientationAtom' import { currentCanvasPlanState } from '@/store/canvasAtom' @@ -17,62 +16,91 @@ export function useCanvasPopupStatusController(param = 1) { const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) const { getFetcher, postFetcher } = useAxios() + const [moduleSelectionTotal, setModuleSelectionTotal] = useRecoilState(moduleSelectionTotalState) + const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) // console.log('๐Ÿš€ ~ Orientation ~ currentCanvasPlan:', currentCanvasPlan) - const { - data: popupStatus, - error, - isLoading, - } = useSWR( - popupType ? `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupType}` : null, - getFetcher, - ) + /** + * ํŒ์—… ์ƒํƒœ ์กฐํšŒ + * @param {number} popupTypeParam + * @returns + */ + const getModuleSelection = async (popupTypeParam) => { + const { + data: popupStatus, + error, + isLoading, + } = useSWR( + `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupTypeParam}`, + getFetcher, + ) - useEffect(() => { - // console.log('๐Ÿš€ ~ useEffect ~ popupStatus:', popupStatus) - if (popupStatus) { - switch (parseInt(popupStatus?.popupType)) { - case 1: - setCompasDeg(popupStatus.popupStatus) - break - case 2: - setModuleSelectionDataStore(JSON.parse(unescapeString(popupStatus.popupStatus))) - break - case 3: - break - case 4: - break - case 5: - break - case 6: - break - default: - } - } else { - switch (popupType) { - case 1: - setCompasDeg(0) - break - case 2: - setModuleSelectionDataStore({ - common: {}, - roofConstructions: [], - }) - break - case 3: - break - case 4: - break - case 5: - break - case 6: - break - default: + return popupStatus + } + + /** + * ์ „์ฒด ํŒ์—… ์ƒํƒœ ์กฐํšŒ + * ์กฐํšŒ ํ›„ ์ „์ฒด ๋ฐ์ดํ„ฐ recoil์— ์ €์žฅ + */ + const handleModuleSelectionTotal = async () => { + for (let i = 1; i < 3; i++) { + const result = await getModuleSelection(i) + // setModuleSelectionTotal((prev) => ({ ...prev, [i]: JSON.parse(unescapeString(result.popupStatus)) })) + if (i === 1) { + setCompasDeg(result.popupStatus) + } else if (i === 2) { + setModuleSelectionDataStore(JSON.parse(unescapeString(result.popupStatus))) } } - }, [popupStatus]) + } + // useEffect(() => { + // if (popupStatus) { + // switch (parseInt(popupStatus?.popupType)) { + // case 1: + // setCompasDeg(popupStatus.popupStatus) + // break + // case 2: + // setModuleSelectionDataStore(JSON.parse(unescapeString(popupStatus.popupStatus))) + // break + // case 3: + // break + // case 4: + // break + // case 5: + // break + // case 6: + // break + // default: + // } + // } else { + // switch (popupType) { + // case 1: + // setCompasDeg(0) + // break + // case 2: + // setModuleSelectionDataStore({ + // common: {}, + // roofConstructions: [], + // }) + // break + // case 3: + // break + // case 4: + // break + // case 5: + // break + // case 6: + // break + // default: + // } + // } + // }, [popupStatus]) + + /** + * ํŒ์—… ์ƒํƒœ ์ €์žฅ + */ const { trigger, isMutating } = useSWRMutation( `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupType}`, (url, { arg }) => { @@ -86,5 +114,5 @@ export function useCanvasPopupStatusController(param = 1) { }, ) - return { trigger } + return { handleModuleSelectionTotal, trigger } } From 6966e694feeb182f6666985be42aeabc6ca5e5ae Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Sat, 8 Feb 2025 16:56:45 +0900 Subject: [PATCH 189/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EC=98=A4=ED=83=80?= =?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/common/useCanvasPopupStatusController.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index e8584950..4bca9c9d 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -16,8 +16,6 @@ export function useCanvasPopupStatusController(param = 1) { const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) const { getFetcher, postFetcher } = useAxios() - const [moduleSelectionTotal, setModuleSelectionTotal] = useRecoilState(moduleSelectionTotalState) - const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) // console.log('๐Ÿš€ ~ Orientation ~ currentCanvasPlan:', currentCanvasPlan) From 05ce0c11e308df8d52bab8d6dcded8caa0a6feda Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Sat, 8 Feb 2025 17:05:37 +0900 Subject: [PATCH 190/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=ED=95=A8=EC=88=98=20=EA=B5=AC=EC=A1=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/useCanvasPopupStatusController.js | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index 4bca9c9d..5e560136 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -14,7 +14,7 @@ export function useCanvasPopupStatusController(param = 1) { const [compasDeg, setCompasDeg] = useRecoilState(compasDegAtom) const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) - const { getFetcher, postFetcher } = useAxios() + const { get, getFetcher, postFetcher } = useAxios() const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) // console.log('๐Ÿš€ ~ Orientation ~ currentCanvasPlan:', currentCanvasPlan) @@ -25,16 +25,20 @@ export function useCanvasPopupStatusController(param = 1) { * @returns */ const getModuleSelection = async (popupTypeParam) => { - const { - data: popupStatus, - error, - isLoading, - } = useSWR( - `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupTypeParam}`, - getFetcher, - ) + // const { + // data: popupStatus, + // error, + // isLoading, + // } = useSWR( + // `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupTypeParam}`, + // getFetcher, + // ) - return popupStatus + const res = await get({ + url: `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupTypeParam}`, + }) + + return res } /** From 8a2ad0c273d2ac4449e7728ec1e2812dd5c7b976 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 17:07:06 +0900 Subject: [PATCH 191/213] =?UTF-8?q?=EB=B3=80=EB=B3=84=EB=A1=9C=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useRoofFn.js | 5 ++++- src/hooks/roofcover/usePropertiesSetting.js | 13 +++++++------ src/hooks/roofcover/useRoofAllocationSetting.js | 5 ++++- src/hooks/roofcover/useRoofShapeSetting.js | 14 ++++++++++---- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/hooks/common/useRoofFn.js b/src/hooks/common/useRoofFn.js index 95af888c..54ebaecb 100644 --- a/src/hooks/common/useRoofFn.js +++ b/src/hooks/common/useRoofFn.js @@ -1,10 +1,11 @@ -import { useRecoilValue } from 'recoil' +import { useRecoilValue, useResetRecoilState } from 'recoil' import { canvasState, currentObjectState } from '@/store/canvasAtom' import { selectedRoofMaterialSelector } from '@/store/settingAtom' import { ROOF_MATERIAL_LAYOUT } from '@/components/floor-plan/modal/placementShape/PlacementShapeSetting' import { POLYGON_TYPE } from '@/common/common' import { useEvent } from '@/hooks/useEvent' import { useLine } from '@/hooks/useLine' +import { outerLinePointsState } from '@/store/outerLineAtom' const ROOF_COLOR = { 0: 'rgb(199,240,213)', @@ -17,6 +18,7 @@ export function useRoofFn() { const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) const currentObject = useRecoilValue(currentObjectState) const { addCanvasMouseEventListener, initEvent } = useEvent() + const resetPoints = useResetRecoilState(outerLinePointsState) const { addPitchText } = useLine() //๋ฉดํ˜•์ƒ ์„ ํƒ ํด๋ฆญ์‹œ ์ง€๋ถ• ํŒจํ„ด ์ž…ํžˆ๊ธฐ @@ -332,6 +334,7 @@ export function useRoofFn() { }) canvas.renderAll() + resetPoints() } return { setSurfaceShapePattern, removeRoofMaterial, removeAllRoofMaterial, moveRoofMaterial, removeOuterLines } diff --git a/src/hooks/roofcover/usePropertiesSetting.js b/src/hooks/roofcover/usePropertiesSetting.js index 425f0642..57aadd6d 100644 --- a/src/hooks/roofcover/usePropertiesSetting.js +++ b/src/hooks/roofcover/usePropertiesSetting.js @@ -7,6 +7,9 @@ import { usePolygon } from '@/hooks/usePolygon' import { useLine } from '@/hooks/useLine' import { outerLinePointsState } from '@/store/outerLineAtom' import { usePopup } from '@/hooks/usePopup' +import PropertiesSetting from '@/components/floor-plan/modal/outerlinesetting/PropertiesSetting' +import RoofShapeSetting from '@/components/floor-plan/modal/roofShape/RoofShapeSetting' +import RoofAllocationSetting from '@/components/floor-plan/modal/roofAllocation/RoofAllocationSetting' // ์™ธ๋ฒฝ์„  ์†์„ฑ ์„ค์ • export function usePropertiesSetting(id) { @@ -19,7 +22,7 @@ export function usePropertiesSetting(id) { const { addPolygonByLines } = usePolygon() const { removeLine, hideLine } = useLine() - const { closePopup } = usePopup() + const { addPopup, closePopup } = usePopup() useEffect(() => { const lines = canvas.getObjects().filter((obj) => obj.name === 'outerLine') @@ -134,7 +137,8 @@ export function usePropertiesSetting(id) { }) }) canvas.discardActiveObject() - closePopup(id) + // closePopup(id) + addPopup(id, 1, ) return } @@ -157,10 +161,7 @@ export function usePropertiesSetting(id) { setPoints([]) canvas.renderAll() roof.drawHelpLine() - - closePopup(id) - return - } else { + addPopup(id, 1, ) return } } diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index c4fe1f39..dc14f2b0 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -1,4 +1,4 @@ -import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' +import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil' import { canvasState, currentAngleTypeSelector, currentMenuState, currentObjectState } from '@/store/canvasAtom' import { useEffect, useRef, useState } from 'react' import { useAxios } from '@/hooks/useAxios' @@ -26,6 +26,7 @@ import { globalLocaleStore } from '@/store/localeAtom' import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util' import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' +import { outerLinePointsState } from '@/store/outerLineAtom' // ์ง€๋ถ•๋ฉด ํ• ๋‹น export function useRoofAllocationSetting(id) { @@ -55,6 +56,7 @@ export function useRoofAllocationSetting(id) { const { setSurfaceShapePattern } = useRoofFn() const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState) + const resetPoints = useResetRecoilState(outerLinePointsState) useEffect(() => { setCurrentRoofList(roofList) @@ -256,6 +258,7 @@ export function useRoofAllocationSetting(id) { addPopup(popupId, 1, ) } else { apply() + resetPoints() } } diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js index 125d3d91..2a36e23e 100644 --- a/src/hooks/roofcover/useRoofShapeSetting.js +++ b/src/hooks/roofcover/useRoofShapeSetting.js @@ -10,6 +10,7 @@ import { outerLineFixState } from '@/store/outerLineAtom' import { useSwal } from '@/hooks/useSwal' import { usePopup } from '@/hooks/usePopup' import { getChonByDegree } from '@/util/canvas-util' +import RoofAllocationSetting from '@/components/floor-plan/modal/roofAllocation/RoofAllocationSetting' // ์ง€๋ถ•ํ˜•์ƒ ์„ค์ • export function useRoofShapeSetting(id) { @@ -46,7 +47,7 @@ export function useRoofShapeSetting(id) { const jerkinHeadPitchRef = useRef(null) const history = useRef([]) - const { closePopup } = usePopup() + const { closePopup, addPopup } = usePopup() useEffect(() => { pitchRef.current = currentAngleType === ANGLE_TYPE.SLOPE ? pitch : getChonByDegree(pitch) @@ -436,7 +437,7 @@ export function useRoofShapeSetting(id) { canvas?.renderAll() roof.drawHelpLine() isFixRef.current = true - closePopup(id) + addPopup(id, 1, ) } const initLineSetting = () => { @@ -568,6 +569,7 @@ export function useRoofShapeSetting(id) { pitch: pitchRef.current, offset: eavesOffset / 10, } + selectedLine.attributes = { ...attributes, isFixed: true } addPitchText(currentObject) selectedLine.set({ strokeWidth: 4 }) selectedLine.set({ stroke: '#45CD7D' }) @@ -579,6 +581,7 @@ export function useRoofShapeSetting(id) { type: LINE_TYPE.WALLLINE.GABLE, offset: gableOffset / 10, } + selectedLine.attributes = { ...attributes, isFixed: true } selectedLine.set({ strokeWidth: 4 }) selectedLine.set({ stroke: '#3FBAE6' }) break @@ -590,6 +593,7 @@ export function useRoofShapeSetting(id) { width: hasSleeve === '0' ? 0 : sleeveOffset / 10, sleeve: hasSleeve === '1', } + selectedLine.attributes = { ...attributes, isFixed: true } break } case 4: { @@ -600,6 +604,7 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, width: hipAndGableWidth / 10, } + selectedLine.attributes = { ...attributes, isFixed: true } addPitchText(currentObject) selectedLine.set({ strokeWidth: 4 }) selectedLine.set({ stroke: '#45CD7D' }) @@ -613,6 +618,7 @@ export function useRoofShapeSetting(id) { width: jerkinHeadWidth / 10, pitch: jerkinHeadPitchRef.current, } + selectedLine.attributes = { ...attributes, isFixed: true } addPitchText(currentObject) selectedLine.set({ strokeWidth: 4 }) selectedLine.set({ stroke: '#3FBAE6' }) @@ -625,13 +631,13 @@ export function useRoofShapeSetting(id) { pitch: shedPitchRef.current, width: shedWidth / 10, } + selectedLine.attributes = { ...attributes, isFixed: true } addPitchText(currentObject) selectedLine.set({ strokeWidth: 4 }) selectedLine.set({ stroke: '#000000' }) break } } - selectedLine.attributes = { ...attributes, isFixed: true } canvas.renderAll() nextLineFocus(selectedLine) @@ -643,7 +649,7 @@ export function useRoofShapeSetting(id) { const index = lines.findIndex((line) => line.idx === selectedLine.idx) const nextLine = lines[index + 1] || lines[0] - if (nextLine.attributes.isFixed) { + if (nextLine.attributes?.isFixed) { canvas.discardActiveObject() return } From b886b0cba178130a3a73d18265d34ed65fb54942 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 17:17:15 +0900 Subject: [PATCH 192/213] =?UTF-8?q?lengthText=20=EC=A7=80=EC=9B=8C?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=ED=98=84=EC=83=81=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/useRoofShapeSetting.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js index 2a36e23e..f242439e 100644 --- a/src/hooks/roofcover/useRoofShapeSetting.js +++ b/src/hooks/roofcover/useRoofShapeSetting.js @@ -423,7 +423,9 @@ export function useRoofShapeSetting(id) { canvas.remove(obj) }) - const removeTargets = canvas.getObjects().filter((obj) => obj.name === 'pitchText' || obj.name === 'lengthText') + const removeTargets = canvas + .getObjects() + .filter((obj) => (obj.name === 'pitchText' || obj.name === 'lengthText') && outerLines.map((id) => id).includes(obj.parentId)) removeTargets.forEach((obj) => { canvas.remove(obj) }) From b8d229126ac1d1e9c7a25dea43e19bc1331c3934 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: Sat, 8 Feb 2025 17:24:02 +0900 Subject: [PATCH 193/213] =?UTF-8?q?-=20=EB=AF=B8=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/step/CircuitAllocation.jsx | 25 ------------------- .../step/type/AutoCircuitAllocation.jsx | 17 ------------- 2 files changed, 42 deletions(-) delete mode 100644 src/components/floor-plan/modal/circuitTrestle/step/CircuitAllocation.jsx delete mode 100644 src/components/floor-plan/modal/circuitTrestle/step/type/AutoCircuitAllocation.jsx diff --git a/src/components/floor-plan/modal/circuitTrestle/step/CircuitAllocation.jsx b/src/components/floor-plan/modal/circuitTrestle/step/CircuitAllocation.jsx deleted file mode 100644 index b980eeb4..00000000 --- a/src/components/floor-plan/modal/circuitTrestle/step/CircuitAllocation.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import AutoCircuitAllocation from '@/components/floor-plan/modal/circuitTrestle/step/type/AutoCircuitAllocation' -import PassivityCircuitAllocation from '@/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation' -import { useMessage } from '@/hooks/useMessage' - -export default function CircuitAllocation(props) { - const { getMessage } = useMessage() - const { circuitAllocationType, setCircuitAllocationType } = props - return ( - <> -
- - -
-
-
{getMessage('modal.circuit.trestle.setting.circuit.allocation')}
- {circuitAllocationType === 1 && } - {circuitAllocationType === 2 && } -
- - ) -} diff --git a/src/components/floor-plan/modal/circuitTrestle/step/type/AutoCircuitAllocation.jsx b/src/components/floor-plan/modal/circuitTrestle/step/type/AutoCircuitAllocation.jsx deleted file mode 100644 index 026bbaee..00000000 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/AutoCircuitAllocation.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import { useMessage } from '@/hooks/useMessage' - -export default function AutoCircuitAllocation() { - const { getMessage } = useMessage() - return ( -
-
-
-
- - -
-
-
-
- ) -} From 819ebb43ff7c3d65e99f0e34705ad6668c55cf03 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: Sat, 8 Feb 2025 17:25:02 +0900 Subject: [PATCH 194/213] =?UTF-8?q?-=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20=ED=9A=8C=EB=A1=9C=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=EC=8B=9C=20=EC=A7=91=EA=B3=84=ED=91=9C=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20-=20=EC=B4=88=EA=B8=B0=20Module=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20surface=20modules=20=EC=97=90=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 --- .../circuitTrestle/CircuitTrestleSetting.jsx | 1 - .../step/PowerConditionalSelect.jsx | 6 ++--- .../step/type/PassivityCircuitAllocation.jsx | 8 +++--- .../modal/panelBatch/PanelBatchStatistics.jsx | 12 +++------ .../common/useCanvasPopupStatusController.js | 14 +++++++--- src/hooks/useCirCuitTrestle.js | 27 ++++++++++--------- src/store/selectedModuleOptions.js | 1 - 7 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 84608186..daf0977a 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -1,7 +1,6 @@ import WithDraggable from '@/components/common/draggable/WithDraggable' import { useState, useEffect, useContext } from 'react' import PowerConditionalSelect from '@/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect' -import CircuitAllocation from '@/components/floor-plan/modal/circuitTrestle/step/CircuitAllocation' import StepUp from '@/components/floor-plan/modal/circuitTrestle/step/StepUp' import { useMessage } from '@/hooks/useMessage' import { usePopup } from '@/hooks/usePopup' diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 06cab2f1..5cc83160 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -223,7 +223,7 @@ export default function PowerConditionalSelect(props) {
{series?.map((series, index) => ( -
+
onCheckSeries(series)} checked={series.selected} />
@@ -263,8 +263,8 @@ export default function PowerConditionalSelect(props) {
- {selectedModels?.map((model) => ( - + {selectedModels?.map((model, index) => ( + {model.goodsNo} ))} 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 635e1f8f..e77c2b66 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -271,10 +271,9 @@ export default function PassivityCircuitAllocation(props) { canvas.renderAll() canvas.discardActiveObject() + setModuleStatisticsData() }, }) - - setModuleStatisticsData() } const initAllPcsCircuitNumber = () => { @@ -292,12 +291,11 @@ export default function PassivityCircuitAllocation(props) { obj.circuit = null obj.pcsItemId = null }) - setTargetModules([]) - canvas.renderAll() + setTargetModules([]) + setModuleStatisticsData() }, }) - setModuleStatisticsData() } return ( diff --git a/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx b/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx index af66b672..8cd0de0e 100644 --- a/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx +++ b/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx @@ -4,12 +4,13 @@ import { useEffect, useState } from 'react' import { useMessage } from '@/hooks/useMessage' import WithDraggable from '@/components/common/draggable/WithDraggable' import { moduleStatisticsState } from '@/store/circuitTrestleAtom' -import { useRecoilValue, useResetRecoilState } from 'recoil' +import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil' import { useModule } from '@/hooks/module/useModule' import { useEavesGableEdit } from '@/hooks/roofcover/useEavesGableEdit' import { canvasState } from '@/store/canvasAtom' import { POLYGON_TYPE } from '@/common/common' import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' +import { moduleSelectionDataState } from '@/store/selectedModuleOptions' export default function PanelBatchStatistics() { const { getMessage } = useMessage() @@ -21,15 +22,10 @@ export default function PanelBatchStatistics() { const canvas = useRecoilValue(canvasState) const { header, rows, footer } = useRecoilValue(moduleStatisticsState) const { setModuleStatisticsData } = useCircuitTrestle() + const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) useEffect(() => { - const roofSurfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - console.log('๐Ÿš€ ~ useEffect ~ roofSurfaces1:', roofSurfaces) - setModuleStatisticsData() - console.log( - '๐Ÿš€ ~ useEffect ~ roofSurfaces2:', - canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE), - ) + if (moduleSelectionDataStore && moduleSelectionDataStore.module) setModuleStatisticsData() }, []) return ( diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index 5e560136..bbe4ae70 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -7,7 +7,8 @@ import { useAxios } from '../useAxios' import { unescapeString } from '@/util/common-utils' import { moduleSelectionDataState, moduleSelectionTotalState } from '@/store/selectedModuleOptions' import { compasDegAtom } from '@/store/orientationAtom' -import { currentCanvasPlanState } from '@/store/canvasAtom' +import { canvasState, currentCanvasPlanState } from '@/store/canvasAtom' +import { POLYGON_TYPE } from '@/common/common' export function useCanvasPopupStatusController(param = 1) { const popupType = parseInt(param) @@ -15,7 +16,7 @@ export function useCanvasPopupStatusController(param = 1) { const [compasDeg, setCompasDeg] = useRecoilState(compasDegAtom) const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) const { get, getFetcher, postFetcher } = useAxios() - + const canvas = useRecoilValue(canvasState) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) // console.log('๐Ÿš€ ~ Orientation ~ currentCanvasPlan:', currentCanvasPlan) @@ -52,7 +53,14 @@ export function useCanvasPopupStatusController(param = 1) { if (i === 1) { setCompasDeg(result.popupStatus) } else if (i === 2) { - setModuleSelectionDataStore(JSON.parse(unescapeString(result.popupStatus))) + const data = JSON.parse(unescapeString(result.popupStatus)) + setModuleSelectionDataStore(data) + + const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + roofSurfaceList.forEach((surface) => { + surface.modules = modules.filter((module) => module.surfaceId === surface.id) + }) } } } diff --git a/src/hooks/useCirCuitTrestle.js b/src/hooks/useCirCuitTrestle.js index 3b37d226..b216d3af 100644 --- a/src/hooks/useCirCuitTrestle.js +++ b/src/hooks/useCirCuitTrestle.js @@ -26,7 +26,6 @@ export function useCircuitTrestle() { const selectedModules = useRecoilValue(selectedModuleState) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const canvas = useRecoilValue(canvasState) - const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2) const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState) const setModuleStatistics = useSetRecoilState(moduleStatisticsState) const { getMessage } = useMessage() @@ -73,10 +72,6 @@ export function useCircuitTrestle() { // ์ง€๋ถ•๋ฉด ๋ชฉ๋ก const getRoofSurfaceList = () => { const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) - roofSurfaceList.forEach((surface) => { - surface.modules = modules.filter((module) => module.surfaceId === surface.id) - }) roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top) return roofSurfaceList .map((obj) => { @@ -183,13 +178,21 @@ export function useCircuitTrestle() { const setPowerConditionerData = () => {} const setModuleStatisticsData = () => { - const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) - roofSurfaceList.forEach((surface) => { - surface.modules = modules.filter((module) => module.surfaceId === surface.id) - }) - // console.log(moduleSelectionData) - if (!moduleSelectionData || !moduleSelectionData.module || moduleSelectionData.module?.itemList?.length === 0) return + // const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + // const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + // roofSurfaceList.forEach((surface) => { + // surface.modules = modules.filter((module) => module.surfaceId === surface.id) + // }) + // console.log('roofSurfaceList', roofSurfaceList) + // console.log('modules', modules) + console.log('moduleSelectionData', moduleSelectionData) + if ( + !moduleSelectionData || + !moduleSelectionData.module || + Object.keys(moduleSelectionData.module).length === 0 || + moduleSelectionData.module?.itemList?.length === 0 + ) + return const tempHeader = [ { name: getMessage('simulator.table.sub1'), prop: 'name' }, { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.circuit'), prop: 'circuit' }, diff --git a/src/store/selectedModuleOptions.js b/src/store/selectedModuleOptions.js index c312c694..5165fb48 100644 --- a/src/store/selectedModuleOptions.js +++ b/src/store/selectedModuleOptions.js @@ -42,7 +42,6 @@ export const moduleSelectionOptionParamsState = atom({ stdWindSpeed: '', stdSnowLd: '', inclCd: '', - roofMatlCd: '', }, dangerouslyAllowMutability: true, }) From a614629b897c75557699f1cf1e24cc8f1cc23015 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 17:26:22 +0900 Subject: [PATCH 195/213] =?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=20lengthText=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EC=9D=B4=EC=83=81=ED=95=B4=EC=A7=80=EB=8A=94=20=ED=98=84?= =?UTF-8?q?=EC=83=81=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 | 2 +- src/hooks/roofcover/useRoofShapeSetting.js | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index dc14f2b0..34ec3f13 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -319,7 +319,7 @@ export function useRoofAllocationSetting(id) { } const apply = () => { - const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) + const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF && !obj.roofMaterial) const wallLines = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.WALL) roofBases.forEach((roofBase) => { try { diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js index f242439e..61acfd61 100644 --- a/src/hooks/roofcover/useRoofShapeSetting.js +++ b/src/hooks/roofcover/useRoofShapeSetting.js @@ -425,7 +425,11 @@ export function useRoofShapeSetting(id) { const removeTargets = canvas .getObjects() - .filter((obj) => (obj.name === 'pitchText' || obj.name === 'lengthText') && outerLines.map((id) => id).includes(obj.parentId)) + .filter( + (obj) => + (obj.name === 'pitchText' || obj.name === 'lengthText') && + canvas.getObjects().find((parent) => parent.id === obj.parentId)?.name !== POLYGON_TYPE.ROOF, + ) removeTargets.forEach((obj) => { canvas.remove(obj) }) From d570703bb872f7399044c2699c45d0e2e57cfe01 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Sat, 8 Feb 2025 17:45:33 +0900 Subject: [PATCH 196/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20=ED=8C=9D=EC=97=85?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20=EC=A1=B0=EA=B1=B4?= =?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/common/useCanvasPopupStatusController.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index 5e560136..40bef95b 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -49,10 +49,12 @@ export function useCanvasPopupStatusController(param = 1) { for (let i = 1; i < 3; i++) { const result = await getModuleSelection(i) // setModuleSelectionTotal((prev) => ({ ...prev, [i]: JSON.parse(unescapeString(result.popupStatus)) })) - if (i === 1) { - setCompasDeg(result.popupStatus) - } else if (i === 2) { - setModuleSelectionDataStore(JSON.parse(unescapeString(result.popupStatus))) + if (result) { + if (i === 1) { + setCompasDeg(result.popupStatus) + } else if (i === 2) { + setModuleSelectionDataStore(JSON.parse(unescapeString(result.popupStatus))) + } } } } From decec520c1206c20ca043a36094d7e6a30159665 Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Sat, 8 Feb 2025 17:46:58 +0900 Subject: [PATCH 197/213] =?UTF-8?q?fix:=20=EC=BA=94=EB=B2=84=EC=8A=A4=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20=EB=B2=97=EC=96=B4?= =?UTF-8?q?=EB=82=9C=20=EB=92=A4=20=EA=B8=B0=EC=A1=B4=EA=B3=BC=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20plan=EC=9C=BC=EB=A1=9C=20=EC=A7=84=EC=9E=85=20?= =?UTF-8?q?=EC=8B=9C=20=EC=9D=B4=EC=A0=84=20=EC=BA=94=EB=B2=84=EC=8A=A4=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EA=B0=80=20=ED=91=9C=EC=B6=9C?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasFrame.jsx | 30 ++++++++++++++--------- src/hooks/usePlan.js | 9 +++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index 52553529..f5ecb10d 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -34,7 +34,7 @@ export default function CanvasFrame() { const currentMenu = useRecoilValue(currentMenuState) const { floorPlanState } = useContext(FloorPlanContext) const { contextMenu, handleClick } = useContextMenu() - const { plans, currentCanvasPlan } = usePlan() + const { plans, currentCanvasPlan, resetCanvasStatus } = usePlan() const totalDisplay = useRecoilValue(totalDisplaySelector) // ์ง‘๊ณ„ํ‘œ ํ‘œ์‹œ ์—ฌ๋ถ€ const { setIsGlobalLoading } = useContext(QcastContext) const resetModuleStatisticsState = useResetRecoilState(moduleStatisticsState) @@ -45,20 +45,21 @@ export default function CanvasFrame() { const resetSelectedModelsState = useResetRecoilState(selectedModelsState) const resetPcsCheckState = useResetRecoilState(pcsCheckState) const { handleModuleSelectionTotal } = useCanvasPopupStatusController() + const loadCanvas = () => { - if (canvas) { - canvas?.clear() // ์บ”๋ฒ„์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - if (currentCanvasPlan) { - const plan = plans.find((plan) => plan.id === currentCanvasPlan.id) - if (plan?.canvasStatus && floorPlanState.objectNo === currentCanvasPlan.objectNo) { - canvas?.loadFromJSON(JSON.parse(plan.canvasStatus), function () { - canvasLoadInit() //config๋œ ์ƒํƒœ๋กœ ์บ”๋ฒ„์Šค ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฐ๋‹ค - canvas?.renderAll() // ์บ”๋ฒ„์Šค๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. - }) - } + if (!canvas) return + + canvas?.clear() // ์บ”๋ฒ„์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. + if (currentCanvasPlan) { + const plan = plans.find((plan) => plan.id === currentCanvasPlan.id) + if (plan?.canvasStatus && floorPlanState.objectNo === currentCanvasPlan.objectNo) { + canvas?.loadFromJSON(JSON.parse(plan.canvasStatus), function () { + canvasLoadInit() //config๋œ ์ƒํƒœ๋กœ ์บ”๋ฒ„์Šค ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฐ๋‹ค + canvas?.renderAll() // ์บ”๋ฒ„์Šค๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. + }) } - gridInit() } + gridInit() } useEffect(() => { @@ -69,6 +70,11 @@ export default function CanvasFrame() { useEffect(() => { setIsGlobalLoading(false) + + return () => { + canvas?.clear() + resetCanvasStatus() + } }, []) const resetRecoilData = () => { diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index e0853282..70f7e0db 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -407,6 +407,14 @@ export function usePlan(params = {}) { }) } + /** + * plan canvasStatus ์ดˆ๊ธฐํ™” + */ + const resetCanvasStatus = () => { + setCurrentCanvasPlan((prev) => ({ ...prev, canvasStatus: null })) + setPlans((plans) => plans.map((plan) => ({ ...plan, canvasStatus: null }))) + } + /** * ํ˜„์žฌ plan ์ด๋™ -> ์ƒˆ๋กœ์šด ๋งํฌ๋กœ ์ด๋™ */ @@ -425,5 +433,6 @@ export function usePlan(params = {}) { handleAddPlan, handleDeletePlan, loadCanvasPlanData, + resetCanvasStatus, } } From bac1f6e0f66e3cbf5efde56c89461d8cd51d9375 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 18:39:49 +0900 Subject: [PATCH 198/213] =?UTF-8?q?=ED=95=9C=EC=AA=BD=ED=9D=90=EB=A6=84=20?= =?UTF-8?q?=EC=A7=80=EB=B6=95=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/common.js | 1 + src/hooks/common/useCanvasConfigInitialize.js | 12 ++++++-- src/hooks/roofcover/useRoofShapeSetting.js | 28 +++++++++---------- src/hooks/useLine.js | 10 ++++--- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/common/common.js b/src/common/common.js index cf6d37bf..f53210ab 100644 --- a/src/common/common.js +++ b/src/common/common.js @@ -185,6 +185,7 @@ export const SAVE_KEY = [ 'moduleInfo', 'circuitNumber', 'circuit', + 'onlyOffset', ] export const OBJECT_PROTOTYPE = [fabric.Line.prototype, fabric.Polygon.prototype, fabric.Triangle.prototype] diff --git a/src/hooks/common/useCanvasConfigInitialize.js b/src/hooks/common/useCanvasConfigInitialize.js index 99e99c36..089aeea9 100644 --- a/src/hooks/common/useCanvasConfigInitialize.js +++ b/src/hooks/common/useCanvasConfigInitialize.js @@ -31,7 +31,11 @@ export function useCanvasConfigInitialize() { const flowTexts = canvas.getObjects().filter((obj) => obj.name === 'flowText') if (basicSetting.roofAngleSet === 'slope') { offsetTexts.forEach((obj) => { - obj.set({ text: `${!obj.originText ? '' : obj.originText + '-'}โˆ ${obj.pitch}${angleUnit}` }) + let text = `${!obj.originText ? '' : obj.originText}` + if (!obj.onlyOffset) { + text = text + `-โˆ ${obj.pitch}${angleUnit}` + } + obj.set({ text: text }) }) flowTexts.forEach((obj) => { obj.set({ text: `${!obj.originText ? '' : obj.originText + '-'}โˆ ${obj.pitch}${pitchText}` }) @@ -40,7 +44,11 @@ export function useCanvasConfigInitialize() { if (basicSetting.roofAngleSet === 'flat') { offsetTexts.forEach((obj) => { - obj.set({ text: `${!obj.originText ? '' : obj.originText + '-'}โˆ ${getDegreeByChon(obj.pitch)}${angleUnit}` }) + let text = `${!obj.originText ? '' : obj.originText}` + if (!obj.onlyOffset) { + text = text + `-โˆ ${getDegreeByChon(obj.pitch)}${angleUnit}` + } + obj.set({ text: text }) }) flowTexts.forEach((obj) => { obj.set({ text: `${!obj.originText ? '' : obj.originText + '-'}โˆ ${getDegreeByChon(obj.pitch)}${pitchText}` }) diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js index 61acfd61..407c19a0 100644 --- a/src/hooks/roofcover/useRoofShapeSetting.js +++ b/src/hooks/roofcover/useRoofShapeSetting.js @@ -197,10 +197,10 @@ export function useRoofShapeSetting(id) { // ๋ณ€๋ณ„๋กœ ์„ค์ •์ค‘ ํ•œ์ชฝํ๋ฆ„์ผ ๊ฒฝ์šฐ ํ•œ์ชฝํ๋ฆ„์˜ pitch๋กœ ์„ค์ • if (pitch) { outerLines.forEach((line) => { - if (line.attributes.type === LINE_TYPE.WALLLINE.EAVES) { + if (line.attributes.type === LINE_TYPE.WALLLINE.SHED) { line.attributes = { ...line.attributes, - pitch: pitch, + pitch: pitchRef.current, onlyOffset: true, } } @@ -228,15 +228,15 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } if (line.direction === 'top') { line.attributes = { offset: shedWidth / 10, - pitch: pitch, + pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } else { @@ -245,7 +245,6 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } @@ -254,6 +253,7 @@ export function useRoofShapeSetting(id) { offset: shedWidth / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } @@ -276,7 +276,6 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } @@ -285,6 +284,7 @@ export function useRoofShapeSetting(id) { offset: shedWidth / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } else { @@ -293,7 +293,6 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } @@ -302,6 +301,7 @@ export function useRoofShapeSetting(id) { offset: shedWidth / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } @@ -323,7 +323,6 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } @@ -332,6 +331,7 @@ export function useRoofShapeSetting(id) { offset: shedWidth / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } else { @@ -340,7 +340,6 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } @@ -349,6 +348,7 @@ export function useRoofShapeSetting(id) { offset: shedWidth / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } @@ -371,7 +371,6 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } @@ -380,6 +379,7 @@ export function useRoofShapeSetting(id) { offset: shedWidth / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } else { @@ -388,7 +388,6 @@ export function useRoofShapeSetting(id) { offset: eavesOffset / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.EAVES, - onlyOffset: true, } } @@ -397,6 +396,7 @@ export function useRoofShapeSetting(id) { offset: shedWidth / 10, pitch: pitchRef.current, type: LINE_TYPE.WALLLINE.SHED, + onlyOffset: true, } } } @@ -503,7 +503,7 @@ export function useRoofShapeSetting(id) { outerLines.forEach((line) => { line.attributes = { offset: eavesOffset / 10, - pitch: pitchRef.current, + pitch: currentAngleType === ANGLE_TYPE.SLOPE ? pitch : getChonByDegree(pitch), type: LINE_TYPE.WALLLINE.EAVES, onlyOffset: false, } @@ -526,7 +526,7 @@ export function useRoofShapeSetting(id) { } else if (line.direction === 'top' || line.direction === 'bottom') { line.attributes = { offset: eavesOffset / 10, - pitch: pitchRef.current, + pitch: currentAngleType === ANGLE_TYPE.SLOPE ? pitch : getChonByDegree(pitch), type: LINE_TYPE.WALLLINE.EAVES, } } @@ -549,7 +549,7 @@ export function useRoofShapeSetting(id) { } else if (line.direction === 'left' || line.direction === 'right') { line.attributes = { offset: eavesOffset / 10, - pitch: pitchRef.current, + pitch: currentAngleType === ANGLE_TYPE.SLOPE ? pitch : getChonByDegree(pitch), type: LINE_TYPE.WALLLINE.EAVES, } } diff --git a/src/hooks/useLine.js b/src/hooks/useLine.js index dd251463..e2667e80 100644 --- a/src/hooks/useLine.js +++ b/src/hooks/useLine.js @@ -93,10 +93,11 @@ export const useLine = () => { let left, top - const textStr = - currentAngleType === ANGLE_TYPE.SLOPE - ? `${attributes.offset ? attributes.offset * 10 : attributes.width * 10}${!onlyOffset && attributes.pitch ? '-โˆ ' + attributes.pitch + angleUnit : ''}` - : `${attributes.offset ? attributes.offset * 10 : attributes.width * 10}${!onlyOffset && attributes.pitch ? '-โˆ ' + getDegreeByChon(attributes.pitch) + angleUnit : ''}` + const textStr = `${attributes.offset ? attributes.offset * 10 : attributes.width * 10}` + + // currentAngleType === ANGLE_TYPE.SLOPE + // ? `${attributes.offset ? attributes.offset * 10 : attributes.width * 10}${!onlyOffset && attributes.pitch ? '-โˆ ' + attributes.pitch + angleUnit : ''}` + // : `${attributes.offset ? attributes.offset * 10 : attributes.width * 10}${!onlyOffset && attributes.pitch ? '-โˆ ' + getDegreeByChon(attributes.pitch) + angleUnit : ''}` if (direction === 'top') { left = (startPoint.x + endPoint.x) / 2 @@ -125,6 +126,7 @@ export const useLine = () => { name: 'pitchText', parentId: line.id, pitch: attributes.pitch, + onlyOffset, }) canvas.add(text) From bfc3cc4b918928c0de4fe46306d8880e3a5e81a1 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Sat, 8 Feb 2025 18:48:19 +0900 Subject: [PATCH 199/213] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=EB=A9=B4=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/basic/step/Placement.jsx | 5 +- src/hooks/module/useModuleBasicSetting.js | 196 +++++++++--------- src/hooks/module/useModuleTabContents.js | 23 +- src/hooks/useCirCuitTrestle.js | 41 ++-- 4 files changed, 128 insertions(+), 137 deletions(-) diff --git a/src/components/floor-plan/modal/basic/step/Placement.jsx b/src/components/floor-plan/modal/basic/step/Placement.jsx index 1807be60..4eeeab0a 100644 --- a/src/components/floor-plan/modal/basic/step/Placement.jsx +++ b/src/components/floor-plan/modal/basic/step/Placement.jsx @@ -5,7 +5,6 @@ import { checkedModuleState, currentCanvasPlanState } from '@/store/canvasAtom' import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' import { isObjectNotEmpty } from '@/util/common-utils' -import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' const Placement = forwardRef((props, refs) => { const { getMessage } = useMessage() @@ -20,8 +19,7 @@ const Placement = forwardRef((props, refs) => { const setCheckedModules = useSetRecoilState(checkedModuleState) const moduleSelectionData = useRecoilValue(moduleSelectionDataState) - - const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2) + const { makeModuleInitArea } = useModuleBasicSetting(3) //๋ชจ๋“ˆ ๋ฐฐ์น˜๋ฉด ์ƒ์„ฑ useEffect(() => { @@ -31,6 +29,7 @@ const Placement = forwardRef((props, refs) => { if (isChidroriValue) { setIsChidoriNotAble(true) } + makeModuleInitArea(moduleSelectionData) } }, []) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 2cb64313..111aa7e9 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -19,7 +19,7 @@ import { moduleStatisticsState } from '@/store/circuitTrestleAtom' import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' import { useMasterController } from '@/hooks/common/useMasterController' import { v4 as uuidv4 } from 'uuid' -import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' +// import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' import { isObjectNotEmpty } from '@/util/common-utils' export function useModuleBasicSetting(tabNum) { @@ -29,7 +29,7 @@ export function useModuleBasicSetting(tabNum) { const [moduleSetupSurface, setModuleSetupSurface] = useRecoilState(moduleSetupSurfaceState) const [moduleIsSetup, setModuleIsSetup] = useRecoilState(moduleIsSetupState) const { addCanvasMouseEventListener, initEvent, removeMouseEvent, addTargetMouseEventListener } = useEvent() - const { setModuleStatisticsData } = useCircuitTrestle() + // const { setModuleStatisticsData } = useCircuitTrestle() const { swalFire } = useSwal() const compasDeg = useRecoilValue(compasDegAtom) @@ -52,6 +52,7 @@ export function useModuleBasicSetting(tabNum) { useEffect(() => { // console.log('basicSetting', basicSetting) + if (canvas) { //๋“œ๋ž˜๊ทธ ์—ฌ๋ถ€ // canvas.selection = true @@ -62,17 +63,13 @@ export function useModuleBasicSetting(tabNum) { // const { addTargetMouseEventListener, addCanvasMouseEventListener, initEvent } = useContext(EventContext) //๋ชจ๋“ˆ ์„ ํƒ์—์„œ ์„ ํƒ๋œ ๊ฐ’๋“ค ๋„˜์–ด์˜ด - useEffect(() => { - console.log('moduleSelectionData', moduleSelectionData) - - console.log('canvasSetting.roofSizeSet', canvasSetting.roofSizeSet) - - if (isObjectNotEmpty(moduleSelectionData)) { + const makeModuleInitArea = () => { + if (isObjectNotEmpty(moduleSelectionData) && tabNum === 3) { if (canvasSetting.roofSizeSet !== '3') { const common = moduleSelectionData.common const roofConstructions = moduleSelectionData.roofConstructions - console.log('roofConstructions', roofConstructions) + // console.log('roofConstructions', roofConstructions) if (roofConstructions && roofConstructions.length > 0) { const listParams = roofConstructions.map((item) => { @@ -109,7 +106,10 @@ export function useModuleBasicSetting(tabNum) { }) } } - }, [moduleSelectionData]) + } + // console.log('moduleSelectionData', moduleSelectionData) + + // console.log('canvasSetting.roofSizeSet', canvasSetting.roofSizeSet) //๊ฐ€๋Œ€ ์ƒ์„ธ ๋ฐ์ดํ„ฐ ์กฐํšŒ const getTrestleDetailListData = async () => { @@ -310,7 +310,7 @@ export function useModuleBasicSetting(tabNum) { canvas?.renderAll() selectedModuleInstSurfaceArray.push(setupSurface) - console.log('selectedModuleInstSurfaceArray', selectedModuleInstSurfaceArray) + // console.log('selectedModuleInstSurfaceArray', selectedModuleInstSurfaceArray) setCurrentObject({ name: 'moduleSetupSurface', arrayData: [...selectedModuleInstSurfaceArray] }) } else { @@ -839,7 +839,7 @@ export function useModuleBasicSetting(tabNum) { checkedModule.forEach((module, index) => { const { width, height } = getModuleWidthHeight(maxLengthLine, moduleSetupSurface, module) - const flowLines = getFlowLines(moduleSetupSurface, width) + const flowLines = getFlowLines(moduleSetupSurface, height) //์œก์ง€๋ถ•์ด ์•„๋‹๋•Œ๋งŒ ๋„ฃ๋Š”๋‹ค ์œก์ง€๋ถ•์ผ๋• ํด๋ฆญ ์ด๋ฒคํŠธ์— ๋ณ„๋„๋กœ ๋„ฃ์–ด๋†“์Œ let startPoint = flowLines.bottom const moduleArray = [] @@ -859,81 +859,73 @@ export function useModuleBasicSetting(tabNum) { startPoint = { ...startPoint, y1: startPoint.y1 - heightMargin } } } - } - // else { - // //์ค‘์•™๋ฐฐ์น˜๊ฐ€ ์•„๋‹๋•Œ๋„ ํ๋ฆ„ ๋ฐฉํ–ฅ ๊ธฐ์ค€๋ฉด์œผ๋กœ ์–‘๋ฉด์ด ์ง์„ ์ด๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜ - // if (flowModuleLine.bottom.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') { - // //ํ•˜๋‹จ ๊ธฐ์ค€์œผ๋กœ ์–‘๋ฉด์ด ์ง์„ ์ด๋ฉด ํ•˜๋‹จ ๋ฐฉ๋ฉด์œผ๋กœ ๊ฐ€์šด๋ฐ๋กœ ๋ฐฐ์น˜ - // const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //๋ฐ‘์— ๊ธธ์ด์—์„œ ๋ฐ˜์„ ๊ฐ€๋ฅธ๋‹ค - // const halfModuleWidthLength = width / 2 - // startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength } - // } - // } + } else { + const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ตœ ์ขŒ์ธก + const maxRightEndPoint = surfaceMaxLines.right.x1 //์ตœ ์šฐ์ธก + const maxTopEndPoint = surfaceMaxLines.top.y1 //์ตœ ์ƒ๋‹จ - const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ตœ ์ขŒ์ธก - const maxRightEndPoint = surfaceMaxLines.right.x1 //์ตœ ์šฐ์ธก - const maxTopEndPoint = surfaceMaxLines.top.y1 //์ตœ ์ƒ๋‹จ + let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1 + let totalTopEndPoint = maxTopEndPoint - startPoint.y1 + let totalWidth = Math.ceil(Math.abs(maxRightEndPoint - maxLeftEndPoint) / width) + let diffLeftEndPoint = Math.abs(totalLeftEndPoint / width) + let diffTopEndPoint = Math.abs(totalTopEndPoint / height) + let startColPoint = Math.abs(width * Math.ceil(diffLeftEndPoint) - startPoint.x1) + let tempMaxWidth = isMaxSetup ? width / 2 : width //์ตœ๋Œ€๋ฐฐ์น˜์ธ์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๋„ฃ์Œ + if (isMaxSetup) totalWidth = totalWidth * 2 //์ตœ๋Œ€๋ฐฐ์น˜์‹œ 2๋ฐฐ๋กœ ๋Š˜๋ ค์„œ ๋ฐ˜์”ฉ ๊ฒ€์‚ฌํ•˜๊ธฐ์œ„ํ•จ - let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1 - let totalTopEndPoint = maxTopEndPoint - startPoint.y1 - let totalWidth = Math.ceil(Math.abs(maxRightEndPoint - maxLeftEndPoint) / width) - let diffLeftEndPoint = Math.abs(totalLeftEndPoint / width) - let diffTopEndPoint = Math.abs(totalTopEndPoint / height) - let startColPoint = Math.abs(width * Math.ceil(diffLeftEndPoint) - startPoint.x1) - let tempMaxWidth = isMaxSetup ? width / 2 : width //์ตœ๋Œ€๋ฐฐ์น˜์ธ์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๋„ฃ์Œ - if (isMaxSetup) totalWidth = totalWidth * 2 //์ตœ๋Œ€๋ฐฐ์น˜์‹œ 2๋ฐฐ๋กœ ๋Š˜๋ ค์„œ ๋ฐ˜์”ฉ ๊ฒ€์‚ฌํ•˜๊ธฐ์œ„ํ•จ - - for (let j = 0; j < diffTopEndPoint; j++) { - bottomMargin = j === 0 ? 0 : intvVer * j - for (let i = 0; i <= totalWidth; i++) { - leftMargin = i === 0 ? 0 : intvHor * i - chidoriLength = 0 - if (isChidori && !isMaxSetup) { - chidoriLength = j % 2 === 0 ? 0 : width / 2 - intvHor - } - - square = [ - [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], - [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], - [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], - [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], - [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], - ] - - let squarePolygon = turf.polygon([square]) - let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1) - let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] })) - - moduleOptions = { ...moduleOptions, fill: module.color, surfaceId: moduleSetupSurface.id, moduleInfo: module } - let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon }) - - let disjointFromTrestle = checkModuleDisjointSurface(squarePolygon, polygonToTurfPolygon(moduleSetupSurface, true)) - let isDisjoint = checkModuleDisjointObjects(squarePolygon, containsBatchObjects) - - if (disjointFromTrestle && isDisjoint) { - if (index > 0) { - setupModule.forEach((item) => { - const isOverlap = item.some((item2) => turf.booleanOverlap(squarePolygon, polygonToTurfPolygon(item2, true))) - if (!isOverlap) { - canvas?.add(tempModule) - moduleSetupArray.push(tempModule) - moduleArray.push(tempModule) - } - }) - } else { - //์ตœ์ดˆ ํ•œ๋ฒˆ์€ ๊ทธ๋ƒฅ ๊ทธ๋ฆฐ๋‹ค - //๊ฒน์น˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ํฌํ•จ๋œ ๋ชจ๋“ˆ๋งŒ ๊ทธ๋ฆฐ๋‹ค - canvas?.add(tempModule) - moduleSetupArray.push(tempModule) - moduleArray.push(tempModule) + for (let j = 0; j < diffTopEndPoint; j++) { + bottomMargin = j === 0 ? 0 : intvVer * j + for (let i = 0; i <= totalWidth; i++) { + leftMargin = i === 0 ? 0 : intvHor * i + chidoriLength = 0 + if (isChidori && !isMaxSetup) { + chidoriLength = j % 2 === 0 ? 0 : width / 2 - intvHor + } + + square = [ + [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], + [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], + [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], + [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], + [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], + ] + + let squarePolygon = turf.polygon([square]) + let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1) + let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] })) + + moduleOptions = { ...moduleOptions, fill: module.color, surfaceId: moduleSetupSurface.id, moduleInfo: module } + let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon }) + + let disjointFromTrestle = checkModuleDisjointSurface(squarePolygon, polygonToTurfPolygon(moduleSetupSurface, true)) + let isDisjoint = checkModuleDisjointObjects(squarePolygon, containsBatchObjects) + + if (disjointFromTrestle && isDisjoint) { + if (index > 0) { + setupModule.forEach((item) => { + const isOverlap = item.some((item2) => turf.booleanOverlap(squarePolygon, polygonToTurfPolygon(item2, true))) + if (!isOverlap) { + canvas?.add(tempModule) + moduleSetupArray.push(tempModule) + moduleArray.push(tempModule) + } + }) + } else { + //์ตœ์ดˆ ํ•œ๋ฒˆ์€ ๊ทธ๋ƒฅ ๊ทธ๋ฆฐ๋‹ค + //๊ฒน์น˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ํฌํ•จ๋œ ๋ชจ๋“ˆ๋งŒ ๊ทธ๋ฆฐ๋‹ค + canvas?.add(tempModule) + moduleSetupArray.push(tempModule) + moduleArray.push(tempModule) + } + } else { + //๋””๋ฒ„๊น…์šฉ + tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) + canvas?.add(tempModule) } - } else { - //๋””๋ฒ„๊น…์šฉ - tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) - canvas?.add(tempModule) } } } + setupModule.push(moduleArray) }) } @@ -1055,7 +1047,7 @@ export function useModuleBasicSetting(tabNum) { checkedModule.forEach((module, index) => { const { width, height } = getModuleWidthHeight(maxLengthLine, moduleSetupSurface, module) - const flowLines = getFlowLines(moduleSetupSurface, width) + const flowLines = getFlowLines(moduleSetupSurface, height) let startPoint = flowLines.top const moduleArray = [] @@ -1389,9 +1381,7 @@ export function useModuleBasicSetting(tabNum) { return hull } - const bottomTopFlowLine = (surface, width) => { - console.log('bottom', width) - + const bottomTopFlowLine = (surface, length) => { const flowArray = [] const bottomFlow = surface.lines.reduce( @@ -1450,7 +1440,7 @@ export function useModuleBasicSetting(tabNum) { const angle2 = Math.abs(Math.round(Math.atan(height2 / adjust2) * (180 / Math.PI) * 1000) / 1000) const angle3 = 180 - (angle1 + angle2) - const charlie = Number(width) + 3 // ํ‰ํ–‰์„ ๊ธธ์ด ์•ฝ๊ฐ„ ์—ฌ์œ ๋ฅผ ์คŒ + const charlie = Number(length) + 3 // ํ‰ํ–‰์„ ๊ธธ์ด ์•ฝ๊ฐ„ ์—ฌ์œ ๋ฅผ ์คŒ const alpha = (charlie * Math.sin((angle1 * Math.PI) / 180)) / Math.sin((angle3 * Math.PI) / 180) const beta = Math.sqrt(alpha ** 2 + charlie ** 2 - 2 * alpha * charlie * Math.cos((angle2 * Math.PI) / 180)) const h = beta * Math.sin((angle1 * Math.PI) / 180) // ๋†’์ด @@ -1467,6 +1457,9 @@ export function useModuleBasicSetting(tabNum) { strokeWidth: 1, selectable: true, }) + + console.log(`index ${index} : finalLine`, pointX1, pointY1, pointX2, pointY2) + canvas?.add(finalLine) canvas?.renderAll() @@ -1509,9 +1502,7 @@ export function useModuleBasicSetting(tabNum) { return rtnObjArray } - const leftRightFlowLine = (surface, width) => { - console.log('left', width) - + const leftRightFlowLine = (surface, length) => { const flowArray = [] const leftFlow = surface.lines.reduce( (acc, line, index) => { @@ -1567,7 +1558,7 @@ export function useModuleBasicSetting(tabNum) { const angle2 = Math.abs(Math.round(Math.atan(adjust2 / height2) * (180 / Math.PI) * 1000) / 1000) const angle3 = 180 - (angle1 + angle2) - const charlie = Number(width) + 3 // ํ‰ํ–‰์„ ๊ธธ์ด ์•ฝ๊ฐ„ ์—ฌ์œ ๋ฅผ ์คŒ + const charlie = Number(length) + 3 // ํ‰ํ–‰์„ ๊ธธ์ด ์•ฝ๊ฐ„ ์—ฌ์œ ๋ฅผ ์คŒ const alpha = (charlie * Math.sin((angle1 * Math.PI) / 180)) / Math.sin((angle3 * Math.PI) / 180) const beta = Math.sqrt(alpha ** 2 + charlie ** 2 - 2 * alpha * charlie * Math.cos((angle2 * Math.PI) / 180)) @@ -2201,7 +2192,7 @@ export function useModuleBasicSetting(tabNum) { checkedModule.forEach((module, index) => { const { width, height } = getModuleWidthHeight(maxLengthLine, moduleSetupSurface, module) - const flowLines = getFlowLines(moduleSetupSurface, width) + const flowLines = getFlowLines(moduleSetupSurface, height) let startPoint = flowLines.bottom @@ -2292,7 +2283,7 @@ export function useModuleBasicSetting(tabNum) { const flatRoofTopFlowSetupModule = (surfaceMaxLines, maxLengthLine, moduleSetupArray, moduleSetupSurface, marginWidth, marginHeight) => { checkedModule.forEach((module, index) => { const { width, height } = getModuleWidthHeight(maxLengthLine, moduleSetupSurface, module) - const flowLines = getFlowLines(moduleSetupSurface, width) + const flowLines = getFlowLines(moduleSetupSurface, height) let startPoint = flowLines.top const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ตœ ์ขŒ์ธก @@ -2490,7 +2481,7 @@ export function useModuleBasicSetting(tabNum) { const getModuleStatistics = () => { const surfaces = canvas.getObjects().filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name) - console.log('๐Ÿš€ ~ getModuleStatistics ~ surfaces:', surfaces) + // console.log('๐Ÿš€ ~ getModuleStatistics ~ surfaces:', surfaces) let totalWpout = 0 let moduleInfo = {} const rows = surfaces.map((surface) => { @@ -2505,7 +2496,7 @@ export function useModuleBasicSetting(tabNum) { moduleInfo[module.moduleInfo.itemId].amount++ }) totalWpout += wpOut - console.log('๐Ÿš€ ~ moduleData.rows=surfaces.map ~ module:', module) + // console.log('๐Ÿš€ ~ moduleData.rows=surfaces.map ~ module:', module) const rowObject = {} Object.keys(moduleInfo).forEach((key) => { rowObject[key] = moduleInfo[key].amount @@ -2519,8 +2510,8 @@ export function useModuleBasicSetting(tabNum) { } }) - console.log('๐Ÿš€ ~ getModuleStatistics ~ rows:', rows) - console.log('๐Ÿš€ ~ getModuleStatistics ~ moduleInfo:', moduleInfo) + // console.log('๐Ÿš€ ~ getModuleStatistics ~ rows:', rows) + // console.log('๐Ÿš€ ~ getModuleStatistics ~ moduleInfo:', moduleInfo) const header = [ { name: getMessage('modal.panel.batch.statistic.roof.shape'), prop: 'name' }, ...Object.keys(moduleInfo).map((key) => { @@ -2540,7 +2531,7 @@ export function useModuleBasicSetting(tabNum) { footer.push(footerData[key]) }) footer.push((totalWpout / 1000).toFixed(3)) - console.log({ header: header, rows, footer: footer }) + // console.log({ header: header, rows, footer: footer }) setModuleStatistics({ header: header, rows, footer: footer }) } @@ -2574,14 +2565,14 @@ export function useModuleBasicSetting(tabNum) { : { width: tmpWidth, height: tmpHeight } } - const getFlowLines = (moduleSetupSurface, width) => { + const getFlowLines = (moduleSetupSurface, length) => { let flowLines = {} flowLines = { - bottom: bottomTopFlowLine(moduleSetupSurface, width).find((obj) => obj.target === 'bottom'), - top: bottomTopFlowLine(moduleSetupSurface, width).find((obj) => obj.target === 'top'), - left: leftRightFlowLine(moduleSetupSurface, width).find((obj) => obj.target === 'left'), - right: leftRightFlowLine(moduleSetupSurface, width).find((obj) => obj.target === 'right'), + bottom: bottomTopFlowLine(moduleSetupSurface, length).find((obj) => obj.target === 'bottom'), + top: bottomTopFlowLine(moduleSetupSurface, length).find((obj) => obj.target === 'top'), + left: leftRightFlowLine(moduleSetupSurface, length).find((obj) => obj.target === 'left'), + right: leftRightFlowLine(moduleSetupSurface, length).find((obj) => obj.target === 'right'), } return flowLines } @@ -2595,5 +2586,6 @@ export function useModuleBasicSetting(tabNum) { manualFlatroofModuleSetup, autoFlatroofModuleSetup, checkModuleDisjointObjects, + makeModuleInitArea, } } diff --git a/src/hooks/module/useModuleTabContents.js b/src/hooks/module/useModuleTabContents.js index 1f79efb3..43e3845e 100644 --- a/src/hooks/module/useModuleTabContents.js +++ b/src/hooks/module/useModuleTabContents.js @@ -62,7 +62,7 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab // setConstMthdList([]) //๊ณต๋ฒ• ์ดˆ๊ธฐํ™” // setRoofBaseList([]) //์ง€๋ถ•๋ฐ‘๋ฐ”ํƒ• ์ดˆ๊ธฐํ™” // setConstructionList([]) //๊ณต๋ฒ• ์ดˆ๊ธฐํ™” - resetSelected() + resetSelected(1) } //์ฒ˜๋งˆ๋ ฅ๋ฐ” ์ฒดํฌ @@ -114,8 +114,6 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab isObjectNotEmpty(moduleSelectionData.roofConstructions[tabIndex].trestle) && isObjectNotEmpty(moduleSelectionData.roofConstructions[tabIndex].construction) ) { - // console.log('moduleSelectionData', moduleSelectionData) - const roofConstructions = moduleSelectionData.roofConstructions.filter((item) => item.roofIndex === tabIndex)[0] setModuleConstructionSelectionData(roofConstructions) } @@ -127,6 +125,18 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab } }, [moduleConstructionSelectionData]) + useEffect(() => { + //๋˜๋Œ์•„์™”์„๋•Œ ์žฌํ˜ธ์ถœ ํ•˜์—ฌ ์„ ํƒํ•œ๋‹ค + if (isExistData) { + setTrestleParams({ + moduleTpCd: selectedModules.itemTp, + roofMatlCd: addRoof.roofMatlCd, + raftBaseCd: selectedRaftBase.raftBaseCd ? selectedRaftBase.raftBaseCd : '', + workingWidth: lengthBase, + }) + } + }, [isExistData]) + useEffect(() => { if (isExistData) { setConstructionListParams({ @@ -158,6 +168,7 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab //๋ชจ๋“ˆ ๋ณ€๊ฒฝ useEffect(() => { //lengbase๋Š” ๋ฌด์กฐ๊ฑด ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•˜๊ณ  ์ตœ์ดˆ์— ์‹คํ–‰ ๋ฐฉ์ง€ + if (selectedModules) { //์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ //๊ฐ€๋Œ€๋ฉ”์ด์ปค ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋งŒ๋“ค๊ธฐ @@ -362,7 +373,7 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab isObjectNotEmpty(moduleSelectionInitOriginData.current) && !isEqualObjects(moduleSelectionInitOriginData.current, moduleSelectionInitParams) ) { - resetSelected() + resetSelected(2) } }, [moduleSelectionInitParams]) @@ -372,10 +383,10 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab } else { setHajebichi(Number(e.target.value)) } - resetSelected() + resetSelected(3) } - const resetSelected = () => { + const resetSelected = (num) => { //๊ฐ€๋Œ€ ์„ ํƒ ์ดˆ๊ธฐํ™” setSelectedTrestle({}) diff --git a/src/hooks/useCirCuitTrestle.js b/src/hooks/useCirCuitTrestle.js index 059bbc0d..b72581b3 100644 --- a/src/hooks/useCirCuitTrestle.js +++ b/src/hooks/useCirCuitTrestle.js @@ -10,11 +10,10 @@ import { selectedModelsState, seriesState, } from '@/store/circuitTrestleAtom' -import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' +import { selectedModuleState } from '@/store/selectedModuleOptions' import { useContext } from 'react' import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' import { useMessage } from './useMessage' -import { useCanvasPopupStatusController } from './common/useCanvasPopupStatusController' export function useCircuitTrestle() { const [makers, setMakers] = useRecoilState(makersState) @@ -26,8 +25,7 @@ export function useCircuitTrestle() { const selectedModules = useRecoilValue(selectedModuleState) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const canvas = useRecoilValue(canvasState) - const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2) - const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState) + const setModuleStatistics = useSetRecoilState(moduleStatisticsState) const { getMessage } = useMessage() const getOptYn = () => { @@ -62,7 +60,7 @@ export function useCircuitTrestle() { // ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์•„์ดํ…œ ๋ชฉ๋ก const getUseModuleItemList = () => { console.log('๐Ÿš€ ~ getUseModuleItemList ~ selectedModules:', selectedModules) - return moduleSelectionData.module?.itemList?.map((m) => { + return selectedModules?.itemList?.map((m) => { return { itemId: m.itemId, mixMatlNo: m.mixMatlNo, @@ -73,10 +71,6 @@ export function useCircuitTrestle() { // ์ง€๋ถ•๋ฉด ๋ชฉ๋ก const getRoofSurfaceList = () => { const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) - roofSurfaceList.forEach((surface) => { - surface.modules = modules.filter((module) => module.surfaceId === surface.id) - }) roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top) return roofSurfaceList .map((obj) => { @@ -183,22 +177,17 @@ export function useCircuitTrestle() { const setPowerConditionerData = () => {} const setModuleStatisticsData = () => { - const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) - roofSurfaceList.forEach((surface) => { - surface.modules = modules.filter((module) => module.surfaceId === surface.id) - }) - // console.log(moduleSelectionData) - if (!moduleSelectionData || !moduleSelectionData.module || moduleSelectionData.module?.itemList?.length === 0) return + console.log(canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)) + if (selectedModules?.length === 0) return const tempHeader = [ { name: getMessage('simulator.table.sub1'), prop: 'name' }, { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.circuit'), prop: 'circuit' }, - // ...moduleSelectionData.module?.itemList?.map((module) => { - // return { - // name: module.itemNm, - // prop: module.itemId, - // } - // }), + ...selectedModules?.itemList?.map((module) => { + return { + name: module.itemNm, + prop: module.itemId, + } + }), { name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' }, ] const surfaceObjects = {} @@ -247,7 +236,7 @@ export function useCircuitTrestle() { circuit: surfaceObjects[key].circuit, wpOut: parseFloat(surfaceObjects[key].wpOut / 1000), } - moduleSelectionData.module.itemList.forEach((module) => { + selectedModules.itemList.forEach((module) => { tempRow[module.itemId] = surfaceObjects[key][module.itemId] }) tempRows.push(tempRow) @@ -258,7 +247,7 @@ export function useCircuitTrestle() { circuit: surfaceObjects[key].circuits[circuit].circuit, wpOut: parseFloat(surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000), } - moduleSelectionData.module.itemList.forEach((module) => { + selectedModules.itemList.forEach((module) => { row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] }) tempRows.push(row) @@ -270,8 +259,8 @@ export function useCircuitTrestle() { circuit: '-', wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0), } - moduleSelectionData.module.itemList.forEach((module) => { - tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + (row[module.itemId] ?? 0), 0) + selectedModules.itemList.forEach((module) => { + tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + row[module.itemId], 0) }) canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter }) From 176d61a65a1694732dd4344865b70531041e77c3 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: Sat, 8 Feb 2025 18:55:57 +0900 Subject: [PATCH 200/213] =?UTF-8?q?-=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 --- .../modal/circuitTrestle/step/PowerConditionalSelect.jsx | 3 ++- src/locales/ja.json | 3 ++- src/locales/ko.json | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 5cc83160..b8197825 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -127,6 +127,7 @@ export default function PowerConditionalSelect(props) { setSelectedModels([]) return } + console.log('moduleSelectionData', moduleSelectionData) const pcsMkrCd = selectedSeries[0]?.pcsMkrCd const pcsSerList = selectedSeries.map((series) => { return { pcsSerCd: series.pcsSerCd } @@ -160,7 +161,7 @@ export default function PowerConditionalSelect(props) { if (selectedRow === null) return if (selectedModels.length === 3) { swalFire({ - title: '์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.', + title: getMessage('max.select', [3]), icon: 'warning', }) diff --git a/src/locales/ja.json b/src/locales/ja.json index 91fe1d36..6356dba2 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1005,5 +1005,6 @@ "menu.validation.canvas.roof": "ใƒ‘ใƒใƒซใ‚’้…็ฝฎใ™ใ‚‹ใซใฏใ€ๅฑ‹ๆ น้ขใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "batch.object.outside.roof": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏๅฑ‹ๆ นใซ่จญ็ฝฎใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "batch.object.notinstall.cross": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏ้‡่ค‡ใ—ใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใงใใพใ›ใ‚“ใ€‚", - "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." + "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(JA)" } diff --git a/src/locales/ko.json b/src/locales/ko.json index b6e12fef..758b3525 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1007,5 +1007,6 @@ "batch.object.outside.roof": "์˜ค๋ธŒ์ ํŠธ๋Š” ์ง€๋ถ•๋‚ด์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", "batch.object.notinstall.cross": "์˜ค๋ธŒ์ ํŠธ๋Š” ๊ฒน์ณ์„œ ์„ค์น˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", - "module.trestleDetail.not.exist": "๊ฐ€๋Œ€ ์ƒ์„ธ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + "module.trestleDetail.not.exist": "๊ฐ€๋Œ€ ์ƒ์„ธ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", + "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." } From 0c1c7452d6de879346101efe9771bc2992ed39c3 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Sat, 8 Feb 2025 19:15:40 +0900 Subject: [PATCH 201/213] =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 32 +++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 111aa7e9..1053f8a7 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -841,6 +841,8 @@ export function useModuleBasicSetting(tabNum) { const flowLines = getFlowLines(moduleSetupSurface, height) //์œก์ง€๋ถ•์ด ์•„๋‹๋•Œ๋งŒ ๋„ฃ๋Š”๋‹ค ์œก์ง€๋ถ•์ผ๋• ํด๋ฆญ ์ด๋ฒคํŠธ์— ๋ณ„๋„๋กœ ๋„ฃ์–ด๋†“์Œ + // let startPoint = flowLines.bottom + let startPoint = flowLines.bottom const moduleArray = [] @@ -860,6 +862,11 @@ export function useModuleBasicSetting(tabNum) { } } } else { + //๋ฐ‘์—๊ฐ€ ํ‰๋ฉด์ด๋ฉด ์ขŒ์ธก์œผ๋กœ ๋ถ™์—ฌ์„œ ๋ฐฐ์น˜ + if (flowLines.bottom.type === 'flat') { + startPoint = flowLines.left + } + const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ตœ ์ขŒ์ธก const maxRightEndPoint = surfaceMaxLines.right.x1 //์ตœ ์šฐ์ธก const maxTopEndPoint = surfaceMaxLines.top.y1 //์ตœ ์ƒ๋‹จ @@ -919,8 +926,8 @@ export function useModuleBasicSetting(tabNum) { } } else { //๋””๋ฒ„๊น…์šฉ - tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) - canvas?.add(tempModule) + // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) + // canvas?.add(tempModule) } } } @@ -965,8 +972,8 @@ export function useModuleBasicSetting(tabNum) { } } - const maxRightEndPoint = surfaceMaxLines.right.x1 //์ตœ ์šฐ์ธก - const maxTopEndPoint = surfaceMaxLines.top.y1 //์ตœ ์ƒ๋‹จ + const maxRightEndPoint = surfaceMaxLines.right.x1 - 100 //์ตœ ์šฐ์ธก + const maxTopEndPoint = surfaceMaxLines.top.y1 - 50 //์ตœ ์ƒ๋‹จ const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //์ตœํ•˜๋‹จ let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //์ „์ฒด ๋†’์ด์—์„œ ํ˜„์žฌ ๋†’์ด๋ฅผ ๋บŒ @@ -1013,6 +1020,7 @@ export function useModuleBasicSetting(tabNum) { canvas?.add(tempModule) moduleSetupArray.push(tempModule) moduleArray.push(tempModule) + canvas.renderAll() } }) } else { @@ -1021,11 +1029,13 @@ export function useModuleBasicSetting(tabNum) { canvas?.add(tempModule) moduleSetupArray.push(tempModule) moduleArray.push(tempModule) + canvas.renderAll() } } else { //๋””๋ฒ„๊น…์šฉ - tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) - canvas?.add(tempModule) + // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) + // canvas?.add(tempModule) + // canvas.renderAll() } } } @@ -1134,9 +1144,9 @@ export function useModuleBasicSetting(tabNum) { } else { //์ตœ์ดˆ ํ•œ๋ฒˆ์€ ๊ทธ๋ƒฅ ๊ทธ๋ฆฐ๋‹ค //๊ฒน์น˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ํฌํ•จ๋œ ๋ชจ๋“ˆ๋งŒ ๊ทธ๋ฆฐ๋‹ค - canvas?.add(tempModule) - moduleSetupArray.push(tempModule) - moduleArray.push(tempModule) + // canvas?.add(tempModule) + // moduleSetupArray.push(tempModule) + // moduleArray.push(tempModule) } } else { //๋””๋ฒ„๊น…์šฉ @@ -1243,8 +1253,8 @@ export function useModuleBasicSetting(tabNum) { } } else { //๋””๋ฒ„๊น…์šฉ - tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) - canvas?.add(tempModule) + // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) + // canvas?.add(tempModule) } } } From 27e42bb137cbd684e763d2af590eab9209a3df0c Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Sat, 8 Feb 2025 19:30:04 +0900 Subject: [PATCH 202/213] =?UTF-8?q?=F0=9F=93=8Cfix:=20default=20global=20l?= =?UTF-8?q?ocale=20ja=20=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/localeAtom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/store/localeAtom.js b/src/store/localeAtom.js index 0f20fa87..0564e633 100644 --- a/src/store/localeAtom.js +++ b/src/store/localeAtom.js @@ -2,7 +2,7 @@ import { atom } from 'recoil' export const globalLocaleStore = atom({ key: 'globalLocaleState', - default: 'ko', + default: 'ja', }) export const appMessageStore = atom({ From 3c102a2757939d3270f7a36327f525b980ac688a Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 20:13:57 +0900 Subject: [PATCH 203/213] =?UTF-8?q?=EB=B3=B4=EC=A1=B0=EC=84=A0=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=98=A4=EB=A5=98=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/useAuxiliaryDrawing.js | 17 +++++++++++--- src/hooks/useContextMenu.js | 27 +++++++++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/hooks/roofcover/useAuxiliaryDrawing.js b/src/hooks/roofcover/useAuxiliaryDrawing.js index 4997bdf8..7cacdd03 100644 --- a/src/hooks/roofcover/useAuxiliaryDrawing.js +++ b/src/hooks/roofcover/useAuxiliaryDrawing.js @@ -24,7 +24,7 @@ import { calculateAngle, isSamePoint } from '@/util/qpolygon-utils' import { POLYGON_TYPE } from '@/common/common' // ๋ณด์กฐ์„  ์ž‘์„ฑ -export function useAuxiliaryDrawing(id) { +export function useAuxiliaryDrawing(id, isUseEffect = true) { const canvas = useRecoilValue(canvasState) const { addCanvasMouseEventListener, addDocumentEventListener, removeMouseLine, initEvent } = useEvent() // const { addCanvasMouseEventListener, addDocumentEventListener, removeMouseLine, initEvent } = useContext(EventContext) @@ -654,6 +654,8 @@ export function useAuxiliaryDrawing(id) { selectable: true, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, }, ) lineHistory.current.push(newLine) @@ -674,6 +676,8 @@ export function useAuxiliaryDrawing(id) { selectable: false, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, }) lineHistory.current.push(newLine) lineHistory.current = lineHistory.current.filter((history) => history !== line1) @@ -685,6 +689,8 @@ export function useAuxiliaryDrawing(id) { selectable: false, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, }) lineHistory.current.push(newLine) lineHistory.current = lineHistory.current.filter((history) => history !== line1) @@ -724,6 +730,8 @@ export function useAuxiliaryDrawing(id) { selectable: true, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, intersectionPoint, }) } else { @@ -733,6 +741,8 @@ export function useAuxiliaryDrawing(id) { selectable: true, name: 'auxiliaryLine', isFixed: true, + attributes: { ...line1.attributes }, + parentId: line1.parentId, intersectionPoint, }) } @@ -825,7 +835,7 @@ export function useAuxiliaryDrawing(id) { //lineHistory.current์— ์žˆ๋Š” ์„ ๋“ค ์ค‘ startPoint์™€ endPoint๊ฐ€ ๊ฒน์น˜๋Š” line์€ ์ œ๊ฑฐ // ๊ฒน์น˜๋Š” ์„  ํ•˜๋‚˜๋Š” canvas์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. - const tempLines = [...lineHistory.current] + const tempLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine' && !obj.isAuxiliaryFixed) lineHistory.current = [] tempLines.forEach((line) => { if ( @@ -842,7 +852,7 @@ export function useAuxiliaryDrawing(id) { lineHistory.current.push(line) }) - const innerLines = lineHistory.current + const innerLines = lineHistory.current.filter((line) => line.name === 'auxiliaryLine' && line.visible) roofBases.forEach((roofBase) => { const tempPolygonPoints = [...roofBase.points].map((obj) => { @@ -865,6 +875,7 @@ export function useAuxiliaryDrawing(id) { actualSize: line.attributes?.actualSize ?? 0, planeSize: line.getLength(), } + line.isAuxiliaryFixed = true return true } }) diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index 38cdedc1..184a3aea 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -180,6 +180,12 @@ export function useContextMenu() { fn: () => { if (!currentObject) return const roof = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0] + if (!roof) { + // ์•„์ง innerLines๋กœ ์„ธํŒ…์ด ์•ˆ๋˜์–ด์žˆ๋Š” line์ธ ๊ฒฝ์šฐ ์ œ๊ฑฐ + canvas.remove(currentObject) + canvas.discardActiveObject() + return + } const innerLines = roof.innerLines?.filter((line) => currentObject.id !== line.id) roof.innerLines = [...innerLines] canvas.remove(currentObject) @@ -221,6 +227,11 @@ export function useContextMenu() { name: 'auxiliaryLine', attributes: { ...currentObject.attributes }, }) + + if (!currentObject.attributes.roofId) { + return + } + canvas .getObjects() .filter((obj) => obj.id === currentObject.attributes.roofId)[0] @@ -235,11 +246,21 @@ export function useContextMenu() { swalFire({ text: '์ง€๋ถ•์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”.' }) return } - const innerLines = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0].innerLines - innerLines.forEach((line) => { + const innerLines = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0]?.innerLines + if (innerLines) { + innerLines.forEach((line) => { + canvas.remove(line) + }) + innerLines.length = 0 + } + + // ํ™•์ •๋˜์ง€ ์•Š์€ ๋ณด์กฐ์„  + const notFixedAuxiliaryLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine' && !obj.isAuxiliaryFixed) + + notFixedAuxiliaryLines.forEach((line) => { canvas.remove(line) }) - innerLines.length = 0 + canvas.renderAll() }, }, From ff5c3c5d4c6c3dda44bd353bffa6ab31eb06e26a Mon Sep 17 00:00:00 2001 From: yjnoh Date: Sat, 8 Feb 2025 20:14:05 +0900 Subject: [PATCH 204/213] =?UTF-8?q?=EB=82=A8=EC=B8=A1=20=EB=B9=97=EB=A9=B4?= =?UTF-8?q?,=20=ED=8F=89=EB=A9=B4=EC=9D=BC=EB=95=8C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 144 ++++++++++++---------- 1 file changed, 79 insertions(+), 65 deletions(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 1053f8a7..72035264 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -861,74 +861,76 @@ export function useModuleBasicSetting(tabNum) { startPoint = { ...startPoint, y1: startPoint.y1 - heightMargin } } } - } else { - //๋ฐ‘์—๊ฐ€ ํ‰๋ฉด์ด๋ฉด ์ขŒ์ธก์œผ๋กœ ๋ถ™์—ฌ์„œ ๋ฐฐ์น˜ - if (flowLines.bottom.type === 'flat') { - startPoint = flowLines.left - } + } + //๋ฐ‘์—๊ฐ€ ํ‰๋ฉด์ด๋ฉด ์ขŒ์ธก์œผ๋กœ ๋ถ™์—ฌ์„œ ๋ฐฐ์น˜ + if (flowLines.bottom.type === 'flat' && flowLines.left.type === 'curve') { + startPoint = flowLines.left + } - const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ตœ ์ขŒ์ธก - const maxRightEndPoint = surfaceMaxLines.right.x1 //์ตœ ์šฐ์ธก - const maxTopEndPoint = surfaceMaxLines.top.y1 //์ตœ ์ƒ๋‹จ + const maxLeftEndPoint = surfaceMaxLines.left.x1 //์ตœ ์ขŒ์ธก + const maxRightEndPoint = surfaceMaxLines.right.x1 //์ตœ ์šฐ์ธก + const maxTopEndPoint = surfaceMaxLines.top.y1 //์ตœ ์ƒ๋‹จ - let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1 - let totalTopEndPoint = maxTopEndPoint - startPoint.y1 - let totalWidth = Math.ceil(Math.abs(maxRightEndPoint - maxLeftEndPoint) / width) - let diffLeftEndPoint = Math.abs(totalLeftEndPoint / width) - let diffTopEndPoint = Math.abs(totalTopEndPoint / height) - let startColPoint = Math.abs(width * Math.ceil(diffLeftEndPoint) - startPoint.x1) - let tempMaxWidth = isMaxSetup ? width / 2 : width //์ตœ๋Œ€๋ฐฐ์น˜์ธ์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๋„ฃ์Œ - if (isMaxSetup) totalWidth = totalWidth * 2 //์ตœ๋Œ€๋ฐฐ์น˜์‹œ 2๋ฐฐ๋กœ ๋Š˜๋ ค์„œ ๋ฐ˜์”ฉ ๊ฒ€์‚ฌํ•˜๊ธฐ์œ„ํ•จ + let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1 + let totalTopEndPoint = maxTopEndPoint - startPoint.y1 + let totalWidth = Math.ceil(Math.abs(maxRightEndPoint - maxLeftEndPoint) / width) + let diffLeftEndPoint = Math.abs(totalLeftEndPoint / width) + let diffTopEndPoint = Math.abs(totalTopEndPoint / height) + let startColPoint = Math.abs(width * Math.ceil(diffLeftEndPoint) - startPoint.x1) + let tempMaxWidth = isMaxSetup ? width / 2 : width //์ตœ๋Œ€๋ฐฐ์น˜์ธ์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๋„ฃ์Œ + if (isMaxSetup) totalWidth = totalWidth * 2 //์ตœ๋Œ€๋ฐฐ์น˜์‹œ 2๋ฐฐ๋กœ ๋Š˜๋ ค์„œ ๋ฐ˜์”ฉ ๊ฒ€์‚ฌํ•˜๊ธฐ์œ„ํ•จ - for (let j = 0; j < diffTopEndPoint; j++) { - bottomMargin = j === 0 ? 0 : intvVer * j - for (let i = 0; i <= totalWidth; i++) { - leftMargin = i === 0 ? 0 : intvHor * i - chidoriLength = 0 - if (isChidori && !isMaxSetup) { - chidoriLength = j % 2 === 0 ? 0 : width / 2 - intvHor - } + for (let j = 0; j < diffTopEndPoint; j++) { + bottomMargin = j === 0 ? 0 : intvVer * j + for (let i = 0; i <= totalWidth; i++) { + leftMargin = i === 0 ? 0 : intvHor * i + chidoriLength = 0 + if (isChidori && !isMaxSetup) { + chidoriLength = j % 2 === 0 ? 0 : width / 2 - intvHor + } - square = [ - [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], - [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], - [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], - [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], - [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], - ] + square = [ + [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], + [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], + [startColPoint + tempMaxWidth * i + width - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], + [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - height - bottomMargin], + [startColPoint + tempMaxWidth * i - chidoriLength + leftMargin, startPoint.y1 - height * j - bottomMargin], + ] - let squarePolygon = turf.polygon([square]) - let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1) - let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] })) + let squarePolygon = turf.polygon([square]) + let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1) + let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] })) - moduleOptions = { ...moduleOptions, fill: module.color, surfaceId: moduleSetupSurface.id, moduleInfo: module } - let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon }) + moduleOptions = { ...moduleOptions, fill: module.color, surfaceId: moduleSetupSurface.id, moduleInfo: module } + let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon }) - let disjointFromTrestle = checkModuleDisjointSurface(squarePolygon, polygonToTurfPolygon(moduleSetupSurface, true)) - let isDisjoint = checkModuleDisjointObjects(squarePolygon, containsBatchObjects) + let disjointFromTrestle = checkModuleDisjointSurface(squarePolygon, polygonToTurfPolygon(moduleSetupSurface, true)) + let isDisjoint = checkModuleDisjointObjects(squarePolygon, containsBatchObjects) - if (disjointFromTrestle && isDisjoint) { - if (index > 0) { - setupModule.forEach((item) => { - const isOverlap = item.some((item2) => turf.booleanOverlap(squarePolygon, polygonToTurfPolygon(item2, true))) - if (!isOverlap) { - canvas?.add(tempModule) - moduleSetupArray.push(tempModule) - moduleArray.push(tempModule) - } - }) - } else { - //์ตœ์ดˆ ํ•œ๋ฒˆ์€ ๊ทธ๋ƒฅ ๊ทธ๋ฆฐ๋‹ค - //๊ฒน์น˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ํฌํ•จ๋œ ๋ชจ๋“ˆ๋งŒ ๊ทธ๋ฆฐ๋‹ค - canvas?.add(tempModule) - moduleSetupArray.push(tempModule) - moduleArray.push(tempModule) - } + if (disjointFromTrestle && isDisjoint) { + if (index > 0) { + setupModule.forEach((item) => { + const isOverlap = item.some((item2) => turf.booleanOverlap(squarePolygon, polygonToTurfPolygon(item2, true))) + if (!isOverlap) { + canvas?.add(tempModule) + moduleSetupArray.push(tempModule) + moduleArray.push(tempModule) + canvas.renderAll() + } + }) } else { - //๋””๋ฒ„๊น…์šฉ - // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) - // canvas?.add(tempModule) + //์ตœ์ดˆ ํ•œ๋ฒˆ์€ ๊ทธ๋ƒฅ ๊ทธ๋ฆฐ๋‹ค + //๊ฒน์น˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ํฌํ•จ๋œ ๋ชจ๋“ˆ๋งŒ ๊ทธ๋ฆฐ๋‹ค + canvas?.add(tempModule) + moduleSetupArray.push(tempModule) + moduleArray.push(tempModule) + canvas.renderAll() } + } else { + //๋””๋ฒ„๊น…์šฉ + // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) + // canvas?.add(tempModule) + // canvas.renderAll() } } } @@ -972,8 +974,14 @@ export function useModuleBasicSetting(tabNum) { } } - const maxRightEndPoint = surfaceMaxLines.right.x1 - 100 //์ตœ ์šฐ์ธก - const maxTopEndPoint = surfaceMaxLines.top.y1 - 50 //์ตœ ์ƒ๋‹จ + console.log('flowLines.top', flowLines.top) + + if (flowLines.left.type === 'flat') { + startPoint = flowLines.top + } + + const maxRightEndPoint = surfaceMaxLines.right.x1 //์ตœ ์šฐ์ธก + const maxTopEndPoint = surfaceMaxLines.top.y1 //์ตœ ์ƒ๋‹จ const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //์ตœํ•˜๋‹จ let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //์ „์ฒด ๋†’์ด์—์„œ ํ˜„์žฌ ๋†’์ด๋ฅผ ๋บŒ @@ -1139,19 +1147,22 @@ export function useModuleBasicSetting(tabNum) { canvas?.add(tempModule) moduleSetupArray.push(tempModule) moduleArray.push(tempModule) + canvas.renderAll() } }) } else { //์ตœ์ดˆ ํ•œ๋ฒˆ์€ ๊ทธ๋ƒฅ ๊ทธ๋ฆฐ๋‹ค //๊ฒน์น˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ํฌํ•จ๋œ ๋ชจ๋“ˆ๋งŒ ๊ทธ๋ฆฐ๋‹ค - // canvas?.add(tempModule) - // moduleSetupArray.push(tempModule) - // moduleArray.push(tempModule) + canvas?.add(tempModule) + moduleSetupArray.push(tempModule) + moduleArray.push(tempModule) + canvas.renderAll() } } else { //๋””๋ฒ„๊น…์šฉ - tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) - canvas?.add(tempModule) + // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) + // canvas?.add(tempModule) + // canvas.renderAll() } } } @@ -1242,6 +1253,7 @@ export function useModuleBasicSetting(tabNum) { canvas?.add(tempModule) moduleSetupArray.push(tempModule) moduleArray.push(tempModule) + canvas.renderAll() } }) } else { @@ -1250,11 +1262,13 @@ export function useModuleBasicSetting(tabNum) { canvas?.add(tempModule) moduleSetupArray.push(tempModule) moduleArray.push(tempModule) + canvas.renderAll() } } else { //๋””๋ฒ„๊น…์šฉ // tempModule.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 }) // canvas?.add(tempModule) + // canvas.renderAll() } } } From c6bb5963fad14ca39562658873771c6f95bb307d 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: Sat, 8 Feb 2025 20:44:01 +0900 Subject: [PATCH 205/213] =?UTF-8?q?-=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20-=20=ED=9A=8C=EB=A1=9C=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=EC=8B=9C=20=EC=A7=91=EA=B3=84=ED=91=9C=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 8 ++++--- .../step/PowerConditionalSelect.jsx | 24 ++----------------- .../common/useCanvasPopupStatusController.js | 1 + src/locales/ja.json | 4 ++++ src/locales/ko.json | 4 ++++ 5 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index daf0977a..bc03d102 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -51,6 +51,7 @@ export default function CircuitTrestleSetting({ id }) { // const [stepUpListData, setStepUpListData] = useRecoilState(stepUpListDataState) const [stepUpListData, setStepUpListData] = useState([]) const [seletedOption, setSeletedOption] = useState(null) + const { setModuleStatisticsData } = useCircuitTrestle() const { handleCanvasToPng } = useImgLoader() const { saveCanvas } = usePlan() @@ -104,7 +105,7 @@ export default function CircuitTrestleSetting({ id }) { const onAutoRecommend = () => { if (series.filter((s) => s.selected).length === 0) { swalFire({ - title: '์‹œ๋ฆฌ์ฆˆ๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.', + title: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error02'), type: 'alert', }) return @@ -304,7 +305,7 @@ export default function CircuitTrestleSetting({ id }) { if (placementModules.length > target) { swalFire({ - title: '๋ฐฐ์น˜๊ฐ€๋Šฅ ๋งค์ˆ˜๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ๋ฅผ ๋‹ค์‹œ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.', + title: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error01'), type: 'alert', }) return @@ -358,7 +359,7 @@ export default function CircuitTrestleSetting({ id }) { const onClickPrev = () => { // setAllocationType(ALLOCATION_TYPE.AUTO) swalFire({ - text: 'ํ• ๋‹นํ•œ ํšŒ๋กœ ๋ฒˆํ˜ธ๊ฐ€ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.', + text: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset.info'), type: 'alert', icon: 'warning', confirmFn: () => { @@ -376,6 +377,7 @@ export default function CircuitTrestleSetting({ id }) { } canvas.renderAll() + setModuleStatisticsData() }, }) } diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index b8197825..5ab5b70c 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -41,8 +41,8 @@ export default function PowerConditionalSelect(props) { const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2) const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState) const modelHeader = [ - { name: getMessage('์‹œ๋ฆฌ์ฆˆ'), width: '15%', prop: 'pcsSerNm', type: 'color-box' }, - { name: getMessage('๋ช…์นญ'), width: '15%', prop: 'goodsNo', type: 'color-box' }, + { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.series'), width: '15%', prop: 'pcsSerNm', type: 'color-box' }, + { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.name'), width: '15%', prop: 'goodsNo', type: 'color-box' }, { name: `${getMessage('modal.circuit.trestle.setting.power.conditional.select.rated.output')} (kW)`, width: '10%', @@ -73,26 +73,6 @@ export default function PowerConditionalSelect(props) { } }, []) - const checkValidation = () => { - const checkedSeries = series.filter((s) => s.selected) - if (checkedSeries.length === 0) { - swalFire({ - title: 'PCS ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.', - icon: 'warning', - }) - return false - } else if (checkedSeries.length === 1) { - if (checkedSeries[0].pcsMkrMultiType === 'SINGLE-P' && checkedSeries[0].pcsSerParallelYn === 'Y') { - swalFire({ - title: '๋ณ‘์„ค์€ ๋‹จ๋…์œผ๋กœ ์•ˆ ๋จ', - icon: 'warning', - }) - } - return false - } - return true - } - const onCheckSeries = (data) => { let copySeries = [] if (data.pcsMkrMultiType === 'MULTI') { diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index bbe4ae70..4757fbc0 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -50,6 +50,7 @@ export function useCanvasPopupStatusController(param = 1) { for (let i = 1; i < 3; i++) { const result = await getModuleSelection(i) // setModuleSelectionTotal((prev) => ({ ...prev, [i]: JSON.parse(unescapeString(result.popupStatus)) })) + if(!result) return if (i === 1) { setCompasDeg(result.popupStatus) } else if (i === 2) { diff --git a/src/locales/ja.json b/src/locales/ja.json index 6356dba2..f459b5ee 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -148,6 +148,8 @@ "modal.circuit.trestle.setting.circuit.allocation.auto": "่‡ชๅ‹•ๅ›ž่ทฏๅ‰ฒใ‚Šๅฝ“ใฆ", "modal.circuit.trestle.setting.circuit.allocation.passivity": "ๆ‰‹ๅ‹•ๅ›ž่ทฏๅ‰ฒใ‚Šๅฝ“ใฆ", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit": "ๅ›ž่ทฏ", + "modal.circuit.trestle.setting.circuit.allocation.passivity.series": "์‹œ๋ฆฌ์ฆˆ(JA)", + "modal.circuit.trestle.setting.circuit.allocation.passivity.name": "๋ช…์นญ(JA)", "modal.circuit.trestle.setting.circuit.allocation.passivity.info": "ๅŒใ˜ๅ›ž่ทฏใฎใƒขใ‚ธใƒฅใƒผใƒซใ‚’้ธๆŠž็Šถๆ…‹ใซใ—ใŸๅพŒใ€[็•ชๅท็ขบๅฎš]ใƒœใ‚ฟใƒณใ‚’ๆŠผใ™ใจ็•ชๅทใŒๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚Œใพใ™ใ€‚", "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional": "้ธๆŠžใ—ใŸใƒ‘ใƒฏใƒผใ‚ณใƒณใƒ‡ใ‚ฃใ‚ทใƒงใƒŠใƒผ", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num": "่จญๅฎšใ™ใ‚‹ๅ›ž่ทฏ็•ชๅท๏ผˆ1๏ฝž๏ผ‰", @@ -156,6 +158,8 @@ "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset.info": "์„ ํƒ๋œ ํŒŒ์›Œ ์ปจ๋””์…”๋„ˆ์˜ ํšŒ๋กœํ• ๋‹น์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.(JA)", "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset": "ใ™ในใฆใฎๅ›ž่ทฏ็•ชๅทใฎๅˆๆœŸๅŒ–", "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset.info": "ํšŒ๋กœ ํ• ๋‹น์˜ ์„ค์ •์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.(JA)", + "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error01": "๋ฐฐ์น˜๊ฐ€๋Šฅ ๋งค์ˆ˜๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ๋ฅผ ๋‹ค์‹œ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.(JA)", + "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error02": "์‹œ๋ฆฌ์ฆˆ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.(JA)", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "็•ชๅท็ขบๅฎš", "modal.circuit.trestle.setting.step.up.allocation": "ๆ˜‡ๅœง่จญๅฎš", "modal.circuit.trestle.setting.step.up.allocation.serial.amount": "ใ‚ทใƒชใ‚ขใƒซๆžšๆ•ฐ", diff --git a/src/locales/ko.json b/src/locales/ko.json index 758b3525..021b75e9 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -148,6 +148,8 @@ "modal.circuit.trestle.setting.circuit.allocation.auto": "์ž๋™ํšŒ๋กœ ํ• ๋‹น", "modal.circuit.trestle.setting.circuit.allocation.passivity": "์ˆ˜๋™ํšŒ๋กœ ํ• ๋‹น", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit": "ํšŒ๋กœ", + "modal.circuit.trestle.setting.circuit.allocation.passivity.series": "์‹œ๋ฆฌ์ฆˆ", + "modal.circuit.trestle.setting.circuit.allocation.passivity.name": "๋ช…์นญ", "modal.circuit.trestle.setting.circuit.allocation.passivity.info": "๋™์ผํ•œ ํšŒ๋กœ์˜ ๋ชจ๋“ˆ์„ ์„ ํƒ ์ƒํƒœ๋กœ ๋งŒ๋“  ํ›„ [๋ฒˆํ˜ธ ํ™•์ •] ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.", "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional": "์„ ํƒ๋œ ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num": "์„ค์ •ํ•  ํšŒ๋กœ๋ฒˆํ˜ธ(1~)", @@ -156,6 +158,8 @@ "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset.info": "์„ ํƒ๋œ ํŒŒ์›Œ ์ปจ๋””์…”๋„ˆ์˜ ํšŒ๋กœํ• ๋‹น์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.", "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset": "๋ชจ๋“  ํšŒ๋กœ๋ฒˆํ˜ธ ์ดˆ๊ธฐํ™”", "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset.info": "ํšŒ๋กœ ํ• ๋‹น์˜ ์„ค์ •์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error01": "๋ฐฐ์น˜๊ฐ€๋Šฅ ๋งค์ˆ˜๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์›Œ์ปจ๋””์…”๋„ˆ๋ฅผ ๋‹ค์‹œ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.", + "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error02": "์‹œ๋ฆฌ์ฆˆ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "๋ฒˆํ˜ธ ํ™•์ •", "modal.circuit.trestle.setting.step.up.allocation": "์Šน์•• ์„ค์ •", "modal.circuit.trestle.setting.step.up.allocation.serial.amount": "์ง๋ ฌ๋งค์ˆ˜", From 4a697fc152d42ee92c45d881b068954d25027c72 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 20:46:37 +0900 Subject: [PATCH 206/213] =?UTF-8?q?=EA=B0=80=EB=8C=80=EC=97=86=EC=9D=8C=20?= =?UTF-8?q?,=20=EB=9E=99=EB=A6=AC=EC=8A=A4=20=EB=82=98=EB=88=A0=EC=84=9C?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 1 - src/hooks/module/useTrestle.js | 26 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 84608186..24cb387b 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -234,7 +234,6 @@ export default function CircuitTrestleSetting({ id }) { ...getOptYn(), useModuleItemList: getUseModuleItemList(), roofSurfaceList: getRoofSurfaceList().map((surface) => { - console.log(surface.moduleList) return { ...surface, moduleList: surface.moduleList.map((module) => { diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index c4e456a9..20e8b4ac 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -54,16 +54,20 @@ export const useTrestle = () => { let isSnowGuard = construction.setupSnowCover const direction = parent.direction const rack = surface.trestleDetail.rack - let { rackQty, rackIntvlPct, rackYn, cvrPlvrYn } = surface.trestleDetail + let { rackQty, rackIntvlPct, rackYn, cvrPlvrYn, lessSupFitIntvlPct, lessSupFitQty } = surface.trestleDetail - if (!rack) { + if (!rack && lessSupFitIntvlPct === 0 && lessSupFitQty === 0) { //25/02/06 ๊ฐ€๋Œ€์—†์Œ์˜ ๊ฒฝ์šฐ ๋ž™์ •๋ณด๊ฐ€ ์—†์Œ return } - const rackInfos = Object.keys(rack).map((key) => { - return { key, value: rack[key] } - }) + let rackInfos = [] + + if (rack) { + rackInfos = Object.keys(rack).map((key) => { + return { key, value: rack[key] } + }) + } const result = calculateForApi(surface) @@ -1318,9 +1322,9 @@ export const useTrestle = () => { //๋ž™ ์—†์Œ ์ธ ๊ฒฝ์šฐ ์ง€์ง€๊ธˆ๊ตฌ ์„ค์น˜ const installBracketWithOutRack = (surface, exposedBottomModules, leftExposedHalfBottomModules, rightExposedHalfBottomPoints, isChidory) => { let { rackQty, rackIntvlPct, moduleIntvlHor, moduleIntvlVer, lessSupFitQty, lessSupFitIntvlPct } = surface.trestleDetail + rackQty = lessSupFitQty + rackIntvlPct = lessSupFitIntvlPct const direction = surface.direction - rackQty = 3 - rackIntvlPct = 10 canvas.renderAll() exposedBottomModules.forEach((module) => { @@ -1472,13 +1476,13 @@ export const useTrestle = () => { canvas.add(bracket) canvas.renderAll() if (direction === 'south') { - startPointY -= height + moduleIntvlVer + startPointY -= height } else if (direction === 'north') { - startPointY += height + moduleIntvlVer + startPointY += height } else if (direction === 'east') { - startPointX -= width + moduleIntvlHor + startPointX -= width } else if (direction === 'west') { - startPointX += width + moduleIntvlHor + startPointX += width } } } From b9b9d2ab3bf560ddcfdc7ed205b312a27590bed6 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 21:00:41 +0900 Subject: [PATCH 207/213] =?UTF-8?q?import=20=EC=95=88=EB=90=98=EC=9E=88?= =?UTF-8?q?=EB=8D=98=20=EB=82=B4=EC=9A=A9=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/useModuleBasicSetting.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 72035264..6d7105f9 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -21,6 +21,7 @@ import { useMasterController } from '@/hooks/common/useMasterController' import { v4 as uuidv4 } from 'uuid' // import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' import { isObjectNotEmpty } from '@/util/common-utils' +import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' export function useModuleBasicSetting(tabNum) { const canvas = useRecoilValue(canvasState) @@ -49,6 +50,7 @@ export function useModuleBasicSetting(tabNum) { const [saleStoreNorthFlg, setSaleStoreNorthFlg] = useState(false) const [currentObject, setCurrentObject] = useRecoilState(currentObjectState) + const { setModuleStatisticsData } = useCircuitTrestle() useEffect(() => { // console.log('basicSetting', basicSetting) From 74e0c26a16c3a8ae0790597741a41c0053ce114d Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 21:20:54 +0900 Subject: [PATCH 208/213] =?UTF-8?q?=EB=B0=A9=ED=96=A5=EC=84=A4=EC=A0=95=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/components/floor-plan/modal/basic/BasicSetting.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/floor-plan/modal/basic/BasicSetting.jsx b/src/components/floor-plan/modal/basic/BasicSetting.jsx index 2e39d160..68c1e617 100644 --- a/src/components/floor-plan/modal/basic/BasicSetting.jsx +++ b/src/components/floor-plan/modal/basic/BasicSetting.jsx @@ -108,6 +108,7 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) { .some((obj) => obj.modules?.length > 0) if (hasModules) { + orientationRef.current.handleNextStep() setTabNum(3) } }, []) From bd07a4aff28d7bbc8912b462996f939960c7586b Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Sat, 8 Feb 2025 21:33:25 +0900 Subject: [PATCH 209/213] =?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=BB=A8=ED=8E=8C=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 | 32 +++++++++++++++++++++--- src/locales/ja.json | 4 ++- src/locales/ko.json | 3 ++- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index ed2249b0..db248f94 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -170,11 +170,37 @@ export default function CanvasMenu(props) { setType('outline') break case 3: - setType('surface') - break - case 4: 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) { + swalFire({ + text: getMessage('module.delete.confirm'), + type: 'confirm', + confirmFn: () => { + //ํ•ด๋‹น ๋ฉ”๋‰ด ์ด๋™์‹œ ๋ฐฐ์น˜๋ฉด ์‚ญ์ œ + const moduleSurfacesArray = canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE || obj.name === POLYGON_TYPE.MODULE) + if (moduleSurfacesArray.length > 0) { + moduleSurfacesArray.forEach((moduleSurface) => { + canvas.remove(moduleSurface) + }) + canvas.renderAll() + } + setType('surface') + }, + denyFn: () => { + setType('surface') + }, + }) + } + } else { + setType('surface') + } + break + case 4: if (menuNumber < menu.index) { if (!checkMenuAndCanvasState()) { swalFire({ text: getMessage('menu.validation.canvas.roof') }) diff --git a/src/locales/ja.json b/src/locales/ja.json index f459b5ee..adc8708b 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1010,5 +1010,7 @@ "batch.object.outside.roof": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏๅฑ‹ๆ นใซ่จญ็ฝฎใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "batch.object.notinstall.cross": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏ้‡่ค‡ใ—ใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใงใใพใ›ใ‚“ใ€‚", "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", - "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(JA)" + "module.trestleDetail.not.exist": "๊ฐ€๋Œ€ ์ƒ์„ธ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", + "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(JA)", + "module.delete.confirm": "ใƒ‘ใƒใƒซใ‚’ๅ‰Š้™คใ—ใฆ้ขๅ…ฅๅŠ›ใซๆˆปใ‚Šใพใ™ใ€‚ๆญฃใ—ใ„ใงใ™ใ‹๏ผŸ\nใฏใ„๏ผฝใ‚’้ธๆŠžใ™ใ‚‹ใจๅ‰Š้™คใ—ใ€้ขๅ…ฅๅŠ›ใซๆˆปใ‚Šใพใ™ใ€‚\nใ„ใ„ใˆใ€ใ‚’้ธๆŠžใ™ใ‚‹ใจใ€ๅ‰Š้™คใ›ใšใซ็พๅœจใฎ็Šถๆ…‹ใ‚’็ถญๆŒใ—ใพใ™ใ€‚" } diff --git a/src/locales/ko.json b/src/locales/ko.json index 021b75e9..15e6e363 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1012,5 +1012,6 @@ "batch.object.notinstall.cross": "์˜ค๋ธŒ์ ํŠธ๋Š” ๊ฒน์ณ์„œ ์„ค์น˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", "module.trestleDetail.not.exist": "๊ฐ€๋Œ€ ์ƒ์„ธ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", - "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "module.delete.confirm": "ํŒจ๋„์„ ์‚ญ์ œํ•˜๊ณ  ๋ฉด์ž…๋ ฅ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?\n[์˜ˆ]๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ญ์ œํ•˜๊ณ , ๋ฉด ์ž…๋ ฅ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.\n[์•„๋‹ˆ์˜ค]๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค." } From 520c96eabf0bb82782a489bf47cc9e2c33809249 Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Sat, 8 Feb 2025 21:44:22 +0900 Subject: [PATCH 210/213] =?UTF-8?q?fix:=20=EA=B2=AC=EC=A0=81=EC=84=9C=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=EC=9D=B4=ED=9B=84=20=EC=BA=94=EB=B2=84?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EB=8F=8C=EC=95=84=EC=99=94=EC=9D=84=20?= =?UTF-8?q?=EB=95=8C=20=EC=BA=94=EB=B2=84=EC=8A=A4=20=EC=82=AC=EB=9D=BC?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolves: #656, #677 --- src/components/floor-plan/CanvasMenu.jsx | 14 ++++++++------ src/hooks/usePlan.js | 21 +++++++++++++++++++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index db248f94..398797f8 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -74,7 +74,7 @@ export default function CanvasMenu(props) { const [estimateCopyPopupOpen, setEstimateCopyPopupOpen] = useState(false) const { getMessage } = useMessage() - const { saveCanvas } = usePlan() + const { saveCanvas, reloadCanvasStatus } = usePlan() const { swalFire } = useSwal() const { initEvent, addCanvasMouseEventListener, addDocumentEventListener } = useEvent() // const { initEvent, addCanvasMouseEventListener, addDocumentEventListener } = useContext(EventContext) @@ -149,7 +149,7 @@ export default function CanvasMenu(props) { setIsGlobalLoading(false) } - const onClickNav = (menu) => { + const onClickNav = async (menu) => { switch (menu.index) { case 0: swalFire({ @@ -164,10 +164,11 @@ export default function CanvasMenu(props) { case 1: setType('placementShape') onClickPlacementInitialMenu() - + await reloadCanvasStatus(objectNo, pid) break case 2: setType('outline') + await reloadCanvasStatus(objectNo, pid) break case 3: console.log('๐Ÿš€ ~ onClickNav ~ menu:', menu) @@ -199,6 +200,7 @@ export default function CanvasMenu(props) { } else { setType('surface') } + await reloadCanvasStatus(objectNo, pid) break case 4: if (menuNumber < menu.index) { @@ -211,7 +213,7 @@ export default function CanvasMenu(props) { } else { router.push(`/floor-plan?pid=${pid}&objectNo=${objectNo}`) } - + await reloadCanvasStatus(objectNo, pid) break case 5: setIsGlobalLoading(true) @@ -617,10 +619,10 @@ export default function CanvasMenu(props) {
  • { + onClick={async () => { if (['2', '3'].includes(canvasSetting?.roofSizeSet) && menu.index === 2) return if (menuNumber === 4 && [1, 2].includes(menu.index)) return - onClickNav(menu) + await onClickNav(menu) }} > -
  • diff --git a/src/components/floor-plan/modal/module/PanelEdit.jsx b/src/components/floor-plan/modal/module/PanelEdit.jsx index b53bc98e..bfff66a2 100644 --- a/src/components/floor-plan/modal/module/PanelEdit.jsx +++ b/src/components/floor-plan/modal/module/PanelEdit.jsx @@ -36,7 +36,7 @@ export default function PanelEdit(props) { const { moduleMove, moduleCopy, moduleMultiMove, moduleMultiCopy, moduleMoveAll, moduleCopyAll } = useModule() useEffect(() => { - if (canvas) { + if (!canvas) { const isSetupModules = canvas.getObjects().filter((obj) => obj.name === 'module') // selectedObj์— ์—†๋Š” ๊ฐ์ฒด๋งŒ ํ•„ํ„ฐ๋ง isSetupModules.forEach((obj) => obj.set({ lockMovementX: false, lockMovementY: false })) } @@ -52,8 +52,8 @@ export default function PanelEdit(props) { }) return } - - const completeSurfaces = canvas.getObject().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.isComplete) + debugger + const completeSurfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.isComplete) if (completeSurfaces.length > 0) { swalFire({ diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index c7f13dc0..bd462b5e 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -47,6 +47,7 @@ export function useModule() { canvas.discardActiveObject() //์„ ํƒํ•ด์ œ + debugger const isSetupModules = getOtherModules(selectedObj) const selectedModules = canvas.getObjects().filter((obj) => selectedIds.includes(obj.id) && obj.name === 'module') //์„ ํƒํ–ˆ๋˜ ๊ฐ์ฒด๋“ค๋งŒ ๊ฐ€์ ธ์˜ด const setupSurface = canvas diff --git a/src/locales/ja.json b/src/locales/ja.json index f459b5ee..ab6d722b 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1010,5 +1010,6 @@ "batch.object.outside.roof": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏๅฑ‹ๆ นใซ่จญ็ฝฎใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "batch.object.notinstall.cross": "ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏ้‡่ค‡ใ—ใฆใ‚คใƒณใ‚นใƒˆใƒผใƒซใงใใพใ›ใ‚“ใ€‚", "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", - "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(JA)" + "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(JA)", + "not.allocation.exist.module": "ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.(JA)" } diff --git a/src/locales/ko.json b/src/locales/ko.json index 021b75e9..887e9cae 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1012,5 +1012,6 @@ "batch.object.notinstall.cross": "์˜ค๋ธŒ์ ํŠธ๋Š” ๊ฒน์ณ์„œ ์„ค์น˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", "module.trestleDetail.not.exist": "๊ฐ€๋Œ€ ์ƒ์„ธ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", - "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "not.allocation.exist.module": "ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค." } From 88fc1f09d3a580abf2db29e3c7aa8d729c2a7653 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: Sat, 8 Feb 2025 21:53:59 +0900 Subject: [PATCH 212/213] =?UTF-8?q?-=20=EB=A8=B8=EC=A7=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/ja.json | 2 +- src/locales/ko.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/ja.json b/src/locales/ja.json index 05a90d54..7646c783 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1012,6 +1012,6 @@ "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", "module.trestleDetail.not.exist": "๊ฐ€๋Œ€ ์ƒ์„ธ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(JA)", - "module.delete.confirm": "ใƒ‘ใƒใƒซใ‚’ๅ‰Š้™คใ—ใฆ้ขๅ…ฅๅŠ›ใซๆˆปใ‚Šใพใ™ใ€‚ๆญฃใ—ใ„ใงใ™ใ‹๏ผŸ\nใฏใ„๏ผฝใ‚’้ธๆŠžใ™ใ‚‹ใจๅ‰Š้™คใ—ใ€้ขๅ…ฅๅŠ›ใซๆˆปใ‚Šใพใ™ใ€‚\nใ„ใ„ใˆใ€ใ‚’้ธๆŠžใ™ใ‚‹ใจใ€ๅ‰Š้™คใ›ใšใซ็พๅœจใฎ็Šถๆ…‹ใ‚’็ถญๆŒใ—ใพใ™ใ€‚" + "module.delete.confirm": "ใƒ‘ใƒใƒซใ‚’ๅ‰Š้™คใ—ใฆ้ขๅ…ฅๅŠ›ใซๆˆปใ‚Šใพใ™ใ€‚ๆญฃใ—ใ„ใงใ™ใ‹๏ผŸ\nใฏใ„๏ผฝใ‚’้ธๆŠžใ™ใ‚‹ใจๅ‰Š้™คใ—ใ€้ขๅ…ฅๅŠ›ใซๆˆปใ‚Šใพใ™ใ€‚\nใ„ใ„ใˆใ€ใ‚’้ธๆŠžใ™ใ‚‹ใจใ€ๅ‰Š้™คใ›ใšใซ็พๅœจใฎ็Šถๆ…‹ใ‚’็ถญๆŒใ—ใพใ™ใ€‚", "not.allocation.exist.module": "ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.(JA)" } diff --git a/src/locales/ko.json b/src/locales/ko.json index e1b698c5..ad5dac68 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -1013,6 +1013,6 @@ "module.not.batch.north": "๋ถ์ชฝ์—๋Š” ๋ชจ๋“ˆ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", "module.trestleDetail.not.exist": "๊ฐ€๋Œ€ ์ƒ์„ธ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", "max.select": "์ตœ๋Œ€ {0}๊ฐœ๊นŒ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", - "module.delete.confirm": "ํŒจ๋„์„ ์‚ญ์ œํ•˜๊ณ  ๋ฉด์ž…๋ ฅ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?\n[์˜ˆ]๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ญ์ œํ•˜๊ณ , ๋ฉด ์ž…๋ ฅ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.\n[์•„๋‹ˆ์˜ค]๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค." + "module.delete.confirm": "ํŒจ๋„์„ ์‚ญ์ œํ•˜๊ณ  ๋ฉด์ž…๋ ฅ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?\n[์˜ˆ]๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ญ์ œํ•˜๊ณ , ๋ฉด ์ž…๋ ฅ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.\n[์•„๋‹ˆ์˜ค]๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.", "not.allocation.exist.module": "ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค." } From 6b503a4d57a4a4aae1950fecf7a78530ca9bd810 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sun, 9 Feb 2025 13:24:20 +0900 Subject: [PATCH 213/213] =?UTF-8?q?=EC=B2=98=EB=A7=88=EB=A0=A5=EB=B0=94,?= =?UTF-8?q?=20=EA=B0=80=EB=8C=80,=20=EC=A7=80=EC=A7=80=EA=B8=88=EA=B5=AC?= =?UTF-8?q?=20=EC=9C=84=EB=A1=9C=20=EC=98=AC=EB=A6=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 6d7105f9..3197f5ad 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -277,10 +277,23 @@ export function useModuleBasicSetting(tabNum) { //๋ฐ”๋กœ ๋“ค์–ด์˜ฌ๋•Œ const setupModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + const eaveBars = canvas.getObjects().filter((obj) => obj.name === 'eaveBar' || obj.name === 'halfEaveBar') + const racks = canvas.getObjects().filter((obj) => obj.name === 'rack' || obj.name === 'smartRack') + const brackets = canvas.getObjects().filter((obj) => obj.name === 'brackets') setupModules.forEach((obj) => { canvas.bringToFront(obj) }) + eaveBars.forEach((obj) => { + canvas.bringToFront(obj) + }) + racks.forEach((obj) => { + canvas.bringToFront(obj) + }) + brackets.forEach((obj) => { + canvas.bringToFront(obj) + }) + //๋ชจ๋“ˆ์„ค์น˜๋ฉด ํด๋ฆญ์ด๋ฒคํŠธ addTargetMouseEventListener('mousedown', setupSurface, function () { toggleSelection(setupSurface)