From ec0a8a552319613cffbb2cbe1c8cf8730d1f1140 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: Wed, 5 Feb 2025 16:55:03 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EB=8F=99=20=ED=9A=8C=EB=A1=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EB=B0=8F=20=EC=A7=91=EA=B3=84=ED=91=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitTrestle/CircuitTrestleSetting.jsx | 173 ++++++++++-------- .../step/PowerConditionalSelect.jsx | 6 +- .../step/type/PassivityCircuitAllocation.jsx | 139 +++++++------- src/hooks/module/useModule.js | 22 ++- 4 files changed, 176 insertions(+), 164 deletions(-) diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 240bc554..fb9d49ac 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -94,16 +94,27 @@ export default function CircuitTrestleSetting({ id }) { // 시리즈중 자동으로 추천 PCS 정보 조회 getPcsAutoRecommendList(params).then((res) => { if (res.data?.pcsItemList) { - const itemList = models.filter((model) => { - return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) - }) - const selectedModels = itemList.map((model) => { - return { - ...model, - id: uuidv4(), - isUsed: false, + let pcsItemList = [] + res.data?.pcsItemList.forEach((item) => { + if (models.map((model) => model.itemId).includes(item.itemId)) { + pcsItemList.push({ + ...item, + id: uuidv4(), + isUsed: false, + }) } }) + // const selectedModels = pcsItemList + // const itemList = models.filter((model) => { + // return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) + // }) + // const selectedModels = itemList.map((model) => { + // return { + // ...model, + // id: uuidv4(), + // isUsed: false, + // } + // }) // 회로 구성 가능 여부 체크 요청 파라미터 const pcsVoltageChkParams = { ...getOptYn(), @@ -112,7 +123,7 @@ export default function CircuitTrestleSetting({ id }) { pcsItemList: getPcsItemList(), } // 추천 목록 선택 - setSelectedModels(selectedModels) + setSelectedModels(pcsItemList) // 회로 구성 가능 여부 체크 getPcsVoltageChk(pcsVoltageChkParams).then((res) => { if (res.resultCode === 'S') { @@ -205,24 +216,26 @@ export default function CircuitTrestleSetting({ id }) { const getRoofSurfaceList = () => { const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top) - return roofSurfaceList.map((obj) => { - return { - roofSurfaceId: obj.id, - roofSurface: canvas - .getObjects() - .filter((o) => o.id === obj.parentId)[0] - .directionText.replace(/[0-9]/g, ''), - roofSurfaceIncl: canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch, - moduleList: getModuleList(obj).map((module) => { - return { - itemId: module.moduleInfo.itemId, - circuit: module.circuitNumber ? module.circuitNumber : null, - pcsItemId: module.circuit ? module.circuit?.pcsItemId : null, - uniqueId: module.id ? module.id : null, - } - }), - } - }) + return roofSurfaceList + .map((obj) => { + return { + roofSurfaceId: obj.id, + roofSurface: canvas + .getObjects() + .filter((o) => o.id === obj.parentId)[0] + .directionText.replace(/[0-9]/g, ''), + roofSurfaceIncl: canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch, + moduleList: getModuleList(obj).map((module) => { + return { + itemId: module.moduleInfo.itemId, + circuit: module.circuitNumber ? module.circuitNumber : null, + pcsItemId: module.circuit ? module.circuit?.pcsItemId : null, + uniqueId: module.id ? module.id : null, + } + }), + } + }) + .filter((surface) => surface.moduleList.length > 0) } // 모듈 목록 @@ -338,7 +351,18 @@ export default function CircuitTrestleSetting({ id }) { const params = { ...getOptYn(), useModuleItemList: getUseModuleItemList(), - roofSurfaceList: getRoofSurfaceList(), + roofSurfaceList: getRoofSurfaceList().map((surface) => { + console.log(surface.moduleList) + return { + ...surface, + moduleList: surface.moduleList.map((module) => { + return { + itemId: module.itemId, + uniqueId: module.uniqueId, + } + }), + } + }), pcsItemList: getPcsItemList(), } @@ -348,19 +372,41 @@ export default function CircuitTrestleSetting({ id }) { const itemList = models.filter((model) => { return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) }) - const selectedModels = itemList.map((model) => { - return { - ...model, - id: uuidv4(), + + let pcsItemList = [] + let pcsObj = {} + models.forEach((model) => { + pcsObj[model.itemId] = model + }) + res.data?.pcsItemList.forEach((item) => { + if (pcsObj[item.itemId]) { + pcsItemList.push({ + ...pcsObj[item.itemId], + isUsed: false, + id: uuidv4(), + }) } }) + + // const selectedModels = itemList.map((model) => { + // return { + // ...model, + // id: uuidv4(), + // } + // }) const pcsVoltageChkParams = { ...getOptYn(), useModuleItemList: getUseModuleItemList(), roofSurfaceList: getRoofSurfaceList(), - pcsItemList: getPcsItemList(), + pcsItemList: pcsItemList.map((item) => { + return { + itemId: item.itemId, + pcsMkrCd: item.pcsMkrCd, + pcsSerCd: item.pcsSerCd, + } + }), } - setSelectedModels(selectedModels) + setSelectedModels(pcsItemList) getPcsVoltageChk(pcsVoltageChkParams).then((res) => { setAllocationType(ALLOCATION_TYPE.PASSIVITY) }) @@ -535,53 +581,20 @@ export default function CircuitTrestleSetting({ id }) { // 닫기 버튼 클릭 시 처리하는 함수 추가 const handleClose = () => { // // 회로 번호 텍스트 제거 - // const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber') - // canvas.remove(...circuitTexts) + const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber') + canvas.remove(...circuitTexts) + // 모듈의 회로 정보 초기화 + canvas + .getObjects() + .filter((obj) => obj.name === POLYGON_TYPE.MODULE) + .forEach((obj) => { + obj.circuit = null + obj.pcsItemId = null + obj.circuitNumber = null + }) - // // 모듈의 회로 정보 초기화 - // canvas - // .getObjects() - // .filter((obj) => obj.name === POLYGON_TYPE.MODULE) - // .forEach((obj) => { - // obj.circuit = null - // obj.pcsItemId = null - // obj.circuitNumber = null - // }) - - // canvas.renderAll() - // closePopup(id) - - swalFire({ - title: '변경사항을 저장하시겠습니까?', - //text: '저장하지 않은 변경사항은 모두 사라집니다.', - type: 'confirm', - confirmButtonText: '저장', - cancelButtonText: '취소', - icon: 'warning', - confirmFn: async () => { - // 저장 로직 실행 - await onApply() - closePopup(id) - }, - denyFn: () => { - // 회로 번호 텍스트 제거 - const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber') - canvas.remove(...circuitTexts) - - // 모듈의 회로 정보 초기화 - canvas - .getObjects() - .filter((obj) => obj.name === POLYGON_TYPE.MODULE) - .forEach((obj) => { - obj.circuit = null - obj.pcsItemId = null - obj.circuitNumber = null - }) - - canvas.renderAll() - closePopup(id) - }, - }) + canvas.renderAll() + closePopup(id) } return ( diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 5496a0d5..ee56d4c4 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -91,7 +91,6 @@ export default function PowerConditionalSelect(props) { } const onCheckSeries = (data) => { - console.log('data', data) const copySeries = series.map((s) => { return { ...s, @@ -99,12 +98,10 @@ export default function PowerConditionalSelect(props) { } }) setSeries(copySeries) - console.log('copySeries', copySeries) handleSetmodels(copySeries.filter((s) => s.selected)) } const handleSetmodels = (selectedSeries) => { - console.log('series', selectedSeries) if (selectedSeries.length === 0) { setModels([]) setSelectedModels([]) @@ -149,7 +146,7 @@ export default function PowerConditionalSelect(props) { return } - setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4() }]) + setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4(), isUsed: false }]) setSelectedRow(null) } @@ -163,7 +160,6 @@ export default function PowerConditionalSelect(props) { 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 aa151d9c..ff1e7cb8 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -79,36 +79,36 @@ export default function PassivityCircuitAllocation(props) { const setSurfaceInfo = () => { const surfaces = canvas.getObjects().filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name) // setHeaders([header[0], { name: '회로', prop: 'circuit' }, ...header.slice(1)]) - setRows( - rows.map((row) => { - return { - ...row, - circuit: '', - } - }), - ) - let totals = {} + // setRows( + // rows.map((row) => { + // return { + // ...row, + // circuit: '', + // } + // }), + // ) + // let totals = {} - rows.forEach((row) => { - if (header.length === 4) { - if (!totals[header[2].prop]) totals[header[2].prop] = 0 - totals[header[2].prop] += +row[header[2].prop] - } else if (header.length === 5) { - if (!totals[header[2].prop]) totals[header[2].prop] = 0 - totals[header[2].prop] += +row[header[2].prop] - if (!totals[header[3].prop]) totals[header[3].prop] = 0 - totals[header[3]] += +row[header[3]] - } - }) - setFooter([ - ...['합계', ''], - ...Object.keys(totals).map((key) => { - return totals[key] - }), - Object.keys(totals).reduce((acc, key) => { - return acc + totals[key] - }, 0), - ]) + // rows.forEach((row) => { + // if (header.length === 4) { + // if (!totals[header[2].prop]) totals[header[2].prop] = 0 + // totals[header[2].prop] += +row[header[2].prop] + // } else if (header.length === 5) { + // if (!totals[header[2].prop]) totals[header[2].prop] = 0 + // totals[header[2].prop] += +row[header[2].prop] + // if (!totals[header[3].prop]) totals[header[3].prop] = 0 + // totals[header[3]] += +row[header[3]] + // } + // }) + // setFooter([ + // ...['합계', ''], + // ...Object.keys(totals).map((key) => { + // return totals[key] + // }), + // Object.keys(totals).reduce((acc, key) => { + // return acc + totals[key] + // }, 0), + // ]) // let totalWpout = 0 // const rows = surfaces.map((surface) => { // let wpOut = 0 @@ -226,10 +226,23 @@ export default function PassivityCircuitAllocation(props) { setSelectedPcs(tempSelectedPcs) canvas.add(moduleCircuitText) }) + console.log('🚀 ~ handleCircuitNumberFix ~ selectedModels:', selectedModels) + + // let pcsList = [...selectedModels.map((model) => ({ ...model }))] + let pcsList = JSON.parse(JSON.stringify(selectedModels)) + pcsList = pcsList.map((model) => { + console.log('🚀 ~ handleCircuitNumberFix ~ pcsList:', pcsList) + if (model.id === selectedPcs.id) { + model.isUsed = true + } + return model + }) + + console.log('🚀 ~ handleCircuitNumberFix ~ pcsList:', pcsList) const roofSurfaceList = canvas .getObjects() - .filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name) + .filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name && obj?.modules.length > 0) .map((surface) => { return { roofSurfaceId: surface.id, @@ -246,45 +259,25 @@ export default function PassivityCircuitAllocation(props) { }) console.log('uniqueCircuitNumbers', uniqueCircuitNumbers) - const usedPcses = selectedModels.filter((model) => model.isUsed) - const pcsItemList = - usedPcses.length === 0 - ? [ - { - pcsMkrCd: selectedPcs.pcsMkrCd, - pcsSerCd: selectedPcs.pcsSerCd, - itemId: selectedPcs.itemId, - itemNm: selectedPcs.itemNm, - goodsNo: selectedPcs.goodsNo, - serQtyList: [ - { - serQty: targetModules.length, - paralQty: uniqueCircuitNumbers.length, - rmdYn: 'Y', - usePossYn: 'Y', - roofSurfaceList: roofSurfaceList, - }, - ], - }, - ] - : selectedModels.map((model, index) => { - return { - pcsMkrCd: model.pcsMkrCd, - pcsSerCd: model.pcsSerCd, - itemId: model.itemId, - itemNm: model.itemNm, - goodsNo: model.goodsNo, - serQtyList: [ - { - serQty: targetModules.length, - paralQty: uniqueCircuitNumbers.length, - rmdYn: 'Y', - usePossYn: 'Y', - roofSurfaceList: roofSurfaceList, - }, - ], - } - }) + const usedPcses = pcsList.filter((model) => model.isUsed) + const pcsItemList = usedPcses.map((model, index) => { + return { + pcsMkrCd: model.pcsMkrCd, + pcsSerCd: model.pcsSerCd, + itemId: model.itemId, + itemNm: model.itemNm, + goodsNo: model.goodsNo, + serQtyList: [ + { + serQty: targetModules.length, + paralQty: uniqueCircuitNumbers.length, + rmdYn: 'Y', + usePossYn: 'Y', + roofSurfaceList: roofSurfaceList, + }, + ], + } + }) const params = { ...getApiProps(), @@ -318,17 +311,15 @@ export default function PassivityCircuitAllocation(props) { return } - setSelectedModels( - selectedModels.map((model) => { - return { ...model, isUsed: model.id === selectedPcs.id ? true : model.isUsed } - }), - ) + setSelectedModels(pcsList) setTargetModules([]) setCircuitNumber(+circuitNumber + 1) setModuleStatisticsData() }) } + console.log('🚀 ~ handleCircuitNumberFix ~ selectedModels:', selectedModels) + console.log('🚀 ~ handleCircuitNumberFix ~ selectedModels:', selectedModels) const getCircuitNumber = () => { if (selectedModels.length === 1) { diff --git a/src/hooks/module/useModule.js b/src/hooks/module/useModule.js index 80aa17d7..50280efc 100644 --- a/src/hooks/module/useModule.js +++ b/src/hooks/module/useModule.js @@ -243,6 +243,7 @@ export function useModule() { }, }) } + setModuleStatisticsData() } const moduleCopy = (length, direction) => { @@ -303,6 +304,7 @@ export function useModule() { }, }) } + setModuleStatisticsData() } const moduleMultiCopy = (type, length, direction) => { @@ -377,6 +379,7 @@ export function useModule() { }, }) } + setModuleStatisticsData() } const moduleColumnRemove = (type) => { @@ -491,6 +494,7 @@ export function useModule() { }, }) } + setModuleStatisticsData() } const moduleRowRemove = (type) => { @@ -606,6 +610,7 @@ export function useModule() { }, }) } + setModuleStatisticsData() } const moduleColumnInsert = (type) => { @@ -701,6 +706,8 @@ export function useModule() { }, }) } + moduleSetupSurface.set({ modules: [...moduleSetupSurface.modules, ...copyModules] }) + setModuleStatisticsData() } const muduleRowInsert = (type) => { @@ -798,6 +805,9 @@ export function useModule() { }, }) } + + moduleSetupSurface.set({ modules: [...moduleSetupSurface.modules, ...copyModules] }) + setModuleStatisticsData() } const alignModule = (type) => { @@ -865,6 +875,7 @@ export function useModule() { surface.set({ modules: modules }) canvas.remove(activeModule) canvas.renderAll() + setModuleStatisticsData() } const isOverlapOtherModules = (module, otherModules) => { @@ -947,7 +958,7 @@ export function useModule() { ] const surfaceObjects = {} const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) - const rows = surfaces.map((surface) => { + surfaces.forEach((surface) => { surfaceObjects[surface.id] = { roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, circuit: '-', @@ -984,11 +995,12 @@ export function useModule() { }) }) let tempRows = [] + console.log('surfaceObjects', surfaceObjects) Object.keys(surfaceObjects).forEach((key) => { let tempRow = { name: surfaceObjects[key].roofSurface, circuit: surfaceObjects[key].circuit, - wpOut: parseInt((surfaceObjects[key].wpOut / 1000).toFixed(3)), + wpOut: parseFloat(surfaceObjects[key].wpOut / 1000), } selectedModules.itemList.forEach((module) => { tempRow[module.itemId] = surfaceObjects[key][module.itemId] @@ -999,7 +1011,7 @@ export function useModule() { let row = { name: surfaceObjects[key].roofSurface, circuit: surfaceObjects[key].circuits[circuit].circuit, - wpOut: parseInt((surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000).toFixed(3)), + wpOut: parseFloat(surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000), } selectedModules.itemList.forEach((module) => { row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] @@ -1007,14 +1019,14 @@ export function useModule() { tempRows.push(row) }) }) - + console.log('tempRows', tempRows) const tempFooter = { name: getMessage('modal.panel.batch.statistic.total'), 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) + tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + (row[module.itemId] ? parseFloat(row[module.itemId]) : 0), 0) }) setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter }) }