새 플랜 데이터 초기화

This commit is contained in:
yjnoh 2025-02-07 11:35:46 +09:00
parent 38c4ba5a59
commit c92b65e0f9
7 changed files with 75 additions and 37 deletions

View File

@ -35,6 +35,8 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) {
const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState)
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const [isClosePopup, setIsClosePopup] = useState({ close: false, id: 0 })
// const { initEvent } = useContext(EventContext) // const { initEvent } = useContext(EventContext)
const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting(1) const { manualModuleSetup, autoModuleSetup, manualFlatroofModuleSetup, autoFlatroofModuleSetup } = useModuleBasicSetting(1)
const { updateObjectDate } = useMasterController() 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(() => { useEffect(() => {
if (canvasSetting.roofSizeSet !== '3') { if (canvasSetting.roofSizeSet !== '3') {
manualModuleSetup(placementRef) manualModuleSetup(placementRef)
} else { } else {
manualFlatroofModuleSetup(placementFlatRef) manualFlatroofModuleSetup(placementFlatRef)
} }
}, [isManualModuleSetup]) if (isClosePopup.close) {
closePopup(isClosePopup.id)
}
}, [isManualModuleSetup, isClosePopup])
return ( return (
<WithDraggable isShow={true} pos={pos}> <WithDraggable isShow={true} pos={pos}>
<div className={`modal-pop-wrap lx-2`}> <div className={`modal-pop-wrap lx-2`}>
<div className="modal-head modal-handle"> <div className="modal-head modal-handle">
<h1 className="title">{getMessage('plan.menu.module.circuit.setting.default')}</h1> <h1 className="title">{getMessage('plan.menu.module.circuit.setting.default')}</h1>
<button className="modal-close" onClick={() => closePopup(id)}> <button className="modal-close" onClick={() => handleClosePopup(id)}>
닫기 닫기
</button> </button>
</div> </div>

View File

@ -58,9 +58,9 @@ export default function Module({ setTabNum }) {
useEffect(() => { useEffect(() => {
if (tempModuleSelectionData.roofConstructions.length > 0) { if (tempModuleSelectionData.roofConstructions.length > 0) {
if (tempModuleSelectionData.common.moduleItemId && isObjectNotEmpty(tempModuleSelectionData.module)) { if (tempModuleSelectionData.common.moduleItemId && isObjectNotEmpty(tempModuleSelectionData.module)) {
setModuleSelectionData(tempModuleSelectionData)
// temp (addedRoofs) // temp (addedRoofs)
if (tempModuleSelectionData.roofConstructions.length === addedRoofs.length) { if (tempModuleSelectionData.roofConstructions.length === addedRoofs.length) {
setModuleSelectionData(tempModuleSelectionData)
moduleSelectedDataTrigger(tempModuleSelectionData) moduleSelectedDataTrigger(tempModuleSelectionData)
} }
} }

View File

@ -2,8 +2,10 @@ import { forwardRef, useEffect, useState } from 'react'
import { useMessage } from '@/hooks/useMessage' import { useMessage } from '@/hooks/useMessage'
import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting'
import { checkedModuleState, currentCanvasPlanState } from '@/store/canvasAtom' import { checkedModuleState, currentCanvasPlanState } from '@/store/canvasAtom'
import { useRecoilValue, useSetRecoilState } from 'recoil' import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'
import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions'
import { isObjectNotEmpty } from '@/util/common-utils'
import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController'
const Placement = forwardRef((props, refs) => { const Placement = forwardRef((props, refs) => {
const { getMessage } = useMessage() const { getMessage } = useMessage()
@ -14,11 +16,13 @@ const Placement = forwardRef((props, refs) => {
const [isMaxSetup, setIsMaxSetup] = useState('false') const [isMaxSetup, setIsMaxSetup] = useState('false')
const [selectedItems, setSelectedItems] = useState({}) const [selectedItems, setSelectedItems] = useState({})
const { selectedModules } = useModuleBasicSetting(3) const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState)
const setCheckedModules = useSetRecoilState(checkedModuleState) const setCheckedModules = useSetRecoilState(checkedModuleState)
const moduleSelectionData = useRecoilValue(moduleSelectionDataState) const moduleSelectionData = useRecoilValue(moduleSelectionDataState)
const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2)
// //
useEffect(() => { useEffect(() => {
if (moduleSelectionData) { 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(() => { useEffect(() => {
const checkedModuleIds = Object.keys(selectedItems).filter((key) => selectedItems[key]) if (isObjectNotEmpty(selectedItems) && isObjectNotEmpty(selectedModules)) {
const moduleArray = selectedModules.itemList.filter((item) => { const checkedModuleIds = Object.keys(selectedItems).filter((key) => selectedItems[key])
return checkedModuleIds.includes(item.itemId) const moduleArray = selectedModules.itemList.filter((item) => {
}) return checkedModuleIds.includes(item.itemId)
setCheckedModules(moduleArray) })
}, [selectedItems]) setCheckedModules(moduleArray)
}
}, [selectedItems, selectedModules])
const moduleData = { const moduleData = {
header: [ header: [
@ -74,21 +96,6 @@ const Placement = forwardRef((props, refs) => {
setSelectedItems({ ...selectedItems, [e.target.name]: e.target.checked }) 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 ( return (
<> <>
<div className="module-table-flex-wrap mb10"> <div className="module-table-flex-wrap mb10">

View File

@ -204,8 +204,8 @@ export function useCanvasConfigInitialize() {
.forEach((obj) => { .forEach((obj) => {
obj.set({ obj.set({
selectable: true, selectable: true,
lockMovementX: false, lockMovementX: true,
lockMovementY: false, lockMovementY: true,
}) })
obj.setViewLengthText(false) obj.setViewLengthText(false)
}) })

View File

@ -60,16 +60,14 @@ export function useModuleBasicSetting(tabNum) {
//모듈 선택에서 선택된 값들 넘어옴 //모듈 선택에서 선택된 값들 넘어옴
useEffect(() => { useEffect(() => {
if (moduleSelectionData && tabNum === 3) { if (moduleSelectionData) {
if (canvasSetting.roofSizeSet !== '3') { if (canvasSetting.roofSizeSet !== '3') {
const common = moduleSelectionData.common const common = moduleSelectionData.common
const roofConstructions = moduleSelectionData.roofConstructions const roofConstructions = moduleSelectionData.roofConstructions
const listParams = roofConstructions.map((item) => { const listParams = roofConstructions.map((item) => {
return { return {
...common, ...common,
moduleTpCd: selectedModules.itemTp, // moduleTpCd: selectedModules.itemTp,
roofMatlCd: item.trestle.roofMatlCd, roofMatlCd: item.trestle.roofMatlCd,
trestleMkrCd: item.trestle.trestleMkrCd, trestleMkrCd: item.trestle.trestleMkrCd,
constMthdCd: item.trestle.constMthdCd, constMthdCd: item.trestle.constMthdCd,
@ -90,7 +88,6 @@ export function useModuleBasicSetting(tabNum) {
} }
} else { } else {
//육지붕 일경우에는 바로 배치면 설치LL //육지붕 일경우에는 바로 배치면 설치LL
const roofs = canvas.getObjects().filter((roof) => roof.name === 'roof')
canvas canvas
.getObjects() .getObjects()
.filter((roof) => roof.name === 'roof') .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) const isExistSurface = canvas.getObjects().find((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.parentId === roof.id)
if (isExistSurface) { canvas.remove(isExistSurface)
return
}
let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1 let offsetLength = canvasSetting.roofSizeSet === '3' ? -30 : (trestleDetail.eaveIntvl / 10) * -1
setSurfaceShapePattern(roof, roofDisplay.column, true) //패턴 변경 setSurfaceShapePattern(roof, roofDisplay.column, true) //패턴 변경
@ -257,6 +252,12 @@ export function useModuleBasicSetting(tabNum) {
canvas.renderAll() canvas.renderAll()
//바로 들어올때
const setupModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE)
setupModules.forEach((obj) => {
canvas.bringToFront(obj)
})
//모듈설치면 클릭이벤트 //모듈설치면 클릭이벤트
addTargetMouseEventListener('mousedown', setupSurface, function () { addTargetMouseEventListener('mousedown', setupSurface, function () {
toggleSelection(setupSurface) toggleSelection(setupSurface)

View File

@ -95,6 +95,8 @@ export function useModuleTabContents({ tabIndex, addRoof, setAddedRoofs, roofTab
}) })
setRaftCodes(raftCodeList) setRaftCodes(raftCodeList)
console.log('addRoof', addRoof)
if (addRoof.raft) { if (addRoof.raft) {
setSelectedRaftBase({ setSelectedRaftBase({
...selectedRaftBase, ...selectedRaftBase,

View File

@ -36,6 +36,7 @@ import { useCanvasMenu } from '../common/useCanvasMenu'
import { menuTypeState } from '@/store/menuAtom' import { menuTypeState } from '@/store/menuAtom'
import { usePopup } from '../usePopup' import { usePopup } from '../usePopup'
import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider' import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider'
import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions'
const defaultDotLineGridSetting = { const defaultDotLineGridSetting = {
INTERVAL: { INTERVAL: {
@ -114,6 +115,10 @@ export function useCanvasSetting() {
const [fetchRoofMaterials, setFetchRoofMaterials] = useRecoilState(fetchRoofMaterialsState) const [fetchRoofMaterials, setFetchRoofMaterials] = useRecoilState(fetchRoofMaterialsState)
const [type, setType] = useRecoilState(menuTypeState) const [type, setType] = useRecoilState(menuTypeState)
const setCurrentMenu = useSetRecoilState(currentMenuState) const setCurrentMenu = useSetRecoilState(currentMenuState)
const resetModuleSelectionData = useResetRecoilState(moduleSelectionDataState) //다음으로 넘어가는 최종 데이터
const resetSelectedModules = useResetRecoilState(selectedModuleState) //선택된 모듈
const SelectOptions = [ const SelectOptions = [
{ id: 1, name: getMessage('modal.canvas.setting.grid.dot.line.setting.line.origin'), value: 1 }, { id: 1, name: getMessage('modal.canvas.setting.grid.dot.line.setting.line.origin'), value: 1 },
{ id: 2, name: '1/2', value: 1 / 2 }, { id: 2, name: '1/2', value: 1 / 2 },
@ -446,6 +451,14 @@ export function useCanvasSetting() {
setType('outline') setType('outline')
setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE) setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE)
} }
//모듈 선택 데이터 초기화
resetModuleSelectionData()
const isModuleExist = canvas.getObjects().some((obj) => obj.name === POLYGON_TYPE.MODULE)
if (!isModuleExist) {
resetSelectedModules()
}
} catch (error) { } catch (error) {
swalFire({ text: error.message, icon: 'error' }) swalFire({ text: error.message, icon: 'error' })
} }