diff --git a/src/common/common.js b/src/common/common.js index e77f84a5..cf6d37bf 100644 --- a/src/common/common.js +++ b/src/common/common.js @@ -183,6 +183,8 @@ export const SAVE_KEY = [ 'roofMaterial', 'isComplete', 'moduleInfo', + 'circuitNumber', + 'circuit', ] export const OBJECT_PROTOTYPE = [fabric.Line.prototype, fabric.Polygon.prototype, fabric.Triangle.prototype] diff --git a/src/components/floor-plan/FloorPlan.jsx b/src/components/floor-plan/FloorPlan.jsx index 6c29dd57..6adae9a8 100644 --- a/src/components/floor-plan/FloorPlan.jsx +++ b/src/components/floor-plan/FloorPlan.jsx @@ -7,8 +7,9 @@ import { useCanvasSetting } from '@/hooks/option/useCanvasSetting' import { usePopup } from '@/hooks/usePopup' import '@/styles/contents.scss' import { notFound, useSearchParams } from 'next/navigation' -import { useRecoilState } from 'recoil' +import { useRecoilState, useResetRecoilState } from 'recoil' import { correntObjectNoState } from '@/store/settingAtom' +import { currentMenuState } from '@/store/canvasAtom' export default function FloorPlan({ children }) { const [correntObjectNo, setCurrentObjectNo] = useRecoilState(correntObjectNoState) @@ -19,6 +20,12 @@ export default function FloorPlan({ children }) { const { closeAll } = usePopup() const { menuNumber, setMenuNumber } = useCanvasMenu() const { fetchSettings, fetchBasicSettings } = useCanvasSetting() + const resetCurrentMenu = useResetRecoilState(currentMenuState) + useEffect(() => { + return () => { + resetCurrentMenu() + } + }, []) // URL 파라미터에서 objectNo 설정 useEffect(() => { diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 1d28d7d0..06cab2f1 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -1,11 +1,12 @@ import { GlobalDataContext } from '@/app/GlobalDataProvider' import QSelectBox from '@/components/common/select/QSelectBox' +import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' import { useMasterController } from '@/hooks/common/useMasterController' import { useMessage } from '@/hooks/useMessage' import { useSwal } from '@/hooks/useSwal' import { pcsCheckState } from '@/store/circuitTrestleAtom' import { globalLocaleStore } from '@/store/localeAtom' -import { selectedModuleState } from '@/store/selectedModuleOptions' +import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' import { isNullOrUndefined } from '@/util/common-utils' import { useContext, useEffect, useState } from 'react' import { useRecoilState } from 'recoil' @@ -37,7 +38,8 @@ export default function PowerConditionalSelect(props) { const { getPcsMakerList, getPcsModelList } = useMasterController() const selectedModules = useRecoilValue(selectedModuleState) const { swalFire } = useSwal() - // const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState) + 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' }, @@ -66,7 +68,6 @@ export default function PowerConditionalSelect(props) { useEffect(() => { if (makers.length === 0) { getPcsMakerList().then((res) => { - console.log('getPcsMakerList', res.data) setMakers(res.data) }) } @@ -130,7 +131,12 @@ export default function PowerConditionalSelect(props) { const pcsSerList = selectedSeries.map((series) => { return { pcsSerCd: series.pcsSerCd } }) - const moduleItemList = getUseModuleItemList() + const moduleItemList = moduleSelectionData.module.itemList.map((item) => { + return { + itemId: item.itemId, + mixMatlNo: item.mixMatlNo, + } + }) getPcsModelList({ pcsMkrCd, pcsSerList, moduleItemList }).then((res) => { if (res?.result.code === 200 && res?.data) { setModels( @@ -179,7 +185,7 @@ export default function PowerConditionalSelect(props) { setSelectedMaker(option) const param = { pcsMkrCd: option.pcsMkrCd, - mixMatlNo: getUseModuleItemList()[0].mixMatlNo, + mixMatlNo: moduleSelectionData.module.mixMatlNo, } getPcsMakerList(param).then((res) => { 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 0463734c..635e1f8f 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -2,6 +2,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 { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' import { useMessage } from '@/hooks/useMessage' import { useSwal } from '@/hooks/useSwal' import { canvasState } from '@/store/canvasAtom' @@ -28,9 +29,9 @@ export default function PassivityCircuitAllocation(props) { const { header, rows, footer } = useRecoilValue(moduleStatisticsState) const [circuitNumber, setCircuitNumber] = useState(1) const [targetModules, setTargetModules] = useState([]) - const { setModuleStatisticsData } = useModule() const { getPcsManualConfChk } = useMasterController() const isDisplayCircuitNumber = useRecoilValue(circuitNumDisplaySelector) + const { setModuleStatisticsData } = useCircuitTrestle() useEffect(() => { setModuleStatisticsData() @@ -260,7 +261,6 @@ export default function PassivityCircuitAllocation(props) { 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 diff --git a/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx b/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx index bb23102e..af66b672 100644 --- a/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx +++ b/src/components/floor-plan/modal/panelBatch/PanelBatchStatistics.jsx @@ -50,9 +50,7 @@ export default function PanelBatchStatistics() { {rows.map((row, index) => ( {header.map((item, i) => ( - - {typeof row[item.prop] === 'number' ? row[item.prop].toLocaleString('ko-KR', { maximumFractionDigits: 4 }) : row[item.prop]} - + {row[item.prop] ?? 0} ))} ))} diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index 08e2146b..c4e456a9 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -1899,7 +1899,7 @@ export const useTrestle = () => { rackYn, racks: rackParams, rackTotCnt: rackList.length ?? 0 + smartRackGroup.length ?? 0, - rackFittingCnt: bracketList.length, + rackFittingTotCnt: bracketList.length, moduleRows: getMostLeftModules(surface), cvrYn: moduleSelection.construction.setupCover ? 'Y' : 'N', snowGdYn: moduleSelection.construction.setupSnowCover ? 'Y' : 'N', diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js index 8ccd4b07..125d3d91 100644 --- a/src/hooks/roofcover/useRoofShapeSetting.js +++ b/src/hooks/roofcover/useRoofShapeSetting.js @@ -190,7 +190,9 @@ export function useRoofShapeSetting(id) { } case 4: { outerLines = canvas.getObjects().filter((obj) => obj.name === 'outerLine') + const pitch = outerLines.find((line) => line.attributes.type === LINE_TYPE.WALLLINE.SHED)?.attributes.pitch + let isValid = outerLines.every((line) => line.attributes.isFixed) // 변별로 설정중 한쪽흐름일 경우 한쪽흐름의 pitch로 설정 if (pitch) { outerLines.forEach((line) => { @@ -203,6 +205,10 @@ export function useRoofShapeSetting(id) { } }) } + if (!isValid) { + swalFire({ text: '설정이 완료되지 않았습니다.', icon: 'error' }) + return + } break } diff --git a/src/hooks/useCirCuitTrestle.js b/src/hooks/useCirCuitTrestle.js index b72581b3..3b37d226 100644 --- a/src/hooks/useCirCuitTrestle.js +++ b/src/hooks/useCirCuitTrestle.js @@ -10,10 +10,11 @@ import { selectedModelsState, seriesState, } from '@/store/circuitTrestleAtom' -import { selectedModuleState } from '@/store/selectedModuleOptions' +import { moduleSelectionDataState, 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) @@ -25,7 +26,8 @@ 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 = () => { @@ -60,7 +62,7 @@ export function useCircuitTrestle() { // 사용된 모듈아이템 목록 const getUseModuleItemList = () => { console.log('🚀 ~ getUseModuleItemList ~ selectedModules:', selectedModules) - return selectedModules?.itemList?.map((m) => { + return moduleSelectionData.module?.itemList?.map((m) => { return { itemId: m.itemId, mixMatlNo: m.mixMatlNo, @@ -71,6 +73,10 @@ 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) => { @@ -177,12 +183,17 @@ export function useCircuitTrestle() { const setPowerConditionerData = () => {} const setModuleStatisticsData = () => { - console.log(canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)) - if (selectedModules?.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(moduleSelectionData) + if (!moduleSelectionData || !moduleSelectionData.module || 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' }, - ...selectedModules?.itemList?.map((module) => { + ...moduleSelectionData.module?.itemList?.map((module) => { return { name: module.itemNm, prop: module.itemId, @@ -236,7 +247,7 @@ export function useCircuitTrestle() { circuit: surfaceObjects[key].circuit, wpOut: parseFloat(surfaceObjects[key].wpOut / 1000), } - selectedModules.itemList.forEach((module) => { + moduleSelectionData.module.itemList.forEach((module) => { tempRow[module.itemId] = surfaceObjects[key][module.itemId] }) tempRows.push(tempRow) @@ -247,7 +258,7 @@ export function useCircuitTrestle() { circuit: surfaceObjects[key].circuits[circuit].circuit, wpOut: parseFloat(surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000), } - selectedModules.itemList.forEach((module) => { + moduleSelectionData.module.itemList.forEach((module) => { row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] }) tempRows.push(row) @@ -259,8 +270,8 @@ export function useCircuitTrestle() { 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) + moduleSelectionData.module.itemList.forEach((module) => { + tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + (row[module.itemId] ?? 0), 0) }) canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter })