From a4b20b71c58d8c14c16ab85f1d43ddc9ed1725d9 Mon Sep 17 00:00:00 2001 From: ysCha Date: Fri, 30 Jan 2026 11:38:34 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=ED=8C=A9=EC=8A=A4=20-=20=EC=B2=B4=ED=81=AC?= =?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/components/auth/Join.jsx | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/components/auth/Join.jsx b/src/components/auth/Join.jsx index f414cd62..4062d313 100644 --- a/src/components/auth/Join.jsx +++ b/src/components/auth/Join.jsx @@ -98,6 +98,10 @@ export default function Join() { alert(getMessage('common.message.required.data', [getMessage('join.sub1.fax')])) faxRef.current.focus() return false + }else if (!telRegex.test(fax)) { + alert(getMessage('join.validation.check1', [getMessage('join.sub1.fax')])) + faxRef.current.focus() + return false } const bizNo = formData.get('bizNo') @@ -174,6 +178,10 @@ export default function Join() { alert(getMessage('common.message.required.data', [getMessage('join.sub2.fax')])) userFaxRef.current.focus() return false + } else if (!telRegex.test(userFax)) { + alert(getMessage('join.validation.check1', [getMessage('join.sub2.fax')])) + userFaxRef.current.focus() + return false } return true @@ -349,7 +357,15 @@ export default function Join() { {getMessage('join.sub1.fax')}*
- +
@@ -466,7 +482,8 @@ export default function Join() { name="userFax" className="input-light" maxLength={15} - onChange={inputNumberCheck} + placeholder={getMessage('join.sub1.telNo_placeholder')} + onChange={inputTelNumberCheck} ref={userFaxRef} /> From 083d144bca13db7d81da215cbad852f4026970ba Mon Sep 17 00:00:00 2001 From: ysCha Date: Fri, 30 Jan 2026 14:00:03 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[144]=EC=9C=A1=EC=A7=80=EB=B4=89=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=9E=84=EC=8B=9C=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/placementShape/PlacementShapeSetting.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index 4ec45dd5..95442b8a 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -63,7 +63,7 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla const roofSizeSetArray = [ { id: 'ra01', name: 'roofSizeSet', value: '1', message: 'modal.placement.initial.setting.size.roof' }, { id: 'ra02', name: 'roofSizeSet', value: '2', message: 'modal.placement.initial.setting.size.actual' }, - { id: 'ra03', name: 'roofSizeSet', value: '3', message: 'modal.placement.initial.setting.size.none.pitch' }, + // { id: 'ra03', name: 'roofSizeSet', value: '3', message: 'modal.placement.initial.setting.size.none.pitch' }, ] /** From 13292d4c5093d5de247ac365a7ab75cdcce7f69b Mon Sep 17 00:00:00 2001 From: ysCha Date: Fri, 30 Jan 2026 14:15:50 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[1444]=EC=9C=A1=EC=A7=80=EB=B4=89=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=9E=84=EC=8B=9C=EC=82=AD=EC=A0=9C(?= =?UTF-8?q?=EC=9A=B4=EC=98=81=EB=A7=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/placementShape/PlacementShapeSetting.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index 95442b8a..4ec45dd5 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -63,7 +63,7 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla const roofSizeSetArray = [ { id: 'ra01', name: 'roofSizeSet', value: '1', message: 'modal.placement.initial.setting.size.roof' }, { id: 'ra02', name: 'roofSizeSet', value: '2', message: 'modal.placement.initial.setting.size.actual' }, - // { id: 'ra03', name: 'roofSizeSet', value: '3', message: 'modal.placement.initial.setting.size.none.pitch' }, + { id: 'ra03', name: 'roofSizeSet', value: '3', message: 'modal.placement.initial.setting.size.none.pitch' }, ] /** From d643ffe2ea05d2fd7fa76a12890951044d23d134 Mon Sep 17 00:00:00 2001 From: ysCha Date: Fri, 30 Jan 2026 14:34:57 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[1444]=EC=9C=A1=EC=A7=80=EB=B4=89=20TypeErr?= =?UTF-8?q?or:=20Cannot=20destructure=20property=20'rackYn'=20of=20'trestl?= =?UTF-8?q?eDetail'=20as=20it=20is=20null.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 3 +++ src/hooks/module/useModule.js | 4 ++-- src/hooks/module/useModuleBasicSetting.js | 19 ++++++++++++++++++- src/hooks/module/useTrestle.js | 8 ++++++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 4c4ea028..02e9d171 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -124,6 +124,9 @@ export default function CircuitTrestleSetting({ id }) { */ const validateModuleSizeForRack = (surface) => { const { modules, direction, trestleDetail } = surface + if (!trestleDetail) { + return true // 상세 정보 없음 + } const { rackYn, moduleIntvlHor, moduleIntvlVer } = trestleDetail if (rackYn === 'N' || !modules || modules.length < 2) { diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index 45b3b50f..8e59a1e7 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -749,7 +749,7 @@ export function useModule() { const copyModules = [] const moduleSetupSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === activeModule.surfaceId) let isWarning = false - const { moduleIntvlHor, moduleIntvlVer } = moduleSetupSurface.trestleDetail + const { moduleIntvlHor = 0, moduleIntvlVer = 0 } = moduleSetupSurface.trestleDetail || {} canvas.discardActiveObject() targetModules.forEach((module) => { const { top, left } = getPosotion(module, type, moduleIntvlHor, true) @@ -859,7 +859,7 @@ export function useModule() { const copyModules = [] const moduleSetupSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === activeModule.surfaceId) let isWarning = false - const { moduleIntvlHor, moduleIntvlVer } = moduleSetupSurface.trestleDetail + const { moduleIntvlHor = 0, moduleIntvlVer = 0 } = moduleSetupSurface.trestleDetail || {} canvas.discardActiveObject() targetModules.forEach((module) => { const { top, left } = getPosotion(module, type, moduleIntvlVer, true) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 45fd8a53..5ddf69d0 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -338,10 +338,27 @@ export function useModuleBasicSetting(tabNum) { }) let isNorth = false + const defaultTrestleDetail = { + rackYn: 'N', + moduleIntvlHor: +roofSizeSet === 3 ? 300 : 0, + moduleIntvlVer: +roofSizeSet === 3 ? 100 : 0, + rack: null, + rackQty: 0, + rackIntvlPct: 0, + cvrPlvrYn: 'N', + lessSupFitIntvlPct: 0, + lessSupFitQty: 0, + } const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id) + const normalizedTrestleDetail = trestleDetail + ? { ...defaultTrestleDetail, ...trestleDetail } + : isExistSurface?.trestleDetail + ? { ...defaultTrestleDetail, ...isExistSurface.trestleDetail } + : defaultTrestleDetail if (isExistSurface) { + isExistSurface.set({ trestleDetail: normalizedTrestleDetail }) if (canvasSetting.roofSizeSet != '3') { //북면이 있지만 if (roof.directionText && roof.directionText.indexOf('北') > -1) { @@ -424,7 +441,7 @@ export function useModuleBasicSetting(tabNum) { originY: 'center', modules: [], roofMaterial: roof.roofMaterial, - trestleDetail: trestleDetail, + trestleDetail: normalizedTrestleDetail, isNorth: isNorth, perPixelTargetFind: true, isSaleStoreNorthFlg: moduleSelectionData.common.saleStoreNorthFlg == '1' ? true : false, //북면설치가능점 여부 diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 88980cad..e4ee52a8 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -65,6 +65,10 @@ export const useTrestle = () => { if (+roofSizeSet === 3) { return } + const trestleDetail = surface.trestleDetail + if (!trestleDetail) { + return + } const construction = moduleSelectionData?.roofConstructions?.find((construction) => construction.roofIndex === roofMaterialIndex).construction if (!construction) { return @@ -76,8 +80,8 @@ export const useTrestle = () => { let isSnowGuard = construction.setupSnowCover let cvrLmtRow = construction.cvrLmtRow const direction = parent.direction - const rack = surface.trestleDetail.rack - let { rackQty, rackIntvlPct, rackYn, cvrPlvrYn, lessSupFitIntvlPct, lessSupFitQty } = surface.trestleDetail + const rack = trestleDetail.rack + let { rackQty, rackIntvlPct, rackYn, cvrPlvrYn, lessSupFitIntvlPct, lessSupFitQty } = trestleDetail if (!rack && lessSupFitIntvlPct === 0 && lessSupFitQty === 0) { //25/02/06 가대없음의 경우 랙정보가 없음