From 4ddd1f7fb1757a2f366491801e4eb119ebd4d26f Mon Sep 17 00:00:00 2001 From: Minsiki Date: Thu, 30 Jan 2025 18:02:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EB=8F=99=20=ED=95=A0=EB=8B=B9=20?= =?UTF-8?q?=EC=A7=91=EA=B3=84=ED=91=9C=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 | 40 ++++++- .../step/PowerConditionalSelect.jsx | 25 ++-- .../step/type/PassivityCircuitAllocation.jsx | 110 ++++++++++++++---- src/hooks/common/useMasterController.js | 2 +- 4 files changed, 139 insertions(+), 38 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 4dba2fc3..4eb83b40 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -18,6 +18,7 @@ import { canvasState } from '@/store/canvasAtom' import { useTrestle } from '@/hooks/module/useTrestle' import { selectedModuleState } from '@/store/selectedModuleOptions' +import { v4 as uuidv4 } from 'uuid' const ALLOCATION_TYPE = { AUTO: 'auto', @@ -76,7 +77,14 @@ export default function CircuitTrestleSetting({ id }) { getPcsAutoRecommendList(params).then((res) => { if (res.data?.pcsItemList) { - setModels(res.data.pcsItemList) + setModels( + res.data.pcsItemList.map((model) => { + return { + ...model, + id: uuidv4(), + } + }), + ) setTabNum(2) } else { swalFire({ @@ -190,11 +198,33 @@ export default function CircuitTrestleSetting({ id }) { const onPassivityAllocation = () => { if (selectedModels.length === 0) { - swalFire({ - title: '파워 컨디셔너를 추가해 주세요.', - type: 'alert', + const params = { + ...getOptYn(), + useModuleItemList: getUseModuleItemList(), + roofSurfaceList: getRoofSurfaceList(), + pcsItemList: getPcsItemList(), + } + + getPcsAutoRecommendList(params).then((res) => { + if (res.data?.pcsItemList) { + const itemList = models.filter((model) => { + return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) + }) + setSelectedModels( + itemList.map((model) => { + return { + ...model, + id: uuidv4(), + } + }), + ) + } else { + swalFire({ + title: '파워컨디셔너를 추가해 주세요.', + type: 'alert', + }) + } }) - return } else if (pcsCheck.max) { const moduleStdQty = selectedModels.reduce((acc, model) => { return acc + parseInt(model.moduleStdQty) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index fc73207e..407c5e34 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -64,6 +64,7 @@ export default function PowerConditionalSelect(props) { useEffect(() => { if (makers.length === 0) { getPcsMakerList().then((res) => { + console.log('getPcsMakerList', res.data) setMakers(res.data) }) } @@ -90,6 +91,7 @@ export default function PowerConditionalSelect(props) { } const onCheckSeries = (data) => { + console.log('data', data) const copySeries = series.map((s) => { return { ...s, @@ -97,12 +99,19 @@ export default function PowerConditionalSelect(props) { } }) setSeries(copySeries) + console.log('copySeries', copySeries) handleSetmodels(copySeries.filter((s) => s.selected)) } - const handleSetmodels = (series) => { - const pcsMkrCd = series[0]?.pcsMkrCd - const pcsSerList = series.map((series) => { + const handleSetmodels = (selectedSeries) => { + console.log('series', selectedSeries) + if (selectedSeries.length === 0) { + setModels([]) + setSelectedModels([]) + return + } + const pcsMkrCd = selectedSeries[0]?.pcsMkrCd + const pcsSerList = selectedSeries.map((series) => { return { pcsSerCd: series.pcsSerCd } }) const moduleItemList = selectedModules.itemList?.map((module) => { @@ -123,11 +132,10 @@ export default function PowerConditionalSelect(props) { } }), ) - return + } else { + setModels([]) + setSelectedModels([]) } - - setModels([]) - setSelectedModels([]) }) } @@ -151,10 +159,11 @@ export default function PowerConditionalSelect(props) { const onChangeMaker = (option) => { if (option) { - setModels(null) + setModels([]) setSelectedMaker(option) getPcsMakerList(option).then((res) => { + console.log('getPcsMakerList(series)', res.data) setSeries( res.data.map((series) => { return { ...series, selected: false } 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 735be05e..a8cb2e7f 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -10,10 +10,6 @@ import { useContext, useEffect, useState } from 'react' import { useRecoilValue } from 'recoil' export default function PassivityCircuitAllocation(props) { - // getOptYn, - // getUseModuleItemList, - // getSelectModelList, - // getRoofSurfaceList, const { tabNum, setTabNum, @@ -42,6 +38,7 @@ export default function PassivityCircuitAllocation(props) { useEffect(() => { console.log('header, rows', header, rows) + console.log('selectedModels', selectedModels) // setSurfaceInfo() setTableData() if (!managementState) { @@ -238,7 +235,7 @@ export default function PassivityCircuitAllocation(props) { return { roofSurfaceId: surface.id, roofSurface: surface.direction, - roofSurfaceIncl: surface.incl, + roofSurfaceIncl: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].pitch, moduleList: surface.modules.map((module) => { return { itemId: module.moduleInfo.itemId, @@ -300,6 +297,7 @@ export default function PassivityCircuitAllocation(props) { setTargetModules([]) setCircuitNumber(+circuitNumber + 1) + setTableData() }) } @@ -323,21 +321,85 @@ export default function PassivityCircuitAllocation(props) { }), { name: '발전량(kW)', prop: 'wpOut' }, ] - const tempRows = rows.map((row) => { - return { - name: '', - circuit: '', - ...selectedModules.itemList.map((module) => { - return { - name: module.itemNm, - prop: module.itemId, - } - }), - wpOut: 0, - } - }) - console.log('tempHeader', tempHeader) + 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) + }) + console.log('tempHeader, tempRows, tempFooter', tempHeader, tempRows, tempFooter) + setHeader(tempHeader) + setRows(tempRows.filter((row) => row.wpOut !== 0)) + setFooter(tempFooter) } const initSelectedPcsCircuitNumber = () => { @@ -411,9 +473,9 @@ export default function PassivityCircuitAllocation(props) { ))} - {footer.map((footer, index) => ( - - {footer} + {header.map((header, i) => ( + + {footer[header.prop]} ))} @@ -437,7 +499,7 @@ export default function PassivityCircuitAllocation(props) { name="radio01" id={`ra0${index + 1}`} value={model} - checked={selectedPcs.id === model.id} + checked={selectedPcs?.id === model.id} onChange={() => setSelectedPcs(model)} />