From dfc67cb7ddd1904bf4a5c2696315f2060a035870 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Fri, 7 Feb 2025 20:28:41 +0900 Subject: [PATCH 1/4] =?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 2/4] =?UTF-8?q?-=20=EB=B2=84=EA=B7=B8=20=EC=88=98=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 && (
- {/*